jiangping
2024-07-30 eea92f23bf8ead897f346ae6ccc8603ac039e566
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java
@@ -10,7 +10,9 @@
import com.doumee.core.haikang.model.param.BaseListPageResponse;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.AppointmentListRequest;
import com.doumee.core.haikang.model.param.respose.AppointmentIccmInfoResponse;
import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
import com.doumee.core.haikang.model.param.respose.AppointmentVisitorInfoResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DESUtil;
@@ -52,6 +54,64 @@
    private SystemDictDataBiz systemDictDataBiz;
    /**
     * 同步海康组织信息到业务系统
     */
    @Override
    @Transactional
    public   void syncVistAppointDataIccm(Date date){
        try {
            if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持海康数据同步操作~");
            }
            AppointmentListRequest param =  new AppointmentListRequest();
            //获取ERP组织信息(全量同步)
            boolean hasNext = true;
            int curTotal = 0;
            int curPage = 1;
            //查询今天的
            Date start =Utils.Date.getStart(date);
            Date end = Utils.Date.getEnd(new Date());
            param.setVisitStartTimeBegin(DateUtil.getISO8601Timestamp2( start));
            param.setVisitStartTimeEnd(DateUtil.getISO8601Timestamp2( end));
            List<Visits>  allHkList = new ArrayList<>();
            while (hasNext){
                //分页遍历循环查询所有门禁设备数据
                param.setPageNo(curPage);
                param.setPageSize(100);
                BaseResponse<BaseListPageResponse<AppointmentIccmInfoResponse>> response = HKService.appointmentRecordsIccm(param);
                if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)  ){
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
                }
                if(response.getData() == null || response.getData().getTotal() ==0){
                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何信息!");
                }
                BaseListPageResponse<AppointmentIccmInfoResponse> r = response.getData();
                curTotal += 100;
                if(curTotal >= r.getTotal()){
                    hasNext = false;
                }
                if(r.getList() == null || r.getList().size()==0){
                    hasNext =false;
                }else{
                    allHkList.addAll(getNewVisitModelBYListIccm(r.getList()));
                }
                curPage++;
            }
            if(allHkList .size() == 0){
                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何信息!");
            }
            //清空原有当天的数据
            visitsMapper.delete(new UpdateWrapper<Visits>().lambda()
                    .ge(Visits::getStarttime,start)
                    .eq(Visits::getType,Constants.ONE)
                    .le(Visits::getStarttime,end));
            visitsMapper.insertBatchSomeColumn(allHkList);//插入新数据
        }catch (BusinessException e){
            throw  e;
        }
    }
    /**
     * 同步海康组织信息到业务系统
     */
@@ -114,6 +174,84 @@
        }
    }
    private List<Visits> getNewVisitModelBYListIccm(List<AppointmentIccmInfoResponse> list ) {
        List<Visits> newList = new ArrayList<>();
        if(list == null || list.size()==0){
            return  newList;
        }
        for(AppointmentIccmInfoResponse data :list){
            if(data.getVisitorList()==null || data.getVisitorList().size() ==0){
                continue;
            }
            for(AppointmentVisitorInfoResponse model : data.getVisitorList()){
                Visits c = new Visits();
                c.setHkId(model.getVisitorId());
                c.setCode(model.getQrCode());
                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.getCertificateNo()));
                c.setIdcardDecode(Constants.getTuominStr(model.getCertificateNo()));
                c.setIdcardType(Integer.parseInt(model.getCertificateType()));
                c.setStarttime(DateUtil.getISO8601DateByStr2(data.getVisitStartTime()));
                c.setEndtime(DateUtil.getISO8601DateByStr2(data.getVisitEndTime()));
                c.setReason(data.getVisitPurpose());
                c.setStatus(model.getVisitorStatus());
                c.setType(Constants.ONE);
                if(StringUtils.isNotBlank(data.getReceptionistId())){
                    //被访问人
                    Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,data.getReceptionistId()).last("limit 1"));
                    c.setReceptMemberId(member!=null?member.getId():null);
                }
                c.setCompanyName(model.getVisitorWorkUnit());
                c.setPhone(model.getPhoneNo());
                c.setCarNos(model.getPlateNo());
                if(StringUtils.isNotBlank(model.getCertificateNo())){
                    //被访问人
                    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.getPhoneNo());
                        member.setSex(model.getGender());
                        member.setIsdeleted(Constants.ZERO);
                        member.setType(Constants.ONE);
                        member.setIdcardNo(c.getIdcardNo());
                        member.setIdcardDecode(c.getIdcardDecode());
                        member.setVisitCompanyName(model.getVisitorWorkUnit());
                        member.setCreateDate(new Date());
                        if(StringUtils.isNotBlank(model.getPicUri())){
                            member.setImgurl(HKConstants.IMG_INDEX+model.getPicUri());
                            member.setFaceServerIndexCode(model.getSvrIndexCode());
                        }
                        memberMapper.insert(member);
                    }else{
                        member.setIsdeleted(Constants.ZERO);
                        member.setEditDate(new Date());
                        member.setName(model.getVisitorName());
                        member.setPhone(model.getPhoneNo());
                        member.setSex(model.getGender());
                        member.setVisitCompanyName(model.getVisitorWorkUnit());
                        if(StringUtils.isNotBlank(model.getPicUri())){
                            member.setFaceServerIndexCode(model.getSvrIndexCode());
                            member.setImgurl(HKConstants.IMG_INDEX+model.getPicUri());
                        }
                        memberMapper.updateById(member);
                    }
                    c.setMemberId(member.getId());
                }
                newList.add(c);
            }
        }
        return newList;
    }
    private List<Visits> getNewVisitModelBYList(List<AppointmentInfoResponse> list ) {
        List<Visits> newList = new ArrayList<>();
        if(list == null || list.size()==0){
@@ -183,4 +321,5 @@
    }
}