diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalPositiveSecondedController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalPositiveSecondedController.java index 72c4f91..f6ad524 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalPositiveSecondedController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalPositiveSecondedController.java @@ -191,7 +191,7 @@ public class ProposalPositiveSecondedController { } @At - @SaCheckPermission(value = {"proposal.seconded", "h5.proposal.seconded"}, mode = SaMode.OR) + @SaCheckPermission(value = {"proposal.seconded", "h5.proposal.seconded", "proposal.schoolLeaderApproval", "h5.proposal.schoolLeaderApproval"}, mode = SaMode.OR) public Result listPositiveSeconded(String bizId) { List list = dao.query(ProposalSecond.class, Cnd.where(ProposalSecond::getProposalId, "=", bizId).and(ProposalSecond::getMode, "=", false)); return Result.success(list); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalUnderTakeInfoInterceptor.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalUnderTakeInfoInterceptor.java index 510d6f5..57c7ac5 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalUnderTakeInfoInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalUnderTakeInfoInterceptor.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.democratic.proposal.interceptor; import cn.hutool.core.lang.Dict; +import com.budwk.app.base.exception.BaseException; import com.budwk.app.flow.engine.FlowInterceptor; import com.budwk.app.flow.engine.core.Execution; import com.budwk.app.flow.engine.core.ServiceContext; @@ -12,13 +13,19 @@ import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.json.Json; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.Set; /** * 提案承办单位答复任务设置信息拦截器 * 承办单位名称、ID、是否主办等信息 */ public class ProposalUnderTakeInfoInterceptor implements FlowInterceptor { + private static final Set REPLY_TASK_NAMES = Set.of("master_reply", "slave_reply", "opinion_master_reply"); + @Override public void intercept(Execution execution) { Dao dao = ServiceContext.find(Dao.class); @@ -26,20 +33,41 @@ public class ProposalUnderTakeInfoInterceptor implements FlowInterceptor { // 提案ID String proposalId = execution.getProcessInstance().getBusinessNo(); // 当前任务 - List processTaskList = execution.getProcessTaskList(); + // Include the current completed reply task and any reply tasks created by this transition. + Map processTaskMap = new LinkedHashMap<>(); + addReplyTask(processTaskMap, execution.getProcessTask()); + for (ProcessTask task : execution.getProcessTaskList()) { + addReplyTask(processTaskMap, task); + } - for (ProcessTask task : processTaskList) { + List updateTaskList = new ArrayList<>(); + for (ProcessTask task : processTaskMap.values()) { // 办理人 ProcessTaskActor taskActor = dao.fetch(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", task.getId())); + if (taskActor == null) { + throw new BaseException("Task actor is empty, cannot write proposal undertaking unit info."); + } String actorUnitId = taskActor.getActorUnitId(); ProposalReplyUnit replyUnit = dao.fetch(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", proposalId).and(ProposalReplyUnit::getUnitId, "=", actorUnitId)); + if (replyUnit == null) { + throw new BaseException("Proposal undertaking unit is empty, cannot write proposal undertaking unit info."); + } Dict variable = FlowUtil.variableToDict(task.getVariable()); variable.set("underTakeName", replyUnit.getUnitName()); variable.set("underTakeId", replyUnit.getUnitId()); variable.set("underTakeIsMaster", replyUnit.getIsMaster()); task.setVariable(Json.toJson(variable)); + updateTaskList.add(task); + } + if (!updateTaskList.isEmpty()) { + dao.update(updateTaskList, "variable"); + } + } + + private void addReplyTask(Map processTaskMap, ProcessTask task) { + if (task != null && REPLY_TASK_NAMES.contains(task.getTaskName())) { + processTaskMap.put(task.getId(), task); } - dao.update(processTaskList,"variable"); } } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java index 5f1b98e..8a2d336 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/service/common/ProposalCommonServiceImpl.java @@ -1,6 +1,7 @@ package com.budwk.app.zhgh.democratic.proposal.service.common; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -23,6 +24,7 @@ import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.models.Sys_user_role; import com.budwk.app.sys.services.SysDictService; import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.sys.views.View_user; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.base.Globals; import com.budwk.app.zhgh.democratic.proposal.models.ProposalConsolidation; @@ -210,6 +212,51 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl imp List doneTaskList = flowEngine.processTaskService().getDoneTaskList(processInstance.getId(), null); for (ProcessTask doneTask : doneTaskList) { ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId()); + String taskName = taskVO.getTaskName(); + // 模板按当前 JDHTA_NC 节点名称展示,按任务编码处理可兼容历史提案中已保存的旧节点显示名称。 + if ("startTask".equals(taskName)) { + taskVO.setDisplayName("撰写提案"); + } else if ("invite".equals(taskName)) { + taskVO.setDisplayName("邀请附议人"); + } else if ("second".equals(taskName)) { + taskVO.setDisplayName("提案附议"); + } else if ("delegation".equals(taskName)) { + taskVO.setDisplayName("团长审核"); + } else if ("committee_member_review".equals(taskName)) { + taskVO.setDisplayName("提案委委员审议"); + } else if ("committee".equals(taskName)) { + taskVO.setDisplayName("提案委主任意见"); + } else if ("school_leader_instruction".equals(taskName)) { + taskVO.setDisplayName("分管校领导批示"); + } else if ("master_reply".equals(taskName) || "opinion_master_reply".equals(taskName)) { + taskVO.setDisplayName("主办单位答复"); + } else if ("slave_reply".equals(taskName)) { + taskVO.setDisplayName("协办单位答复"); + } else if ("committee_director_opinion".equals(taskName)) { + taskVO.setDisplayName("提案委主任审核"); + } else if ("school_leader".equals(taskName)) { + taskVO.setDisplayName("分管校领导审核"); + } else if ("feedback".equals(taskName)) { + taskVO.setDisplayName("反馈评价"); + Dict variable = FlowUtil.variableToDict(taskVO.getVariable()); + String feedback = variable.getStr(FlowConst.TASK_FORM_DATA_PREFIX + "feedback"); + variable.put(FlowConst.TASK_FORM_DATA_PREFIX + "feedback_name", feedBackMap.getOrDefault(feedback, feedback)); + taskVO.setVariable(Json.toJson(variable)); + } + if ("second".equals(taskName) || "committee_member_review".equals(taskName)) { + Dict variable = FlowUtil.variableToDict(taskVO.getVariable()); + View_user user = null; + if (StrUtil.isNotBlank(taskVO.getOperator())) { + user = dao().fetch(View_user.class, Cnd.where(View_user::getId, "=", taskVO.getOperator())); + } + if (user == null && StrUtil.isNotBlank(variable.getStr(FlowConst.TASK_FORM_DATA_PREFIX + "loginName"))) { + user = dao().fetch(View_user.class, Cnd.where(View_user::getLoginname, "=", variable.getStr(FlowConst.TASK_FORM_DATA_PREFIX + "loginName"))); + } + if (user != null && StrUtil.isNotBlank(user.getUnitName())) { + variable.put(FlowConst.TASK_FORM_DATA_PREFIX + "unitName", user.getUnitName()); + taskVO.setVariable(Json.toJson(variable)); + } + } doneTaskVos.add(taskVO); } @@ -224,6 +271,7 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl imp Configure config = Configure.builder() .bind("seconders", policy) .bind("提案附议", policy) + .bind("提案委委员审议", policy) .bind("brief", htmlRenderPolicy) .bind("measures", htmlRenderPolicy) .bind("taskFormData.tf_opinion", htmlRenderPolicy)