admin/src/api/business/visitEvent.js
@@ -14,3 +14,8 @@ download: true }) } export function fetchcountNum (data) { return request.post('/visitsAdmin/cloudService/business/visitEvent/countNum', data, { trim: true }) } admin/src/views/business/dangerStatic.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,112 @@ <template> <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getData(1)" @clear="clear" @changeForm='changeForm'> <template #fastdate> <el-radio-group v-model="filters.fastdate" size="small" @input="changeForm"> <el-radio-button label="0">å½å¤©</el-radio-button> <el-radio-button label="6">è¿7天</el-radio-button> <el-radio-button label="29">è¿30天</el-radio-button> </el-radio-group> </template> </QueryForm> <div class="main_content"> <div class="type_wrap"> <div class="title">éæ£ç±»åç»è®¡</div> <div class="type" ref="typeRef"></div> </div> <div class="dept_wrap"> <div class="title">鿣å½å±é¨é¨ç»è®¡</div> <div class="dept" ref="deptRef"></div> </div> </div> </div> </template> <script> import QueryForm from '@/components/common/QueryForm' import echarts from 'echarts' export default { components: { QueryForm, }, data() { return { filters: {}, queryFormConfig: { formItems: [ { filed: 'status', type: 'select', label: 'ç¶æ', options: [ { label: '访客ç³è¯·', value: '0' }, { label: '访客æ¥å¤', value: '1' }, { label: 'ç¨è½¦ç³è¯·', value: '2' }, { label: '鿣鿿', value: '3' }, { label: 'ç©æµè½¦ç³è¯·', value: '6' } ] }, { filed1: 'startDate', filed2: 'endDate', type: 'datetime', label: 'ææ¥æ¶é´' }, { type: 'slot', filed: 'fastdate', label: '' } ], online: true }, } }, methods: { getData(page) { console.log(this.filters) }, changeForm(form) { console.log(form) }, clear() { this.filters = {} } } } </script> <style lang="scss" scoped> .main_app { height: 100%; } .main_content { display: flex; height: calc(100% - 110px); .title { font-weight: 600; font-size: 16px; color: #222222; margin-bottom: 20px; margin-top: 20px; } .type_wrap { flex: 5; flex-shrink: 0; border: 1px solid #E5E5E5; height: 100%; border-right: 12px solid #f7f7f7; } .dept_wrap { flex: 4; flex-shrink: 0; border: 1px solid #E5E5E5; height: 100%; padding-left: 20px; } } </style> admin/src/views/business/visitEvent.vue
@@ -1,58 +1,64 @@ <template> <TableLayout :permissions="['business:visitevent:query']"> <!-- æç´¢è¡¨å --> <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> <el-form-item label="å§å/ææºå·" prop="keyWords"> <el-input v-model="searchForm.keyWords" placeholder="请è¾å ¥å§å/ææºå·" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="车çå·" prop="carNo"> <el-input v-model="searchForm.carNo" placeholder="请è¾å ¥è½¦çå·" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="ç»ç»åç§°" prop="visitorWorkUint"> <el-input v-model="searchForm.visitorWorkUint" placeholder="请è¾å ¥ç»ç»åç§°" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="äºä»¶ç±»å" prop="eventType"> <el-select v-model="searchForm.eventType" placeholder="è¯·éæ©"> <el-option label="访客ç»è®°" value="541200006"></el-option> <el-option label="访客ç¾ç¦»" value="541200007"></el-option> <el-option label="访客éè¡" value="541200060"></el-option> </el-select> </el-form-item> <el-form-item label="è¿åºç±»å" prop="inOrOut"> <el-select v-model="searchForm.inOrOut" placeholder="è¯·éæ©"> <el-option label="è¿" value="0"></el-option> <el-option label="åº" value="1"></el-option> </el-select> </el-form-item> <el-form-item label="èµ·å§æ¶é´" prop="carNo"> <!-- <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" <div slot="search-form" ref="QueryFormRef"> <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> <el-form-item label="å§å/ææºå·" prop="keyWords"> <el-input v-model="searchForm.keyWords" placeholder="请è¾å ¥å§å/ææºå·" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="车çå·" prop="carNo"> <el-input v-model="searchForm.carNo" placeholder="请è¾å ¥è½¦çå·" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="ç»ç»åç§°" prop="visitorWorkUint"> <el-input v-model="searchForm.visitorWorkUint" placeholder="请è¾å ¥ç»ç»åç§°" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="äºä»¶ç±»å" prop="eventType"> <el-select v-model="searchForm.eventType" placeholder="è¯·éæ©"> <el-option label="访客ç»è®°" value="541200006"></el-option> <el-option label="访客ç¾ç¦»" value="541200007"></el-option> <el-option label="访客éè¡" value="541200060"></el-option> </el-select> </el-form-item> <el-form-item label="è¿åºç±»å" prop="inOrOut"> <el-select v-model="searchForm.inOrOut" placeholder="è¯·éæ©"> <el-option label="è¿" value="0"></el-option> <el-option label="åº" value="1"></el-option> </el-select> </el-form-item> <el-form-item label="èµ·å§æ¶é´" prop="carNo"> <!-- <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" range-separator="è³" start-placeholder="å¼å§æ¥æ" end-placeholder="ç»ææ¥æ"> </el-date-picker> --> <el-date-picker type="datetime" v-model="searchForm.startTime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="è¯·éæ©å¼å§æ¶é´" @change="changeRadio" /> <el-date-picker type="datetime" v-model="searchForm.endTime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="è¯·éæ©ç»ææ¶é´" @change="changeRadio" /> </el-form-item> <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio"> <el-radio-button label="0">å½å¤©</el-radio-button> <el-radio-button label="1">è¿7天</el-radio-button> <el-radio-button label="2">è¿30天</el-radio-button> </el-radio-group> <section> <el-button type="primary" @click="search">æç´¢</el-button> <el-button @click="reset">éç½®</el-button> </section> </el-form> <el-date-picker type="datetime" v-model="searchForm.startTime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="è¯·éæ©å¼å§æ¶é´" @change="changeRadio" /> <el-date-picker type="datetime" v-model="searchForm.endTime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="è¯·éæ©ç»ææ¶é´" @change="changeRadio" /> </el-form-item> <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio"> <el-radio-button label="0">å½å¤©</el-radio-button> <el-radio-button label="1">è¿7天</el-radio-button> <el-radio-button label="2">è¿30天</el-radio-button> </el-radio-group> <section> <el-button type="primary" @click="search">æç´¢</el-button> <el-button @click="reset">éç½®</el-button> </section> </el-form> </div> <!-- è¡¨æ ¼åå页 --> <template v-slot:table-wrap> <ul class="toolbar" v-permissions="['business:visitevent:exportExcel']"> <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:visitevent:exportExcel']" @click="exportExcel">导åº</el-button></li> <li class="ml20"> æè®¿äººæ¬¡ï¼<span class="primaryColor">{{staticObj.eventNum}}次</span></li> <li class="ml20"> æè®¿äººæ°ï¼<span class="primaryColor">{{staticObj.visitorNum}}人</span></li> </ul> <el-table v-loading="isWorking.search" :data="tableData.list" stripe> <el-table-column prop="personName" label="å§å" min-width="100px"></el-table-column> <el-table :max-height="tableHeight" v-loading="isWorking.search" :data="tableData.list" stripe> <el-table-column prop="personName" label="å§å" min-width="90px"></el-table-column> <el-table-column prop="phone" label="ææºå·ç " min-width="100px"></el-table-column> <el-table-column prop="idcardDecode" label="身份è¯å·ç " min-width="100px"></el-table-column> <el-table-column prop="idcardDecode" label="身份è¯å·ç " min-width="120px"></el-table-column> <el-table-column prop="visitorWorkUint" label="ç»ç»" min-width="100px"></el-table-column> <el-table-column prop="carNo" label="车çå·" min-width="100px"></el-table-column> <el-table-column prop="beVisitedPersonName" label="被访人" min-width="100px"></el-table-column> @@ -72,7 +78,7 @@ </el-image> </template> </el-table-column> <el-table-column prop="createDate" label="äºä»¶æ¶é´" min-width="100px"></el-table-column> <el-table-column prop="createDate" label="äºä»¶æ¶é´" min-width="120px"></el-table-column> </el-table> <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination"> </pagination> @@ -85,6 +91,7 @@ import TableLayout from '@/layouts/TableLayout' import Pagination from '@/components/common/Pagination' import { timeForMat } from '@/utils/util' import { fetchcountNum } from '@/api/business/visitEvent' export default { name: 'VisitEvent', extends: BaseTable, @@ -103,7 +110,9 @@ visitorWorkUint: '', radio: '0' }, time: [] tableHeight: 400, time: [], staticObj: {} } }, created() { @@ -117,12 +126,22 @@ this.changeRadio('0') this.search() }, mounted() { this.$nextTick(() => { this.tableHeight = document.body.scrollHeight - this.$refs.QueryFormRef.offsetHeight - 300 }) }, methods: { seleTime(e) { this.searchForm.startTime = e[0] this.searchForm.endTime = e[1] this.searchForm.radio = null this.search() }, getCountNum() { fetchcountNum(this.searchForm).then(res => { this.staticObj = res }) }, changeRadio(e) { if (e === '0') { @@ -149,7 +168,11 @@ this.time = [] this.searchForm = {} this.search() } }, search() { this.getCountNum() this.handlePageChange(1) }, } } </script> admin/src/views/platform/index.vue
@@ -202,17 +202,26 @@ detail: {}, isShowQueuing: false, timer: null, timer2: null, loadingOpen: false, loadingFinish: false, } }, created() { setInterval(() => { this.timer2 = setInterval(() => { this.getPlatGroupList() }, 1000 * 20) this.getPlatGroupList() }, beforeDestroy() { if (this.timer2) { clearInterval(this.timer2) } if (this.timer) { clearInterval(this.timer) } }, methods: { handleWork(item) { this.loadingOpen = true server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java
@@ -117,4 +117,14 @@ return ApiResponse.success("æä½æå"); } @ApiOperation("éæ£æ°æ®ç»è®¡") @PostMapping("/hiddenDangerData") public ApiResponse hiddenDangerData (@RequestBody HiddenDanger hiddenDanger,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ hiddenDanger.setLoginUserInfo(getLoginUser(token)); hiddenDangerService.hiddenDangerData(hiddenDanger); return ApiResponse.success("æä½æå"); } } server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDanger.java
@@ -157,5 +157,8 @@ @TableField(exist = false) private List<Multifile> multifileList; @ApiModelProperty(value = "鿣åºåé¨é¨ä¸»é®", example = "1",hidden = true) @TableField(exist = false) private Integer areaCompanyId; } server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/GeneralDataVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.doumee.dao.business.vo; import com.doumee.core.annotation.excel.ExcelColumn; import com.doumee.service.business.third.model.LoginUserModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; @Data public class GeneralDataVO{ @ApiModelProperty(value = "åç§°") private String name; @ApiModelProperty(value = "æ°é") private Integer total ; @ApiModelProperty(value = "å æ¯") private BigDecimal rata ; } server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/HiddenDangerDataVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.doumee.dao.business.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class HiddenDangerDataVO { @ApiModelProperty(value = "æ»æ°") private Integer total; @ApiModelProperty(value = "éæ£ç±»åç»è®¡") private List<GeneralDataVO> cateList ; @ApiModelProperty(value = "鿣é¨é¨ç»è®¡") private List<GeneralDataVO> departmentList ; } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/HiddenDangerService.java
@@ -1,5 +1,6 @@ package com.doumee.service.business; import com.doumee.dao.business.vo.HiddenDangerDataVO; import com.doumee.service.business.third.model.LoginUserInfo; import com.doumee.service.business.third.model.PageData; import com.doumee.service.business.third.model.PageWrap; @@ -100,4 +101,6 @@ void dealHiddenDanger(HiddenDanger hiddenDanger); void transferHiddenDanger(HiddenDanger hiddenDanger); HiddenDangerDataVO hiddenDangerData(HiddenDanger hiddenDanger); } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -8,7 +8,9 @@ import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.dao.business.dao.UserActionMapper; import com.doumee.dao.business.dao.*; import com.doumee.dao.business.vo.GeneralDataVO; import com.doumee.dao.business.vo.HiddenDangerDataVO; import com.doumee.service.business.third.model.LoginUserInfo; import com.doumee.service.business.third.model.PageData; import com.doumee.service.business.third.model.PageWrap; @@ -19,9 +21,6 @@ import com.doumee.core.wx.wxPlat.WxPlatConstants; import com.doumee.core.wx.wxPlat.WxPlatNotice; import com.doumee.dao.business.*; import com.doumee.dao.business.dao.MemberMapper; import com.doumee.dao.business.dao.SmsConfigMapper; import com.doumee.dao.business.dao.SmsEmailMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.business.model.Member; import com.doumee.dao.system.MultifileMapper; @@ -41,7 +40,9 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * éæ£ä¿¡æ¯è¡¨Serviceå®ç° @@ -73,6 +74,9 @@ private HiddenDangerLogMapper hiddenDangerLogMapper; @Autowired private UserActionMapper userActionMapper; @Autowired private CompanyMapper companyMapper; @Autowired @@ -471,8 +475,8 @@ .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName()) .or().like(Member::getPhone,pageWrap.getModel().getMemberName())) .ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), Empower::getCreateDate,pageWrap.getModel().getQueryStartTime()) .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()),Empower::getCreateDate,pageWrap.getModel().getQueryEndTime()) .ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), HiddenDanger::getCreateDate,pageWrap.getModel().getQueryStartTime()) .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()),HiddenDanger::getCreateDate,pageWrap.getModel().getQueryEndTime()) .orderByDesc(Visits::getCreateDate) ; for(PageWrap.SortData sortData: pageWrap.getSorts()) { @@ -772,4 +776,74 @@ } /** * éææç»è®¡æ°æ® */ @Override public HiddenDangerDataVO hiddenDangerData(HiddenDanger hiddenDanger){ HiddenDangerDataVO hiddenDangerDataVO = new HiddenDangerDataVO(); List<HiddenDanger> hiddenDangerAllList = hiddenDangerMapper.selectJoinList(HiddenDanger.class, new MPJLambdaWrapper<HiddenDanger>() .selectAll(HiddenDanger.class) .selectAs(HiddenDangerParam::getCompanyId, HiddenDanger::getAreaCompanyId) .leftJoin(HiddenDangerParam.class,HiddenDangerParam::getId,HiddenDanger::getAreaId) //鿣åºå .eq(Objects.nonNull(hiddenDanger.getStatus()),HiddenDanger::getStatus,hiddenDanger.getStatus()) .ge(Objects.nonNull(hiddenDanger.getQueryStartTime()), HiddenDanger::getCreateDate,hiddenDanger.getQueryStartTime()) .le(Objects.nonNull(hiddenDanger.getQueryEndTime()),HiddenDanger::getCreateDate,hiddenDanger.getQueryEndTime()) ); hiddenDangerDataVO.setTotal(hiddenDangerAllList.size()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(hiddenDangerAllList)){ List<Integer> cateList = hiddenDangerAllList.stream().map(i->i.getCateId()).collect(Collectors.toList()); //å ¨é¨éæ£åç±»æ°æ® if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(cateList)){ List<GeneralDataVO> cateGeneralDataList = new ArrayList<>(); Set<Integer> cateSetList = new HashSet<>(cateList); List<HiddenDangerParam> hiddenDangerParamList = hiddenDangerParamMapper.selectList(new QueryWrapper<HiddenDangerParam>() .lambda().eq(HiddenDangerParam::getIsdeleted,Constants.ZERO).eq(HiddenDangerParam::getType,Constants.ONE)); for (Integer cateId:cateSetList) { Optional<HiddenDangerParam> optionalHiddenDanger = hiddenDangerParamList.stream().filter(i->Constants.equalsInteger(i.getId(),cateId)).findAny(); if(optionalHiddenDanger.isPresent()){ GeneralDataVO generalDataVO = new GeneralDataVO(); HiddenDangerParam hiddenDangerParam = optionalHiddenDanger.get(); Integer total = hiddenDangerAllList.stream().filter(i->Constants.equalsInteger(i.getCateId(),hiddenDangerParam.getId())).collect(Collectors.toList()).size(); generalDataVO.setName(hiddenDangerParam.getName()); generalDataVO.setTotal(total); generalDataVO.setRata( Constants.equalsInteger(total,Constants.ZERO)? BigDecimal.ZERO:new BigDecimal(total.toString()).divide(new BigDecimal(hiddenDangerDataVO.getTotal().toString()),2).multiply(new BigDecimal("100")) ); cateGeneralDataList.add(generalDataVO); } } hiddenDangerDataVO.setCateList(cateGeneralDataList); } //å ¨é¨éæ£åºåé¨é¨æ°æ® List<Integer> companyIdList = hiddenDangerAllList.stream().map(i->i.getAreaCompanyId()).collect(Collectors.toList()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(companyIdList)){ List<GeneralDataVO> companyGeneralDataList = new ArrayList<>(); Set<Integer> companyIdSetList = new HashSet<>(companyIdList); List<Company> companyList = companyMapper.selectList(new QueryWrapper<Company>() .lambda().eq(Company::getIsdeleted,Constants.ZERO)); for (Integer companyId:companyIdSetList) { Optional<Company> optionalCompany = companyList.stream().filter(i->Constants.equalsInteger(i.getId(),companyId)).findAny(); if(optionalCompany.isPresent()){ GeneralDataVO generalDataVO = new GeneralDataVO(); Company company = optionalCompany.get(); Integer total = hiddenDangerAllList.stream().filter(i->Constants.equalsInteger(i.getAreaCompanyId(),company.getId())).collect(Collectors.toList()).size(); generalDataVO.setName(company.getName()); generalDataVO.setTotal(total); companyGeneralDataList.add(generalDataVO); } } hiddenDangerDataVO.setDepartmentList(companyGeneralDataList); } } return hiddenDangerDataVO; } }