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.param.BaseListPageResponse; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.TimeRangeListRequest; 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.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.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 allHkList = new ArrayList<>(); while (hasNext){ //分页遍历循环查询所有门禁设备数据 param.setPageNo(curPage); param.setPageSize(100); BaseResponse> 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 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> 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 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 list) { List 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().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().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1")); c.setMemberId(member!=null?member.getId():null); } Cars cars = carsMapper.selectOne(new QueryWrapper().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 getNewModelBYList(List list ) { List 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().lambda().eq(Member::getHkId,model.getPersonId()).last("limit 1")); c.setMemberId(member!=null?member.getId():null); } newList.add(c); } return newList; } }