diff --git a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java index f7a0920..1594697 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java +++ b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java @@ -36,18 +36,12 @@ return sysDictMapper.getDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'UserList-'+#deptid") - public List getUserByDeptId(long deptid) - { - return sysDictMapper.getUserByDeptId(deptid); - } @Cacheable(value = "CONSTANT", key = "'simpleDeptName-'+#deptid") public String getSimpleDeptNameById(long deptid) { return sysDictMapper.getSimpleDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'alarmContentName-'+#id") public String getAlarmContentName(int id) { return sysDictMapper.getAlarmContentName(id); diff --git a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java index f7a0920..1594697 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java +++ b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java @@ -36,18 +36,12 @@ return sysDictMapper.getDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'UserList-'+#deptid") - public List getUserByDeptId(long deptid) - { - return sysDictMapper.getUserByDeptId(deptid); - } @Cacheable(value = "CONSTANT", key = "'simpleDeptName-'+#deptid") public String getSimpleDeptNameById(long deptid) { return sysDictMapper.getSimpleDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'alarmContentName-'+#id") public String getAlarmContentName(int id) { return sysDictMapper.getAlarmContentName(id); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java index 7f536b3..ba72039 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java @@ -1,16 +1,12 @@ package com.casic.missiles.modular.alarm.service.impl; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; -import com.casic.missiles.core.application.enums.UserQueryEnum; -import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.util.EhcacheConstant; import com.casic.missiles.modular.alarm.job.DelayJob; @@ -80,6 +76,9 @@ @Resource private IBusWellInfoSupportService busWellInfoService; + @Autowired + private DataScopeBuilder dataScopeBuilder; + @Override public List> jobList(Page> page, String keywords, String beginTime, String endTime, String jobStatus, String alarmType, String alarmContent, DataScope dataScope, Long userId) { alarmContent = converAlarmContent(alarmContent); @@ -333,16 +332,14 @@ if (alarmJob != null) { sendJob(id, alarmJob, userClientViewList);//推送工单至app和pc端 if (StrUtil.isNotBlank(msg)) { - sendAlarm(msg, userClientViewList,alarmJob);//推送告警至app和pc端 + sendAlarm(msg, userClientViewList, alarmJob);//推送告警至app和pc端 } } } } - @Resource - private AbstractPermissionContext iCommonPermissionService; - public void sendAlarm(String msg, List userClientViewList,AlarmJob alarmJob) { + public void sendAlarm(String msg, List userClientViewList, AlarmJob alarmJob) { List clientIds = new ArrayList<>(); List userIds = new ArrayList<>(); for (UserClientView userClientView : userClientViewList) { @@ -364,9 +361,10 @@ logger.info("告警消息app端找不到责任人,未推送:" + msg); } // PC推送,推给信息办 -// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); - Long deptIds= busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); - List userList = EhcacheConstant.retBean().getUserByDeptId(deptIds); +// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); + + Long deptId = busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); + List userList =dataScopeBuilder.DataScopeProvider(deptId); for (User user : userList) { userIds.add(user.getId().toString()); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java index f7a0920..1594697 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java +++ b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java @@ -36,18 +36,12 @@ return sysDictMapper.getDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'UserList-'+#deptid") - public List getUserByDeptId(long deptid) - { - return sysDictMapper.getUserByDeptId(deptid); - } @Cacheable(value = "CONSTANT", key = "'simpleDeptName-'+#deptid") public String getSimpleDeptNameById(long deptid) { return sysDictMapper.getSimpleDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'alarmContentName-'+#id") public String getAlarmContentName(int id) { return sysDictMapper.getAlarmContentName(id); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java index 7f536b3..ba72039 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java @@ -1,16 +1,12 @@ package com.casic.missiles.modular.alarm.service.impl; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; -import com.casic.missiles.core.application.enums.UserQueryEnum; -import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.util.EhcacheConstant; import com.casic.missiles.modular.alarm.job.DelayJob; @@ -80,6 +76,9 @@ @Resource private IBusWellInfoSupportService busWellInfoService; + @Autowired + private DataScopeBuilder dataScopeBuilder; + @Override public List> jobList(Page> page, String keywords, String beginTime, String endTime, String jobStatus, String alarmType, String alarmContent, DataScope dataScope, Long userId) { alarmContent = converAlarmContent(alarmContent); @@ -333,16 +332,14 @@ if (alarmJob != null) { sendJob(id, alarmJob, userClientViewList);//推送工单至app和pc端 if (StrUtil.isNotBlank(msg)) { - sendAlarm(msg, userClientViewList,alarmJob);//推送告警至app和pc端 + sendAlarm(msg, userClientViewList, alarmJob);//推送告警至app和pc端 } } } } - @Resource - private AbstractPermissionContext iCommonPermissionService; - public void sendAlarm(String msg, List userClientViewList,AlarmJob alarmJob) { + public void sendAlarm(String msg, List userClientViewList, AlarmJob alarmJob) { List clientIds = new ArrayList<>(); List userIds = new ArrayList<>(); for (UserClientView userClientView : userClientViewList) { @@ -364,9 +361,10 @@ logger.info("告警消息app端找不到责任人,未推送:" + msg); } // PC推送,推给信息办 -// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); - Long deptIds= busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); - List userList = EhcacheConstant.retBean().getUserByDeptId(deptIds); +// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); + + Long deptId = busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); + List userList =dataScopeBuilder.DataScopeProvider(deptId); for (User user : userList) { userIds.add(user.getId().toString()); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java new file mode 100644 index 0000000..00e8150 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java @@ -0,0 +1,113 @@ +package com.casic.missiles.modular.alarm.service.impl; + +import com.casic.missiles.modular.system.dao.DataScopeMapper; +import com.casic.missiles.modular.system.model.User; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class DataScopeBuilder { + + private final DataScopeMapper dataScopeMapper; + + public DataScopeBuilder(DataScopeMapper dataScopeMapper) { + this.dataScopeMapper = dataScopeMapper; + } + + /** + * 1、所有数据,得到的用户ID + * 2、所属查上级及上级所有部门,得到一个list + * 3、所属本部门 得到list + * 4、本部门自定义的一批部门信息 得到一个list + * + * @retur + */ + public List DataScopeProvider(Long deptId) { + List> userIdDataScopeList = dataScopeMapper.getUserIdDataScope(); + Map>> userDataScopeListMap = userIdDataScopeList.stream() + .collect(Collectors.groupingBy(a -> a.get("scopeType"))); + List userIdList = new ArrayList<>(); + userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); + userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); + List> deptUserList = new ArrayList<>(); + deptUserList.addAll(userDataScopeListMap.get("2")); + deptUserList.addAll(userDataScopeListMap.get("3")); + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + List userList = getUserList(userIdList); + return userList; + } + + /** + * 1、所有数据的用户要发送 + * 2、 + * + * @return + */ + public List getAllUser(List> allUserList) { + List userIdList = new ArrayList<>(); + allUserList.forEach( + userDataScope -> userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))) + ); + return userIdList; + } + + /** + * 1 所有数据的用户要发送 + * + * @return + */ + public List getParentDeptList(List> allUserList, Long deptId) { + List userIdList = new ArrayList<>(); + String tempDeptIds = ""; + List> deptList = dataScopeMapper.getDeptList(); + Map deptMap = deptList.stream().collect( + Collectors.toMap(e -> Long.valueOf(e.get("id")), e -> Long.valueOf(e.get("pid"))) + ); + while (deptId != -1) { + tempDeptIds += "-" + deptId; + deptId = deptMap.get(deptId); + } + final String deptIds = tempDeptIds; + allUserList.forEach( + userDataScope -> { + if (deptIds.contains(String.valueOf(userDataScope.get("deptid")))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + public List customDeptList(List> userList, Long deptId) { + List userIdList = new ArrayList<>(); + userList.forEach( + userDataScope -> { + if (userDataScope.get("dataScope").contains(String.valueOf(deptId))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + private List getUserList(List userIdList) { + List allUserList = dataScopeMapper.getUserList(); + Map usersMap = allUserList.stream().collect( + Collectors.toMap(e -> e.getId(), Function.identity()) + ); + List scopeUserList = new ArrayList<>(); + userIdList.forEach( + userId->{ + if(usersMap.containsKey(userId)){ + scopeUserList.add(usersMap.get(userId)); + } + } + ); + return scopeUserList; + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java index f7a0920..1594697 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java +++ b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java @@ -36,18 +36,12 @@ return sysDictMapper.getDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'UserList-'+#deptid") - public List getUserByDeptId(long deptid) - { - return sysDictMapper.getUserByDeptId(deptid); - } @Cacheable(value = "CONSTANT", key = "'simpleDeptName-'+#deptid") public String getSimpleDeptNameById(long deptid) { return sysDictMapper.getSimpleDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'alarmContentName-'+#id") public String getAlarmContentName(int id) { return sysDictMapper.getAlarmContentName(id); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java index 7f536b3..ba72039 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java @@ -1,16 +1,12 @@ package com.casic.missiles.modular.alarm.service.impl; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; -import com.casic.missiles.core.application.enums.UserQueryEnum; -import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.util.EhcacheConstant; import com.casic.missiles.modular.alarm.job.DelayJob; @@ -80,6 +76,9 @@ @Resource private IBusWellInfoSupportService busWellInfoService; + @Autowired + private DataScopeBuilder dataScopeBuilder; + @Override public List> jobList(Page> page, String keywords, String beginTime, String endTime, String jobStatus, String alarmType, String alarmContent, DataScope dataScope, Long userId) { alarmContent = converAlarmContent(alarmContent); @@ -333,16 +332,14 @@ if (alarmJob != null) { sendJob(id, alarmJob, userClientViewList);//推送工单至app和pc端 if (StrUtil.isNotBlank(msg)) { - sendAlarm(msg, userClientViewList,alarmJob);//推送告警至app和pc端 + sendAlarm(msg, userClientViewList, alarmJob);//推送告警至app和pc端 } } } } - @Resource - private AbstractPermissionContext iCommonPermissionService; - public void sendAlarm(String msg, List userClientViewList,AlarmJob alarmJob) { + public void sendAlarm(String msg, List userClientViewList, AlarmJob alarmJob) { List clientIds = new ArrayList<>(); List userIds = new ArrayList<>(); for (UserClientView userClientView : userClientViewList) { @@ -364,9 +361,10 @@ logger.info("告警消息app端找不到责任人,未推送:" + msg); } // PC推送,推给信息办 -// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); - Long deptIds= busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); - List userList = EhcacheConstant.retBean().getUserByDeptId(deptIds); +// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); + + Long deptId = busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); + List userList =dataScopeBuilder.DataScopeProvider(deptId); for (User user : userList) { userIds.add(user.getId().toString()); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java new file mode 100644 index 0000000..00e8150 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java @@ -0,0 +1,113 @@ +package com.casic.missiles.modular.alarm.service.impl; + +import com.casic.missiles.modular.system.dao.DataScopeMapper; +import com.casic.missiles.modular.system.model.User; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class DataScopeBuilder { + + private final DataScopeMapper dataScopeMapper; + + public DataScopeBuilder(DataScopeMapper dataScopeMapper) { + this.dataScopeMapper = dataScopeMapper; + } + + /** + * 1、所有数据,得到的用户ID + * 2、所属查上级及上级所有部门,得到一个list + * 3、所属本部门 得到list + * 4、本部门自定义的一批部门信息 得到一个list + * + * @retur + */ + public List DataScopeProvider(Long deptId) { + List> userIdDataScopeList = dataScopeMapper.getUserIdDataScope(); + Map>> userDataScopeListMap = userIdDataScopeList.stream() + .collect(Collectors.groupingBy(a -> a.get("scopeType"))); + List userIdList = new ArrayList<>(); + userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); + userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); + List> deptUserList = new ArrayList<>(); + deptUserList.addAll(userDataScopeListMap.get("2")); + deptUserList.addAll(userDataScopeListMap.get("3")); + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + List userList = getUserList(userIdList); + return userList; + } + + /** + * 1、所有数据的用户要发送 + * 2、 + * + * @return + */ + public List getAllUser(List> allUserList) { + List userIdList = new ArrayList<>(); + allUserList.forEach( + userDataScope -> userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))) + ); + return userIdList; + } + + /** + * 1 所有数据的用户要发送 + * + * @return + */ + public List getParentDeptList(List> allUserList, Long deptId) { + List userIdList = new ArrayList<>(); + String tempDeptIds = ""; + List> deptList = dataScopeMapper.getDeptList(); + Map deptMap = deptList.stream().collect( + Collectors.toMap(e -> Long.valueOf(e.get("id")), e -> Long.valueOf(e.get("pid"))) + ); + while (deptId != -1) { + tempDeptIds += "-" + deptId; + deptId = deptMap.get(deptId); + } + final String deptIds = tempDeptIds; + allUserList.forEach( + userDataScope -> { + if (deptIds.contains(String.valueOf(userDataScope.get("deptid")))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + public List customDeptList(List> userList, Long deptId) { + List userIdList = new ArrayList<>(); + userList.forEach( + userDataScope -> { + if (userDataScope.get("dataScope").contains(String.valueOf(deptId))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + private List getUserList(List userIdList) { + List allUserList = dataScopeMapper.getUserList(); + Map usersMap = allUserList.stream().collect( + Collectors.toMap(e -> e.getId(), Function.identity()) + ); + List scopeUserList = new ArrayList<>(); + userIdList.forEach( + userId->{ + if(usersMap.containsKey(userId)){ + scopeUserList.add(usersMap.get(userId)); + } + } + ); + return scopeUserList; + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java new file mode 100644 index 0000000..1d1d0a2 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.User; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public interface DataScopeMapper { + + List> getDeptList(); + + List getUserList(); + + List> getUserIdDataScope(); + + List getUserList(@Param("userIds") String userIds); + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java index f7a0920..1594697 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java +++ b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java @@ -36,18 +36,12 @@ return sysDictMapper.getDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'UserList-'+#deptid") - public List getUserByDeptId(long deptid) - { - return sysDictMapper.getUserByDeptId(deptid); - } @Cacheable(value = "CONSTANT", key = "'simpleDeptName-'+#deptid") public String getSimpleDeptNameById(long deptid) { return sysDictMapper.getSimpleDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'alarmContentName-'+#id") public String getAlarmContentName(int id) { return sysDictMapper.getAlarmContentName(id); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java index 7f536b3..ba72039 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java @@ -1,16 +1,12 @@ package com.casic.missiles.modular.alarm.service.impl; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; -import com.casic.missiles.core.application.enums.UserQueryEnum; -import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.util.EhcacheConstant; import com.casic.missiles.modular.alarm.job.DelayJob; @@ -80,6 +76,9 @@ @Resource private IBusWellInfoSupportService busWellInfoService; + @Autowired + private DataScopeBuilder dataScopeBuilder; + @Override public List> jobList(Page> page, String keywords, String beginTime, String endTime, String jobStatus, String alarmType, String alarmContent, DataScope dataScope, Long userId) { alarmContent = converAlarmContent(alarmContent); @@ -333,16 +332,14 @@ if (alarmJob != null) { sendJob(id, alarmJob, userClientViewList);//推送工单至app和pc端 if (StrUtil.isNotBlank(msg)) { - sendAlarm(msg, userClientViewList,alarmJob);//推送告警至app和pc端 + sendAlarm(msg, userClientViewList, alarmJob);//推送告警至app和pc端 } } } } - @Resource - private AbstractPermissionContext iCommonPermissionService; - public void sendAlarm(String msg, List userClientViewList,AlarmJob alarmJob) { + public void sendAlarm(String msg, List userClientViewList, AlarmJob alarmJob) { List clientIds = new ArrayList<>(); List userIds = new ArrayList<>(); for (UserClientView userClientView : userClientViewList) { @@ -364,9 +361,10 @@ logger.info("告警消息app端找不到责任人,未推送:" + msg); } // PC推送,推给信息办 -// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); - Long deptIds= busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); - List userList = EhcacheConstant.retBean().getUserByDeptId(deptIds); +// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); + + Long deptId = busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); + List userList =dataScopeBuilder.DataScopeProvider(deptId); for (User user : userList) { userIds.add(user.getId().toString()); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java new file mode 100644 index 0000000..00e8150 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java @@ -0,0 +1,113 @@ +package com.casic.missiles.modular.alarm.service.impl; + +import com.casic.missiles.modular.system.dao.DataScopeMapper; +import com.casic.missiles.modular.system.model.User; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class DataScopeBuilder { + + private final DataScopeMapper dataScopeMapper; + + public DataScopeBuilder(DataScopeMapper dataScopeMapper) { + this.dataScopeMapper = dataScopeMapper; + } + + /** + * 1、所有数据,得到的用户ID + * 2、所属查上级及上级所有部门,得到一个list + * 3、所属本部门 得到list + * 4、本部门自定义的一批部门信息 得到一个list + * + * @retur + */ + public List DataScopeProvider(Long deptId) { + List> userIdDataScopeList = dataScopeMapper.getUserIdDataScope(); + Map>> userDataScopeListMap = userIdDataScopeList.stream() + .collect(Collectors.groupingBy(a -> a.get("scopeType"))); + List userIdList = new ArrayList<>(); + userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); + userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); + List> deptUserList = new ArrayList<>(); + deptUserList.addAll(userDataScopeListMap.get("2")); + deptUserList.addAll(userDataScopeListMap.get("3")); + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + List userList = getUserList(userIdList); + return userList; + } + + /** + * 1、所有数据的用户要发送 + * 2、 + * + * @return + */ + public List getAllUser(List> allUserList) { + List userIdList = new ArrayList<>(); + allUserList.forEach( + userDataScope -> userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))) + ); + return userIdList; + } + + /** + * 1 所有数据的用户要发送 + * + * @return + */ + public List getParentDeptList(List> allUserList, Long deptId) { + List userIdList = new ArrayList<>(); + String tempDeptIds = ""; + List> deptList = dataScopeMapper.getDeptList(); + Map deptMap = deptList.stream().collect( + Collectors.toMap(e -> Long.valueOf(e.get("id")), e -> Long.valueOf(e.get("pid"))) + ); + while (deptId != -1) { + tempDeptIds += "-" + deptId; + deptId = deptMap.get(deptId); + } + final String deptIds = tempDeptIds; + allUserList.forEach( + userDataScope -> { + if (deptIds.contains(String.valueOf(userDataScope.get("deptid")))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + public List customDeptList(List> userList, Long deptId) { + List userIdList = new ArrayList<>(); + userList.forEach( + userDataScope -> { + if (userDataScope.get("dataScope").contains(String.valueOf(deptId))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + private List getUserList(List userIdList) { + List allUserList = dataScopeMapper.getUserList(); + Map usersMap = allUserList.stream().collect( + Collectors.toMap(e -> e.getId(), Function.identity()) + ); + List scopeUserList = new ArrayList<>(); + userIdList.forEach( + userId->{ + if(usersMap.containsKey(userId)){ + scopeUserList.add(usersMap.get(userId)); + } + } + ); + return scopeUserList; + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java new file mode 100644 index 0000000..1d1d0a2 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.User; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public interface DataScopeMapper { + + List> getDeptList(); + + List getUserList(); + + List> getUserIdDataScope(); + + List getUserList(@Param("userIds") String userIds); + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java index cecb025..5ca3c4a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java @@ -31,8 +31,6 @@ String getDeptNameById(@Param("deptid") long deptid); - List getUserByDeptId(@Param("deptid") long deptid); - String getSimpleDeptNameById(@Param("deptid") long deptid); String getAlarmTypeNameByCodeNum(@Param("alarmType") String alarmType); diff --git a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java index f7a0920..1594697 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java +++ b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java @@ -36,18 +36,12 @@ return sysDictMapper.getDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'UserList-'+#deptid") - public List getUserByDeptId(long deptid) - { - return sysDictMapper.getUserByDeptId(deptid); - } @Cacheable(value = "CONSTANT", key = "'simpleDeptName-'+#deptid") public String getSimpleDeptNameById(long deptid) { return sysDictMapper.getSimpleDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'alarmContentName-'+#id") public String getAlarmContentName(int id) { return sysDictMapper.getAlarmContentName(id); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java index 7f536b3..ba72039 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java @@ -1,16 +1,12 @@ package com.casic.missiles.modular.alarm.service.impl; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; -import com.casic.missiles.core.application.enums.UserQueryEnum; -import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.util.EhcacheConstant; import com.casic.missiles.modular.alarm.job.DelayJob; @@ -80,6 +76,9 @@ @Resource private IBusWellInfoSupportService busWellInfoService; + @Autowired + private DataScopeBuilder dataScopeBuilder; + @Override public List> jobList(Page> page, String keywords, String beginTime, String endTime, String jobStatus, String alarmType, String alarmContent, DataScope dataScope, Long userId) { alarmContent = converAlarmContent(alarmContent); @@ -333,16 +332,14 @@ if (alarmJob != null) { sendJob(id, alarmJob, userClientViewList);//推送工单至app和pc端 if (StrUtil.isNotBlank(msg)) { - sendAlarm(msg, userClientViewList,alarmJob);//推送告警至app和pc端 + sendAlarm(msg, userClientViewList, alarmJob);//推送告警至app和pc端 } } } } - @Resource - private AbstractPermissionContext iCommonPermissionService; - public void sendAlarm(String msg, List userClientViewList,AlarmJob alarmJob) { + public void sendAlarm(String msg, List userClientViewList, AlarmJob alarmJob) { List clientIds = new ArrayList<>(); List userIds = new ArrayList<>(); for (UserClientView userClientView : userClientViewList) { @@ -364,9 +361,10 @@ logger.info("告警消息app端找不到责任人,未推送:" + msg); } // PC推送,推给信息办 -// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); - Long deptIds= busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); - List userList = EhcacheConstant.retBean().getUserByDeptId(deptIds); +// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); + + Long deptId = busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); + List userList =dataScopeBuilder.DataScopeProvider(deptId); for (User user : userList) { userIds.add(user.getId().toString()); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java new file mode 100644 index 0000000..00e8150 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java @@ -0,0 +1,113 @@ +package com.casic.missiles.modular.alarm.service.impl; + +import com.casic.missiles.modular.system.dao.DataScopeMapper; +import com.casic.missiles.modular.system.model.User; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class DataScopeBuilder { + + private final DataScopeMapper dataScopeMapper; + + public DataScopeBuilder(DataScopeMapper dataScopeMapper) { + this.dataScopeMapper = dataScopeMapper; + } + + /** + * 1、所有数据,得到的用户ID + * 2、所属查上级及上级所有部门,得到一个list + * 3、所属本部门 得到list + * 4、本部门自定义的一批部门信息 得到一个list + * + * @retur + */ + public List DataScopeProvider(Long deptId) { + List> userIdDataScopeList = dataScopeMapper.getUserIdDataScope(); + Map>> userDataScopeListMap = userIdDataScopeList.stream() + .collect(Collectors.groupingBy(a -> a.get("scopeType"))); + List userIdList = new ArrayList<>(); + userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); + userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); + List> deptUserList = new ArrayList<>(); + deptUserList.addAll(userDataScopeListMap.get("2")); + deptUserList.addAll(userDataScopeListMap.get("3")); + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + List userList = getUserList(userIdList); + return userList; + } + + /** + * 1、所有数据的用户要发送 + * 2、 + * + * @return + */ + public List getAllUser(List> allUserList) { + List userIdList = new ArrayList<>(); + allUserList.forEach( + userDataScope -> userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))) + ); + return userIdList; + } + + /** + * 1 所有数据的用户要发送 + * + * @return + */ + public List getParentDeptList(List> allUserList, Long deptId) { + List userIdList = new ArrayList<>(); + String tempDeptIds = ""; + List> deptList = dataScopeMapper.getDeptList(); + Map deptMap = deptList.stream().collect( + Collectors.toMap(e -> Long.valueOf(e.get("id")), e -> Long.valueOf(e.get("pid"))) + ); + while (deptId != -1) { + tempDeptIds += "-" + deptId; + deptId = deptMap.get(deptId); + } + final String deptIds = tempDeptIds; + allUserList.forEach( + userDataScope -> { + if (deptIds.contains(String.valueOf(userDataScope.get("deptid")))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + public List customDeptList(List> userList, Long deptId) { + List userIdList = new ArrayList<>(); + userList.forEach( + userDataScope -> { + if (userDataScope.get("dataScope").contains(String.valueOf(deptId))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + private List getUserList(List userIdList) { + List allUserList = dataScopeMapper.getUserList(); + Map usersMap = allUserList.stream().collect( + Collectors.toMap(e -> e.getId(), Function.identity()) + ); + List scopeUserList = new ArrayList<>(); + userIdList.forEach( + userId->{ + if(usersMap.containsKey(userId)){ + scopeUserList.add(usersMap.get(userId)); + } + } + ); + return scopeUserList; + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java new file mode 100644 index 0000000..1d1d0a2 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.User; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public interface DataScopeMapper { + + List> getDeptList(); + + List getUserList(); + + List> getUserIdDataScope(); + + List getUserList(@Param("userIds") String userIds); + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java index cecb025..5ca3c4a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java @@ -31,8 +31,6 @@ String getDeptNameById(@Param("deptid") long deptid); - List getUserByDeptId(@Param("deptid") long deptid); - String getSimpleDeptNameById(@Param("deptid") long deptid); String getAlarmTypeNameByCodeNum(@Param("alarmType") String alarmType); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml index 52bb600..6284eb3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml @@ -83,7 +83,7 @@ JOIN bus_device_well rdv ON ar.DEVICE_ID = rdv.DEVICE_ID LEFT JOIN alarm_job aj ON ar.JOB_ID = aj.ID LEFT JOIN bus_well_info bwi ON ar.WELL_CODE= bwi.WELL_CODE - WHERE ar.STATUS = '1' AND rdv.VALID='1' + WHERE rdv.VALID='1' AND ar.STATUS = #{status} diff --git a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java index f7a0920..1594697 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java +++ b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java @@ -36,18 +36,12 @@ return sysDictMapper.getDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'UserList-'+#deptid") - public List getUserByDeptId(long deptid) - { - return sysDictMapper.getUserByDeptId(deptid); - } @Cacheable(value = "CONSTANT", key = "'simpleDeptName-'+#deptid") public String getSimpleDeptNameById(long deptid) { return sysDictMapper.getSimpleDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'alarmContentName-'+#id") public String getAlarmContentName(int id) { return sysDictMapper.getAlarmContentName(id); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java index 7f536b3..ba72039 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java @@ -1,16 +1,12 @@ package com.casic.missiles.modular.alarm.service.impl; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; -import com.casic.missiles.core.application.enums.UserQueryEnum; -import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.util.EhcacheConstant; import com.casic.missiles.modular.alarm.job.DelayJob; @@ -80,6 +76,9 @@ @Resource private IBusWellInfoSupportService busWellInfoService; + @Autowired + private DataScopeBuilder dataScopeBuilder; + @Override public List> jobList(Page> page, String keywords, String beginTime, String endTime, String jobStatus, String alarmType, String alarmContent, DataScope dataScope, Long userId) { alarmContent = converAlarmContent(alarmContent); @@ -333,16 +332,14 @@ if (alarmJob != null) { sendJob(id, alarmJob, userClientViewList);//推送工单至app和pc端 if (StrUtil.isNotBlank(msg)) { - sendAlarm(msg, userClientViewList,alarmJob);//推送告警至app和pc端 + sendAlarm(msg, userClientViewList, alarmJob);//推送告警至app和pc端 } } } } - @Resource - private AbstractPermissionContext iCommonPermissionService; - public void sendAlarm(String msg, List userClientViewList,AlarmJob alarmJob) { + public void sendAlarm(String msg, List userClientViewList, AlarmJob alarmJob) { List clientIds = new ArrayList<>(); List userIds = new ArrayList<>(); for (UserClientView userClientView : userClientViewList) { @@ -364,9 +361,10 @@ logger.info("告警消息app端找不到责任人,未推送:" + msg); } // PC推送,推给信息办 -// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); - Long deptIds= busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); - List userList = EhcacheConstant.retBean().getUserByDeptId(deptIds); +// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); + + Long deptId = busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); + List userList =dataScopeBuilder.DataScopeProvider(deptId); for (User user : userList) { userIds.add(user.getId().toString()); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java new file mode 100644 index 0000000..00e8150 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java @@ -0,0 +1,113 @@ +package com.casic.missiles.modular.alarm.service.impl; + +import com.casic.missiles.modular.system.dao.DataScopeMapper; +import com.casic.missiles.modular.system.model.User; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class DataScopeBuilder { + + private final DataScopeMapper dataScopeMapper; + + public DataScopeBuilder(DataScopeMapper dataScopeMapper) { + this.dataScopeMapper = dataScopeMapper; + } + + /** + * 1、所有数据,得到的用户ID + * 2、所属查上级及上级所有部门,得到一个list + * 3、所属本部门 得到list + * 4、本部门自定义的一批部门信息 得到一个list + * + * @retur + */ + public List DataScopeProvider(Long deptId) { + List> userIdDataScopeList = dataScopeMapper.getUserIdDataScope(); + Map>> userDataScopeListMap = userIdDataScopeList.stream() + .collect(Collectors.groupingBy(a -> a.get("scopeType"))); + List userIdList = new ArrayList<>(); + userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); + userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); + List> deptUserList = new ArrayList<>(); + deptUserList.addAll(userDataScopeListMap.get("2")); + deptUserList.addAll(userDataScopeListMap.get("3")); + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + List userList = getUserList(userIdList); + return userList; + } + + /** + * 1、所有数据的用户要发送 + * 2、 + * + * @return + */ + public List getAllUser(List> allUserList) { + List userIdList = new ArrayList<>(); + allUserList.forEach( + userDataScope -> userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))) + ); + return userIdList; + } + + /** + * 1 所有数据的用户要发送 + * + * @return + */ + public List getParentDeptList(List> allUserList, Long deptId) { + List userIdList = new ArrayList<>(); + String tempDeptIds = ""; + List> deptList = dataScopeMapper.getDeptList(); + Map deptMap = deptList.stream().collect( + Collectors.toMap(e -> Long.valueOf(e.get("id")), e -> Long.valueOf(e.get("pid"))) + ); + while (deptId != -1) { + tempDeptIds += "-" + deptId; + deptId = deptMap.get(deptId); + } + final String deptIds = tempDeptIds; + allUserList.forEach( + userDataScope -> { + if (deptIds.contains(String.valueOf(userDataScope.get("deptid")))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + public List customDeptList(List> userList, Long deptId) { + List userIdList = new ArrayList<>(); + userList.forEach( + userDataScope -> { + if (userDataScope.get("dataScope").contains(String.valueOf(deptId))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + private List getUserList(List userIdList) { + List allUserList = dataScopeMapper.getUserList(); + Map usersMap = allUserList.stream().collect( + Collectors.toMap(e -> e.getId(), Function.identity()) + ); + List scopeUserList = new ArrayList<>(); + userIdList.forEach( + userId->{ + if(usersMap.containsKey(userId)){ + scopeUserList.add(usersMap.get(userId)); + } + } + ); + return scopeUserList; + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java new file mode 100644 index 0000000..1d1d0a2 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.User; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public interface DataScopeMapper { + + List> getDeptList(); + + List getUserList(); + + List> getUserIdDataScope(); + + List getUserList(@Param("userIds") String userIds); + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java index cecb025..5ca3c4a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java @@ -31,8 +31,6 @@ String getDeptNameById(@Param("deptid") long deptid); - List getUserByDeptId(@Param("deptid") long deptid); - String getSimpleDeptNameById(@Param("deptid") long deptid); String getAlarmTypeNameByCodeNum(@Param("alarmType") String alarmType); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml index 52bb600..6284eb3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml @@ -83,7 +83,7 @@ JOIN bus_device_well rdv ON ar.DEVICE_ID = rdv.DEVICE_ID LEFT JOIN alarm_job aj ON ar.JOB_ID = aj.ID LEFT JOIN bus_well_info bwi ON ar.WELL_CODE= bwi.WELL_CODE - WHERE ar.STATUS = '1' AND rdv.VALID='1' + WHERE rdv.VALID='1' AND ar.STATUS = #{status} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataScopeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataScopeMapper.xml new file mode 100644 index 0000000..d4a1c98 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataScopeMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java index f7a0920..1594697 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java +++ b/casic-alarm/src/main/java/com/casic/missiles/core/util/EhcacheConstant.java @@ -36,18 +36,12 @@ return sysDictMapper.getDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'UserList-'+#deptid") - public List getUserByDeptId(long deptid) - { - return sysDictMapper.getUserByDeptId(deptid); - } @Cacheable(value = "CONSTANT", key = "'simpleDeptName-'+#deptid") public String getSimpleDeptNameById(long deptid) { return sysDictMapper.getSimpleDeptNameById(deptid); } - @Cacheable(value = "CONSTANT", key = "'alarmContentName-'+#id") public String getAlarmContentName(int id) { return sysDictMapper.getAlarmContentName(id); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java index 7f536b3..ba72039 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmJobServiceImpl.java @@ -1,16 +1,12 @@ package com.casic.missiles.modular.alarm.service.impl; -import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; -import com.casic.missiles.core.application.enums.UserQueryEnum; -import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.util.EhcacheConstant; import com.casic.missiles.modular.alarm.job.DelayJob; @@ -80,6 +76,9 @@ @Resource private IBusWellInfoSupportService busWellInfoService; + @Autowired + private DataScopeBuilder dataScopeBuilder; + @Override public List> jobList(Page> page, String keywords, String beginTime, String endTime, String jobStatus, String alarmType, String alarmContent, DataScope dataScope, Long userId) { alarmContent = converAlarmContent(alarmContent); @@ -333,16 +332,14 @@ if (alarmJob != null) { sendJob(id, alarmJob, userClientViewList);//推送工单至app和pc端 if (StrUtil.isNotBlank(msg)) { - sendAlarm(msg, userClientViewList,alarmJob);//推送告警至app和pc端 + sendAlarm(msg, userClientViewList, alarmJob);//推送告警至app和pc端 } } } } - @Resource - private AbstractPermissionContext iCommonPermissionService; - public void sendAlarm(String msg, List userClientViewList,AlarmJob alarmJob) { + public void sendAlarm(String msg, List userClientViewList, AlarmJob alarmJob) { List clientIds = new ArrayList<>(); List userIds = new ArrayList<>(); for (UserClientView userClientView : userClientViewList) { @@ -364,9 +361,10 @@ logger.info("告警消息app端找不到责任人,未推送:" + msg); } // PC推送,推给信息办 -// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); - Long deptIds= busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); - List userList = EhcacheConstant.retBean().getUserByDeptId(deptIds); +// List userList = permissionService.getRoleUsersByTips("1178242562491285506", null, false); + + Long deptId = busWellInfoService.getDeptIdsByDevcode(alarmJob.getDevcode()); + List userList =dataScopeBuilder.DataScopeProvider(deptId); for (User user : userList) { userIds.add(user.getId().toString()); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java new file mode 100644 index 0000000..00e8150 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/DataScopeBuilder.java @@ -0,0 +1,113 @@ +package com.casic.missiles.modular.alarm.service.impl; + +import com.casic.missiles.modular.system.dao.DataScopeMapper; +import com.casic.missiles.modular.system.model.User; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class DataScopeBuilder { + + private final DataScopeMapper dataScopeMapper; + + public DataScopeBuilder(DataScopeMapper dataScopeMapper) { + this.dataScopeMapper = dataScopeMapper; + } + + /** + * 1、所有数据,得到的用户ID + * 2、所属查上级及上级所有部门,得到一个list + * 3、所属本部门 得到list + * 4、本部门自定义的一批部门信息 得到一个list + * + * @retur + */ + public List DataScopeProvider(Long deptId) { + List> userIdDataScopeList = dataScopeMapper.getUserIdDataScope(); + Map>> userDataScopeListMap = userIdDataScopeList.stream() + .collect(Collectors.groupingBy(a -> a.get("scopeType"))); + List userIdList = new ArrayList<>(); + userIdList.addAll(getAllUser(userDataScopeListMap.get("1"))); + userIdList.addAll(customDeptList(userDataScopeListMap.get("4"), deptId)); + List> deptUserList = new ArrayList<>(); + deptUserList.addAll(userDataScopeListMap.get("2")); + deptUserList.addAll(userDataScopeListMap.get("3")); + userIdList.addAll(getParentDeptList(deptUserList, deptId)); + List userList = getUserList(userIdList); + return userList; + } + + /** + * 1、所有数据的用户要发送 + * 2、 + * + * @return + */ + public List getAllUser(List> allUserList) { + List userIdList = new ArrayList<>(); + allUserList.forEach( + userDataScope -> userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))) + ); + return userIdList; + } + + /** + * 1 所有数据的用户要发送 + * + * @return + */ + public List getParentDeptList(List> allUserList, Long deptId) { + List userIdList = new ArrayList<>(); + String tempDeptIds = ""; + List> deptList = dataScopeMapper.getDeptList(); + Map deptMap = deptList.stream().collect( + Collectors.toMap(e -> Long.valueOf(e.get("id")), e -> Long.valueOf(e.get("pid"))) + ); + while (deptId != -1) { + tempDeptIds += "-" + deptId; + deptId = deptMap.get(deptId); + } + final String deptIds = tempDeptIds; + allUserList.forEach( + userDataScope -> { + if (deptIds.contains(String.valueOf(userDataScope.get("deptid")))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + public List customDeptList(List> userList, Long deptId) { + List userIdList = new ArrayList<>(); + userList.forEach( + userDataScope -> { + if (userDataScope.get("dataScope").contains(String.valueOf(deptId))) { + userIdList.add(Long.valueOf(String.valueOf(userDataScope.get("userId")))); + } + } + ); + return userIdList; + } + + private List getUserList(List userIdList) { + List allUserList = dataScopeMapper.getUserList(); + Map usersMap = allUserList.stream().collect( + Collectors.toMap(e -> e.getId(), Function.identity()) + ); + List scopeUserList = new ArrayList<>(); + userIdList.forEach( + userId->{ + if(usersMap.containsKey(userId)){ + scopeUserList.add(usersMap.get(userId)); + } + } + ); + return scopeUserList; + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java new file mode 100644 index 0000000..1d1d0a2 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/DataScopeMapper.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.dao; + +import com.casic.missiles.modular.system.model.User; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public interface DataScopeMapper { + + List> getDeptList(); + + List getUserList(); + + List> getUserIdDataScope(); + + List getUserList(@Param("userIds") String userIds); + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java index cecb025..5ca3c4a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/SysDictMapper.java @@ -31,8 +31,6 @@ String getDeptNameById(@Param("deptid") long deptid); - List getUserByDeptId(@Param("deptid") long deptid); - String getSimpleDeptNameById(@Param("deptid") long deptid); String getAlarmTypeNameByCodeNum(@Param("alarmType") String alarmType); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml index 52bb600..6284eb3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRecordsMapper.xml @@ -83,7 +83,7 @@ JOIN bus_device_well rdv ON ar.DEVICE_ID = rdv.DEVICE_ID LEFT JOIN alarm_job aj ON ar.JOB_ID = aj.ID LEFT JOIN bus_well_info bwi ON ar.WELL_CODE= bwi.WELL_CODE - WHERE ar.STATUS = '1' AND rdv.VALID='1' + WHERE rdv.VALID='1' AND ar.STATUS = #{status} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataScopeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataScopeMapper.xml new file mode 100644 index 0000000..d4a1c98 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataScopeMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/SysDictMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/SysDictMapper.xml index 253565e..818a0fc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/SysDictMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/SysDictMapper.xml @@ -86,11 +86,6 @@ select FULL_NAME as "deptName" from sys_dept where id =#{deptid}; - + SELECT srr.userid + FROM sys_role sr + JOIN sys_ru_relation srr ON srr.roleid=sr.id + WHERE sr.data_scope_type='1' + + + + + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/SysDictMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/SysDictMapper.xml index 253565e..818a0fc 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/SysDictMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/SysDictMapper.xml @@ -86,11 +86,6 @@ select FULL_NAME as "deptName" from sys_dept where id =#{deptid}; - - SELECT datascope AS deptIds - FROM sys_role - where DEPT_ID= (SELECT bwi.deptid + SELECT bwi.deptid FROM bus_device bd JOIN bus_device_well bdw ON bdw.device_id=bd.id JOIN bus_well_info bwi ON bwi.id=bdw.well_id - WHERE bd.devcode=#{devcode}) + WHERE bd.devcode=#{devcode}