admin/package-lock.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
admin/package.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
admin/src/components/business/OperaVisitsDesWindow.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
admin/src/views/business/visits.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/dmvisit_admin/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/dmvisit_screen/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DeviceEventDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ParkBookServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
admin/package-lock.json
@@ -10969,6 +10969,11 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, "qrcodejs2": { "version": "0.0.2", "resolved": "https://registry.npmmirror.com/qrcodejs2/-/qrcodejs2-0.0.2.tgz", "integrity": "sha512-+Y4HA+cb6qUzdgvI3KML8GYpMFwB24dFwzMkS/yXq6hwtUGNUnZQdUnksrV1XGMc2mid5ROw5SAuY9XhI3ValA==" }, "qs": { "version": "6.5.2", "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz?cache=0&sync_timestamp=1616385328325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqs%2Fdownload%2Fqs-6.5.2.tgz", admin/package.json
@@ -18,6 +18,7 @@ "element-ui": "^2.3.6", "js-cookie": "^2.2.1", "js-file-download": "^0.4.12", "qrcodejs2": "0.0.2", "vue": "^2.6.11", "vue-clipboard2": "^0.3.1", "vue-router": "^3.5.1", admin/src/components/business/OperaVisitsDesWindow.vue
@@ -1,21 +1,25 @@ <template> <GlobalWindow :title="title" width="60%" width="70%" :visible.sync="visible" append-to-body :confirm-working="isWorking" @confirm="confirm" > <div class="list"> <div class="list_item"> <div class="list_item_label">拜访信息</div> <div class="list_item_val" v-if="info"> <div class="list_item_val" v-if="info" style="display: inline-block"> <div class="list_item_val_item">拜访对方:{{info.receptMemberName}} - {{info.receptMemberDepartment}}</div> <div class="list_item_val_item">拜访时间:{{info.starttime}} 至 {{info.endtime}}</div> <div class="list_item_val_item">拜访事由:{{info.reason}}</div> <div class="list_item_val_item">申请人员:{{info.name}} {{info.companyName}}</div> <div class="list_item_val_item">申请门禁:{{info.deviceRoleList ? info.deviceRoleList.map(item => item.name).join(' | ') : ''}}</div> <div class="list_item_val_item">创建时间:{{info.createDate}}</div> </div> <div class="list_item_val" v-if="info" style="display: inline-block;float: right"> <div class="list_item_val_item" id="qrcode2" ref="qrcode2"></div> </div> </div> <div class="list_item"> @@ -92,6 +96,13 @@ </el-table-column> <el-table-column width="150" label="访客二维码"> <template slot-scope="{row}"> <div :id="`qrcode${row.id}`" :ref="`qrcode${row.id}`"></div> </template> </el-table-column> <el-table-column width="150" label="人脸照片"> <template slot-scope="{row}"> <el-image @@ -139,6 +150,7 @@ import BaseOpera from '@/components/base/BaseOpera' import GlobalWindow from '@/components/common/GlobalWindow' import { queryById } from '@/api/business/visits' import QRCode from "qrcodejs2"; export default { name: 'OperaVisitsWindow', extends: BaseOpera, @@ -146,8 +158,11 @@ data () { return { list: [], info: null info: null, innerVisible:false } }, created () { }, methods: { getAge (val) { @@ -163,6 +178,17 @@ return calculationAge - 1 } }, crateQrcodeShow (div,qrcode1) { if(qrcode1 ==null ||qrcode1 ==''){ return; } this.qr = new QRCode(div, { width: 90, height: 90, text: qrcode1 }) }, open (title, id) { this.title = title this.visible = true @@ -170,6 +196,16 @@ .then(res => { console.log(res) this.info = res this.$nextTick(() => { // this.$refs.qrcode2.innerHTML = '' // this.crateQrcodeShow('qrcode2',res.qrcode) if(this.info.withUserList ){ this.info.withUserList.forEach(row => { this.$refs['qrcode'+row.id].innerHTML = '' this.crateQrcodeShow('qrcode'+row.id,row.qrcode) }) } }) }) } } admin/src/views/business/visits.vue
@@ -108,6 +108,7 @@ import TableLayout from '@/layouts/TableLayout' import Pagination from '@/components/common/Pagination' import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow' export default { name: 'Visits', extends: BaseTable, @@ -131,6 +132,6 @@ 'field.main': 'id' }) this.search() } }, } </script> server/dmvisit_admin/src/main/resources/application.yml
@@ -10,7 +10,7 @@ # application: # name: doumeemes profiles: active: devYL active: dev # JSON返回配置 jackson: @@ -67,7 +67,7 @@ compression: enabled: true mime-types: application/json port: 10028 port: 10033 tomcat: max-swallow-size: -1 servlet: server/dmvisit_screen/src/main/resources/application.yml
@@ -70,7 +70,7 @@ enabled: true mime-types: application/json port: 10029 port: 10032 tomcat: max-swallow-size: -1 servlet: server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DeviceEventDTO.java
@@ -115,7 +115,8 @@ @ApiModelProperty(value = "人员名称") private String personName; @ApiModelProperty(value = "人员编码") private String memberId; @ApiModelProperty(value = "读卡器类别0-无效1-IC读卡器2-身份证读卡器3-二维码读卡器4-指纹头") private Integer extEventReaderKind; server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java
@@ -368,6 +368,7 @@ .leftJoin(Device.class,Device::getHkId,DeviceEvent::getSrcParentIndex) .selectAll(DeviceEvent.class) .selectAs(Member::getName,DeviceEventDTO::getPersonName) .selectAs(Member::getId,DeviceEventDTO::getMemberId) .selectAs(Member::getType,DeviceEventDTO::getPersonType) .selectAs(Member::getPhone,DeviceEventDTO::getPersonPhone) .selectAs(Member::getIdcardDecode,DeviceEventDTO::getPersonIdcardDecode) @@ -375,7 +376,7 @@ .selectAs(Company::getName,DeviceEventDTO::getPersonCompanyName); queryWrapper.like(number, Member::getPhone, pageWrap.getModel().getKeyWords()) .like((b||hasWord),Member::getName, pageWrap.getModel().getKeyWords()) .eq(StringUtils.isNotBlank(pageWrap.getModel().getPersonType()), .eq(StringUtils.equals(pageWrap.getModel().getPersonType(),Constants.TWO+""), Member::getType, pageWrap.getModel().getPersonType()) .eq(Objects.nonNull(pageWrap.getModel().getEventType()), @@ -387,6 +388,7 @@ .le(Objects.nonNull(pageWrap.getModel().getEndTime()), DeviceEvent::getCreateDate, pageWrap.getModel().getEndTime()) .isNull(!StringUtils.isNotBlank(pageWrap.getModel().getPersonType()) && !StringUtils.equals(pageWrap.getModel().getPersonType(),Constants.TWO+""),Member::getId)//除了内部人员都是外来访客 .orderByDesc(DeviceEvent::getCreateDate); queryWrapper.orderByDesc(DeviceEvent::getHappenTime); IPage<DeviceEventDTO> deviceEventDTOIPage = deviceEventJoinMapper.selectJoinPage(page, DeviceEventDTO.class, queryWrapper); server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ParkBookServiceImpl.java
@@ -145,7 +145,9 @@ // .eq(ParkBook::getIsdeleted, Constants.ZERO) .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getPhone,pageWrap.getModel().getMemberName()) .or().like(Member::getName,pageWrap.getModel().getMemberName())); queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getCarCode()),ParkBook::getCarCode,pageWrap.getModel().getCarCode()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCarCode()),ParkBook::getCarCode,pageWrap.getModel().getCarCode()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getParksName()),Parks::getName,pageWrap.getModel().getParksName()); queryWrapper.orderByDesc(ParkBook::getCreateDate); IPage<ParkBook> result = parkBookJoinMapper.selectJoinPage(page, ParkBook.class,queryWrapper); server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -1,6 +1,7 @@ package com.doumee.service.business.impl.hksync; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; @@ -8,6 +9,7 @@ import com.doumee.core.haikang.model.param.BaseListPageResponse; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.*; import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest; import com.doumee.core.haikang.model.param.respose.*; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; @@ -16,9 +18,11 @@ import com.doumee.core.utils.ImageBase64Util; import com.doumee.core.wx.wxPlat.WxPlatNotice; import com.doumee.dao.business.DeviceRoleMapper; import com.doumee.dao.business.RetentionMapper; import com.doumee.dao.business.join.VisitsJoinMapper; import com.doumee.dao.business.model.DeviceRole; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Retention; import com.doumee.dao.business.model.Visits; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.slf4j.Slf4j; @@ -38,6 +42,8 @@ public class HkSyncVisitServiceImpl extends HkSyncBaseServiceImpl { @Autowired private VisitsJoinMapper visitsMapper; @Autowired private RetentionMapper retentionMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired @@ -112,6 +118,11 @@ update.setOutDate(DateUtil.getISO8601DateByStr2(model.getVisitEndTime())); update.setRemark("已签离"); visitsMapper.updateById(update); //先删除原有的在场人员(普通访客) retentionMapper.delete(new UpdateWrapper<Retention>().lambda() .eq(Retention::getType,Constants.memberType.visitor) .eq(Retention::getMemberId,c.getMemberId())); } } if (model.getVisitorStatus()!=null&& "7,8".contains( model.getVisitorStatus()+"")){ @@ -126,6 +137,12 @@ update.setOutDate(DateUtil.getISO8601DateByStr2(model.getVisitEndTime())); update.setRemark("超时未签到"); visitsMapper.updateById(update); //先删除原有的在场人员(普通访客) retentionMapper.delete(new UpdateWrapper<Retention>().lambda() .eq(Retention::getType,Constants.memberType.visitor) .eq(Retention::getMemberId,c.getMemberId())); //再插入最新的在厂人员 retentionMapper.insert(getRetentionModelByVisitRequest(c,update.getInDate())); } } } @@ -135,6 +152,29 @@ Constants.DEALING_HK_VISIT_EXPIRE =false; } } private Retention getRetentionModelByVisitRequest(Visits visits,Date date) { Retention retention = new Retention(); retention.setIsdeleted(Constants.ZERO); retention.setCreateDate(date); retention.setClasses(visits.getClasses()); retention.setCode(visits.getCode()); retention.setIdcardNo(visits.getIdcardNo()); retention.setIdcardDecode(visits.getIdcardDecode()); retention.setName(visits.getName()); retention.setBirthday(visits.getBirthday()); retention.setType(visits.getMemberType()); retention.setCompanyId(visits.getCompanyId()); retention.setCompanyName(visits.getCompanyName()); retention.setEventDate(retention.getCreateDate()); retention.setFaceImg(visits.getFaceImg()); retention.setImgurl(visits.getImgurl()); retention.setPhone(visits.getPhone()); retention.setMemberId(visits.getMemberId()); return retention; } public AppointmentInfoResponse getVisitRecord(String orderId){ //分页遍历循环查询所有门禁设备数据 if(StringUtils.isBlank(orderId)){ @@ -411,7 +451,9 @@ } private List<Visits> getExpireVisitList() { MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Visits.class); queryWrapper.selectAll(Visits.class) .selectAs(Member::getType,Visits::getMemberType) .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId); queryWrapper.in(Visits::getStatus, Arrays.asList(new Integer[]{Constants.VisitStatus.xfSuccess,Constants.VisitStatus.signin}) ); List<Visits> list = visitsMapper.selectJoinList(Visits.class,queryWrapper); return list;