diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalExpeditingController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalExpeditingController.java new file mode 100644 index 00000000..5bd994cd --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalExpeditingController.java @@ -0,0 +1,138 @@ +package com.budwk.app.zhgh.democratic.proposal.controller.senior; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.bpm.models.BpmProcessTask; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.entity.ProcessTaskActor; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.dayofficework.message.service.GlobalMessageSendService; +import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam; +import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.validation.Valid; +import java.util.List; + +/** + * @ClassName ProposalExpeditingController + * @Author JyuHsin + * @Date 2025/9/23 9:38 + * @Version 1.0 + * @Description TODO + */ +@IocBean +@At("/platform/senior/expediting") +@Ok("json:full") +@Api(tags = "提案-高级管理-提案催办") +public class ProposalExpeditingController { + + @Inject + private Dao dao; + @Inject + private ProposalCommonService proposalCommonService; + @Inject + private GlobalMessageSendService globalMessageSendService; + + @At("") + @Ok("beetl:/platform/zhgh/democratic/proposal/senior/expediting/index.html") + @SaCheckPermission("proposal.senior.expediting") + public void index() { + } + + @At + @SaCheckPermission("proposal.senior.expediting") + @ApiOperation("分页列表") + public Result pageData(@Valid ProposalSearchParam pageForm) { + Sql sql = Sqls.create(""" + SELECT + info.*, + type.name AS typeName, + tcs.fullName AS sessionName, + tcd.`name` AS delegationName, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IFNULL(GROUP_CONCAT(DISTINCT nt.taskName),'结束') curTaskKey, + CASE WHEN t.taskState = 20 AND ( rt.id IS NULL OR rt.taskState = 10 ) THEN 1 ELSE 0 END AS canRevoke, + t.variable->>'$.unitName' AS taskUnitName, + IF(JSON_EXTRACT(t.variable, '$.isMaster') = true, 1, 0) AS taskIsMaster + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id + LEFT JOIN proposal_info info ON info.id = ins.businessNo + LEFT JOIN proposal_type type on type.id = info.typeId + LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId + LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "in", List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "c9a1586e-272b-41b8-b438-0be9f9e3781d","5ed5a1be-0cd3-4b47-a0d5-238d53b61f34")); + + if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + } + + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + + ProposalSearchParam.buildSearch(cnd, pageForm); + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); + sql.setCondition(cnd); + Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @ApiOperation("提案催办") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("proposal.senior.expediting") + @SLog(tag = "提案-高级管理", msg = "提案催办") + public Result submit(@Param(value = "taskIds") String[] taskIds, + @Param(value = "content") String content) { + + for (String taskId : taskIds) { + + ProcessTask task = dao.fetch(ProcessTask.class, taskId); + + List taskActors = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", task.getId())); + List list = taskActors.stream().map(ProcessTaskActor::getActorId).toList(); + + String message = "您有一条待办任务," + content; + globalMessageSendService.sendMessage(task.getDisplayName(), message, 2, list, null); + } + return Result.success(); + } +} diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/senior/expediting/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/senior/expediting/index.html new file mode 100644 index 00000000..8c09bcfa --- /dev/null +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/senior/expediting/index.html @@ -0,0 +1,226 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + 批量催办 + + + + + + + + + + + + + + + + + + + + + +
+ + + +