From 44c996ff82cd6557eb8441da5250a387de025a2e Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Mon, 25 May 2026 15:57:40 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9xispeak=E9=87=8C=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E6=88=AA=E6=AD=A2=E6=97=A5=E6=9C=9F=E7=9A=84=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java | 2 ++ .../java/org/jeecg/modules/tasktask/entity/TaskTask.java | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java index e8a4b0a..25bfaf4 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java @@ -176,6 +176,8 @@ public class BgXiSpeak implements Serializable { /**dw领导userId字段*/ @Excel(name = "截止日期", width = 15) @Schema(description = "截止日期") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") // 核心:告诉Jackson怎么把String转成Date + @DateTimeFormat(pattern="yyyy-MM-dd") private java.util.Date deadline; @TableField(typeHandler = JacksonTypeHandler.class) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/entity/TaskTask.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/entity/TaskTask.java index 1a6f992..85cdb1f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/entity/TaskTask.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/entity/TaskTask.java @@ -179,9 +179,9 @@ public class TaskTask implements Serializable { @Schema(description = "督办开始时间") private java.util.Date startTime; /**截止时间(精确到时分,与 require_finish_date 互补)*/ - @Excel(name = "截止时间(精确到时分,与 require_finish_date 互补)", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Excel(name = "截止时间(精确到时分,与 require_finish_date 互补)", width = 20, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") // 如果只想要年月日,把这里的格式改掉 + @DateTimeFormat(pattern="yyyy-MM-dd") @Schema(description = "截止时间(精确到时分,与 require_finish_date 互补)") private java.util.Date deadline; /**实际完成时间*/ From a9f99b7fd2745ec42f5b13ed118410b51b2c50ef Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Tue, 26 May 2026 09:47:40 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat(xispeak):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=8D=95=E4=B8=AA=E6=B5=81=E7=A8=8B=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提供按 processInstId 删除单个流程的能力,区别于 withDrawXiSpeak 的批量删除整个业务表单下的所有流程。 Co-Authored-By: Claude Opus 4.7 --- .../controller/BgXiSpeakController.java | 18 ++++++++++++++ .../bg/xispeak/service/IBgXiSpeakService.java | 2 ++ .../service/impl/BgXiSpeakServiceImpl.java | 24 +++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java index bd686b4..4ee02cd 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java @@ -281,6 +281,24 @@ public class BgXiSpeakController extends JeecgController deleteSingleProcess(@RequestParam("processInstId") String processInstId) { + if (oConvertUtils.isEmpty(processInstId)) { + return Result.error("流程实例ID不能为空"); + } + if (bgXiSpeakService.deleteSingleProcess(processInstId)) { + return Result.OK("删除流程成功"); + } + return Result.error("删除流程失败"); + } + /** * 通过id删除 * diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakService.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakService.java index 0ff70f6..390edfa 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakService.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakService.java @@ -82,6 +82,8 @@ public interface IBgXiSpeakService extends IService { boolean withDrawXiSpeak(String id); + boolean deleteSingleProcess(String processInstId); + List getRootListWithDept(String pid); void checkAndMarkCompletedByProcessInstId(String processInstanceId); diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java index 6c87ef0..e7ad321 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java @@ -280,6 +280,30 @@ public class BgXiSpeakServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper() + .eq(TaskTask::getProcessInstId, processInstId) + .last("for update"); + TaskTask taskTask = taskTaskServiceImpl.getOne(queryWrapper, false); + if (taskTask == null) { + log.warn("删除单个流程时未找到关联的tasktask记录, processInstId: {}", processInstId); + return false; + } + long count = runtimeService.createProcessInstanceQuery() + .processInstanceId(processInstId) + .count(); + if (count > 0) { + runtimeService.deleteProcessInstance(processInstId, "删除单个流程"); + log.info("成功中止运行中的流程实例: {}", processInstId); + } + LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper() + .eq(TaskTask::getProcessInstId, processInstId); + taskTaskServiceImpl.remove(deleteWrapper); + return true; + } + public List getRootListWithDept(String pid) { // 1. 这里的参数 pid 实际是前端传过来的部门逗号拼接字符串,将其清洗并转换为 Set From 119c148c25e147b48f664f4e7e01403c186f874c Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Tue, 26 May 2026 09:58:14 +0800 Subject: [PATCH 3/4] =?UTF-8?q?refactor(xispeak):=20=E5=B0=86=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=8D=95=E4=B8=AA=E6=B5=81=E7=A8=8B=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=B8=8B=E6=B2=89=E8=87=B3=20tasktask=20=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit deleteSingleProcess 由 BgXiSpeakController 迁移至 TaskTaskController, 作为通用接口供各业务模块复用。 Co-Authored-By: Claude Opus 4.7 --- .../controller/BgXiSpeakController.java | 18 -------------- .../bg/xispeak/service/IBgXiSpeakService.java | 2 -- .../service/impl/BgXiSpeakServiceImpl.java | 24 ------------------- .../controller/TaskTaskController.java | 19 +++++++++++++++ .../tasktask/service/ITaskTaskService.java | 1 + .../service/impl/TaskTaskServiceImpl.java | 23 ++++++++++++++++++ 6 files changed, 43 insertions(+), 44 deletions(-) diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java index 4ee02cd..bd686b4 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java @@ -281,24 +281,6 @@ public class BgXiSpeakController extends JeecgController deleteSingleProcess(@RequestParam("processInstId") String processInstId) { - if (oConvertUtils.isEmpty(processInstId)) { - return Result.error("流程实例ID不能为空"); - } - if (bgXiSpeakService.deleteSingleProcess(processInstId)) { - return Result.OK("删除流程成功"); - } - return Result.error("删除流程失败"); - } - /** * 通过id删除 * diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakService.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakService.java index 390edfa..0ff70f6 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakService.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakService.java @@ -82,8 +82,6 @@ public interface IBgXiSpeakService extends IService { boolean withDrawXiSpeak(String id); - boolean deleteSingleProcess(String processInstId); - List getRootListWithDept(String pid); void checkAndMarkCompletedByProcessInstId(String processInstanceId); diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java index e7ad321..6c87ef0 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java @@ -280,30 +280,6 @@ public class BgXiSpeakServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper() - .eq(TaskTask::getProcessInstId, processInstId) - .last("for update"); - TaskTask taskTask = taskTaskServiceImpl.getOne(queryWrapper, false); - if (taskTask == null) { - log.warn("删除单个流程时未找到关联的tasktask记录, processInstId: {}", processInstId); - return false; - } - long count = runtimeService.createProcessInstanceQuery() - .processInstanceId(processInstId) - .count(); - if (count > 0) { - runtimeService.deleteProcessInstance(processInstId, "删除单个流程"); - log.info("成功中止运行中的流程实例: {}", processInstId); - } - LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper() - .eq(TaskTask::getProcessInstId, processInstId); - taskTaskServiceImpl.remove(deleteWrapper); - return true; - } - public List getRootListWithDept(String pid) { // 1. 这里的参数 pid 实际是前端传过来的部门逗号拼接字符串,将其清洗并转换为 Set diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/controller/TaskTaskController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/controller/TaskTaskController.java index ed9fb8b..82a2f6e 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/controller/TaskTaskController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/controller/TaskTaskController.java @@ -222,6 +222,25 @@ public class TaskTaskController extends JeecgController deleteSingleProcess(@RequestParam("processInstId") String processInstId) { + if (oConvertUtils.isEmpty(processInstId)) { + return Result.error("流程实例ID不能为空"); + } + if (taskTaskService.deleteSingleProcess(processInstId)) { + return Result.OK("删除流程成功"); + } + return Result.error("删除流程失败"); + } + /** * 导出excel * diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java index 69be42c..29ee58d 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/ITaskTaskService.java @@ -18,4 +18,5 @@ public interface ITaskTaskService extends IService { Result handleFlowStart(TaskTask taskTask, String username, Integer intervalType, Integer startCount)throws Exception; List getTaskTaskListByBusinessId(String businessId) throws Exception; boolean updateDeptHandlerName(String processInstanceId, String deptHandlerName); + boolean deleteSingleProcess(String processInstId); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java index 419f1d0..9fc8278 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java @@ -174,4 +174,27 @@ public class TaskTaskServiceImpl extends ServiceImpl i taskTask.setDeptHandlerName(deptHandlerName); return this.updateById(taskTask); } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean deleteSingleProcess(String processInstId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(TaskTask::getProcessInstId, processInstId) + .last("for update"); + TaskTask taskTask = this.getOne(queryWrapper, false); + if (taskTask == null) { + log.warn("删除单个流程时未找到关联的tasktask记录, processInstId: {}", processInstId); + return false; + } + long count = runtimeService.createProcessInstanceQuery() + .processInstanceId(processInstId) + .count(); + if (count > 0) { + runtimeService.deleteProcessInstance(processInstId, "删除单个流程"); + log.info("成功中止运行中的流程实例: {}", processInstId); + } + LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper() + .eq(TaskTask::getProcessInstId, processInstId); + return this.remove(deleteWrapper); + } } From 4c7575322ba52bbaf5c17f2f7e89c46fea7e6b4e Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Tue, 26 May 2026 10:21:36 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat(xispeak):=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=97=B6=E5=90=8C=E6=AD=A5=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=85=B3=E8=81=94=E7=9A=84=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E6=84=8F=E8=A7=81=E8=A1=A8=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 withDrawXiSpeak 批量删除和 deleteSingleProcess 单个删除中, 按 processInstId 调用 ITaskApprovalOpinionService.remove 逻辑删除 task_approval_opinion 表中的关联记录。 Co-Authored-By: Claude Opus 4.7 --- .../xispeak/service/impl/BgXiSpeakServiceImpl.java | 12 +++++++++--- .../tasktask/service/impl/TaskTaskServiceImpl.java | 7 +++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java index 6c87ef0..482686a 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakServiceImpl.java @@ -10,6 +10,8 @@ import org.jeecg.common.system.vo.SelectTreeModel; import org.jeecg.modules.bg.xispeak.entity.BgXiSpeak; import org.jeecg.modules.bg.xispeak.mapper.BgXiSpeakMapper; import org.jeecg.modules.bg.xispeak.service.IBgXiSpeakService; +import org.jeecg.modules.taskapprovalopinion.entity.TaskApprovalOpinion; +import org.jeecg.modules.taskapprovalopinion.service.ITaskApprovalOpinionService; import org.jeecg.modules.tasktask.entity.TaskTask; import org.jeecg.modules.tasktask.service.impl.TaskTaskServiceImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +38,7 @@ public class BgXiSpeakServiceImpl extends ServiceImpl() + .eq(TaskApprovalOpinion::getProcessInstId, procId)); } - // 4. 【核心修改:删除用】重新创建一个干净的 Wrapper,绝不能带 for update! + // 4. 重新创建一个干净的 Wrapper,绝不能带 for update! LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper() - .eq(TaskTask::getBusinessId, id); // 不要加 .last("for update") + .eq(TaskTask::getBusinessId, id); - taskTaskServiceImpl.remove(deleteWrapper); // 使用干净的 Wrapper 执行删除 + taskTaskServiceImpl.remove(deleteWrapper); return true; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java index 9fc8278..1178c96 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/tasktask/service/impl/TaskTaskServiceImpl.java @@ -9,6 +9,8 @@ import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.extbpm.process.exception.BpmException; +import org.jeecg.modules.taskapprovalopinion.entity.TaskApprovalOpinion; +import org.jeecg.modules.taskapprovalopinion.service.ITaskApprovalOpinionService; import org.jeecg.modules.extbpm.process.service.impl.BpmBaseExtApiImpl; import org.jeecg.modules.tasktask.constant.FlowConstants; import org.jeecg.modules.tasktask.entity.TaskTask; @@ -38,6 +40,8 @@ public class TaskTaskServiceImpl extends ServiceImpl i private BpmBaseExtApiImpl bpmBaseExtApiImpl; @Autowired private RuntimeService runtimeService; + @Autowired + private ITaskApprovalOpinionService taskApprovalOpinionService; @Transactional(rollbackFor = Exception.class) public boolean singleFlowStart(TaskTask taskTask, String userName) throws Exception { String jsonString = Optional.ofNullable(taskTask.getJsonData()) @@ -193,6 +197,9 @@ public class TaskTaskServiceImpl extends ServiceImpl i runtimeService.deleteProcessInstance(processInstId, "删除单个流程"); log.info("成功中止运行中的流程实例: {}", processInstId); } + taskApprovalOpinionService.remove( + new LambdaQueryWrapper() + .eq(TaskApprovalOpinion::getProcessInstId, processInstId)); LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper() .eq(TaskTask::getProcessInstId, processInstId); return this.remove(deleteWrapper);