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.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;
|
import com.doumee.core.utils.DateUtil;
|
import com.doumee.core.utils.Utils;
|
import com.doumee.dao.business.CompanyMapper;
|
import com.doumee.dao.business.MemberMapper;
|
import com.doumee.dao.business.VisitsMapper;
|
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 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;
|
}
|
}
|
/**
|
* 同步海康组织信息到业务系统
|
*/
|
@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.insertBatchSomeColumn(allHkList);//插入新数据
|
}catch (BusinessException e){
|
throw e;
|
}
|
}
|
|
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){
|
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;
|
}
|
|
|
|
}
|