| package com.doumee.service.business.impl.hksync.fhk; | 
|   | 
| 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.config.DataSyncConfig; | 
| 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.AppointmentListRequest; | 
| import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse; | 
| 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.Utils; | 
| import com.doumee.dao.business.dao.MemberMapper; | 
| import com.doumee.dao.business.VisitsMapper; | 
| import com.doumee.dao.business.dao.CompanyMapper; | 
| import com.doumee.dao.business.model.Member; | 
| import com.doumee.dao.business.model.Visits; | 
| import com.doumee.service.business.impl.hksync.HkSyncBaseServiceImpl; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
|   | 
| import java.util.ArrayList; | 
| import java.util.Date; | 
| import java.util.List; | 
|   | 
| /** | 
|  * 拉取海康访客信息通过步Service实现 | 
|  * @author 江蹄蹄 | 
|  * @date 2023/11/30 15:33 | 
|  */ | 
| @Service | 
| @Slf4j | 
| public class HkSyncVisitFromHKServiceImpl extends HkSyncBaseServiceImpl { | 
|     @Autowired | 
|     private CompanyMapper companyMapper; | 
|     @Autowired | 
|     private MemberMapper memberMapper; | 
|     @Autowired | 
|     private VisitsMapper visitsMapper; | 
|     @Autowired | 
|     private DataSyncConfig dataSyncConfig; | 
|     @Autowired | 
|     private SystemDictDataBiz systemDictDataBiz; | 
|   | 
|   | 
|     /** | 
|      * 同步海康组织信息到业务系统 | 
|      */ | 
|     @Override | 
|     @Transactional | 
|     public   void syncVistAppointData(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 = new Date(); | 
|             if(DateUtil.daysBetweenDates(end,start) >1){ | 
|                 end =  Utils.Date.getEnd(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<AppointmentInfoResponse>> response = HKService.appointmentRecords(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<AppointmentInfoResponse> r = response.getData(); | 
|                 curTotal += 100; | 
|                 if(curTotal >= r.getTotal()){ | 
|                     hasNext = false; | 
|                 } | 
|                 if(r.getList() == null || r.getList().size()==0){ | 
|                     hasNext =false; | 
|                 }else{ | 
|                     allHkList.addAll(getNewVisitModelBYList(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.insert(allHkList);//插入新数据 | 
|         }catch (BusinessException e){ | 
|             throw  e; | 
|         } | 
|     } | 
|   | 
|     private List<Visits> getNewVisitModelBYList(List<AppointmentInfoResponse> list ) { | 
|         List<Visits> newList = new ArrayList<>(); | 
|         if(list == null || list.size()==0){ | 
|             return  newList; | 
|         } | 
|         for(AppointmentInfoResponse model :list){ | 
|             Visits c = new Visits(); | 
|             c.setHkId(model.getAppointRecordId()); | 
|             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.setStarttime(DateUtil.getISO8601DateByStr2(model.getVisitStartTime())); | 
|             c.setEndtime(DateUtil.getISO8601DateByStr2(model.getVisitEndTime())); | 
|             c.setReason(model.getVisitPurpose()); | 
|             c.setStatus(model.getVisitorStatus()); | 
|             c.setType(Constants.ONE); | 
|             if(StringUtils.isNotBlank(model.getReceptionistId())){ | 
|                 //被访问人 | 
|                 Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.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,DESUtil.encrypt(Constants.EDS_PWD, model.getCertificateNo())) | 
|                         .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.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; | 
|     } | 
|   | 
|   | 
| } |