From 5c75104efdf893bc4f5010d07a73927365b65caa Mon Sep 17 00:00:00 2001 From: Paidax Date: Sat, 20 Dec 2025 18:07:17 +0800 Subject: [PATCH] commit --- .../FlowJumpToFirstTaskNodeListener.java | 14 +++++++ .../FlowJumpToFirstTaskNodePublisher.java | 25 ++++++++++++ .../app/flow/service/FlowCommonService.java | 5 +++ .../app/sys/controller/SysUnitController.java | 2 +- .../common/ProposalCommonController.java | 2 +- ...roposalSchoolLeaderApprovalController.java | 3 +- .../ProposalUnderTakeReplyController.java | 3 +- .../ProposalMasterUnitAssignmentHandler.java | 7 +++- .../ProposalCaseTaskRevokeEventListener.java | 10 +++-- .../ProposalJumpToWriteEventListener.java | 39 +++++++++++++++++++ .../ProposalQueryComprehensiveParam.java | 18 ++++++++- .../impl/ProposalExportServiceImpl.java | 5 ++- .../views/platform/sys/unit/unitManage.js | 2 +- .../material/approval/index.html | 2 +- .../zhgh/democratic/proposal/common/info.js | 4 +- .../transact/committeeFiling/index.html | 9 +++++ .../transact/schoolLeaderApproval/index.html | 1 + .../proposal/transact/unitReply/index.html | 1 + .../proposal/transact/write/index.html | 4 +- 19 files changed, 140 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/budwk/app/base/event/flow/jumptofirsttask/FlowJumpToFirstTaskNodeListener.java create mode 100644 src/main/java/com/budwk/app/base/event/flow/jumptofirsttask/FlowJumpToFirstTaskNodePublisher.java create mode 100644 src/main/java/com/budwk/app/zhgh/democratic/proposal/listenter/ProposalJumpToWriteEventListener.java diff --git a/src/main/java/com/budwk/app/base/event/flow/jumptofirsttask/FlowJumpToFirstTaskNodeListener.java b/src/main/java/com/budwk/app/base/event/flow/jumptofirsttask/FlowJumpToFirstTaskNodeListener.java new file mode 100644 index 0000000..a0c7571 --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/flow/jumptofirsttask/FlowJumpToFirstTaskNodeListener.java @@ -0,0 +1,14 @@ +package com.budwk.app.base.event.flow.jumptofirsttask; + +/** + * @version 1.0 + * @Author FKY + * @name:FlowJumpToFirstTaskNodeListener + * @Date 2025/12/20 14:10 + * @注释 + */ +public interface FlowJumpToFirstTaskNodeListener { + + void receive(Long processTaskId); + +} diff --git a/src/main/java/com/budwk/app/base/event/flow/jumptofirsttask/FlowJumpToFirstTaskNodePublisher.java b/src/main/java/com/budwk/app/base/event/flow/jumptofirsttask/FlowJumpToFirstTaskNodePublisher.java new file mode 100644 index 0000000..93d8d8d --- /dev/null +++ b/src/main/java/com/budwk/app/base/event/flow/jumptofirsttask/FlowJumpToFirstTaskNodePublisher.java @@ -0,0 +1,25 @@ +package com.budwk.app.base.event.flow.jumptofirsttask; + +import com.budwk.app.base.event.user.UserChangeEventListener; +import com.budwk.app.base.utils.AppIocUtil; +import org.nutz.ioc.Ioc; +import org.nutz.mvc.Mvcs; + +/** + * @version 1.0 + * @Author FKY + * @name:FlowJumpToFirstTaskNodeEvent + * @Date 2025/12/20 14:09 + * @注释 + */ +public class FlowJumpToFirstTaskNodePublisher { + + public static void broadcast(Long processTaskId) { + String[] names = Mvcs.getIoc().getNamesByType(FlowJumpToFirstTaskNodeListener.class); + for (String listener : names) { + FlowJumpToFirstTaskNodeListener listenerBean = Mvcs.getIoc().get(FlowJumpToFirstTaskNodeListener.class, listener); + listenerBean.receive(processTaskId); + } + } + +} diff --git a/src/main/java/com/budwk/app/flow/service/FlowCommonService.java b/src/main/java/com/budwk/app/flow/service/FlowCommonService.java index 6e9f07c..bd6b901 100644 --- a/src/main/java/com/budwk/app/flow/service/FlowCommonService.java +++ b/src/main/java/com/budwk/app/flow/service/FlowCommonService.java @@ -2,6 +2,7 @@ package com.budwk.app.flow.service; import cn.hutool.core.lang.Dict; import cn.hutool.core.util.ObjectUtil; +import com.budwk.app.base.event.flow.jumptofirsttask.FlowJumpToFirstTaskNodePublisher; import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; @@ -52,6 +53,10 @@ public class FlowCommonService { } else if (ObjectUtil.equals(submitType, ProcessSubmitTypeEnum.ROLLBACK_TO_OPERATOR.getCode())) { // 退回发起人 flowEngine.executeAndJumpToFirstTaskNode(processTaskId, operator, args); + + // 退回发起人发送订阅消息,执行相关操作 + FlowJumpToFirstTaskNodePublisher.broadcast(processTaskId); + } else if (ObjectUtil.equals(submitType, ProcessSubmitTypeEnum.COUNTERSIGN_DISAGREE.getCode())) { // 会签不同意,追加不同意标识 args.put(FlowConst.COUNTERSIGN_DISAGREE_FLAG, 1); diff --git a/src/main/java/com/budwk/app/sys/controller/SysUnitController.java b/src/main/java/com/budwk/app/sys/controller/SysUnitController.java index 8383626..04c2ba3 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysUnitController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysUnitController.java @@ -326,7 +326,7 @@ public class SysUnitController { public Object addDo(@Param("..") Sys_unit unit, @Param("parentId") String parentId, HttpServletRequest req) { try { if ("root".equals(parentId)) { - parentId = ""; + parentId = "0"; } unit.setCreatedBy(SecurityUtil.getUserId()); unit.setUnitType("用户自建"); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/common/ProposalCommonController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/common/ProposalCommonController.java index 4cad0e1..060f3fe 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/common/ProposalCommonController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/common/ProposalCommonController.java @@ -50,7 +50,7 @@ public class ProposalCommonController { @SaCheckLogin @ApiOperation("查询全部的教代会") public Result listSession() { - List list = dao.query(Teacher_congress_session.class, Cnd.NEW().desc("startDate")); + List list = dao.query(Teacher_congress_session.class, Cnd.NEW().asc("startDate")); return Result.success(list); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalSchoolLeaderApprovalController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalSchoolLeaderApprovalController.java index ea20789..5983925 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalSchoolLeaderApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalSchoolLeaderApprovalController.java @@ -93,7 +93,8 @@ public class ProposalSchoolLeaderApprovalController { t.taskParentId, t.variable taskVariable, IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, - IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke, + GROUP_CONCAT(DISTINCT ta.actorName, '(', ta.actorAccount, ')' ) AS auditUser FROM wf_process_task t LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalUnderTakeReplyController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalUnderTakeReplyController.java index 79274ce..8db1264 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalUnderTakeReplyController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalUnderTakeReplyController.java @@ -104,7 +104,8 @@ public class ProposalUnderTakeReplyController { t.variable->>'$.underTakeName' AS underTakeName, IF(JSON_EXTRACT(t.variable, '$.underTakeIsMaster') = true, 1, 0) AS underTakeIsMaster, t.variable->>'$.tf_transferUserId' AS tf_transferUserId, - transferUser.username AS transferUserName + transferUser.username AS transferUserName, + GROUP_CONCAT(DISTINCT ta.actorName, '(', ta.actorAccount, ')' ) AS auditUser FROM wf_process_task t LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalMasterUnitAssignmentHandler.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalMasterUnitAssignmentHandler.java index 0390a3a..828df63 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalMasterUnitAssignmentHandler.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalMasterUnitAssignmentHandler.java @@ -13,8 +13,10 @@ import com.budwk.app.sys.models.Sys_user_role; import com.budwk.app.sys.services.SysRoleService; import com.budwk.app.zhgh.democratic.proposal.models.ProposalReplyUnit; import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake; +import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; +import org.nutz.ioc.aop.Aop; import java.util.List; @@ -22,7 +24,9 @@ import java.util.List; * 提案主办单位处理人 */ public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler { + @Override + @Aop(TransAop.READ_COMMITTED) public List assign(TaskModel model, Execution execution) { Dao dao = ServiceContext.find(Dao.class); SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class); @@ -42,7 +46,8 @@ public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler { // 如果没有 认为是需要重新答复 从记录表里取值 if(StrUtil.isBlank(masterUnitId)){ - ProposalReplyUnit masterUnit = dao.fetch(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", proposalId).and(ProposalReplyUnit::getIsMaster, "=", 1)); + ProposalReplyUnit masterUnit = dao.fetch(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", proposalId) + .and(ProposalReplyUnit::getIsMaster, "=", 1)); if (masterUnit == null) { throw new BaseException("系统异常"); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/listenter/ProposalCaseTaskRevokeEventListener.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/listenter/ProposalCaseTaskRevokeEventListener.java index 32facb9..57fb6f6 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/listenter/ProposalCaseTaskRevokeEventListener.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/listenter/ProposalCaseTaskRevokeEventListener.java @@ -26,9 +26,13 @@ public class ProposalCaseTaskRevokeEventListener implements ProcessEventListener if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_REVOKE) { Long taskId = event.getSourceId(); ProcessTask task = dao.fetch(ProcessTask.class, taskId); - ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId()); - String businessNo = instance.getBusinessNo(); - dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", businessNo)); + + ProcessTask parentProcessTask = dao.fetch(ProcessTask.class, task.getTaskParentId()); + if ("committee".equals(parentProcessTask.getTaskName())) { + ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId()); + String businessNo = instance.getBusinessNo(); + dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", businessNo)); + } } } } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/listenter/ProposalJumpToWriteEventListener.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/listenter/ProposalJumpToWriteEventListener.java new file mode 100644 index 0000000..40cd8f3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/listenter/ProposalJumpToWriteEventListener.java @@ -0,0 +1,39 @@ +package com.budwk.app.zhgh.democratic.proposal.listenter; + +import com.budwk.app.base.event.flow.jumptofirsttask.FlowJumpToFirstTaskNodeListener; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.service.ProcessInstanceService; +import com.budwk.app.flow.service.ProcessTaskService; +import com.budwk.app.zhgh.democratic.proposal.models.ProposalSecond; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * @version 1.0 + * @Author FKY + * @name:ProposalJumpToWriteEventListener + * @Date 2025/12/20 14:50 + * @注释 提案退回发起人监听器 + */ +@IocBean +public class ProposalJumpToWriteEventListener implements FlowJumpToFirstTaskNodeListener { + + @Inject + private Dao dao; + @Inject + private ProcessTaskService processTaskService; + @Inject + private ProcessInstanceService processInstanceService; + + @Override + public void receive(Long processTaskId) { + ProcessTask processTask = processTaskService.getById(processTaskId); + ProcessInstance processInstance = processInstanceService.getById(processTask.getProcessInstanceId()); + + // 清空提案的附议人 + dao.clear(ProposalSecond.class, Cnd.where(ProposalSecond::getProposalId, "=", processInstance.getBusinessNo())); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalQueryComprehensiveParam.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalQueryComprehensiveParam.java index de9dc5f..da9ff17 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalQueryComprehensiveParam.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/param/ProposalQueryComprehensiveParam.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.nutz.dao.Cnd; import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.lang.Lang; @EqualsAndHashCode(callSuper = true) @Data @@ -58,6 +59,8 @@ public class ProposalQueryComprehensiveParam extends PageForm { @ApiModelProperty(name = "通用关键字") private String commonKeyword; + @ApiModelProperty(name = "搜索关键字") + private String createUserKeyword; /** @@ -71,7 +74,12 @@ public class ProposalQueryComprehensiveParam extends PageForm { cnd = Cnd.NEW(); } //教代会届次 - cnd.andEX("info.sessionId", "=", searchParam.getSessionId()); + if (Lang.isNotEmpty(searchParam.getSessionIds())) { + cnd.and("info.sessionId", "in", searchParam.getSessionIds()); + } else { + cnd.andEX("info.sessionId", "=", searchParam.getSessionId()); + } + //提案名称 if (StrUtil.isNotBlank(searchParam.getName())) { cnd.where().andLike("info.name", searchParam.getName()); @@ -93,6 +101,14 @@ public class ProposalQueryComprehensiveParam extends PageForm { if (StrUtil.isNotBlank(searchParam.getCreateUserName())) { cnd.where().andLike("info.createUserName", searchParam.getCreateUserName()); } + + if (StrUtil.isNotBlank(searchParam.getCreateUserKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("info.createUserName", searchParam.getCreateUserKeyword()); + seg.orLike("info.createUserLoginName", searchParam.getCreateUserKeyword()); + cnd.and(seg); + } + // 提案人分工会 cnd.andEX("tcde.unionId", "=", searchParam.getUnionId()); // 提案人单位 diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java index 907db9d..d3d369e 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/impl/ProposalExportServiceImpl.java @@ -36,6 +36,7 @@ import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.json.Json; +import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import javax.servlet.http.HttpServletResponse; @@ -209,7 +210,9 @@ public class ProposalExportServiceImpl extends BaseServiceImpl imp if (inviteTask != null) { NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable()); List seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class); - list.get(i).put("secondedUserNames", seconders.stream().map(v -> v.getString("userName")).collect(Collectors.joining(","))); + if (Lang.isNotEmpty(seconders)) { + list.get(i).put("secondedUserNames", seconders.stream().map(v -> v.getString("userName")).collect(Collectors.joining(","))); + } } } diff --git a/src/main/resources/views/platform/sys/unit/unitManage.js b/src/main/resources/views/platform/sys/unit/unitManage.js index bd78b43..60690a9 100644 --- a/src/main/resources/views/platform/sys/unit/unitManage.js +++ b/src/main/resources/views/platform/sys/unit/unitManage.js @@ -9,7 +9,7 @@ const UNIT_MANAGE_TEMPLATE = { - 新建单位 + diff --git a/src/main/resources/views/platform/zhgh/democratic/grassrootscongress/material/approval/index.html b/src/main/resources/views/platform/zhgh/democratic/grassrootscongress/material/approval/index.html index a867aac..f4ca010 100644 --- a/src/main/resources/views/platform/zhgh/democratic/grassrootscongress/material/approval/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/grassrootscongress/material/approval/index.html @@ -75,7 +75,7 @@ layout("/layouts/platform.html"){ 取消 - 退回到提案人 + 退回到发起人 不同意 同意 diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/common/info.js b/src/main/resources/views/platform/zhgh/democratic/proposal/common/info.js index 934f4fc..8eedeef 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/common/info.js +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/common/info.js @@ -28,9 +28,9 @@ const PROPOSAL_INFO = { - +
diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/committeeFiling/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/committeeFiling/index.html index 105b05f..defcf72 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/committeeFiling/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/committeeFiling/index.html @@ -231,6 +231,14 @@ layout("/layouts/platform.html"){ cancelButtonText: "取消", type: "warning" }).then(() => { + // 是否有协办单位 + let tf_helpunitreply; + if (this.formData.tf_slaveUnitIds && this.formData.tf_slaveUnitIds.length > 0) { + tf_helpunitreply = 'HAS_HELP_UNIT' + } else { + tf_helpunitreply = 'NO_HELP_UNIT' + } + const loading = createLoading('提交中') this.$axios.post("/flow/common/executeTask", { data: JSON.stringify({ @@ -239,6 +247,7 @@ layout("/layouts/platform.html"){ tf_masterUnitName: this.formData.tf_masterUnitId ? this.underTakeOptions.find(v => v.id === this.formData.tf_masterUnitId)?.name : null, tf_slaveUnitNames: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name), tf_slaveUnitNameStr: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name).join(','), + tf_helpunitreply: tf_helpunitreply }) }).then((res) => { if (res.code === 0) { diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/schoolLeaderApproval/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/schoolLeaderApproval/index.html index a0fa635..838d7e2 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/schoolLeaderApproval/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/schoolLeaderApproval/index.html @@ -137,6 +137,7 @@ layout("/layouts/platform.html"){ {label: "提案类别", prop: "typeName"}, {label: "是否并案", prop: "merge"}, {label: "当前节点", prop: "curTaskName"}, + {label: "审核人", prop: "auditUser"}, {label: "流程状态", prop: "instanceState"} ], pageForm: { diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/unitReply/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/unitReply/index.html index ba66542..0d22d0e 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/unitReply/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/unitReply/index.html @@ -260,6 +260,7 @@ layout("/layouts/platform.html"){ {label: "承办单位", prop: "underTakeName"}, {label: "承办类型", prop: "underTakeIsMaster"}, {label: "当前节点", prop: "curTaskName"}, + {label: "审核人", prop: "auditUser"}, {label: "流程状态", prop: "instanceState"} ], pageForm: { diff --git a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/write/index.html b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/write/index.html index 1cdbcf5..51ae5fb 100644 --- a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/write/index.html +++ b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/write/index.html @@ -270,7 +270,7 @@ layout("/layouts/platform_h5.html"){ - + >-->