package com.doumee.service.business.impl.hksync; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.PrivilegeGroupRequest; import com.doumee.core.haikang.model.param.respose.PrivilegeGroupInfoResponse; import com.doumee.core.haikang.model.param.respose.PrivilegeGroupListResponse; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.dao.business.DeviceRoleMapper; import com.doumee.dao.business.model.DeviceRole; 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 HkSyncPrivilegeServiceImpl extends HkSyncBaseServiceImpl { @Autowired private DeviceRoleMapper deviceRoleMapper; /** * 同步海康访客组权限数据 * @param param * @return */ @Override // @Async public String syncPrivilege(PrivilegeGroupRequest param){ if(Constants.DEALING_HK_SYNCDEVICE){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "同步任务正在执行哦,请稍后查看结果!") ; } Constants.DEALING_HK_SYNCDEVICE =true; try { List deleteList = new ArrayList<>(); List addList = new ArrayList<>(); List editList = new ArrayList<>(); List allHkList = new ArrayList<>(); Date date = new Date(); //查询全部现有数据,只管理同步 访客组 List types = new ArrayList<>(); types.add(Constants.DOOR_ROLE_TYPE.fk); types.add(Constants.DOOR_ROLE_TYPE.lw); List allList = deviceRoleMapper.selectList(new QueryWrapper().lambda().in(DeviceRole::getType,types).eq(DeviceRole::getIsdeleted,Constants.ZERO)); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 param = new PrivilegeGroupRequest(); param.setPageNo(curPage); param.setPageSize(100); // BaseResponse response = HKService.privilegeGroup(param); // if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ // response = HKService.privilegIccmeGroup(param);//接口V1版本不存在,调用iccm版本接口 // } BaseResponse response = HKService.privilegIccmeGroup(param);//接口V1版本不存在,调用iccm版本接口 if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } PrivilegeGroupListResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allHkList.addAll(r.getList()); } curPage ++; } /** * 获取增删改数据集合 */ getDataChangeList(allList,allHkList,addList,editList,deleteList,date); if(deleteList.size()>0){ //逻辑删除 for(DeviceRole d : deleteList){ deviceRoleMapper.updateById(d); } } if(addList.size()>0){ deviceRoleMapper.insert(addList); } if(editList.size()>0){ for(DeviceRole d : editList){ deviceRoleMapper.updateById(d); } } return "同步数据:新增【"+addList.size()+"】条,更新【"+editList.size()+"】条,删除【"+deleteList.size()+"】条"; }catch (Exception e){ e.printStackTrace(); throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "同步失败!"); }finally { Constants.DEALING_HK_SYNCDEVICE =false; } } private void getDataChangeList(List allList, List allHkList, List addList, List editList,List deleteList, Date date) { if(allHkList!=null && allHkList.size()>0){ for(PrivilegeGroupInfoResponse device : allHkList){ DeviceRole model = getExistedData(device,allList); if(model !=null){ //如果已存在,则更新数据 model = initDataByHkData(model,device,date); if(allHkList.size()==1){ model.setIsDefault(Constants.ZERO); } editList.add(model); }else{ //如果不存在,则新增数据 model = new DeviceRole(); model = initDataByHkData(model,device,date); if(allHkList.size()==1){ model.setIsDefault(Constants.ZERO); } addList.add(model); } } } //判断获取删除的门禁设备,逻辑删除 getDeleteList(allList,allHkList,deleteList,date); } /** * 初始化海康入库数据 * @param model * @param device * @param date * @return */ private DeviceRole initDataByHkData(DeviceRole model, PrivilegeGroupInfoResponse device,Date date) { model.setIsdeleted(Constants.ZERO); model.setHkId(device.getPrivilegeGroupId()); model.setName(device.getPrivilegeGroupName()); model.setHkStatus(Constants.ONE); model.setStatus(Constants.ONE); model.setIsDefault(device.getIsDefault()); model.setType(String.valueOf(Constants.ONE)); return model; } private DeviceRole getExistedData(PrivilegeGroupInfoResponse device, List allList) { if(allList.size()>0){ for(DeviceRole r : allList){ if(StringUtils.equals(r.getHkId(), device.getPrivilegeGroupId())){ //表示未删除 return r; } } } return null; } private void getDeleteList(List allList, List allHkList,List deleteList ,Date date) { if(allList!=null && allList.size()>0){ for(DeviceRole device : allList){ if(isDeletedData(device,allHkList)){ device.setIsdeleted(Constants.ONE); device.setEditDate(date); deleteList.add(device); } } } } private boolean isDeletedData(DeviceRole device, List allHkList) { if(allHkList.size()>0){ for(PrivilegeGroupInfoResponse r : allHkList){ if(StringUtils.equals(device.getHkId(), r.getPrivilegeGroupId())){ //表示未删除 return false; } } } return true; } }