package com.doumee.service.business.impl.hksync; 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.BaseResponse; import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest; import com.doumee.core.haikang.model.param.request.ParkListRequest; import com.doumee.core.haikang.model.param.respose.AcsDeviceInfoResponse; import com.doumee.core.haikang.model.param.respose.AcsDeviceListResponse; import com.doumee.core.haikang.model.param.respose.ParkListResponse; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.dao.business.DeviceMapper; import com.doumee.dao.business.ParksMapper; import com.doumee.dao.business.model.Device; import com.doumee.dao.business.model.Parks; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 海康停车库同步Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service public class HkSyncParkServiceImpl extends HkSyncBaseServiceImpl { @Autowired private ParksMapper parksMapper; /** * 同步海康停车库数据 * @param param * @return */ @Override // @Async public String syncHkParks(ParkListRequest param){ List deleteList = new ArrayList<>(); List addList = new ArrayList<>(); List editList = new ArrayList<>(); Date date = new Date(); //查询全部当前数据 List allList = parksMapper.selectList(null); //分页遍历循环查询所有门禁设备数据 param = new ParkListRequest(); BaseResponse> response = HKService.parkList(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } List allHkList = response.getData(); // 获取增删改数据集合 getDataChangeList(allList,allHkList,addList,editList,deleteList,date); if(deleteList.size()>0){ //逻辑删除 for(Parks d : deleteList){ parksMapper.updateById(d); } } if(addList.size()>0){ parksMapper.insertBatchSomeColumn(addList); } if(editList.size()>0){ for(Parks d : editList){ parksMapper.updateById(d); } } return "同步数据:新增【"+addList.size()+"】条,更新【"+editList.size()+"】条,删除【"+deleteList.size()+"】条"; } private void getDataChangeList(List allList, List allHkList, List addList, List editList,List deleteList, Date date) { if(allHkList!=null && allHkList.size()>0){ for(ParkListResponse device : allHkList){ Parks model = getExistedData(device,allList); if(model !=null){ //如果已存在,则更新数据 model = initModelByHkData(model,device,date); editList.add(model); }else{ //如果不存在,则新增数据 model = new Parks(); model = initModelByHkData(model,device,date); addList.add(model); } } } //判断获取删除的门禁设备,逻辑删除 getDeleteList(allList,allHkList,deleteList,date); } /** * 初始化海康入库数据 * @param model * @param device * @param date * @return */ private Parks initModelByHkData(Parks model, ParkListResponse device,Date date) { model.setIsdeleted(Constants.ZERO); model.setName(device.getParkName()); model.setHkDate(date); model.setCreateDate(DateUtil.getISO8601DateByStr(device.getCreateTime())); model.setEditDate(DateUtil.getISO8601DateByStr(device.getUpdateTime())); model.setHkId(device.getParkIndexCode()); model.setHkStatus(Constants.ONE); return model; } private Parks getExistedData(ParkListResponse data, List allList) { if(allList.size()>0){ for(Parks r : allList){ if(StringUtils.equals(r.getHkId(), data.getParkIndexCode())){ //表示未删除 return r; } } } return null; } private void getDeleteList(List allList, List allHkList,List deleteList ,Date date) { if(allList!=null && allList.size()>0){ for(Parks data : allList){ if(isDeletedDevice(data,allHkList)){ data.setIsdeleted(Constants.ONE); data.setEditDate(date); deleteList.add(data); } } } } private boolean isDeletedDevice(Parks device, List allHkList) { if(allHkList.size()>0){ for(ParkListResponse r : allHkList){ if(StringUtils.equals(device.getHkId(), r.getParkIndexCode())){ //表示未删除 return false; } } } return true; } }