From 6c40e04eb7c2060feb2533735cd3089d438965e5 Mon Sep 17 00:00:00 2001 From: nidapeng <jp@doumee.com> Date: 星期二, 19 三月 2024 17:19:36 +0800 Subject: [PATCH] 整理 --- server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java | 267 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 236 insertions(+), 31 deletions(-) diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java index 174a8be..827a7fc 100644 --- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java +++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java @@ -1,38 +1,37 @@ package com.doumee.service.business.impl.hksync; +import com.alibaba.fastjson.JSONObject; 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.erp.model.openapi.request.erp.UserFailRequest; +import com.doumee.core.constants.ResponseStatus; +import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; +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; import com.doumee.core.utils.DESUtil; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.ImageBase64Util; -import com.doumee.dao.business.CompanyMapper; +import com.doumee.core.wx.wxPlat.WxPlatNotice; import com.doumee.dao.business.DeviceRoleMapper; -import com.doumee.dao.business.MemberMapper; -import com.doumee.dao.business.VisitsMapper; +import com.doumee.dao.business.RetentionMapper; import com.doumee.dao.business.join.VisitsJoinMapper; -import com.doumee.dao.business.model.Company; 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.doumee.service.business.ERPSyncService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.UUID; +import java.util.*; /** * 娴峰悍璁垮涓氬姟Service瀹炵幇 @@ -45,13 +44,156 @@ @Autowired private VisitsJoinMapper visitsMapper; @Autowired + private RetentionMapper retentionMapper; + @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private DeviceRoleMapper deviceRoleMapper; - + @Autowired + private WxPlatNotice wxPlatNotice; /** - * 鍚屾娴峰悍缁勭粐淇℃伅,鏍规嵁erp鍚屾缁勭粐缁撴灉锛屽畾鏃舵鏌ラ渶瑕佷笅鍙戝埌娴峰悍鐨勭粍缁囦俊鎭� + * 鍚屾娴峰悍璁垮淇℃伅,鏍规嵁erp鍚屾缁勭粐缁撴灉锛屽畾鏃舵鏌ラ渶瑕佷笅鍙戝埌娴峰悍鐨勭粍缁囦俊鎭� */ + @Override + public void getOutTimeVisitRecord(){ + if(Constants.DEALING_HK_VISIT_EXPIRE){ + return ; + } + Constants.DEALING_HK_VISIT_EXPIRE =true; + try { + //鏌ヨ鎵�鏈夐渶瑕佸悓姝ョ殑鏁版嵁 + List<Visits> list = getExpireVisitList(); + //鎸夌収鐖剁骇鐢宠鍒嗘壒澶勭悊姣忔鐢宠鏁版嵁 + if(list ==null || list.size()==0){ + return; + } + Date date = new Date(); + for(Visits c : list) { + //鍙戣捣娴峰悍棰勭害鎺ュ彛锛堥渶瑕佺櫥璁帮級锛屾牴鎹绾﹁繑鍥炴帴鍙e皝瑁呯敵璇疯褰曟洿鏂板瓧娈� + AppointmentInfoResponse model = getVisitRecord(c.getHkId()); + if(model == null){ + Visits update = new Visits(); + //宸插け鏁� + update.setStatus(Constants.VisitStatus.invalid); + update.setEditDate(date); + update.setId(c.getId()); + update.setRemark("棰勭害宸茶娓呴櫎"); + visitsMapper.updateById(update); + continue; + } + /** + * * 0锛氬緟瀹℃牳锛堥绾﹀緟瀹℃壒锛夈�� + * * 1锛氭甯革紙棰勭害鎴愬姛鎴栭绾﹀鎵规垚鍔熷悗<鏈櫥璁�>锛氬綋鍓嶆椂闂存湭瓒呰繃棰勮鏉ヨ鏃堕棿锛夈�� + * * 2锛氳繜鍒帮紙棰勭害鎴愬姛鎴栭绾﹀鎵规垚鍔熷悗<鏈櫥璁�>锛氬綋鍓嶆椂闂磋秴杩囬璁℃潵璁挎椂闂达紝浣嗘湭瓒呰繃棰勮绂诲紑鏃堕棿锛夈�� + * * 3锛氬け鏁堬紙棰勭害鎴愬姛鎴栭绾﹀鎵规垚鍔熷悗<鏈櫥璁�>锛氬綋鍓嶆椂闂村凡瓒呰繃棰勮绂诲紑鏃堕棿锛夈�� + * * 4锛氬鏍搁��鍥烇紙棰勭害寰呭鎵癸紝瀹℃壒浜哄憳瀹℃壒閫�鍥烇級銆� + * * 5锛氳秴鏈熻嚜鍔ㄧ绂伙紙瓒呮湡鏈绂昏褰曡瀹紝鐢卞悗鍙颁换鍔″畾鏃跺鐞嗙绂伙級銆� + * * 6锛氬凡绛剧锛堣瀹㈢绂伙級銆� + * * 7锛氳秴鏈熸湭绛剧锛堣瀹㈢櫥璁帮紝褰撳墠鏃堕棿宸茶秴杩囬璁$寮�鏃堕棿锛岃繕鏈繘琛岀绂伙級銆� + * * 8锛氬凡鍒拌揪锛涳紙璁垮鐧昏锛屽綋鍓嶆椂闂存湭瓒呰繃棰勮绂诲紑鏃堕棿锛夈�� + * * 9锛氬鏍稿け鏁堬紙棰勭害寰呭鎵癸紝涓�鐩村埌褰撳墠鏃堕棿瓒呰繃棰勮绂诲紑鏃堕棿锛岃繕鏈鎵归�氳繃锛夈�� + * * 10锛氶個绾︿腑锛堝憳宸ュ彂璧烽個绾︼紝璁垮杩樻湭搴旈個锛夈�� + * * 11锛氶個绾﹀け鏁堬紙鍛樺伐鍙戣捣閭�绾︼紝涓�鐩村埌褰撳墠鏃堕棿瓒呰繃棰勮绂诲紑鏃堕棿锛岃瀹㈣繕鏈簲閭�锛� + */ + if (model.getVisitorStatus()!=null && ",3,4,11,".contains( "," +model.getVisitorStatus()+"," )){ + //瀵圭浉搴旂姸鎬佷笅鐨勬暟鎹繘琛屻�愬凡澶辨晥銆戝鐞� + Visits update = new Visits(); + //宸插け鏁� + update.setStatus(Constants.VisitStatus.invalid); + update.setEditDate(date); + update.setId(c.getId()); + update.setInDate(DateUtil.getISO8601DateByStr2(model.getVisitStartTime())); + update.setOutDate(DateUtil.getISO8601DateByStr2(model.getVisitEndTime())); + update.setRemark("瓒呮椂鏈櫥璁�"); + visitsMapper.updateById(update); + } + if (model.getVisitorStatus()!=null && ",5,6,".contains( "," +model.getVisitorStatus()+"," )){ + // 瀵圭浉搴旂姸鎬佷笅鐨勬暟鎹繘琛屻�愬凡绛剧銆戝鐞� + if(!Constants.equalsInteger(c.getStatus(),Constants.VisitStatus.signout)){ + Visits update = new Visits(); + //宸插け鏁� + update.setStatus(Constants.VisitStatus.signout); + update.setEditDate(date); + update.setId(c.getId()); + update.setInDate(DateUtil.getISO8601DateByStr2(model.getVisitStartTime())); + 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()+"," )){ + //濡傛灉宸茬櫥璁� + if(!Constants.equalsInteger(c.getStatus(),Constants.VisitStatus.signin)){ + Visits update = new Visits(); + //宸插け鏁� + update.setStatus(Constants.VisitStatus.signin); + update.setEditDate(date); + update.setId(c.getId()); + update.setInDate(DateUtil.getISO8601DateByStr2(model.getVisitStartTime())); + 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())); + } + } + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + 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)){ + return null; + } + AppointmentListRequest param = new AppointmentListRequest(); + param.setPageNo(1); + param.setPageSize(1); + param.setOrderId(orderId); + BaseResponse<BaseListPageResponse<AppointmentInfoResponse>> response = HKService.appointmentRecords(param); + if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) ){ + return null; + } + if(response.getData() == null || response.getData().getList() == null|| response.getData().getList().size() ==0){ + return null; + } + return response.getData().getList().get(0); + } @Override public void syncVisitData(){ if(Constants.DEALING_HK_VISIT){ @@ -63,8 +205,8 @@ List<DeviceRole> roleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda() .eq(DeviceRole::getType, Constants.ONE)); //鏍囪鏄惁璧板厤鐧昏棰勭害 - String applyType =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.MDJ_VISIT_REQUIRED).getCode(); - String applyLwType =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.MDJ_LW_REQUIRED).getCode(); +// String applyType =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MDJ_VISIT_REQUIRED).getCode(); +// String applyLwType =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MDJ_LW_REQUIRED).getCode(); try { //鏌ヨ鎵�鏈夐渶瑕佸悓姝ョ殑鏁版嵁 List<Visits> list = getVisitList(); @@ -76,9 +218,13 @@ Date date = new Date(); for(Visits c : list) { //鍙戣捣娴峰悍棰勭害鎺ュ彛锛堥渶瑕佺櫥璁帮級锛屾牴鎹绾﹁繑鍥炴帴鍙e皝瑁呯敵璇疯褰曟洿鏂板瓧娈� - String type = Constants.equalsInteger(c.getType(),Constants.ONE)?applyType:applyLwType; - getUpdateModelByResponse(c,date,type,roleList,path); + getUpdateModelByResponse(c,date,roleList,path); visitsMapper.updateById(c); + if(Objects.isNull(c.getParentId())){ + wxPlatNotice.sendVisitAuditTemplateNotice(c, + systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(), + systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode()); + } } }catch (Exception e){ e.printStackTrace(); @@ -118,14 +264,18 @@ * 鏍规嵁棰勭害杩斿洖鎺ュ彛灏佽鐢宠璁板綍鏇存柊瀛楁 * @param c * @param date + * @param date * @param type 0闇�瑕佺櫥璁� 1鍏嶇櫥璁� */ - private void getUpdateModelByResponse( Visits c,Date date,String type,List<DeviceRole> roleList,String path ) { + private void getUpdateModelByResponse( Visits c,Date date, List<DeviceRole> roleList,String path ) { String code = null; String id = null; + String qrcode = null; + String reson = ""; //鍙戣捣娴峰悍棰勭害鎺ュ彛 - if(StringUtils.equals(type,"0")){ + if(Constants.equalsInteger(c.getVisitType(),Constants.ZERO)){ //锛堥渶瑕佺櫥璁帮級 + c.setVisitType(Constants.ZERO); VisitAppointmentRequest request = getHkRequestPara(c,roleList,path); if(request == null){ //娴峰悍涓嬪彂鎴愬姛 @@ -137,11 +287,16 @@ } BaseResponse<VisitAppointmentResponse> response = HKService.visitAppiontment(request); code =response!=null ?response.getCode():null; - id = (response!=null && response.getData()!=null + if((response!=null && response.getData()!=null && response.getData().getAppointmentInfoList() !=null - && response.getData().getAppointmentInfoList().size()>0)?response.getData().getAppointmentInfoList().get(0).getOrderId():null; + && response.getData().getAppointmentInfoList().size()>0)){ + id =response.getData().getAppointmentInfoList().get(0).getOrderId(); + qrcode =response.getData().getAppointmentInfoList().get(0).getQRCode(); + } + reson = response!=null?JSONObject.toJSONString(response):""; }else{ //鍏嶇櫥璁� + c.setVisitType(Constants.ONE); VisitAppointmentMDJRequest request =getHkMDJRequestPara(c,roleList,path); if(request == null){ //娴峰悍涓嬪彂鎴愬姛 @@ -153,17 +308,22 @@ } BaseResponse<VisitAppointmentMDJResponse> response = HKService.visitAppiontmentMDJ(request ); code =response!=null ?response.getCode():null; - id = (response!=null && response.getData()!=null)?response.getData().getOrderId():null; + if(response!=null && response.getData()!=null){ + id = response.getData().getOrderId(); + qrcode =response.getData().getQRCode(); + } + reson = response!=null?JSONObject.toJSONString(response):""; } if (code!= null && id!=null) { //娴峰悍涓嬪彂鎴愬姛 c.setHkId( id);//棰勭害鏍囪瘑 - c.setRemark("涓嬪彂娴峰悍鎴愬姛锛併��"+type+"銆�"); + c.setQrcode(qrcode); + c.setRemark("涓嬪彂娴峰悍鎴愬姛锛�"); c.setStatus(Constants.VisitStatus.xfSuccess);//涓嬪彂娴峰悍鎴愬姛 } else { - //娴峰悍涓嬪彂鎴愬姛 - c.setRemark("涓嬪彂娴峰悍澶辫触锛併��"+type+"銆�"); + //娴峰悍涓嬪彂澶辫触 + c.setRemark("涓嬪彂娴峰悍澶辫触,鍘熷洜锛�"+ reson); c.setStatus(Constants.VisitStatus.xfFail);//涓嬪彂娴峰悍澶辫触 } c.setHkStatus(Constants.ONE); @@ -182,10 +342,18 @@ //浜鸿劯涓虹┖锛屼笉鑳借繘琛屾帹閫� return null; } - request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime())); - request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime())); + request.setVisitStartTime(DateUtil.getISO8601Timestamp2(c.getStarttime())); + request.setVisitEndTime(DateUtil.getISO8601Timestamp2(c.getEndtime())); request.setReceptionistId(c.getReceptMemberHkId());//琚浜烘捣搴风紪鐮� - request.setVisitPurpose(c.getReason()); + if(StringUtils.isNotBlank(c.getReason())){ + char[] charArray = c.getReason().toCharArray(); + int length = charArray.length; + if(length>32){ + request.setVisitPurpose(c.getReason().substring(0,32)); + }else{ + request.setVisitPurpose(c.getReason()); + } + } request.setVisitorInfo(info); request.setVisitorPermissionSet(getVisitPermissonRequest(roleList,c)); return request; @@ -223,7 +391,16 @@ request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime())); request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime())); request.setReceptionistId(c.getReceptMemberHkId());//琚浜烘捣搴风紪鐮� - request.setVisitPurpose(c.getReason()); + + if(StringUtils.isNotBlank(c.getReason())){ + char[] charArray = c.getReason().toCharArray(); + int length = charArray.length; + if(length>32){ + request.setVisitPurpose(c.getReason().substring(0,32)); + }else{ + request.setVisitPurpose(c.getReason()); + } + } //鑾峰彇鏉冮檺缁勯泦鍚� request.setVisitorPermissionSet(getVisitPermissonRequest(roleList,c)); List<VisitAppointmentVistorRequest> infolist = new ArrayList<>(); @@ -246,10 +423,28 @@ if(info.getVisitorPhoto() == null){ return null; } - info.setVisitorName(c.getName()); - info.setVisitorWorkUnit(c.getCompanyName()); + if(StringUtils.isNotBlank(c.getName())){ + char[] charArray = c.getName().toCharArray(); + int length = charArray.length; + if(length>32){ + info.setVisitorName(c.getName().substring(0,32)); + }else{ + info.setVisitorName(c.getName()); + } + } + + if(StringUtils.isNotBlank(c.getCompanyName())){ + char[] charArray = c.getCompanyName().toCharArray(); + int length = charArray.length; + if(length>32){ + info.setVisitorWorkUnit(c.getCompanyName().substring(0,32)); + }else{ + info.setVisitorWorkUnit(c.getCompanyName()); + } + } info.setPhoneNo(c.getPhone()); info.setPlateNo(c.getCarNos()); + info.setGender(c.getSex()+""); if(Constants.equalsInteger(c.getIdcardType(),Constants.ZERO)){ info.setCertificateType(HKConstants.CertificateType.SHENFENZHENG.getKey()+""); info.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD, c.getIdcardNo())); @@ -285,7 +480,7 @@ MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Visits.class); queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName) - .select("t1.hk_id as receptMemberHkId") + .selectAs(Member::getHkId,Visits::getReceptMemberHkId) .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId); queryWrapper.eq(Visits::getStatus,Constants.VisitStatus.pass)//瀹℃壒閫氳繃 .eq(Visits::getHkStatus,Constants.ZERO)//鏈悓姝ュ埌娴峰悍 @@ -293,5 +488,15 @@ List<Visits> list = visitsMapper.selectJoinList(Visits.class,queryWrapper); return list; } + private List<Visits> getExpireVisitList() { + MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); + queryWrapper.selectAll(Visits.class) + .selectAs(Member::getType,Visits::getMemberType) + .leftJoin(Member.class,Member::getId,Visits::getMemberId); + queryWrapper.in(Visits::getStatus, Arrays.asList(new Integer[]{Constants.VisitStatus.xfSuccess,Constants.VisitStatus.signin}) ); + List<Visits> list = visitsMapper.selectJoinList(Visits.class,queryWrapper); + return list; + } + } -- Gitblit v1.9.3