From d11ac6ccf903402bf2408c2a9ea07ef40e898945 Mon Sep 17 00:00:00 2001 From: yanyan Date: Thu, 10 Jul 2025 17:56:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/dept/mapper/DeptMapper.java | 4 + .../system/dept/service/DeptServiceImpl.java | 31 ++-- .../notice/controller/NoticeController.java | 17 ++- .../system/notice/service/INoticeService.java | 2 + .../notice/service/NoticeServiceImpl.java | 108 ++++++++++++-- .../resources/mapper/system/DeptMapper.xml | 10 ++ .../resources/mapper/system/NoticeMapper.xml | 9 +- .../code/statistical/overall-analysis.html | 14 +- .../code/statistical/single-analysis.html | 34 +++-- .../resources/templates/system/dept/edit.html | 6 +- .../resources/templates/system/user/edit.html | 8 +- .../resources/templates/system/user/user.html | 8 +- .../EnforcementRegistrationController.java | 2 +- .../StatisticsEnterpriseController.java | 103 ++++++++++---- .../zdxt/code/mapper/Zfztjdm111915Mapper.java | 2 + .../IEnforcementRegistrationService.java | 2 + .../IEnterpriseInformationService.java | 6 + .../service/impl/ComplaintStatisticsImpl.java | 5 + ...forcementInspectionProgramServiceImpl.java | 6 + .../EnforcementRegistrationServiceImpl.java | 13 +- .../EnterpriseInformationServiceImpl.java | 132 +++++++++++++++++- .../impl/StatisticalPaneServiceImpl.java | 9 +- .../impl/Zfztjdm111915ServiceImpl.java | 6 +- .../mapper/ComplaintStatisticsMapper.xml | 9 ++ .../EnforcementInspectionProgramMapper.xml | 18 +++ .../resources/mapper/Zfztjdm111915Mapper.xml | 14 ++ 26 files changed, 494 insertions(+), 84 deletions(-) diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/dept/mapper/DeptMapper.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/dept/mapper/DeptMapper.java index 999026ca..f606bd98 100644 --- a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/dept/mapper/DeptMapper.java +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/dept/mapper/DeptMapper.java @@ -145,6 +145,10 @@ public interface DeptMapper */ List selectChildrenDeptById(String deptId); + List selectSelfAndChildrenById(String deptId); + + List selectDeptByRoleId(Long roleId); + /** * 根据部门类型(in语句),获取所有子部门,id必须传 diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/dept/service/DeptServiceImpl.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/dept/service/DeptServiceImpl.java index 186650da..ff729ad6 100644 --- a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/dept/service/DeptServiceImpl.java +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/dept/service/DeptServiceImpl.java @@ -147,7 +147,7 @@ public class DeptServiceImpl implements IDeptService private List getZtrees(List ztrees) { if (CollectionUtils.isNotEmpty(ztrees)) { - //拿到深圳市 + //添加深圳市节点 Ztree ztree = new Ztree(); ztree.setpId("0"); ztree.setId("0"); @@ -162,6 +162,7 @@ public class DeptServiceImpl implements IDeptService .filter(item -> Objects.equals(item.getDictValue(), "1") || Objects.equals(item.getDictValue(), "2")) .map(item -> { + //添加市值和区的节点 给市值和区绑定深圳市的父节点 Ztree ztree1 = new Ztree(); ztree1.setTitle(item.getDictLabel()); ztree1.setName(item.getDictLabel()); @@ -171,7 +172,7 @@ public class DeptServiceImpl implements IDeptService }).collect(Collectors.toList()); ztrees.addAll(zoneTree); - //给市值和区挂上深圳市 + //绑定区和市直节点 例如给罗湖区的父节点绑定区的节点 给深圳市司法局的父节点绑定市直的节点 ztrees = ztrees.stream() .peek(i -> i.setpId(Objects.equals(i.getZone(), 1) || Objects.equals(i.getZone(), 2) ? String.valueOf(i.getZone()) : i.getpId())) @@ -179,25 +180,35 @@ public class DeptServiceImpl implements IDeptService .collect(Collectors.toList()); + Map map = ztrees.stream() + .filter(item -> Objects.equals(item.getZone(), 2)) + .collect(Collectors.toMap(Ztree::getId, Ztree::getName)); List collect = ztrees.stream() .filter(item -> Objects.equals(item.getZone(), 2)) .map(Ztree::getId).collect(Collectors.toList()); - for (String pid : collect) { + List finalZtrees = ztrees; + map.forEach((pid, value)->{ //给区直挂上区直 Ztree ztree1 = new Ztree(); ztree1.setTitle("区直"); ztree1.setName("区直"); ztree1.setId(pid+"3"); ztree1.setpId(pid); - ztrees.add(ztree1); - // - for (Ztree ztree2 : ztrees) { - if (Objects.equals(ztree2.getZone(), 3) && - StringUtils.isNotEmpty(ztree2.getAncestors()) && ztree2.getAncestors().contains(pid)) { - ztree2.setpId(ztree1.getId()); + finalZtrees.add(ztree1); + //给所有区下面的部门 挂到区-区直下 + for (Ztree ztree2 : finalZtrees) { + if (Objects.equals(ztree2.getZone(), 3)) { + if(StringUtils.isNotEmpty(ztree2.getAncestors()) && ztree2.getAncestors().contains(pid)) { + ztree2.setpId(ztree1.getId()); + }else if (StringUtils.isEmpty(ztree2.getAncestors()) + || collect.stream().noneMatch(i -> ztree2.getAncestors().contains(i))) { + if (ztree2.getName().contains(value.substring(0,2))) { + ztree2.setpId(ztree1.getId()); + } + } } } - } + }); } } return ztrees; diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/controller/NoticeController.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/controller/NoticeController.java index 5b519bc6..6a70f978 100644 --- a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/controller/NoticeController.java +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/controller/NoticeController.java @@ -8,6 +8,8 @@ import java.util.stream.Collectors; import com.zdxt.auth.common.utils.StringUtils; import com.zdxt.auth.common.utils.text.Convert; +import com.zdxt.auth.dto.UserBean; +import com.zdxt.auth.feign.UserApi; import com.zdxt.auth.framework.web.controller.BaseController; import com.zdxt.auth.framework.web.domain.AjaxResult; import com.zdxt.auth.framework.web.page.TableDataInfo; @@ -43,6 +45,9 @@ public class NoticeController extends BaseController @Autowired private IDeptService deptService; + @Autowired + private UserApi userApi; + @RequiresPermissions("system:notice:view") @GetMapping() public String notice() @@ -59,7 +64,7 @@ public class NoticeController extends BaseController public TableDataInfo list(Notice notice) { startPage(); - List list = noticeService.selectNoticeList(notice); + List list = noticeService.selectNoticeListNew(notice); return getDataTable(list); } @@ -140,6 +145,11 @@ public class NoticeController extends BaseController @ResponseBody public AjaxResult editSave(Notice notice) { + UserBean currentUser = userApi.getCurrentUser(); + Notice notice1 = noticeService.selectNoticeById(notice.getNoticeId()); + if (notice1!=null && notice1.getUserId()!=0 && !Objects.equals(notice1.getUserId(),currentUser.getUserId())) { + return error("仅支持创建人修改"); + } return toAjax(noticeService.updateNotice(notice)); } @@ -151,6 +161,11 @@ public class NoticeController extends BaseController @ResponseBody public AjaxResult editNoticeFile(@RequestParam("files") MultipartFile[] files, Notice notice) { + UserBean currentUser = userApi.getCurrentUser(); + Notice notice1 = noticeService.selectNoticeById(notice.getNoticeId()); + if (notice1!=null && notice1.getUserId()!=0 && !Objects.equals(notice1.getUserId(),currentUser.getUserId())) { + return error("仅支持创建人修改"); + } return toAjax(noticeService.editNoticeFile(files, notice)); } diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/service/INoticeService.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/service/INoticeService.java index 67d3f2b9..3172153a 100644 --- a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/service/INoticeService.java +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/service/INoticeService.java @@ -29,6 +29,8 @@ public interface INoticeService */ public List selectNoticeList(Notice notice); + public List selectNoticeListNew(Notice notice); + public List selectNoticeListNoPermission(Notice notice); /** diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/service/NoticeServiceImpl.java b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/service/NoticeServiceImpl.java index 0788d1b6..838d2ce5 100644 --- a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/service/NoticeServiceImpl.java +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/java/com/zdxt/auth/project/system/notice/service/NoticeServiceImpl.java @@ -1,15 +1,18 @@ package com.zdxt.auth.project.system.notice.service; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.zdxt.auth.common.utils.StringUtils; +import com.zdxt.auth.dto.DeptBean; +import com.zdxt.auth.dto.RoleBean; +import com.zdxt.auth.dto.UserBean; import com.zdxt.auth.dto.ZdxtFileBean; import com.zdxt.auth.feign.FileUploadApi; +import com.zdxt.auth.feign.UserApi; import com.zdxt.auth.feign.ZdxtFileCommonApi; import com.zdxt.auth.project.system.dept.mapper.DeptMapper; import com.zdxt.auth.project.system.dept.service.IDeptService; @@ -18,6 +21,8 @@ import com.zdxt.common.zdxtFile.AttFileRespDTO; import com.zdxt.common.zdxtFile.FilePreviewUtilBean; import com.zdxt.common.zdxtFile.ZdxtFileCommon; import com.zdxt.domain.auth.Dept; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zdxt.auth.common.utils.security.ShiroUtils; @@ -47,6 +52,9 @@ public class NoticeServiceImpl implements INoticeService @Autowired private FileUploadApi fileUploadApi; + @Autowired + private UserApi userApi; + /** * 查询公告信息 * @@ -83,6 +91,84 @@ public class NoticeServiceImpl implements INoticeService return noticeMapper.selectNoticeList(notice); } + @Override + public List selectNoticeListNew(Notice notice) { + List checkDept = this.check(notice); + List noticeList = noticeMapper.selectNoticeList(notice); + if (CollectionUtils.isNotEmpty(noticeList) && checkDept != null) { + if (checkDept.size() == 0) { + return new ArrayList<>(); + } + List deptIds = checkDept.stream().map(DeptBean::getDeptId).collect(Collectors.toList()); + noticeList = noticeList.stream().filter(i -> StringUtils.isEmpty(i.getBureauDeptIds()) + || hasIntersection(Arrays.asList(i.getBureauDeptIds().split(",")), deptIds)) + .collect(Collectors.toList()); + } + return noticeList; + } + + + /** + * 判断两个 List 是否存在交集(是否有重复元素) + */ + public static boolean hasIntersection(List list1, List list2) { + Set set1 = new HashSet<>(list1);// O(n) + for (String item : list2) { + if (set1.contains(item)) {// O(1) 平均,O(n) 最坏 + return true; // 找到一个重复项即可返回 + } + } + return false; + } + + + public List check(Notice notice) { + UserBean currentUser = userApi.getCurrentUser(); + List deptBeans = new ArrayList<>(); + if (currentUser.isAdmin()){ + return null; + } + for (RoleBean role : currentUser.getRoles()) { + String dataScope = role.getDataScope(); + if ("1".equals(dataScope)) { + //全部可见 + return null; + }else if ("2".equals(dataScope)) { + //自定义权限 SELECT dept_id, dept_name FROM sys_role_dept WHERE role_id = {} + List depts = deptMapper.selectDeptByRoleId(role.getRoleId()); + if (CollectionUtils.isNotEmpty(depts)){ + for (Dept dept : depts) { + DeptBean deptBean = new DeptBean(); + BeanUtils.copyProperties(dept,deptBean); + deptBeans.add(deptBean); + } + } + } else if ("3".equals(dataScope)) { + //部门数据权限 SELECT dept_id, dept_name FROM sys_dept WHERE dept_id = {} + Dept dept = deptMapper.selectDeptById(currentUser.getDeptId()); + if (Objects.nonNull(dept)){ + DeptBean deptBean = new DeptBean(); + BeanUtils.copyProperties(dept,deptBean); + deptBeans.add(deptBean); + } + } else if ("4".equals(dataScope)) { + //部门及以下数据权限 SELECT dept_id FROM sys_dept WHERE dept_id = '{}' or find_in_set( '{}' , ancestors ) <> 0 + List depts = deptMapper.selectSelfAndChildrenById(currentUser.getDeptId()); + if (CollectionUtils.isNotEmpty(depts)){ + for (Dept dept : depts) { + DeptBean deptBean = new DeptBean(); + BeanUtils.copyProperties(dept,deptBean); + deptBeans.add(deptBean); + } + } + } else if ("5".equals(dataScope)) { + //仅本人数据权限 不给看 + return deptBeans; + } + } + return deptBeans; + } + @Override @DataScope public List selectNoticeListNoPermission(Notice notice) { @@ -110,7 +196,6 @@ public class NoticeServiceImpl implements INoticeService public int insertNotice(Notice notice) { notice.setNoticeId(IdUtil.fastSimpleUUID()); - notice.setCreateBy(ShiroUtils.getLoginName()); //通过部门id获取部门名称 if (StringUtils.isNotEmpty(notice.getBureauDeptIds())) { StringBuilder deptNames = null; @@ -126,8 +211,12 @@ public class NoticeServiceImpl implements INoticeService } } } - notice.setBureauDeptNames(deptNames.toString()); + notice.setBureauDeptNames(deptNames+""); } + UserBean currentUser = userApi.getCurrentUser(); + notice.setCreateBy(currentUser!=null? currentUser.getLoginName() : null); + notice.setUserId(currentUser!=null? currentUser.getUserId() : null); + notice.setDeptId(currentUser!=null? currentUser.getDeptId() : null); return noticeMapper.insertNotice(notice); } @@ -135,7 +224,6 @@ public class NoticeServiceImpl implements INoticeService public int addNotice(MultipartFile[] files, Notice notice) { String busId = IdUtil.fastSimpleUUID(); notice.setNoticeId(busId); - notice.setCreateBy(ShiroUtils.getLoginName()); //通过部门id获取部门名称 if (StringUtils.isNotEmpty(notice.getBureauDeptIds())) { StringBuilder deptNames = null; @@ -151,7 +239,7 @@ public class NoticeServiceImpl implements INoticeService } } } - notice.setBureauDeptNames(deptNames.toString()); + notice.setBureauDeptNames(deptNames + ""); } // 上传文件,并在附件表中添加记录 if (ObjectUtil.isNotEmpty(files)) { @@ -161,6 +249,10 @@ public class NoticeServiceImpl implements INoticeService } } } + UserBean currentUser = userApi.getCurrentUser(); + notice.setCreateBy(currentUser!=null? currentUser.getLoginName() : null); + notice.setUserId(currentUser!=null? currentUser.getUserId() : null); + notice.setDeptId(currentUser!=null? currentUser.getDeptId() : null); return noticeMapper.insertNotice(notice); } @@ -189,7 +281,7 @@ public class NoticeServiceImpl implements INoticeService } } } - notice.setBureauDeptNames(deptNames.toString()); + notice.setBureauDeptNames(deptNames + ""); } return noticeMapper.updateNotice(notice); } diff --git a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/resources/mapper/system/DeptMapper.xml b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/resources/mapper/system/DeptMapper.xml index 6dffd3e6..d5c43aa9 100644 --- a/lib/EmergencyService/zdxtEmergencyAuthService/src/main/resources/mapper/system/DeptMapper.xml +++ b/lib/EmergencyService/zdxtEmergencyAuthService/src/main/resources/mapper/system/DeptMapper.xml @@ -240,6 +240,16 @@ select * from sys_dept where find_in_set(#{deptId}, ancestors) + + + + @@ -82,6 +85,9 @@ and MONTH(c.complaint_time)=#{month} + + ${params.dataScope} + +