|  |  | 
 |  |  | package com.doumee.service.business.impl; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
 |  |  | import com.baomidou.mybatisplus.extension.api.R; | 
 |  |  | import com.doumee.core.constants.ResponseStatus; | 
 |  |  | import com.doumee.core.exception.BusinessException; | 
 |  |  | import com.doumee.core.model.LoginUserInfo; | 
 |  |  | 
 |  |  | import com.doumee.core.erp.model.openapi.response.RoleListResponse; | 
 |  |  | import com.doumee.core.utils.Constants; | 
 |  |  | import com.doumee.core.utils.Utils; | 
 |  |  | import com.doumee.dao.business.DeviceMapper; | 
 |  |  | import com.doumee.dao.business.DeviceRoleMapper; | 
 |  |  | import com.doumee.dao.business.model.Device; | 
 |  |  | import com.doumee.dao.business.model.DeviceRole; | 
 |  |  | import com.doumee.dao.business.model.Member; | 
 |  |  | import com.doumee.dao.admin.response.MemberInfoDTO; | 
 |  |  | import com.doumee.dao.business.*; | 
 |  |  | import com.doumee.dao.business.join.MemberRoleJoinMapper; | 
 |  |  | import com.doumee.dao.business.model.*; | 
 |  |  | import com.doumee.dao.web.response.DeviceRoleVO; | 
 |  |  | import com.doumee.service.business.DeviceRoleService; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
 |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage; | 
 |  |  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
 |  |  | import com.doumee.service.business.MemberService; | 
 |  |  | import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl; | 
 |  |  | import com.github.yulichang.wrapper.MPJLambdaWrapper; | 
 |  |  | import io.swagger.models.auth.In; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.commons.collections.CollectionUtils; | 
 |  |  | import org.apache.commons.lang3.StringUtils; | 
 |  |  | import org.apache.shiro.SecurityUtils; | 
 |  |  | 
 |  |  |  * @date 2023/11/30 15:33 | 
 |  |  |  */ | 
 |  |  | @Service | 
 |  |  | @Slf4j | 
 |  |  | public class DeviceRoleServiceImpl implements DeviceRoleService { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private DeviceRoleMapper deviceRoleMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private MemberService memberService; | 
 |  |  |     private MemberCardMapper memberCardMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private EmpowerMapper empowerMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private DeviceMapper deviceMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private MemberRoleJoinMapper memberRoleMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private MemberMapper memberMapper; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void updateById(DeviceRole deviceRole) { | 
 |  |  |         DeviceRole model = deviceRoleMapper.selectById(deviceRole.getId()); | 
 |  |  |         if(model == null){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         DeviceRole newDeviceRole = null; | 
 |  |  |         if(null != deviceRole.getType()) { | 
 |  |  |             newDeviceRole = getDeviceRole(deviceRole.getType()); | 
 |  |  | 
 |  |  |             update.setIsDefault(Constants.ONE); | 
 |  |  |             deviceRoleMapper.updateById(update); | 
 |  |  |         } | 
 |  |  |         deviceRoleMapper.updateById(deviceRole); | 
 |  |  |        int t = deviceRoleMapper.updateById(deviceRole); | 
 |  |  |        if(t>0){ | 
 |  |  |             Thread tt = new Thread(new Runnable() { | 
 |  |  |                 @Override | 
 |  |  |                 public void run() { | 
 |  |  |                     try { | 
 |  |  |                         startUpdateMemberEmpower(model,deviceRole); | 
 |  |  |                     }catch (Exception e){ | 
 |  |  |                         log.error("======门禁分组修改,更新人员权限失败==="+e.getMessage()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             }); | 
 |  |  |             tt.start(); | 
 |  |  |        } | 
 |  |  |     } | 
 |  |  |     @Override | 
 |  |  |     public  void updateMemberRole(DeviceRole deviceRole) { | 
 |  |  |         deviceRole.setType("2"); | 
 |  |  |         deviceRole.setIsdeleted(Constants.ZERO); | 
 |  |  |         List<DeviceRole> list =findList(deviceRole); | 
 |  |  |         if(list == null || list.size()==0){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         for(DeviceRole model :list){ | 
 |  |  |             updateMemberRoleDO(model); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     public  void updateMemberRoleDO(DeviceRole model) { | 
 |  |  |         if(model.getDoorIds()  == null){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         String[] newIds =StringUtils.defaultString(model.getDoorIds()).split(","); | 
 |  |  |         List<Integer>  allids = getChangeIdsByArray(new String[]{},newIds);//最新设备 | 
 |  |  |         List<MemberRole> memberRoleList = memberRoleMapper.selectList(new QueryWrapper<MemberRole>().lambda() | 
 |  |  |                 .eq(MemberRole::getRoleId,model.getId()) | 
 |  |  |                 .eq(MemberRole::getIsdeleted,Constants.ZERO) | 
 |  |  |         ); | 
 |  |  |         if(memberRoleList!=null && memberRoleList.size()>0) { | 
 |  |  |             int num =1; | 
 |  |  |             for (MemberRole memberRole : memberRoleList) { | 
 |  |  |                 Member member = memberMapper.selectById(memberRole.getMemberId()); | 
 |  |  |                 if(member==null || member.getIsdeleted().equals(Constants.ONE)){ | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 List<Integer>  addIds = new ArrayList<>(); | 
 |  |  |                 for(Integer did : allids){ | 
 |  |  |                     Empower empower = empowerMapper.selectOne(new QueryWrapper<Empower>().lambda() | 
 |  |  |                             .eq(Empower::getMemberId,member.getId()) | 
 |  |  |                             .eq(Empower::getDeviceId,did ) | 
 |  |  |                             .orderByDesc(Empower::getId) | 
 |  |  |                             .last("limit 1")); | 
 |  |  |                     if(empower ==null || Constants.equalsInteger(empower.getIsdeleted(),Constants.ONE)){ | 
 |  |  |                         addIds.add(did); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 try { | 
 |  |  |                     HkSyncOrgUserToHKServiceImpl.dealChangeDeviceRoleEmpower(member,addIds,null,deviceRoleMapper,empowerMapper,deviceMapper); | 
 |  |  |                 }catch (Exception e){ | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                 } | 
 |  |  |                 System.out.println("正在处理【"+model.getName()+"】======门禁数据【"+addIds.size()+"】====进度:【"+num+"|"+memberRoleList.size()+"】"); | 
 |  |  |                 num ++; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 更新该权限下相关的人员最新全新下发 | 
 |  |  |      * @param model | 
 |  |  |      * @param deviceRole | 
 |  |  |      */ | 
 |  |  |     private void startUpdateMemberEmpower(DeviceRole model, DeviceRole deviceRole) { | 
 |  |  |         String[] ids = StringUtils.defaultString(model.getDoorIds()).split(","); | 
 |  |  |         String[] newIds =StringUtils.defaultString(deviceRole.getDoorIds()).split(","); | 
 |  |  |         List<Integer>  delIds = getChangeIdsByArray(newIds,ids);//删除的设备 | 
 |  |  |         List<Integer>  addIds = getChangeIdsByArray(ids,newIds);//最新设备 | 
 |  |  |         if((addIds==null ||addIds.size()==0)&&( delIds ==null || delIds.size() == 0 )){ | 
 |  |  |             //如果没有变化,不做处理 | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         List<Integer>  allids = getChangeIdsByArray(new String[]{},newIds);//最新设备 | 
 |  |  |         List<MemberRole> memberRoleList = memberRoleMapper.selectList(new QueryWrapper<MemberRole>().lambda() | 
 |  |  |                 .eq(MemberRole::getRoleId,model.getId()) | 
 |  |  |                 .eq(MemberRole::getIsdeleted,Constants.ZERO) | 
 |  |  |         ); | 
 |  |  |         if(memberRoleList!=null && memberRoleList.size()>0){ | 
 |  |  |             for(MemberRole memberRole : memberRoleList){ | 
 |  |  |                 //如果有人员授权了该权限 | 
 |  |  |                 Member member = memberMapper.selectById(memberRole.getMemberId()); | 
 |  |  |                 if(member==null || member.getIsdeleted().equals(Constants.ONE)){ | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 MPJLambdaWrapper<MemberRole> queryWrapper = new MPJLambdaWrapper<>(); | 
 |  |  |                 queryWrapper.leftJoin(DeviceRole.class,DeviceRole::getId,MemberRole::getRoleId ); | 
 |  |  |                 queryWrapper.selectAll(MemberRole.class) | 
 |  |  |                         .selectAs(DeviceRole::getDoorIds, MemberRole::getDoorIds) | 
 |  |  |                         .eq(MemberRole::getMemberId,memberRole.getMemberId()) | 
 |  |  |                         .eq(MemberRole::getIsdeleted,Constants.ZERO) | 
 |  |  |                         .ne(MemberRole::getRoleId,deviceRole.getId()); | 
 |  |  |                 List<MemberRole> tLis = memberRoleMapper.selectJoinList(MemberRole.class,queryWrapper); | 
 |  |  |                 List<Integer>  actDelIds = getActChangeDoorIds(tLis,delIds); | 
 |  |  |                 List<Integer>  actAddIds = getActChangeDoorIds(tLis,allids); | 
 |  |  |                 HkSyncOrgUserToHKServiceImpl.dealChangeDeviceRoleEmpower(member,actAddIds,actDelIds,deviceRoleMapper,empowerMapper,deviceMapper); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据用户当前最新的门禁角色,查询实际应该删除或者增加的门禁点权限 | 
 |  |  |      * @param tLis | 
 |  |  |      * @param changeIds | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     private List<Integer> getActChangeDoorIds(List<MemberRole> tLis, List<Integer> changeIds) { | 
 |  |  |         List<Integer> list = new ArrayList<>(); | 
 |  |  |         for(MemberRole memberRole : tLis){ | 
 |  |  |             String[] ids = StringUtils.defaultString(memberRole.getDoorIds()).split(","); | 
 |  |  |             if(ids!=null && ids.length>0){ | 
 |  |  |                 for (String s:ids){ | 
 |  |  |                     list.add(Integer.parseInt(s)); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         List<Integer> actList = new ArrayList<>(); | 
 |  |  |         if(list.size()>0){ | 
 |  |  |             Flag: | 
 |  |  |             for (Integer t : changeIds){ | 
 |  |  |                 for (Integer tt : list){ | 
 |  |  |                     if(Constants.equalsInteger(t,tt)){ | 
 |  |  |                         continue Flag; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 actList.add(t); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return  actList; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private List<Integer> getChangeIdsByArray(String[] ids, String[] newIds) { | 
 |  |  |         List<Integer> list = new ArrayList<>(); | 
 |  |  |         if(newIds!=null){ | 
 |  |  |             FLAG : | 
 |  |  |             for(String s :newIds){ | 
 |  |  |                 for(String s1 :ids){ | 
 |  |  |                     if(StringUtils.equals(s,s1)){ | 
 |  |  |                         continue FLAG; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 list.add(Integer.parseInt(s)); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return list; | 
 |  |  |     } | 
 |  |  |     @Override | 
 |  |  |     public void updateStatusById(DeviceRole deviceRole) { | 
 |  |  |         // 获取之前是否存在默认门禁组 | 
 |  |  | 
 |  |  |         QueryWrapper<DeviceRole> queryWrapper = new QueryWrapper<>(); | 
 |  |  |         Utils.MP.blankToNull(pageWrap.getModel()); | 
 |  |  |         pageWrap.getModel().setIsdeleted(Constants.ZERO); | 
 |  |  |         queryWrapper.select("*,(select count(1) from member_role b where b.isdeleted=0 and b.role_id=device_role.id) as memberNum"); | 
 |  |  |         if (pageWrap.getModel().getId() != null) { | 
 |  |  |             queryWrapper.lambda().eq(DeviceRole::getId, pageWrap.getModel().getId()); | 
 |  |  |         } | 
 |  |  | 
 |  |  |             queryWrapper.lambda().eq(DeviceRole::getRemark, pageWrap.getModel().getRemark()); | 
 |  |  |         } | 
 |  |  |         if (pageWrap.getModel().getName() != null) { | 
 |  |  |             queryWrapper.lambda().eq(DeviceRole::getName, pageWrap.getModel().getName()); | 
 |  |  |             queryWrapper.lambda().like(DeviceRole::getName, pageWrap.getModel().getName()); | 
 |  |  |         } | 
 |  |  |         if (pageWrap.getModel().getIsDefault() != null) { | 
 |  |  |             queryWrapper.lambda().eq(DeviceRole::getIsDefault, pageWrap.getModel().getIsDefault()); | 
 |  |  | 
 |  |  |                 queryWrapper.orderByAsc(sortData.getProperty()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         queryWrapper.lambda().orderByAsc( DeviceRole::getName); | 
 |  |  |         IPage<DeviceRole> newPage = deviceRoleMapper.selectPage(page, queryWrapper); | 
 |  |  |         if(null != newPage && newPage.getRecords().size() > 0) { | 
 |  |  |             List<DeviceRole> deviceRoleList = newPage.getRecords(); | 
 |  |  |             for (DeviceRole dto:deviceRoleList) { | 
 |  |  |           List<DeviceRole> deviceRoleList = newPage.getRecords(); | 
 |  |  |           /*    for (DeviceRole dto:deviceRoleList) { | 
 |  |  |                 Member member = new Member(); | 
 |  |  |                 member.setIsdeleted(Constants.ZERO); | 
 |  |  |                 member.setRoleIdParam("["+dto.getId()+"]"); | 
 |  |  |                 dto.setMemberNum((int) memberService.count(member)); | 
 |  |  |             } | 
 |  |  |                 dto.setMemberNum( memberMapper.selectCount(new QueryWrapper<>(member))); | 
 |  |  |             }*/ | 
 |  |  |             newPage.setRecords(deviceRoleList); | 
 |  |  |         } | 
 |  |  |         return PageData.from(newPage); |