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 index 3e823039..3f207ba7 100755 --- 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 @@ -14,7 +14,22 @@ public enum MsgSourceTypeEnum { /** * 执法评价 */ - ZFPJ(2, "执法评价"); + ZFPJ(2, "执法评价"), + + /** + * 执法预告 + */ + ZFYG(3,"执法预告"), + + /** + * 执法任务 + */ + ZFRW(4,"执法任务"), + + /** + * 执法预约 + */ + ZFYQ(5,"执法预约"); private Integer key; private String value; diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfTodoItemController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfTodoItemController.java index 4d2c5f41..487c61bf 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfTodoItemController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfTodoItemController.java @@ -1,11 +1,11 @@ package com.zdxt.enforcementcode.controller.app.enforcement; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaIgnore; import com.zdxt.enforcementcode.domain.bo.TodoItemBo; import com.zdxt.enforcementcode.domain.vo.TodoItemVo; import com.zdxt.enforcementcode.domain.vo.TodoStatisticsVo; -import com.zdxt.enforcementcode.service.IEnforcementEducationServicesService; -import com.zdxt.enforcementcode.service.ITodoItemService; +import com.zdxt.enforcementcode.service.*; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -40,6 +40,9 @@ public class AppEnfTodoItemController extends BaseController { private final ITodoItemService todoItemService; private final IEnforcementEducationServicesService educationServicesService; + private final IEfcodeCpNoticeMessageService cpNoticeMessageService; + private final IEfcodeCpTaskService efcodeCpTaskService; + private final IEfcodeCpReserveService efcodeCpReserveService; /** * 查询待办事项列表 @@ -90,4 +93,31 @@ public class AppEnfTodoItemController extends BaseController { return R.ok(statistics); } + + /** + * 获取代办个数 + * 返回执法预告,执法任务,执法预约的未读个数及总数 + */ + @SaIgnore + @GetMapping("/statisticsUnReadCountForEnforcement") + public R statisticsUnReadCountForEnforcement() { + + TodoStatisticsVo statistics = new TodoStatisticsVo(); + + //1. 统计执法预告 + Long zfygCount = cpNoticeMessageService.countUnreadNoticeMessageForCurrentUser(); + statistics.setZfygCount(zfygCount != null ? zfygCount : 0L); + //2. 统计执法任务 + Long zfrwCount = efcodeCpTaskService.countUnreadTasksForCurrentUser(); + statistics.setZfrwCount(zfrwCount != null ? zfrwCount : 0L); + //3. 统计执法预约 + Long zfyqCount = efcodeCpReserveService.countUnreadReservesForCurrentUser(); + statistics.setZfyqCount(zfyqCount != null ? zfyqCount : 0L); + + Long totalCount = statistics.getZfygCount() + + statistics.getZfrwCount() + + statistics.getZfyqCount(); + statistics.setTotalCount(totalCount); + return R.ok(statistics); + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/TodoStatisticsVo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/TodoStatisticsVo.java index 48b3a04a..0c56e107 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/TodoStatisticsVo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/TodoStatisticsVo.java @@ -37,6 +37,17 @@ public class TodoStatisticsVo implements Serializable { @Schema(description = "执法预告未读个数") private Long zfygCount; + /** + * 执法任务未读个数 + */ + @Schema(description = "执法任务未读个数") + private Long zfrwCount; + + /** + * 执法预约未读个数 + */ + @Schema(description = "执法预约未读个数") + private Long zfyqCount; /** * 未读总个数 */ diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpNoticeMessageMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpNoticeMessageMapper.java index 16a69509..11bcbbef 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpNoticeMessageMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpNoticeMessageMapper.java @@ -2,6 +2,7 @@ package com.zdxt.enforcementcode.mapper; import com.zdxt.enforcementcode.domain.EfcodeCpNoticeMessage; import com.zdxt.enforcementcode.domain.vo.EfcodeCpNoticeMessageVo; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; /** @@ -12,4 +13,12 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface EfcodeCpNoticeMessageMapper extends BaseMapperPlus { + /** + * 统计未读普法消息数量(执法端-根据用户ID) + * + * @param userId 用户ID + * @param sourceType 来源类型(默认1-普法消息) + * @return 未读普法消息数量 + */ + Long countUnreadNoticeMessageForCurrentUser(@Param("userId") Long userId, @Param("sourceType") Integer sourceType); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpReserveMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpReserveMapper.java index 136b408e..5dbe4548 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpReserveMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpReserveMapper.java @@ -24,4 +24,13 @@ public interface EfcodeCpReserveMapper extends BaseMapperPlus> queryAssociatedPlansBatch(List planIds); + Map> queryAssociatedPlansBatch(List planIds); /** * 强制创建任务(忽略其他条件),根据计划信息直接生成任务记录并回写 plan.task_id @@ -110,4 +111,11 @@ public interface IEfcodeCpTaskService { * @return 新建任务ID */ String forceGenerateTask(EfcodeCpPlan plan); + + /** + * 统计当前登录用户的执任务未读个数 + * + * @return 未读执法任务数量 + */ + Long countUnreadTasksForCurrentUser(); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeMessageServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeMessageServiceImpl.java index 5f52dca7..b722788e 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeMessageServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeMessageServiceImpl.java @@ -1,5 +1,6 @@ package com.zdxt.enforcementcode.service.impl; +import com.zdxt.enforcementcode.common.commonenum.PlatformTypeEnums; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -10,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.EfcodeCpNoticeMessageBo; import com.zdxt.enforcementcode.domain.vo.EfcodeCpNoticeMessageVo; @@ -185,4 +187,26 @@ public class EfcodeCpNoticeMessageServiceImpl implements IEfcodeCpNoticeMessageS .set(EfcodeCpNoticeMessage::getEnterpriseViewed, 1); baseMapper.update(null, updateWrapper); } + + /** + * 统计当前用户未读的预告消息数量 + * 通过当前用户 ID 查找关联的预告,再统计这些预告下企业未读的消息数 + */ + @Override + public Long countUnreadNoticeMessageForCurrentUser() { + Integer platformType = LoginHelper.getPlatformType(); + Long userId = LoginHelper.getUserId(); + // 默认来源类型:执法预告 + final Integer sourceType = 3; + // 执法端:根据用户ID统计 + if (PlatformTypeEnums.ENFORCEMENT.getKey().equals(platformType)) { + if (userId == null) { + log.warn("当前用户未登录,无法统计未读执法预告消息"); + return 0L; + } + return baseMapper.countUnreadNoticeMessageForCurrentUser(userId,sourceType); + } + return 0L; + } + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeServiceImpl.java index 2ee6eac8..437c1d2e 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeServiceImpl.java @@ -1,6 +1,8 @@ package com.zdxt.enforcementcode.service.impl; import cn.hutool.core.util.IdUtil; +import com.zdxt.enforcementcode.common.commonenum.MsgSourceTypeEnum; +import com.zdxt.enforcementcode.service.ISysMessageViewLogService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -39,13 +41,19 @@ public class EfcodeCpNoticeServiceImpl implements IEfcodeCpNoticeService { private final EfcodeCpNoticeMapper baseMapper; private final EfcodeCpNoticeUsersMapper noticeUsersMapper; private final EfcodeCpNoticeMessageMapper noticeMessageMapper; - + private final ISysMessageViewLogService sysMessageViewLogService; /** * 查询行政执法检查计划-预告 */ @Override public EfcodeCpNoticeVo queryById(String id) { - return baseMapper.selectVoById(id); + EfcodeCpNoticeVo vo = baseMapper.selectVoById(id); + // 插入查看记录(调用公共方法) + if (vo != null) { + sysMessageViewLogService.insertViewLog(id, MsgSourceTypeEnum.ZFYG.getKey()); + } + + return vo; } /** diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpReserveServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpReserveServiceImpl.java index 272469d9..cc08b699 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpReserveServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpReserveServiceImpl.java @@ -1,5 +1,8 @@ package com.zdxt.enforcementcode.service.impl; +import com.zdxt.enforcementcode.common.commonenum.MsgSourceTypeEnum; +import com.zdxt.enforcementcode.common.commonenum.PlatformTypeEnums; +import com.zdxt.enforcementcode.service.ISysMessageViewLogService; import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -41,6 +44,7 @@ public class EfcodeCpReserveServiceImpl implements IEfcodeCpReserveService { private final EfcodeCpPlanMapper cpPlanMapper; private final IEfcodeCpSettingService cpSettingService; private final IEfcodeCpTaskService cpTaskService; + private final ISysMessageViewLogService sysMessageViewLogService; /** * 查询行政执法检查计划-预约 @@ -50,7 +54,12 @@ public class EfcodeCpReserveServiceImpl implements IEfcodeCpReserveService { */ @Override public EfcodeCpReserveVo queryById(String id){ - return baseMapper.selectVoById(id); + EfcodeCpReserveVo vo = baseMapper.selectVoById(id); + // 插入查看记录(调用公共方法) + if (vo != null) { + sysMessageViewLogService.insertViewLog(id, MsgSourceTypeEnum.ZFYQ.getKey()); + } + return vo; } /** @@ -795,6 +804,8 @@ public class EfcodeCpReserveServiceImpl implements IEfcodeCpReserveService { return doCancelOverdueReserves(1L, ignoreTime); } + + /** * 执行超期取消逻辑 * @@ -903,4 +914,22 @@ public class EfcodeCpReserveServiceImpl implements IEfcodeCpReserveService { log.info("[超期取消后置] planGroupId={} 有{}家已同意,生成任务taskId={}", planGroupId, approvedReserves.size(), sharedTaskId); } + + + @Override + public Long countUnreadReservesForCurrentUser() { + Integer platformType = LoginHelper.getPlatformType(); + Long userId = LoginHelper.getUserId(); + // 默认来源类型:执法预约 + final Integer sourceType = 5; + // 执法端:根据用户ID统计 + if (PlatformTypeEnums.ENFORCEMENT.getKey().equals(platformType)) { + if (userId == null) { + log.warn("当前用户未登录,无法统计未读执法预约消息"); + return 0L; + } + return baseMapper.countReservesForCurrentUser(userId,sourceType); + } + return 0L; + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpTaskServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpTaskServiceImpl.java index 9f51f32d..254d8515 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpTaskServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpTaskServiceImpl.java @@ -1,5 +1,8 @@ package com.zdxt.enforcementcode.service.impl; +import com.zdxt.enforcementcode.common.commonenum.MsgSourceTypeEnum; +import com.zdxt.enforcementcode.common.commonenum.PlatformTypeEnums; +import com.zdxt.enforcementcode.service.ISysMessageViewLogService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -9,6 +12,7 @@ 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.EfcodeCpTaskBo; import com.zdxt.enforcementcode.domain.vo.EfcodeCpTaskVo; @@ -39,7 +43,7 @@ public class EfcodeCpTaskServiceImpl implements IEfcodeCpTaskService { private final EfcodeCpTaskMapper baseMapper; private final EfcodeCpPlanMapper cpPlanMapper; - + private final ISysMessageViewLogService sysMessageViewLogService; /** * 查询行政执法检查计划-任务 * @@ -179,6 +183,10 @@ public class EfcodeCpTaskServiceImpl implements IEfcodeCpTaskService { } detail.setAssociatedPlans(associated); } + // 插入查看记录(调用公共方法) + if (detail != null) { + sysMessageViewLogService.insertViewLog(planId, MsgSourceTypeEnum.ZFRW.getKey()); + } return detail; } @@ -269,6 +277,7 @@ public class EfcodeCpTaskServiceImpl implements IEfcodeCpTaskService { return task.getId(); } + /** * 校验并批量删除行政执法检查计划-任务信息 * @@ -283,4 +292,27 @@ public class EfcodeCpTaskServiceImpl implements IEfcodeCpTaskService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 统计当前用户未读任务数量 + */ + + @Override + public Long countUnreadTasksForCurrentUser() { + Integer platformType = LoginHelper.getPlatformType(); + Long userId = LoginHelper.getUserId(); + // 默认来源类型:执法任务 + final Integer sourceType = 4; + // 执法端:根据用户ID统计 + if (PlatformTypeEnums.ENFORCEMENT.getKey().equals(platformType)) { + if (userId == null) { + log.warn("当前用户未登录,无法统计未读执法任务消息"); + return 0L; + } + return baseMapper.countTasksForCurrentUser(userId,sourceType); + } + return 0L; + } + + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpNoticeMessageMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpNoticeMessageMapper.xml index a4180ecb..892b38c8 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpNoticeMessageMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpNoticeMessageMapper.xml @@ -3,4 +3,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpReserveMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpReserveMapper.xml index 24f91264..44ff5b6e 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpReserveMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpReserveMapper.xml @@ -56,4 +56,21 @@ ORDER BY r.reserve_time DESC + + + diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpTaskMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpTaskMapper.xml index 4fd185fe..8dea7e78 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpTaskMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpTaskMapper.xml @@ -82,4 +82,19 @@ AND p.is_delete = 0 + +