| 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.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.dao.MemberMapper; | 
| 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<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; | 
|     } | 
|   | 
|   | 
| } |