From 846c73654c501ff98d8a77df65ccb410f1452416 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Tue, 14 Jul 2026 10:43:25 +0800 Subject: [PATCH] =?UTF-8?q?yxk-20260714=20=E6=94=B9=E9=80=A0=E6=8A=84?= =?UTF-8?q?=E9=80=81=E6=A8=A1=E5=9D=97=EF=BC=8C=E5=B0=86=E6=88=91=E7=9A=84?= =?UTF-8?q?=E6=8A=84=E9=80=81=E6=8B=86=E5=88=86=E4=B8=BA=EF=BC=9A=E6=88=91?= =?UTF-8?q?=E7=9A=84=E5=BE=85=E9=98=85=E5=92=8C=E6=88=91=E7=9A=84=E5=B7=B2?= =?UTF-8?q?=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 抄送记录新增阅读状态和已阅时间字段 - 新建抄送任务默认初始化为待阅 - 新增抄送记录标记已阅接口,并校验仅接收人可操作 - 我的抄送列表支持按待阅/已阅状态过滤 - 查询结果补充抄送记录ID、阅读状态、已阅时间 - 新增数据库升级脚本,拆分“我的待阅”“我的已阅”菜单并同步权限 --- .../org/jeecg/modules/bpm/dto/TaskDTO.java | 9 ++++ .../modules/bpm/mapper/ActivitiMapper.java | 3 +- .../modules/bpm/mapper/xml/ActivitiMapper.xml | 11 ++++- .../bpm/service/impl/ActivitiServiceImpl.java | 8 +++- .../controller/ExtActTaskCcController.java | 45 +++++++++++++++++++ .../extbpm/process/entity/ExtActTaskCc.java | 6 +++ .../service/impl/ExtActBpmLogServiceImpl.java | 1 + 7 files changed, 80 insertions(+), 3 deletions(-) diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/dto/TaskDTO.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/dto/TaskDTO.java index 488d901..57c9707 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/dto/TaskDTO.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/dto/TaskDTO.java @@ -51,6 +51,15 @@ public class TaskDTO implements java.io.Serializable { private Date processEndTime; /** 流程取消原因*/ private String processDeleteReason; + + /** 抄送记录ID,用于标记已阅;历史任务详情仍使用 id */ + private String ccId; + /** 抄送阅读状态:0-待阅,1-已阅 */ + private Integer isRead; + /** 抄送已阅时间 */ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date readTime; /** 业务标题*/ diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/mapper/ActivitiMapper.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/mapper/ActivitiMapper.java index 3bfc2b8..b671b35 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/mapper/ActivitiMapper.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/mapper/ActivitiMapper.java @@ -81,7 +81,8 @@ public interface ActivitiMapper extends BaseMapper { @Param("processDefinitionName") String processDefinitionName, @Param("executionIdList") List executionIdList, @Param("processInstanceIds") List processInstanceIds, - @Param("processKeyList") List processKeyList); + @Param("processKeyList") List processKeyList, + @Param("isRead") Integer isRead); /** * 查询流程的历史任务节点 diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/mapper/xml/ActivitiMapper.xml b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/mapper/xml/ActivitiMapper.xml index 52e1c1a..d78fdad 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/mapper/xml/ActivitiMapper.xml +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/mapper/xml/ActivitiMapper.xml @@ -16,6 +16,9 @@ + + + @@ -158,6 +161,9 @@ ,aht.END_TIME_ AS taskEndTime ,aht.DURATION_ AS taskDueTime ,aht.TASK_DEF_KEY_ AS taskId + ,cc.ID AS ccId + ,cc.IS_READ AS isRead + ,cc.READ_TIME AS readTime FROM ACT_HI_TASKINST aht, EXT_ACT_TASK_CC cc, ACT_RE_PROCDEF arp, @@ -169,6 +175,9 @@ and aht.PROC_INST_ID_ = ahp.id_ and aht.DURATION_ >0 and cc.CC_USER_NAME = #{ccUserName} + + and cc.IS_READ = #{isRead} + AND arp.KEY_ IN @@ -329,4 +338,4 @@ delete from act_ru_timer_job where HANDLER_TYPE_ ='timer-start-event-custom' and PROC_DEF_ID_ like CONCAT(#{processKey}, '%') - \ No newline at end of file + diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/service/impl/ActivitiServiceImpl.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/service/impl/ActivitiServiceImpl.java index f75e666..db857f3 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/service/impl/ActivitiServiceImpl.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/bpm/service/impl/ActivitiServiceImpl.java @@ -874,8 +874,14 @@ public class ActivitiServiceImpl implements ActivitiService { } } //------------根据流程的业务标题查询数据----------------------------------------------------------------------------------------------- + Integer isRead = null; + String isReadParam = request.getParameter("isRead"); + // 我的待阅/已阅共用同一查询接口,仅接受 0/1,避免异常参数改变原有抄送列表行为。 + if ("0".equals(isReadParam) || "1".equals(isReadParam)) { + isRead = Integer.valueOf(isReadParam); + } long start2 = System.currentTimeMillis(); - List result = activitiMapper.getAllCcHistoryTasks(page,username,procDefId, procName,null ,processInstanceIds,processKeyList); + List result = activitiMapper.getAllCcHistoryTasks(page,username,procDefId, procName,null ,processInstanceIds,processKeyList,isRead); long end4 = System.currentTimeMillis(); log.info("3 【我的抄送任务】查询 getAllCcHistoryTasks 消耗时间" + (end4 - start2) + "毫秒"); diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/controller/ExtActTaskCcController.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/controller/ExtActTaskCcController.java index c82a8fa..9d4bc20 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/controller/ExtActTaskCcController.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/controller/ExtActTaskCcController.java @@ -1,10 +1,12 @@ package org.jeecg.modules.extbpm.process.controller; import java.util.Arrays; +import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.util.SqlInjectionUtil; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.extbpm.process.entity.ExtActTaskCc; @@ -153,6 +155,49 @@ public class ExtActTaskCcController { } return result; } + + /** + * 标记抄送记录为已阅,仅允许该抄送记录的接收人操作。 + * @param id 抄送记录ID + * @param request + * @return + */ + @PutMapping(value = "/read") + public Result read(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { + Result result = new Result(); + if (oConvertUtils.isEmpty(id)) { + result.error500("参数不识别!"); + return result; + } + ExtActTaskCc extActTaskCc = extActTaskCcService.getById(id); + if(extActTaskCc==null) { + result.error500("未找到对应实体"); + return result; + } + String username = JwtUtil.getUserNameByToken(request); + if (oConvertUtils.isEmpty(username) || !username.equals(extActTaskCc.getCcUserName())) { + result.error500("无权限操作该抄送记录"); + return result; + } + if (Integer.valueOf(1).equals(extActTaskCc.getIsRead())) { + result.setResult(extActTaskCc); + result.success("已阅成功!"); + return result; + } + Date now = new Date(); + extActTaskCc.setIsRead(1); + extActTaskCc.setReadTime(now); + extActTaskCc.setUpdateBy(username); + extActTaskCc.setUpdateTime(now); + boolean ok = extActTaskCcService.updateById(extActTaskCc); + if(ok) { + result.setResult(extActTaskCc); + result.success("已阅成功!"); + } else { + result.error500("操作失败"); + } + return result; + } /** * 通过id查询 diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/entity/ExtActTaskCc.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/entity/ExtActTaskCc.java index d581725..bef2ae8 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/entity/ExtActTaskCc.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/entity/ExtActTaskCc.java @@ -39,6 +39,12 @@ public class ExtActTaskCc implements Serializable { private java.lang.String fromUserName; /**任务抄送人员*/ private java.lang.String ccUserName; + /**是否已阅:0-待阅,1-已阅*/ + private java.lang.Integer isRead; + /**已阅时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date readTime; /**创建人登录名称*/ private java.lang.String createBy; /**创建日期*/ diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/impl/ExtActBpmLogServiceImpl.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/impl/ExtActBpmLogServiceImpl.java index d1331d5..88ddbea 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/impl/ExtActBpmLogServiceImpl.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/service/impl/ExtActBpmLogServiceImpl.java @@ -510,6 +510,7 @@ public class ExtActBpmLogServiceImpl extends ServiceImpl