From 4afd1e14b669f271e8660c3c6425230041ff06ff Mon Sep 17 00:00:00 2001 From: ganhao Date: Mon, 25 May 2026 11:06:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=A7=E6=B3=95?= =?UTF-8?q?=E8=AF=84=E4=BB=B7=E4=B8=8E=E8=AE=A1=E5=88=92=E7=9A=84=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/commonenum/MsgSourceTypeEnum.java | 53 ++++++++++ .../enforcement/AppEnfEvaluateController.java | 16 +++ ...nforcementInspectionProgramController.java | 56 +++++------ .../EnforcementRegistrationInfoVo.java | 11 +++ .../mapper/EnforcementRegistrationMapper.java | 9 ++ .../mapper/SysMessageViewLogMapper.java | 19 ++++ .../service/ISysMessageViewLogService.java | 19 ++++ ...forcementEducationServicesServiceImpl.java | 37 +------ ...forcementInspectionProgramServiceImpl.java | 58 ++++++++--- .../EnforcementRegistrationServiceImpl.java | 51 +++++++++- .../impl/SysMessageViewLogServiceImpl.java | 98 ++++++++++++++++++- .../EnforcementRegistrationMapper.xml | 11 +++ .../SysMessageViewLogMapper.xml | 30 ++++++ 13 files changed, 390 insertions(+), 78 deletions(-) create mode 100755 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/commonenum/MsgSourceTypeEnum.java diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/commonenum/MsgSourceTypeEnum.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/commonenum/MsgSourceTypeEnum.java new file mode 100755 index 00000000..3e823039 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/commonenum/MsgSourceTypeEnum.java @@ -0,0 +1,53 @@ +package com.zdxt.enforcementcode.common.commonenum; + +/** + * 消息来源枚举 + * @author liaoz + */ +public enum MsgSourceTypeEnum { + + /** + * 普法服务 + */ + PFFF(1, "普法服务"), + + /** + * 执法评价 + */ + ZFPJ(2, "执法评价"); + + private Integer key; + private String value; + + MsgSourceTypeEnum(Integer key, String value) { + this.value = value; + this.key = key; + } + + public String getValue() { + return value; + } + + public Integer getKey() { + return key; + } + + + /** + * 根据value获取description + * @description + * + * @createDate 2017年11月28日 + * @param key + * @return + */ + public static String getValueByKey(String key) { + MsgSourceTypeEnum[] enums = MsgSourceTypeEnum.values(); + for (int i = 0; i < enums.length; i++) { + if (enums[i].getKey().equals(key)) { + return enums[i].getValue(); + } + } + return ""; + } +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfEvaluateController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfEvaluateController.java index 14cab357..0538699b 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfEvaluateController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfEvaluateController.java @@ -1,9 +1,11 @@ package com.zdxt.enforcementcode.controller.app.enforcement; +import com.zdxt.enforcementcode.common.commonenum.MsgSourceTypeEnum; import com.zdxt.enforcementcode.domain.bo.EnforcementRegistrationQueryBo; import com.zdxt.enforcementcode.domain.vo.enterprise.EnforcementRegistrationDetailVo; import com.zdxt.enforcementcode.domain.vo.enterprise.EnforcementRegistrationListVo; import com.zdxt.enforcementcode.service.IEnforcementRegistrationService; +import com.zdxt.enforcementcode.service.ISysMessageViewLogService; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.mybatis.core.page.PageQuery; @@ -29,6 +31,7 @@ public class AppEnfEvaluateController extends BaseController { private final IEnforcementRegistrationService enforcementRegistrationService; + private final ISysMessageViewLogService sysMessageViewLogService; /** * 执法端-执法评价(分页) */ @@ -45,7 +48,20 @@ public class AppEnfEvaluateController extends BaseController { @ResponseBody public R queryDetailById(String id){ EnforcementRegistrationDetailVo detailVo = enforcementRegistrationService.queryDetailById(id); + if (detailVo != null) { + sysMessageViewLogService.insertViewLog(id, MsgSourceTypeEnum.ZFPJ.getKey()); // 2-执法评价 + } return R.ok(detailVo); } + + /** + * 统计当前执法评价未读个数 + */ + @GetMapping("/unreadCount") + public R getUnreadCount() { + Long unreadCount = sysMessageViewLogService.countUnreadEvaluate(); + return R.ok(unreadCount); + } + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementInspectionProgramController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementInspectionProgramController.java index 2da16483..e1f1074b 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementInspectionProgramController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementInspectionProgramController.java @@ -25,7 +25,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; /** - * 执法检查计划 + * 执法端-执法检查计划 * * @author Lion Li * @date 2026-04-17 @@ -38,40 +38,38 @@ public class AppEnforcementInspectionProgramController extends BaseController { private final IEnforcementInspectionProgramService enforcementInspectionProgramService; +// /** +// * 执法端-查询执法检查计划列表 +// */ +// @GetMapping("/list") +// public TableDataInfo list(EnforcementInspectionProgramBo bo, PageQuery pageQuery) { +// return enforcementInspectionProgramService.queryPageList(bo, pageQuery); +// } +// +// /** +// * 导出执法检查计划列表 +// */ +// @Log(title = "执法检查计划", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(EnforcementInspectionProgramBo bo, HttpServletResponse response) { +// List list = enforcementInspectionProgramService.queryList(bo); +// ExcelUtil.exportExcel(list, "执法检查计划", EnforcementInspectionProgramVo.class, response); +// } +// +// /** - * 查询执法检查计划列表 + * 执法端-查询执法检查计划列表(支持复杂查询条件) */ -// @SaCheckPermission("enforcementcode:inspectionProgram:list") - @GetMapping("/list") - public TableDataInfo list(EnforcementInspectionProgramBo bo, PageQuery pageQuery) { - return enforcementInspectionProgramService.queryPageList(bo, pageQuery); - } - - /** - * 导出执法检查计划列表 - */ -// @SaCheckPermission("enforcementcode:inspectionProgram:export") - @Log(title = "执法检查计划", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(EnforcementInspectionProgramBo bo, HttpServletResponse response) { - List list = enforcementInspectionProgramService.queryList(bo); - ExcelUtil.exportExcel(list, "执法检查计划", EnforcementInspectionProgramVo.class, response); - } - - - /** - * 查询执法检查计划列表(支持复杂查询条件) - */ -// @SaCheckPermission("enforcementcode:inspectionProgram:list") @GetMapping("/selectInspectionProgramList") public TableDataInfo selectInspectionProgramList(EnforcementInspectionProgramBo bo, PageQuery pageQuery) { return enforcementInspectionProgramService.selectEnforcementInspectionProgramPage(bo, pageQuery); } /** - * 查询计划列表(包含权限控制) + * 执法端-查询计划列表(消息通知包含权限控制) + * 自己单位 + * 公开 */ -// @SaCheckPermission("enforcementcode:inspectionProgram:list") @GetMapping("/queryListNoPermission") public TableDataInfo queryListNoPermission(EnforcementInspectionProgramBo bo, PageQuery pageQuery) { String deptId = LoginHelper.getDeptId(); @@ -85,7 +83,6 @@ public class AppEnforcementInspectionProgramController extends BaseController { * * @param id 主键 */ -// @SaCheckPermission("enforcementcode:inspectionProgram:query") @GetMapping("/getInfo") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable String id) { @@ -95,7 +92,6 @@ public class AppEnforcementInspectionProgramController extends BaseController { /** * 新增执法检查计划 */ -// @SaCheckPermission("enforcementcode:inspectionProgram:add") @Log(title = "执法检查计划", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() @@ -106,7 +102,6 @@ public class AppEnforcementInspectionProgramController extends BaseController { /** * 修改执法检查计划 */ -// @SaCheckPermission("enforcementcode:inspectionProgram:edit") @Log(title = "执法检查计划", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() @@ -119,9 +114,8 @@ public class AppEnforcementInspectionProgramController extends BaseController { * * @param ids 主键串 */ -// @SaCheckPermission("enforcementcode:inspectionProgram:remove") @Log(title = "执法检查计划", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") + @DeleteMapping("remove") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable String[] ids) { return toAjax(enforcementInspectionProgramService.deleteWithValidByIds(List.of(ids), true)); diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/EnforcementRegistrationInfoVo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/EnforcementRegistrationInfoVo.java index c3e15e26..a64cf346 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/EnforcementRegistrationInfoVo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/enterprise/EnforcementRegistrationInfoVo.java @@ -5,6 +5,7 @@ import lombok.Data; import java.io.Serial; import java.util.Date; +import java.util.List; /** * 企业端-执法登记记录对象 enforcement_registration @@ -283,6 +284,16 @@ public class EnforcementRegistrationInfoVo { */ private Long isRealUnion; + /** + * 执法人员1展示文本(姓名+执法证号) + */ + private String lawEnforcerDisplay; + + /** + * 其他执法人员展示列表(姓名+执法证号) + */ + private List lawEnforcer2List; + /** * 创建部门 */ diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java index 39e40ad4..713243ed 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnforcementRegistrationMapper.java @@ -68,4 +68,13 @@ public interface EnforcementRegistrationMapper extends BaseMapperPlus selectEnforcementRegistrationList(@Param("bo") EnforcementRegistrationBo bo,@Param("page") Page page); + /** + * 统计当前用户作为执法人员的执法登记总数 + * (包含执法人员1和执法人员2) + * + * @param userId 用户ID + * @return 执法登记总数 + */ + Long countByLawEnforcerId(@Param("userId") Long userId); + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SysMessageViewLogMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SysMessageViewLogMapper.java index e5e0f147..9d207a42 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SysMessageViewLogMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SysMessageViewLogMapper.java @@ -3,6 +3,7 @@ package com.zdxt.enforcementcode.mapper; import com.zdxt.enforcementcode.domain.bean.SysMessageViewLog; import com.zdxt.enforcementcode.domain.vo.SysMessageViewLogVo; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -14,4 +15,22 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface SysMessageViewLogMapper extends BaseMapperPlus { + /** + * 统计当前用户已读的消息数量 + * + * @param userId 用户ID + * @param sourceType 来源类型:1-普法消息 2-执法评价 + * @return 已读数量 + */ + Long countReadByUserIdAndSourceType(@Param("userId") Long userId, @Param("sourceType") Integer sourceType); + + /** + * 统计当前用户的未读执法评价数量 + * (存在于 enforcement_registration 但不存在于 sys_message_view_log 的记录数) + * + * @param userId 用户ID + * @param sourceType 来源类型:2-执法评价 + * @return 未读数量 + */ + Long countUnreadByUserIdAndSourceType(@Param("userId") Long userId, @Param("sourceType") Integer sourceType); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISysMessageViewLogService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISysMessageViewLogService.java index 0ded3714..84300a95 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISysMessageViewLogService.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISysMessageViewLogService.java @@ -65,4 +65,23 @@ public interface ISysMessageViewLogService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 插入消息查看记录(公共方法) + * + * @param sourceId 来源表ID + * @param sourceType 来源表类型:1-普法消息 2-执法评价 + */ + void insertViewLog(String sourceId, Integer sourceType); + + /** + * 统计当前登录用户的未读消息数量 + *

+ * 计算公式:总数 - 已读数 = 未读数 + * - 总数:当前用户在 enforcement_registration 表中作为执法人员1或执法人员2的记录数 + * - 已读数:sys_message_view_log 表中存在当前用户ID + sourceType=2 的记录数 + * + * @return 未读数量 + */ + Long countUnreadEvaluate(); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementEducationServicesServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementEducationServicesServiceImpl.java index c6953205..81a2a4a9 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementEducationServicesServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementEducationServicesServiceImpl.java @@ -1,5 +1,6 @@ package com.zdxt.enforcementcode.service.impl; +import com.zdxt.enforcementcode.common.commonenum.MsgSourceTypeEnum; import com.zdxt.enforcementcode.common.commonenum.PlatformTypeEnums; import com.zdxt.enforcementcode.domain.bean.EnforcementEducationServices; import com.zdxt.enforcementcode.service.ISysMessageViewLogService; @@ -12,13 +13,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.stereotype.Service; import com.zdxt.enforcementcode.domain.bo.EnforcementEducationServicesBo; import com.zdxt.enforcementcode.domain.vo.EnforcementEducationServicesVo; import com.zdxt.enforcementcode.mapper.EnforcementEducationServicesMapper; import com.zdxt.enforcementcode.service.IEnforcementEducationServicesService; -import org.dromara.common.satoken.utils.LoginHelper; -import com.zdxt.enforcementcode.domain.bo.SysMessageViewLogBo; import java.util.ArrayList; import java.util.List; @@ -53,38 +53,9 @@ public class EnforcementEducationServicesServiceImpl implements IEnforcementEduc public EnforcementEducationServicesVo queryById(String id){ EnforcementEducationServicesVo vo = baseMapper.selectVoById(id); - // 插入查看记录 + // 插入查看记录(调用公共方法) if (vo != null) { - try { - // 检查是否登录 - if (!LoginHelper.isLogin()) { - log.warn("用户未登录,跳过插入查看记录: id={}", id); - return vo; - } - - SysMessageViewLogBo viewLogBo = new SysMessageViewLogBo(); - viewLogBo.setSourceId(id); - viewLogBo.setSourceType(1); // 1-普法消息 - - Long userId = LoginHelper.getUserId(); - String username = LoginHelper.getUsername(); - String deptId = LoginHelper.getDeptId(); - Integer platformType = LoginHelper.getPlatformType(); - - log.debug("获取登录用户信息: userId={}, username={}, deptId={}, platformType={}", - userId, username, deptId, platformType); - - viewLogBo.setCreateBy(userId); - viewLogBo.setCreateByName(username); - viewLogBo.setCreateDept(deptId); - viewLogBo.setIsDelete(0); // 0=否 - viewLogBo.setPlatformType(platformType); - viewLogBo.setCompanyId(deptId); - - sysMessageViewLogService.insertByBo(viewLogBo); - } catch (Exception e) { - log.error("插入查看记录失败: id={}", id, e); - } + sysMessageViewLogService.insertViewLog(id, MsgSourceTypeEnum.PFFF.getKey()); // 1-普法消息 } return vo; diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java index 431af745..f6096bbc 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementInspectionProgramServiceImpl.java @@ -25,6 +25,8 @@ import com.zdxt.enforcementcode.service.IEnforcementInspectionProgramService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.Collections; +import java.util.stream.Collectors; /** * 执法检查计划Service业务层处理 @@ -145,15 +147,31 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp public TableDataInfo selectEnforcementInspectionProgramPage(EnforcementInspectionProgramBo bo, PageQuery pageQuery) { Page result = baseMapper.selectEnforcementInspectionProgramPage(pageQuery.build(), bo); - // 为每个计划查询关联的文件列表 + // 批量查询关联的文件列表(优化 N+1 查询问题) if (result.getRecords() != null && !result.getRecords().isEmpty()) { - result.getRecords().forEach(vo -> { + // 1. 收集所有计划ID + List planIds = result.getRecords().stream() + .map(EnforcementInspectionProgramVo::getId) + .filter(StringUtils::isNotBlank) + .toList(); + + // 2. 一次性查询所有计划关联的文件 + if (!planIds.isEmpty()) { LambdaQueryWrapper fileLqw = Wrappers.lambdaQuery(); - fileLqw.eq(ZdxtFile::getBusinessId, vo.getId()); + fileLqw.in(ZdxtFile::getBusinessId, planIds); fileLqw.eq(ZdxtFile::getIsDelete2, 0); // 只查询未删除的文件 - List fileList = zdxtFileMapper.selectVoList(fileLqw); - vo.setFileList(fileList); - }); + List allFiles = zdxtFileMapper.selectVoList(fileLqw); + + // 3. 按 businessId 分组,构建 Map + Map> filesByPlanId = allFiles.stream() + .collect(Collectors.groupingBy(ZdxtFileVo::getBusinessId)); + + // 4. 为每个计划设置对应的文件列表 + result.getRecords().forEach(vo -> { + List fileList = filesByPlanId.getOrDefault(vo.getId(), Collections.emptyList()); + vo.setFileList(fileList); + }); + } } return TableDataInfo.build(result); @@ -192,15 +210,31 @@ public class EnforcementInspectionProgramServiceImpl implements IEnforcementInsp public TableDataInfo selectPlanPage(EnforcementInspectionProgramBo bo, PageQuery pageQuery) { Page result = baseMapper.selectPlanPage(pageQuery.build(), bo); - // 为每个计划查询关联的文件列表 + // 批量查询关联的文件列表(优化 N+1 查询问题) if (result.getRecords() != null && !result.getRecords().isEmpty()) { - result.getRecords().forEach(vo -> { + // 1. 收集所有计划ID + List planIds = result.getRecords().stream() + .map(EnforcementInspectionProgramVo::getId) + .filter(StringUtils::isNotBlank) + .toList(); + + // 2. 一次性查询所有计划关联的文件 + if (!planIds.isEmpty()) { LambdaQueryWrapper fileLqw = Wrappers.lambdaQuery(); - fileLqw.eq(ZdxtFile::getBusinessId, vo.getId()); + fileLqw.in(ZdxtFile::getBusinessId, planIds); fileLqw.eq(ZdxtFile::getIsDelete2, 0); // 只查询未删除的文件 - List fileList = zdxtFileMapper.selectVoList(fileLqw); - vo.setFileList(fileList); - }); + List allFiles = zdxtFileMapper.selectVoList(fileLqw); + + // 3. 按 businessId 分组,构建 Map + Map> filesByPlanId = allFiles.stream() + .collect(Collectors.groupingBy(ZdxtFileVo::getBusinessId)); + + // 4. 为每个计划设置对应的文件列表 + result.getRecords().forEach(vo -> { + List fileList = filesByPlanId.getOrDefault(vo.getId(), Collections.emptyList()); + vo.setFileList(fileList); + }); + } } return TableDataInfo.build(result); diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java index 6cf6ac64..7180274a 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnforcementRegistrationServiceImpl.java @@ -510,7 +510,56 @@ public class EnforcementRegistrationServiceImpl implements IEnforcementRegistrat detailVo.setEnterpriseEvaluateInfoVo(enterpriseEvaluateInfoVo); } } - // TODO: 2026/5/7 执法人员二需要处理 + + //执法人员格式化(参考 queryEnforcementRegistrationPageList 方法) + if (registrationVo != null) { + // 1. 收集所有用户ID(执法人员1 + 执法人员2) + Set allUserIds = new HashSet<>(); + if (StringUtils.isNotBlank(registrationVo.getLawEnforcerId())) { + try { allUserIds.add(Convert.toLong(registrationVo.getLawEnforcerId())); } catch (Exception ignored) {} + } + if (StringUtils.isNotBlank(registrationVo.getLawEnforcerIdTwo())) { + for (String idStr : registrationVo.getLawEnforcerIdTwo().split(",")) { + try { allUserIds.add(Convert.toLong(idStr.trim())); } catch (Exception ignored) {} + } + } + + // 2. 批量查询所有用户 + Map userMap = new HashMap<>(); + if (CollUtil.isNotEmpty(allUserIds)) { + List users = sysUserMapper.selectList( + new LambdaQueryWrapper() + .select(SysUser::getUserId, SysUser::getUserName, SysUser::getLawCertificateNum, SysUser::getPhonenumber) + .in(SysUser::getUserId, allUserIds) + ); + userMap = users.stream().collect(Collectors.toMap(SysUser::getUserId, u -> u, (a, b) -> a)); + } + + // 3. 执法人员1格式化展示 + if (StringUtils.isNotBlank(registrationVo.getLawEnforcerId())) { + try { + SysUser user = userMap.get(Convert.toLong(registrationVo.getLawEnforcerId())); + if (user != null) { + infoVo.setLawEnforcerDisplay(formatEnforcerDisplay(user)); + } + } catch (Exception ignored) {} + } + + // 4. 执法人员2列表格式化展示 + if (StringUtils.isNotBlank(registrationVo.getLawEnforcerIdTwo())) { + List lawTwoList = new ArrayList<>(); + for (String idStr : registrationVo.getLawEnforcerIdTwo().split(",")) { + try { + SysUser user = userMap.get(Convert.toLong(idStr.trim())); + if (user != null) { + lawTwoList.add(formatEnforcerDisplay(user)); + } + } catch (Exception ignored) {} + } + infoVo.setLawEnforcer2List(lawTwoList); + } + } + return detailVo; } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SysMessageViewLogServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SysMessageViewLogServiceImpl.java index d0d278d9..dd4c88ba 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SysMessageViewLogServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SysMessageViewLogServiceImpl.java @@ -1,6 +1,10 @@ package com.zdxt.enforcementcode.service.impl; +import cn.hutool.core.util.StrUtil; +import com.zdxt.enforcementcode.common.commonenum.MsgSourceTypeEnum; import com.zdxt.enforcementcode.domain.bean.SysMessageViewLog; +import com.zdxt.enforcementcode.domain.bo.SysMessageViewLogBo; +import com.zdxt.enforcementcode.mapper.EnforcementRegistrationMapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -10,8 +14,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.stereotype.Service; -import com.zdxt.enforcementcode.domain.bo.SysMessageViewLogBo; import com.zdxt.enforcementcode.domain.vo.SysMessageViewLogVo; import com.zdxt.enforcementcode.mapper.SysMessageViewLogMapper; import com.zdxt.enforcementcode.service.ISysMessageViewLogService; @@ -32,6 +36,7 @@ import java.util.Collection; public class SysMessageViewLogServiceImpl implements ISysMessageViewLogService { private final SysMessageViewLogMapper baseMapper; + private final EnforcementRegistrationMapper enforcementRegistrationMapper; /** * 查询系统消息浏览 @@ -138,4 +143,95 @@ public class SysMessageViewLogServiceImpl implements ISysMessageViewLogService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 插入消息查看记录(公共方法) + * 用于在查询详情时自动记录用户查看行为 + * + * @param sourceId 来源表ID + * @param sourceType 来源表类型:1-普法消息 2-执法评价 + */ + @Override + public void insertViewLog(String sourceId, Integer sourceType) { + // 参数校验 + if (StrUtil.isBlank(sourceId) || sourceType == null) { + log.warn("插入查看记录失败:参数为空, sourceId={}, sourceType={}", sourceId, sourceType); + return; + } + + try { + // 检查是否登录 + if (!LoginHelper.isLogin()) { + log.warn("用户未登录,跳过插入查看记录: sourceId={}", sourceId); + return; + } + + // 构建查看记录对象 + SysMessageViewLogBo viewLogBo = new SysMessageViewLogBo(); + viewLogBo.setSourceId(sourceId); + viewLogBo.setSourceType(sourceType); + + // 获取登录用户信息 + Long userId = LoginHelper.getUserId(); + String username = LoginHelper.getUsername(); + String deptId = LoginHelper.getDeptId(); + Integer platformType = LoginHelper.getPlatformType(); + + log.debug("获取登录用户信息: userId={}, username={}, deptId={}, platformType={}", + userId, username, deptId, platformType); + + // 设置创建者信息 + viewLogBo.setCreateBy(userId); + viewLogBo.setCreateByName(username); + viewLogBo.setCreateDept(deptId); + viewLogBo.setIsDelete(0); // 0=否 + viewLogBo.setPlatformType(platformType); + viewLogBo.setCompanyId(deptId); + + // 插入查看记录 + this.insertByBo(viewLogBo); + log.debug("插入查看记录成功: sourceId={}, sourceType={}, userId={}", sourceId, sourceType, userId); + } catch (Exception e) { + log.error("插入查看记录失败: sourceId={}, sourceType={}", sourceId, sourceType, e); + } + } + + /** + * 统计当前登录用户的执法评价未读数量 + *

+ * 计算逻辑:存在于 enforcement_registration 表中但不存在于 sys_message_view_log 表中的记录数 + * - 条件1:当前用户在 enforcement_registration 表中作为执法人员1或执法人员2 + * - 条件2:该记录在 sys_message_view_log 表中不存在(create_by=当前用户ID AND source_type=2) + * + * @return 未读数量 + */ + @Override + public Long countUnreadEvaluate() { + try { + // 检查是否登录 + if (!LoginHelper.isLogin()) { + log.warn("用户未登录,无法统计未读数量"); + return 0L; + } + + // 获取当前登录用户ID + Long userId = LoginHelper.getUserId(); + if (userId == null) { + log.warn("当前用户ID为空,无法统计未读数量"); + return 0L; + } + + // 直接统计未读数(存在于 enforcement_registration 但不存在于 sys_message_view_log 的记录数) + Long unreadCount = baseMapper.countUnreadByUserIdAndSourceType(userId, MsgSourceTypeEnum.ZFPJ.getKey()); + if (unreadCount == null) { + unreadCount = 0L; + } + + log.info("用户 {} 的执法评价未读数量: {}", userId, unreadCount); + return unreadCount; + } catch (Exception e) { + log.error("统计执法评价未读数量失败", e); + return 0L; + } + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml index 315534a4..545eed96 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml @@ -566,4 +566,15 @@ order by t.num desc + + + diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SysMessageViewLogMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SysMessageViewLogMapper.xml index 800aa197..f292185d 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SysMessageViewLogMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SysMessageViewLogMapper.xml @@ -3,4 +3,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + + + + + From 2bcd6ce445c61718b8864c0ad78adce4faaa11cc Mon Sep 17 00:00:00 2001 From: niujiyi <18272501226@163.com> Date: Mon, 25 May 2026 15:19:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=89=A7=E6=B3=95=E7=AB=AF-=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=85=A8=E5=B8=82=E6=9C=AC=E5=8D=95=E4=BD=8D=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enforcement/AppEnforcementRegistrationController.java | 3 ++- .../enforcementcode/domain/bo/EnforcementRegistrationBo.java | 5 +++++ .../mapper/enforcementcode/EnforcementRegistrationMapper.xml | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementRegistrationController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementRegistrationController.java index 563855ea..3cfdf6f7 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementRegistrationController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnforcementRegistrationController.java @@ -101,11 +101,12 @@ public class AppEnforcementRegistrationController extends BaseController { /** * 执法端-查询执法记录-全市-本单位 */ + @SaIgnore @GetMapping("/queryList") @ResponseBody public R queryList(EnforcementRegistrationBo bo, PageQuery pageQuery) { // dateType本单位 0 全市 1 - if (Objects.nonNull(bo.getUserId()) && bo.getDateType()==0) { + if (Objects.nonNull( LoginHelper.getUserId()) && bo.getWarnType()==0) { bo.setDeptId(LoginHelper.getDeptId() == null ? null : LoginHelper.getDeptId()); SysDeptVo bureauDept = sysDeptService.iterationDeptParentToBureau(LoginHelper.getDeptId()); diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationBo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationBo.java index 4cd39cca..3014ca37 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationBo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/EnforcementRegistrationBo.java @@ -315,4 +315,9 @@ public class EnforcementRegistrationBo extends BaseEntity { private String region; private String regionId; + /** + * 提醒类型 0:本单位 1:全市 + */ + private Integer warnType; + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml index 315534a4..138da585 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnforcementRegistrationMapper.xml @@ -562,6 +562,10 @@ and t.num >= #{bo.num} + + order by t.num desc