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<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; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |