jiangping
2024-07-30 eea92f23bf8ead897f346ae6ccc8603ac039e566
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -11,9 +11,7 @@
import com.doumee.core.haikang.model.param.request.event.acs.EventDeviceDataRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventParkInfoRequest;
import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitDataRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest;
import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
import com.doumee.core.haikang.model.param.request.event.visit.*;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DESUtil;
import com.doumee.core.utils.DateUtil;
@@ -263,6 +261,58 @@
     * @return
     */
    @Override
    public String    dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response){
        log.info("【海康访客事件推送】==========开始=======:\n"+JSONObject.toJSONString(param));
        String result = null;
        try {
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){
                return null;
            }
            //门禁事件集合
            List<EventVisitIccmInfoRequest> events  = param.getParams().getEvents();
            List<VisitEvent> list = new ArrayList<>();
            List<Integer> delRetentionLis = new ArrayList<>();
            List<Retention> retentionList = new ArrayList<>();
            for(EventVisitIccmInfoRequest request : events){
                if(request.getData() ==null || request.getData().getVisitorInvoices() ==null){
                    continue;
                }
                if(request.getData().getVisitorInformationList() == null || request.getData().getVisitorInformationList().size() ==0){
                    continue;
                }
                //海康访客记录编码
                dealVisitDataByRequstIccm(request,delRetentionLis,retentionList,list);
            }
            if(list.size()>0){
                //插入门禁记录
                visitEventMapper.insertBatchSomeColumn(list);
            }
            if(delRetentionLis.size()>0){
                //先删除原有的在场人员(普通访客)
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                        .eq(Retention::getType,Constants.memberType.visitor)
                        .in(Retention::getMemberId,delRetentionLis));
            }
            if(retentionList.size()>0){
                //再插入最新的在厂人员
                retentionMapper.insertBatchSomeColumn(retentionList);
            }
            log.error("【海康访客事件推送】========成功=======");
        }catch (Exception e){
            log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage());
        }
        saveInterfaceLog(param,"/business/hksync/push/visitIccm",result,true);
        return  null;
    }
    /**
     * 海康访客事件推送
     * @param param
     * @param response
     * @return
     */
    @Override
    public String   dealVisitEvent(EventVisitRequest param, HttpServletResponse response){
        log.info("【海康访客事件推送】==========开始=======:\n"+JSONObject.toJSONString(param));
        String result = null;
@@ -314,6 +364,143 @@
    /**
     *  根据访客推送访客记录编码,处理访客记录、在场人员等信息
     */
    private void dealVisitDataByRequstIccm(EventVisitIccmInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList,List<VisitEvent> list) {
        EventVisitIccmInvoiceParamRequest data =  request.getData().getVisitorInvoices();
        Integer memberId = null;
        if(request.getData().getTargetPerson().getPersonId()!=null){
            Member m = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                    .eq(Member::getHkId,request.getData().getTargetPerson().getPersonId())
                    .eq(Member::getIsdeleted,Constants.ZERO)
                    .last( "limit 1"));
            if(m!=null){
                memberId = m.getId();
            }
        }
        for(EventVisitIccmDetailParamRequest model : request.getData().getVisitorInformationList()){
            Visits updateVistis = new Visits();
            MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
            queryWrapper.selectAll(Visits.class);
            queryWrapper.selectAs(Member::getType,Visits::getMemberType);
            queryWrapper.eq(Visits::getHkId,model.getVisitorId() );
            queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId );
            queryWrapper.last("limit 1");
            Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper);
            if(visits !=null) {
                //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件)
                delRetentionLis.add(visits.getMemberId());
                if (dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk) {
                    //如果是伊利大屏项目,不做处理
                    return;
                }
                updateVistis.setId(visits.getId());
                if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_IN.getKey()) {
                    //如果是访客登记,录入人员的在场数据记录
                    retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType()));
                    //来访时间
                    updateVistis.setStatus(Constants.VisitIccmStatus.signin);
                    updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime()));
                    updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime()));
                    updateVistis.setEditDate(new Date());
                    //更新访客来访或者签离时间信息
                    visitsMapper.updateById(updateVistis);
                    //更新最新来访时间
                    Member member = new Member();
                    member.setLastVisitDate(updateVistis.getInDate());
                    member.setId(visits.getMemberId());
                    memberMapper.updateById(member);
                } else  if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_OUT.getKey())  {
                    //如果是访客签离事件
                    updateVistis.setStatus(Constants.VisitIccmStatus.signout);
                    updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime()));
                    updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime()));
                    updateVistis.setOutType(Constants.ZERO);
                    updateVistis.setOutInfo("访客正常签离");
                    updateVistis.setEditDate(new Date());
                    //更新访客来访或者签离时间信息
                    visitsMapper.updateById(updateVistis);
                }else{
                    updateVistis.setStatus(visits.getStatus());
                }
            }else{
                //新增访客登记数据
               addNewVisitInfo(request,model,updateVistis.getStatus());
            }
            //封装门禁事件信息表对象
            list.add(getVisitEventModelByRequest(request,model));
        }
    }
    private void addNewVisitInfo(EventVisitIccmInfoRequest request, EventVisitIccmDetailParamRequest model,Integer status) {
        try{
            Visits c = new Visits();
            c.setHkId(model.getVisitorId());
            c.setCode(model.getAppointmentCode());
            c.setName(model.getVisitorName());
            c.setHkStatus(Constants.ONE);
            c.setHkDate(new Date());
            c.setIsdeleted(Constants.ZERO);
            c.setCreateDate(c.getHkDate());
            c.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, model.getCertNo()));
            c.setIdcardDecode(Constants.getTuominStr(model.getCertNo()));
            c.setIdcardType( model.getCertType());
            c.setStarttime(DateUtil.getISO8601DateByStr2(request.getData().getVisitorInvoices().getBeginTime()));
            c.setEndtime(DateUtil.getISO8601DateByStr2(request.getData().getVisitorInvoices().getFinishTime()));
            c.setReason(request.getData().getVisitorInvoices().getVisitReason());
            c.setStatus(status);
            c.setType(Constants.ONE);
            if(StringUtils.isNotBlank(request.getData().getTargetPerson().getPersonId())){
                //被访问人
                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId
                        ,request.getData().getTargetPerson().getPersonId()).last("limit 1"));
                c.setReceptMemberId(member!=null?member.getId():null);
            }
            c.setCompanyName(model.getUnit());
            c.setPhone(model.getPhone());
            c.setCarNos(model.getPlateNo());
            if(StringUtils.isNotBlank(model.getCertNo())){
                //被访问人
                Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                        .eq(Member::getType,Constants.ONE)
                        .eq(Member::getIdcardNo , c.getIdcardNo())
                        .last("limit 1"));
                if(member == null){
                    member = new Member();
                    member.setName(model.getVisitorName());
                    member.setPhone(model.getPhone());
                    member.setSex(model.getSex());
                    member.setIsdeleted(Constants.ZERO);
                    member.setType(Constants.ONE);
                    member.setIdcardNo(c.getIdcardNo());
                    member.setIdcardDecode(c.getIdcardDecode());
                    member.setVisitCompanyName(model.getUnit());
                    member.setCreateDate(new Date());
                    if(StringUtils.isNotBlank(model.getFacePic())){
                        member.setImgurl(HKConstants.IMG_INDEX+model.getFacePic());
                        member.setFaceServerIndexCode(model.getFaceDeviceId());
                    }
                    memberMapper.insert(member);
                }else{
                    member.setIsdeleted(Constants.ZERO);
                    member.setEditDate(new Date());
                    member.setName(model.getVisitorName());
                    member.setPhone(model.getPhone());
                    member.setSex(model.getSex());
                    member.setVisitCompanyName(model.getUnit());
                    if(StringUtils.isNotBlank(model.getFacePic())){
                        member.setImgurl(HKConstants.IMG_INDEX+model.getFacePic());
                        member.setFaceServerIndexCode(model.getFaceDeviceId());
                    }
                    memberMapper.updateById(member);
                }
                c.setMemberId(member.getId());
                visitsMapper.insert(c);
            }
        }catch (Exception e){
            log.error("====================访客推送新增访客记录失败:"+e.getMessage());
        }
    }
    private void dealVisitDataByRequst(EventVisitInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList) {
        EventVisitDataRequest model = request.getData();
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
@@ -334,7 +521,7 @@
            updateVistis.setId(visits.getId());
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_IN.getKey()){
                //如果是访客登记,录入人员的在场数据记录
                retentionList.add(getRetentionModelByVisitRequest(visits,request));
                retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType()));
                //来访时间
                updateVistis.setStatus(Constants.VisitStatus.signin);
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
@@ -358,6 +545,49 @@
        }
    }
    private VisitEvent getVisitEventModelByRequest(EventVisitIccmInfoRequest request,EventVisitIccmDetailParamRequest detail) {
        if(request.getData().getTargetPerson() ==null){
            request.getData().setTargetPerson(new EventVisitIccmTargetParamRequest());
        }
        VisitEvent event = new VisitEvent();
        event.setIsdeleted(Constants.ZERO);
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
        event.setVisitorWorkUint(detail.getUnit());
        event.setVisitorId(detail.getVisitorId());
        event.setVisitorCode(detail.getAppointmentCode());
        event.setTimeout(request.getTimeout());
        event.setSvrIndexCode(request.getSrcIndex());
        event.setHappenTime(request.getHappenTime());
        event.setStatus(request.getStatus());
        event.setEndTime(request.getData().getVisitorInvoices().getFinishTime());
        event.setStartTime(request.getData().getVisitorInvoices().getBeginTime());
        event.setSrcType(request.getSrcType());
        event.setSrcParentIndex(request.getSrcParentIndex());
        event.setSrcName(request.getSrcName());
        event.setSrcIndex(request.getSrcIndex());
        event.setSex(detail.getSex());
        event.setPurpose(request.getData().getVisitorInvoices().getVisitReason());
        event.setPhone(detail.getPhone());
        event.setBeVisitedPersonId(request.getData().getVisitorInvoices().getVisitTargetId());
        event.setBeVisitedPersonName(request.getData().getTargetPerson().getName());
        event.setBeVisitedPersonOrg(request.getData().getTargetPerson().getOrgPathName());
        event.setBeVisitedPersonOrgId(request.getData().getTargetPerson().getName());
        event.setPhotoUrl(getHkImgUrl(detail.getFacePic()));
        event.setPersonName(detail.getVisitorName());
        event.setCarNo(detail.getPlateNo());
        event.setIdType(detail.getCertType());
        String idnum = detail.getCertNo();
        if(StringUtils.isNotBlank(idnum)){
            //身份证号存储密文
            event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密
            //脱敏手机号显示n
            event.setIdcardDecode(Constants.getTuominStr(idnum));
        }
        event.setEventType(request.getEventType());
        event.setEventId(request.getEventId());
        return event;
    }
    private VisitEvent getVisitEventModelByRequest(EventVisitInfoRequest request) {
        VisitEvent event = new VisitEvent();
        event.setIsdeleted(Constants.ZERO);
@@ -408,10 +638,10 @@
        return event;
    }
    private Retention getRetentionModelByVisitRequest(Visits visits, EventVisitInfoRequest request) {
    private Retention getRetentionModelByVisitRequest(Visits visits, String happentTime,String srcType) {
        Retention retention = new Retention();
        retention.setIsdeleted(Constants.ZERO);
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
        retention.setCreateDate(DateUtil.getISO8601DateByStr(happentTime));
        retention.setClasses(visits.getClasses());
        retention.setCode(visits.getCode());
        retention.setIdcardNo(visits.getIdcardNo());
@@ -421,7 +651,7 @@
        retention.setType(visits.getMemberType());
        retention.setCompanyId(visits.getCompanyId());
        retention.setCompanyName(visits.getCompanyName());
        retention.setEventCode(request.getSrcType()+"");
        retention.setEventCode(srcType);
        retention.setEventDate(retention.getCreateDate());
        retention.setFaceImg(visits.getFaceImg());
        retention.setImgurl(visits.getImgurl());
@@ -473,7 +703,7 @@
                //再插入最新的在厂人员
                retentionMapper.insertBatchSomeColumn(retentionList);
            }
            log.error("【海康停车场事件推送】========成功=======");
            log.info("【海康停车场事件推送】========成功=======");
        }catch (Exception e){
            log.error("【海康停车场事件推送】========失败=======:\n"+e.getMessage());