diff --git a/src/main/java/com/budwk/app/flow/handler/FlowGeneralViceDelegationAuditSelfUnitByArgsAssignmentHandler.java b/src/main/java/com/budwk/app/flow/handler/FlowGeneralViceDelegationAuditSelfUnitByArgsAssignmentHandler.java new file mode 100644 index 00000000..d5568787 --- /dev/null +++ b/src/main/java/com/budwk/app/flow/handler/FlowGeneralViceDelegationAuditSelfUnitByArgsAssignmentHandler.java @@ -0,0 +1,79 @@ +package com.budwk.app.flow.handler; + +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.base.exception.BaseException; +import com.budwk.app.flow.engine.AssignmentHandler; +import com.budwk.app.flow.engine.core.Execution; +import com.budwk.app.flow.engine.core.ServiceContext; +import com.budwk.app.flow.engine.model.TaskModel; +import com.budwk.app.sys.models.Sys_role; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.sys.services.SysRoleService; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.lang.Lang; + +import java.util.List; + +/** + * @ClassName FlowGeneralViceDelegationAuditSelfUnitByArgsAssignmentHandler + * @Author JyuHsin + * @Date 2026/1/30 10:14 + * @Version 1.0 + * @Description 获取代表团副团长,只有联合代表团才有副团长审核,而且只审核副团长自己单位的提案 + */ +public class FlowGeneralViceDelegationAuditSelfUnitByArgsAssignmentHandler implements AssignmentHandler { + @Override + public List assign(TaskModel model, Execution execution) { + String sessionId = execution.getArgs().getStr("sessionId"); + String delegationId = execution.getArgs().getStr("delegationId"); + String unitId = execution.getArgs().getStr("unitId"); + + if (StrUtil.isBlank(sessionId)) { + throw new BaseException("参数 sessionId 不能为空"); + } + if (StrUtil.isBlank(delegationId)) { + throw new BaseException("参数 delegationId 不能为空"); + } + if (StrUtil.isBlank(unitId)) { + throw new BaseException("参数 unitId 不能为空"); + } + + SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class); + Sys_role role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD); + + List roles = ServiceContext.find(Dao.class).query( + Sys_user_role.class, + Cnd.where(Sys_user_role::getRoleId, "=", role.getId()) + .and(Sys_user_role::getTcDelegationId, "=", delegationId) + .and(Sys_user_role::getTcSessionId, "=", sessionId) + ); + + if (Lang.isEmpty(roles)) { + throw new RuntimeException("您所在的代表团没有设置副团长,无法流转到下一步,请联系校工会进行设置。"); + } + + List list = roles.stream().map(Sys_user_role::getUserId).toList(); + List userList = ServiceContext.find(Dao.class).query(Sys_user.class, Cnd.where(Sys_user::getId, "in", list)); + + // 过滤本单位的副团长 + List auditUserList = userList.stream().filter(user -> user.getUnitId().equals(unitId)).toList(); + if (Lang.isEmpty(auditUserList)) { + throw new RuntimeException("您所在的代表团没有设置和您所在单位相符的副团长。"); + } + + return auditUserList.stream().map(Sys_user::getId).toList(); + } + + @Override + public String getMessage() { + return "获取代表团副团长(审核副团长本单位,根据args中的sessionId和delegationId和unitId)"; + } + + @Override + public int getOrder() { + return AssignmentHandler.super.getOrder(); + } +} diff --git a/src/main/java/com/budwk/app/sys/controller/SysLoginController.java b/src/main/java/com/budwk/app/sys/controller/SysLoginController.java index 5dee8b02..4ea9dada 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysLoginController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysLoginController.java @@ -68,7 +68,6 @@ public class SysLoginController { @Ok("re") @ApiOperation("用户本地登录页面") @Filters - @SaCheckLogin public String login(HttpServletRequest req, HttpSession session) { return "beetl:/platform/sys/login.html"; } @@ -76,7 +75,6 @@ public class SysLoginController { @At @Ok("re") @Filters - @SaCheckLogin public String h5() { return "beetl:/platform/sys/login.html"; } @@ -92,7 +90,6 @@ public class SysLoginController { @At("/doLogin") @Ok("json") @ApiOperation("用户本地账号密码登录") - @SaCheckLogin public Object doLogin(@Param("username") String username, @Param("password") String password, @Param("platformKey") String captchaKey, diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalViceDelegationController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalViceDelegationController.java index 6b0562dd..127b1e5f 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalViceDelegationController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalViceDelegationController.java @@ -4,7 +4,9 @@ import cn.dev33.satoken.annotation.SaCheckPermission; 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.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.democratic.proposal.param.ProposalSearchParam; import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; import io.swagger.annotations.Api; @@ -19,6 +21,7 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import javax.validation.Valid; +import java.util.List; @IocBean @At("/platform/proposal/vice/delegation") @@ -45,8 +48,8 @@ public class ProposalViceDelegationController { @At @SaCheckPermission("proposal.vice.delegation") @ApiOperation("分页列表") - public Result pageData(@Valid ProposalSearchParam pageForm) { - Sql sql = Sqls.create(""" + public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval) { + /*Sql sql = Sqls.create(""" SELECT info.*, type.NAME AS typeName, @@ -83,8 +86,59 @@ public class ProposalViceDelegationController { cnd.groupBy("info.id"); sql.setCondition(cnd); Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); - return Result.success(pagination); + return Result.success(pagination);*/ + 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, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + 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 AND rt.taskState = 10 + 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", "=", "viceDelegation"); + + if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + } + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + 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); } - } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalDelegationPrefixInterceptor.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalDelegationPrefixInterceptor.java new file mode 100644 index 00000000..a5367701 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalDelegationPrefixInterceptor.java @@ -0,0 +1,87 @@ +package com.budwk.app.zhgh.democratic.proposal.interceptor; + +import cn.hutool.core.util.ObjectUtil; +import com.budwk.app.base.constant.RoleConstant; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowInterceptor; +import com.budwk.app.flow.engine.core.Execution; +import com.budwk.app.flow.engine.core.ServiceContext; +import com.budwk.app.sys.models.Sys_role; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.sys.models.Sys_user_role; +import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; +import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; + +import java.util.List; + +/** + * @ClassName ProposalDelegationPrefixInterceptor + * @Author JyuHsin + * @Date 2026/1/30 10:27 + * @Version 1.0 + * @Description 提案团长审核前置拦截器 用于设置是否联合代表团 tf_unite + */ +public class ProposalDelegationPrefixInterceptor implements FlowInterceptor { + + @Override + public void intercept(Execution execution) { + Dao dao = ServiceContext.find(Dao.class); + + String proposalId = execution.getProcessInstance().getBusinessNo(); + // 获取提案信息 + ProposalInfo proposalInfo = dao.fetch(ProposalInfo.class, proposalId); + // 获取代表团信息 + Teacher_congress_delegation delegation = dao.fetch(Teacher_congress_delegation.class, proposalInfo.getDelegationId()); + // 是否联合代表团 + Boolean untie = ObjectUtil.defaultIfNull(delegation.getUnite(), false); + + String delegationAudit = ""; + if (!untie) { + delegationAudit = "delegation"; + } else { + // 如果是联合代表团,查询提案人的单位是否有副团长 + Sys_user user = dao.fetch(Sys_user.class, proposalInfo.getCreateUserId()); + SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class); + Sys_role role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD); + + Sql sql = Sqls.fetchInt(""" + SELECT + count(1) as count + FROM + `sys_user` u + LEFT JOIN sys_user_role ur ON u.id = ur.userId + WHERE + u.unitId = @unitId + AND ur.roleId = @roleId + AND ur.tcSessionId = @sessionId + AND ur.tcDelegationId = @delegationId + """); + sql.setParam("unitId", user.getUnitId()); + sql.setParam("roleId", role.getId()); + sql.setParam("sessionId", proposalInfo.getSessionId()); + sql.setParam("delegationId", proposalInfo.getDelegationId()); + + dao.execute(sql); + int count = sql.getInt(); + if (count == 0) { + delegationAudit = "delegation"; + } else { + delegationAudit = "viceDelegation"; + } + } + + execution.getArgs().set(FlowConst.TASK_FORM_DATA_PREFIX + "delegationAudit", delegationAudit); + + // 存储一些参数,方便查询副团长 + execution.getArgs().set("sessionId", proposalInfo.getSessionId()); + execution.getArgs().set("delegationId", proposalInfo.getDelegationId()); + + Sys_user user = dao.fetch(Sys_user.class, proposalInfo.getCreateUserId()); + execution.getArgs().set("unitId", user.getUnitId()); + } +} diff --git a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/viceDelegation/index.html b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/viceDelegation/index.html index 48f730e2..ff98db28 100644 --- a/src/main/resources/views/platform/zhgh/democratic/proposal/transact/viceDelegation/index.html +++ b/src/main/resources/views/platform/zhgh/democratic/proposal/transact/viceDelegation/index.html @@ -25,12 +25,13 @@ layout("/layouts/platform.html"){ - - - - + + 已审核 + 未审核 + + - + @@ -63,7 +68,26 @@ layout("/layouts/platform.html"){ @@ -80,6 +104,7 @@ layout("/layouts/platform.html"){ }, data() { return { + sessionOptions: [], tableColumns: [ {label: "提案编号", prop: "code"}, {label: "提案名称", prop: "name", width: "200px"}, diff --git a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/delegation/index.html b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/delegation/index.html index 858787d4..919f9b2f 100644 --- a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/delegation/index.html +++ b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/delegation/index.html @@ -66,7 +66,7 @@ layout("/layouts/platform_h5.html"){
退回 - 不同意 + 不同意 同意
diff --git a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/viceDelegation/index.html b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/viceDelegation/index.html index 79ba6ca5..c3eddcd6 100644 --- a/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/viceDelegation/index.html +++ b/src/main/resources/views/platform/zhghh5/democratic/proposal/transact/viceDelegation/index.html @@ -2,7 +2,7 @@ layout("/layouts/platform_h5.html"){ #-->
- + - - - - - + + + + 查看
+
+ + 审核 +
+
+ + 撤回 +
- + +
+
{{formData.taskName}}
+ + + +
+ 退回 + 不同意 + 同意 +
+
+