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.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 allHkList = new ArrayList<>(); while (hasNext){ //分页遍历循环查询所有门禁设备数据 param.setPageNo(curPage); param.setPageSize(100); BaseResponse> 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 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().lambda() .ge(Visits::getStarttime,start) .eq(Visits::getType,Constants.ONE) .le(Visits::getStarttime,end)); visitsMapper.insert(allHkList);//插入新数据 }catch (BusinessException e){ throw e; } } private List getNewVisitModelBYList(List list ) { List 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().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().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; } }