package com.doumee.service.business.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.respose.AcsDeviceInfoResponse; import com.doumee.core.haikang.model.param.respose.AcsDeviceListResponse; import com.doumee.core.haikang.service.HKService; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.DeviceMapper; import com.doumee.dao.business.model.Device; import com.doumee.service.business.DeviceService; import com.doumee.service.business.HkSyncService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 设备信息表Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service public class HkSyncServiceImpl implements HkSyncService { @Autowired private DeviceMapper deviceMapper; @Autowired private HKService hkService; @Override // @Async public String syncHkDevices(AcsDeviceListRequest param){ List deleteList = new ArrayList<>(); List addList = new ArrayList<>(); List editList = new ArrayList<>(); List allHkList = new ArrayList<>(); Date date = new Date(); //查询全部门禁设备数据 List allList = deviceMapper.selectList(null); boolean hasNext = true; int curTotal = 0; while (hasNext){ //分页遍历循环查询所有门禁设备数据 param = new AcsDeviceListRequest(); param.setPageNo(1); param.setPageSize(10000); BaseResponse response = hkService.acsDeviceList(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } AcsDeviceListResponse r = response.getData(); curTotal += 10000; if(curTotal >= r.getTotal()){ hasNext = false; } List tlist = r.getList(); } //判断获取删除的门禁设备,逻辑删除 getAddAndEditList(allList,allHkList,addList,editList,date); getDeleteList(allList,allHkList,deleteList,date); if(deleteList.size()>0){ //逻辑删除 for(Device d : deleteList){ deviceMapper.updateById(d); } } if(addList.size()>0){ deviceMapper.insertBatchSomeColumn(addList); } if(editList.size()>0){ for(Device d : editList){ deviceMapper.updateById(d); } } return "同步门禁数据:新增【"+addList.size()+"】条,更新【"+editList.size()+"】条,删除【"+deleteList.size()+"】条"; } private void getAddAndEditList(List allList, List allHkList, List addList, List editList, Date date) { if(allHkList!=null && allHkList.size()>0){ for(AcsDeviceInfoResponse device : allHkList){ Device model = getExistedDevice(device,allList); if(model !=null){ //如果已存在,则更新数据 model = initDeviceByHkData(model,device,date); editList.add(model); }else{ //如果不存在,则新增数据 model = new Device(); model = initDeviceByHkData(model,device,date); addList.add(model); } } } } /** * 初始化海康入库数据 * @param model * @param device * @param date * @return */ private Device initDeviceByHkData(Device model, AcsDeviceInfoResponse device,Date date) { model.setIsdeleted(Constants.ZERO); model.setIp(device.getIp()); model.setHkDate(date); model.setCreateDate(DateUtil.StringToDate2(device.getCreateTime())); model.setEditDate(DateUtil.StringToDate2(device.getUpdateTime())); model.setNo(device.getDeviceCode()); model.setHkId(device.getIndexCode()); model.setName(device.getName()); model.setHkStatus(Constants.ONE); model.setType(Constants.ZERO); model.setResourceType(device.getResourceType()); model.setDevTypeCode(device.getDevTypeCode()); model.setManufature(device.getManufacturer()); model.setPort(device.getPort()); return model; } private Device getExistedDevice(AcsDeviceInfoResponse device, List allList) { if(allList.size()>0){ for(Device r : allList){ if(StringUtils.equals(r.getHkId(), device.getIndexCode())){ //表示未删除 return r; } } } return null; } private void getDeleteList(List allList, List allHkList,List deleteList ,Date date) { if(allList!=null && allList.size()>0){ for(Device device : allList){ if(isDeletedDevice(device,allHkList)){ device.setIsdeleted(Constants.ONE); device.setEditDate(date); deleteList.add(device); } } } } private boolean isDeletedDevice(Device device, List allHkList) { if(allHkList.size()>0){ for(AcsDeviceInfoResponse r : allHkList){ if(StringUtils.equals(device.getHkId(), r.getIndexCode())){ //表示未删除 return false; } } } return true; } }