package com.doumee.service.business.impl.hksync.fhk;
|
|
import com.alibaba.fastjson.JSONObject;
|
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.request.TimeRangeListRequest;
|
import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
|
import com.doumee.core.haikang.model.param.respose.VehicleInfoResponse;
|
import com.doumee.core.haikang.model.param.respose.VehicleTimeRangeInfoResponse;
|
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.*;
|
import com.doumee.dao.business.dao.CompanyMapper;
|
import com.doumee.dao.business.model.Cars;
|
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 HkSyncVehicleFromHKServiceImpl extends HkSyncBaseServiceImpl {
|
@Autowired
|
private CompanyMapper companyMapper;
|
@Autowired
|
private MemberMapper memberMapper;
|
@Autowired
|
private ParksMapper parksMapper;
|
@Autowired
|
private CarsMapper carsMapper;
|
@Autowired
|
private DataSyncConfig dataSyncConfig;
|
@Autowired
|
private SystemDictDataBiz systemDictDataBiz;
|
|
@Override
|
@Transactional
|
public void syncVehicleData(){
|
try {
|
if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持海康数据同步操作~");
|
}
|
TimeRangeListRequest param = new TimeRangeListRequest();
|
//获取ERP组织信息(全量同步)
|
boolean hasNext = true;
|
int curTotal = 0;
|
int curPage = 1;
|
|
List<Cars> allHkList = new ArrayList<>();
|
while (hasNext){
|
//分页遍历循环查询所有门禁设备数据
|
param.setPageNo(curPage);
|
param.setPageSize(100);
|
BaseResponse<BaseListPageResponse<VehicleInfoResponse>> response = HKService.vehicleList(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<VehicleInfoResponse> r = response.getData();
|
curTotal += 100;
|
if(curTotal >= r.getTotal()){
|
hasNext = false;
|
}
|
if(r.getList() == null || r.getList().size()==0){
|
hasNext =false;
|
}else{
|
allHkList.addAll(getNewModelBYList(r.getList()));
|
}
|
curPage++;
|
}
|
if(allHkList .size() == 0){
|
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何组织信息!");
|
}
|
//清空原有的数据
|
carsMapper.delete(new UpdateWrapper<>());
|
carsMapper.insert(allHkList);//插入新数据
|
}catch (BusinessException e){
|
throw e;
|
}
|
}
|
@Override
|
@Transactional
|
public void syncVehicleUpdateData(Date date){
|
try {
|
if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持海康数据同步操作~");
|
}
|
TimeRangeListRequest param = new TimeRangeListRequest();
|
//获取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.setStartTime(DateUtil.getISO8601Timestamp2( start));
|
param.setEndTime(DateUtil.getISO8601Timestamp2( end));
|
while (hasNext){
|
//分页遍历循环查询所有门禁设备数据
|
param.setPageNo(curPage);
|
param.setPageSize(100);
|
BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> response = HKService.vehicleTimeRangeList(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<VehicleTimeRangeInfoResponse> r = response.getData();
|
curTotal += 100;
|
if(curTotal >= r.getTotal()){
|
hasNext = false;
|
}
|
if(r.getList() == null || r.getList().size()==0){
|
hasNext =false;
|
}else{
|
dealUpdateByList(r.getList());
|
}
|
curPage++;
|
}
|
}catch (BusinessException e){
|
throw e;
|
}
|
}
|
|
private void dealUpdateByList(List<VehicleTimeRangeInfoResponse> list) {
|
List<Cars> newList = new ArrayList<>();
|
if(list == null || list.size()==0){
|
return ;
|
}
|
for(VehicleTimeRangeInfoResponse model :list){
|
if(Constants.formatIntegerNum(model.getStatus()) <0){
|
//如果已删除
|
carsMapper.update(null,new UpdateWrapper<Cars>().lambda()
|
.eq(Cars::getHkId,model.getVehicleId())
|
.set(Cars::getIsdeleted,Constants.ONE ));
|
}else{
|
Cars c = new Cars();
|
c.setHkId(model.getVehicleId());
|
c.setCode(model.getPlateNo());
|
c.setRemark(JSONObject.toJSONString(model));
|
c.setHkStatus(Constants.ONE);
|
c.setHkDate(new Date());
|
c.setIsdeleted(Constants.ZERO);
|
c.setStatus(Constants.ZERO);
|
c.setCreateDate(DateUtil.getISO8601DateByStr(model.getCreateTime()));
|
c.setEditDate(DateUtil.getISO8601DateByStr(model.getUpdateTime()));
|
if(StringUtils.isNotBlank(model.getPersonId())){
|
//被访问人
|
Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1"));
|
c.setMemberId(member!=null?member.getId():null);
|
}
|
Cars cars = carsMapper.selectOne(new QueryWrapper<Cars>().lambda().eq(Cars::getHkId,model.getVehicleId()).last("limit 1"));
|
if(cars!=null){
|
//更新
|
c.setId(cars.getId());
|
carsMapper.updateById(c);
|
}else{
|
//新增
|
carsMapper.insert(c);
|
}
|
|
}
|
|
}
|
}
|
|
private List<Cars> getNewModelBYList(List<VehicleInfoResponse> list ) {
|
List<Cars> newList = new ArrayList<>();
|
if(list == null || list.size()==0){
|
return newList;
|
}
|
for(VehicleInfoResponse model :list){
|
Cars c = new Cars();
|
c.setHkId(model.getVehicleId());
|
c.setCode(model.getPlateNo());
|
c.setRemark(JSONObject.toJSONString(model));
|
c.setHkStatus(Constants.ONE);
|
c.setHkDate(new Date());
|
c.setIsdeleted(Constants.ZERO);
|
c.setCreateDate(c.getHkDate());
|
c.setCreateDate(DateUtil.getISO8601DateByStr(model.getCreateTime()));
|
c.setEditDate(DateUtil.getISO8601DateByStr(model.getUpdateTime()));
|
if(StringUtils.isNotBlank(model.getPersonId())){
|
//被访问人
|
Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1"));
|
c.setMemberId(member!=null?member.getId():null);
|
}
|
newList.add(c);
|
}
|
return newList;
|
}
|
|
|
}
|