diff --git a/src/main/java/com/budwk/app/flow/constant/FlowConst.java b/src/main/java/com/budwk/app/flow/constant/FlowConst.java index 5dbec2cb..02897d90 100644 --- a/src/main/java/com/budwk/app/flow/constant/FlowConst.java +++ b/src/main/java/com/budwk/app/flow/constant/FlowConst.java @@ -7,7 +7,7 @@ public interface FlowConst { // 业务流程号 String BUSINESS_NO = "BUSINESS_NO"; // 超级管理员ID - String ADMIN_ID = "flow.admin"; + String ADMIN_ID = "17a7f8ad3ee947b4a26175049a9c253d"; // 自动执行ID String AUTO_ID = "flow.auto"; String PROCESS_NAME_KEY = "name"; diff --git a/src/main/java/com/budwk/app/flow/enums/ProcessSubmitTypeEnum.java b/src/main/java/com/budwk/app/flow/enums/ProcessSubmitTypeEnum.java index 535d6d8a..afdb4bf5 100644 --- a/src/main/java/com/budwk/app/flow/enums/ProcessSubmitTypeEnum.java +++ b/src/main/java/com/budwk/app/flow/enums/ProcessSubmitTypeEnum.java @@ -11,13 +11,13 @@ import lombok.Getter; @Getter public enum ProcessSubmitTypeEnum { APPLY(0, "发起申请"), - AGREE(1, "同意申请"), - REJECT(2, "拒绝申请"), + AGREE(1, "同意"), + REJECT(2, "拒绝"), ROLLBACK(3, "退回上一步"), JUMP(4, "跳转"), RE_APPLY(5, "重新提交"), ROLLBACK_TO_OPERATOR(6, "退回发起人"), - COUNTERSIGN_DISAGREE(20, "拒绝申请"); + COUNTERSIGN_DISAGREE(20, "会签不同意"); private final Integer code; private final String message; diff --git a/src/main/java/com/budwk/app/flow/handler/FlowFghzxAssignmentHandler.java b/src/main/java/com/budwk/app/flow/handler/FlowFghzxAssignmentHandler.java index 7b8f16f8..879361da 100644 --- a/src/main/java/com/budwk/app/flow/handler/FlowFghzxAssignmentHandler.java +++ b/src/main/java/com/budwk/app/flow/handler/FlowFghzxAssignmentHandler.java @@ -1,9 +1,18 @@ 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.constant.FlowConst; 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_role; +import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import java.util.List; @@ -15,7 +24,14 @@ public class FlowFghzxAssignmentHandler implements AssignmentHandler { @Override public List assign(TaskModel model, Execution execution) { Dao dao = ServiceContext.find(Dao.class); - return List.of("17a7f8ad3ee947b4a26175049a9c253d"); + SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class); + Sys_role sysRole = sysRoleService.getByCode(RoleConstant.BRANCH_UNION_CHAIRMAN); + String unionId = StrUtil.blankToDefault(execution.getArgs().getStr(FlowConst.INITIATOR_UNIT_UNION_ID), SecurityUtil.getUnionId()); + Sys_user_role user_role = dao.fetch(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sysRole.getId()).and(Sys_user_role::getUnionId, "=", unionId)); + if (user_role == null) { + throw new BaseException("分工会主席没有设置,请联系校工会!", sysRole.getCode()); + } + return List.of(user_role.getUserId()); } @Override diff --git a/src/main/java/com/budwk/app/flow/service/impl/ProcessTaskServiceImpl.java b/src/main/java/com/budwk/app/flow/service/impl/ProcessTaskServiceImpl.java index 09d495b3..4b8f9307 100644 --- a/src/main/java/com/budwk/app/flow/service/impl/ProcessTaskServiceImpl.java +++ b/src/main/java/com/budwk/app/flow/service/impl/ProcessTaskServiceImpl.java @@ -401,10 +401,10 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl impleme // 增加是否为第一个任务节点标识 execution.getArgs().put(FlowConst.IS_FIRST_TASK_NODE, FlowUtil.isFistTaskName(execution.getProcessModel(), taskModel.getName())); //过滤上个任务的表单数据 避免造成污染 每个任务只保存自己的表单数据 - List removeKeys = execution.getArgs().keySet().stream().filter(k -> k.startsWith(FlowConst.TASK_FORM_DATA_PREFIX) || k.equals(FlowConst.SUBMIT_TYPE)).toList(); - for (String key : removeKeys) { - execution.getArgs().remove(key); - } +// List removeKeys = execution.getArgs().keySet().stream().filter(k -> k.startsWith(FlowConst.TASK_FORM_DATA_PREFIX) || k.equals(FlowConst.SUBMIT_TYPE)).toList(); +// for (String key : removeKeys) { +// execution.getArgs().remove(key); +// } processTask.setVariable(JSONUtil.toJsonStr(execution.getArgs())); processTask.setCreatedAt(now); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleBranchUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleBranchUnionApprovalController.java index 4f2010d2..4bd5a58b 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleBranchUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleBranchUnionApprovalController.java @@ -1,48 +1,27 @@ package com.budwk.app.zhgh.dayofficework.article.controller; -import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.lang.Dict; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; -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.base.utils.FieldMappingUtil; import com.budwk.app.base.utils.PageUtil; -import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum; -import com.budwk.app.bpm.param.BpmTaskApprovalParam; -import com.budwk.app.bpm.service.BpmService; -import com.budwk.app.flow.constant.FlowConst; -import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.web.controllers.open.commons.service.CommonService; -import com.budwk.app.zhgh.dayofficework.article.models.Article; import com.budwk.app.zhgh.dayofficework.article.param.ArticleInfoPageParam; import com.budwk.app.zhgh.dayofficework.article.service.ArticleService; -import com.budwk.app.zhgh.dayofficework.article.vo.ArticlePageVo; 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.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.lang.util.NutMap; 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.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; @IocBean @At("/platform/article/branchUnionApproval") @@ -52,13 +31,6 @@ public class ArticleBranchUnionApprovalController { @Inject private ArticleService articleService; - @Inject - private BpmService bpmService; - @Inject - private CommonService commonService; - @Inject - private FlowEngine flowEngine; - @At("") @Ok("beetl:/platform/zhgh/dayofficework/article/branchUnionApproval/index.html") @@ -66,13 +38,6 @@ public class ArticleBranchUnionApprovalController { public void index() { } - @At("/form") - @Ok("beetl:/platform/zhgh/dayofficework/article/branchUnionApproval/form.html") - @SaCheckLogin - public void form() { - } - - @At @SaCheckPermission("article.branchUnionApproval") @ApiOperation("分页查询") @@ -89,7 +54,7 @@ public class ArticleBranchUnionApprovalController { ins.id AS instanceId, ins.businessNo, ins.state instanceState, - ins.variable instanceVariale, + ins.variable instanceVariable, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -98,20 +63,24 @@ public class ArticleBranchUnionApprovalController { t.taskState, t.finishTime, t.taskParentId, - t.variable taskVariale + 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 article info ON info.id = ins.businessNo 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 $condition """); Cnd cnd = Cnd.NEW(); - cnd.and("t.taskName", "=", "f4d62c2d-3947-4c68-b34f-127af89952b0"); + cnd.and("t.taskName", "=", "f20544eb-5dcf-4913-a5e1-97dc3ad79e9c"); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); if (approval) { - cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } @@ -126,19 +95,10 @@ public class ArticleBranchUnionApprovalController { } else { cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); Pagination pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pageVO); } - - @At - @SaCheckPermission("article.branchUnionApproval") - @Aop(TransAop.READ_COMMITTED) - public Result doApproval(Long taskId, @Param("submitType") Integer submitType) { - Dict args = new Dict(); - args.put(FlowConst.SUBMIT_TYPE,submitType); - flowEngine.executeProcessTask(taskId, SecurityUtil.getUserId(), args); - return Result.success(); - } - } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java index 7b3caf44..dcbbcab5 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleClubApprovalController.java @@ -12,6 +12,7 @@ import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum; import com.budwk.app.bpm.param.BpmTaskApprovalParam; import com.budwk.app.bpm.service.BpmService; +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.web.controllers.open.commons.service.CommonService; @@ -28,6 +29,7 @@ import org.nutz.dao.util.cri.Static; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; @@ -48,8 +50,6 @@ public class ArticleClubApprovalController { private BpmService bpmService; @Inject private CommonService commonService; -// @Inject -// private SnakerEngine snakerEngine; @At("") @Ok("beetl:/platform/zhgh/dayofficework/article/clubApproval/index.html") @@ -63,34 +63,49 @@ public class ArticleClubApprovalController { public Result pageData(@Valid ArticleInfoPageParam pageForm, boolean approval) { Sql sql = Sqls.create(""" SELECT - info.*, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - task.id processInstanceTaskId, - task.taskStatus processInstanceTaskStatus, - COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete\s + info.id, + info.title, + info.userName, + info.loginName, + info.unitName, + info.unionName, + info.submitTime, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + 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 - bpm_process_task task - INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId - INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId - INNER JOIN article info ON info.id = inst.processInstanceBusinessId - LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE' + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN article info ON info.id = ins.businessNo + 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 $condition """); Cnd cnd = Cnd.NEW(); - if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { - cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); - } - cnd.and("nd.nodeCode", "=", 32); + cnd.and("t.taskName", "=", "3237778f-23a3-462b-8f0a-1fd1db151390"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } + cnd.desc("t.createdAt"); + cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear()); cnd.and(Cnd.likeEX("info.title", pageForm.getTitle())); @@ -100,35 +115,8 @@ public class ArticleClubApprovalController { cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } sql.setCondition(cnd); - Pagination pageVO = articleService.listPageVO(pageForm, sql, ArticleInfoPageVO.class); + Pagination pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pageVO); } - @At - @SaCheckPermission("article.clubApproval") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "新闻投稿", msg = "协会审核") - @ApiOperation("协会审核") - public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam) { - approvalParam.getBpmTaskApprovalTypeEnum(); - Map variables = BeanUtil.beanToMap(approvalParam); - List assignments = new ArrayList<>(); - if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)) { - String schoolUnionApprovalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ARTICLE_ADMIN, Cnd.NEW()); - assignments.add(schoolUnionApprovalLoginName); - } - bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments); - return Result.success(); - } - - - @At - @SaCheckPermission("article.clubApproval") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "新闻投稿", msg = "协会撤回") - @ApiOperation("协会撤回") - public Result revoke(@Valid String taskId) { - bpmService.revokeTask(taskId); - return Result.success(); - } } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleExamineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleExamineController.java index 195cdebb..a64099e0 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleExamineController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleExamineController.java @@ -12,6 +12,7 @@ import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; import com.budwk.app.bpm.models.BpmProcessInstance; import com.budwk.app.bpm.param.BpmTaskApprovalParam; import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.sys.models.Sys_user_role; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; @@ -31,6 +32,7 @@ import org.nutz.dao.util.cri.Static; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; @@ -67,94 +69,63 @@ public class ArticleExamineController { public Result pageData(@Valid ArticleInfoPageParam pageForm, boolean approval) { Sql sql = Sqls.create(""" SELECT - info.*, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - task.id processInstanceTaskId, - task.taskStatus processInstanceTaskStatus, - COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete\s + info.id, + info.title, + info.userName, + info.loginName, + info.unitName, + info.unionName, + info.submitTime, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + 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 - bpm_process_task task - INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId - INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId - INNER JOIN article info ON info.id = inst.processInstanceBusinessId - LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE' + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN article info ON info.id = ins.businessNo + 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 $condition """); Cnd cnd = Cnd.NEW(); - if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { - cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); - } - cnd.and("nd.nodeCode", "=", 60); + cnd.and("t.taskName", "=", "27f618b9-bff8-4382-87c9-d9abd9f5963c"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } + cnd.desc("t.createdAt"); + cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear()); cnd.and(Cnd.likeEX("info.title", pageForm.getTitle())); - cnd.andEX("info.unionId","=",pageForm.getUnionId()); - cnd.andEX("info.unitId","=",pageForm.getUnitId()); - cnd.andEX("info.origin","=",pageForm.getOrigin()); - if(StrUtil.isAllBlank(pageForm.getPageOrderName(),pageForm.getPageOrderBy())){ + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { cnd.desc("info.submitTime"); - }else{ + } else { cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); - Pagination pageVO = articleService.listPageVO(pageForm, sql, ArticleInfoPageVO.class); + Pagination pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pageVO); } - @At - @SaCheckPermission("article.examine") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "新闻投稿", msg = "新闻审核") - @ApiOperation("新闻审批") - public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam, @Valid @Param("result") String result, String publishLink) { - approvalParam.getBpmTaskApprovalTypeEnum(); - Map variables = BeanUtil.beanToMap(approvalParam); - variables.put("RESULT", result); - variables.put("publishLink", publishLink); - - Article article = dao.fetch(Article.class, approvalParam.getProcessInstanceBusinessId()); - - List assignments = new ArrayList<>(); - if (result.equals("BACK_TO_START")) { - String processInstanceId = approvalParam.getProcessInstanceId(); - BpmProcessInstance instance = dao.fetch(BpmProcessInstance.class, processInstanceId); - assignments.add(instance.getProcessInstanceInitiatorLoginName()); - } else if (result.equals("BACK_TO_UNION")) { - String branchUnionApprovalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.BRANCH_UNION_CHAIRMAN, Cnd.where(Sys_user_role::getUnionId, "=", article.getUnionId())); - if (StrUtil.isBlank(branchUnionApprovalLoginName)) { - return Result.error("分工会未配置审批人,请联系校工会!"); - } - assignments.add(branchUnionApprovalLoginName); - } else if (result.equals("BACK_TO_CLUB")) { - String branchClubApprovalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.CLUB_PRESIDENT, Cnd.where(Sys_user_role::getClubId, "=", article.getClubId())); - if (StrUtil.isBlank(branchClubApprovalLoginName)) { - return Result.error("协会未配置审批人,请联系协会!"); - } - assignments.add(branchClubApprovalLoginName); - } - bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments); - return Result.success(); - } - - @At - @SaCheckPermission("article.examine") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "新闻投稿", msg = "编辑终审撤回") - @ApiOperation("编辑终审撤回") - public Result revoke(@Valid String taskId) { - bpmService.revokeTask(taskId); - return Result.success(); - } - } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleMineController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleMineController.java index ef0c17b7..0cd38833 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleMineController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleMineController.java @@ -6,6 +6,7 @@ import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.dayofficework.article.models.Article; import com.budwk.app.zhgh.dayofficework.article.param.ArticleInfoPageParam; @@ -38,6 +39,8 @@ public class ArticleMineController { @Inject private ArticleService articleService; + @Inject + private FlowEngine flowEngine; @At("") @Ok("beetl:/platform/zhgh/dayofficework/article/mine/index.html") @@ -61,7 +64,7 @@ public class ArticleMineController { ins.id AS instanceId, ins.businessNo, ins.state instanceState, - ins.variable instanceVariale, + ins.variable instanceVariable, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -70,7 +73,9 @@ public class ArticleMineController { t.taskState, t.finishTime, t.taskParentId, - t.variable taskVariale + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId FROM article info LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id @@ -85,56 +90,8 @@ public class ArticleMineController { sql.setCondition(cnd); Pagination pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pageVO); - -// // 获取当前用户发起的流程实例列表 -// Page page = new Page<>(); -// page.setPageNo(pageForm.getPageNumber()); -// page.setPageSize(pageForm.getPageSize()); -// QueryFilter queryFilter = new QueryFilter(); -//// queryFilter.setProcessId("89032d1a30ee46e79361b503a5d250db"); -// queryFilter.setName("XWTG"); -// -// List historyOrders = snakerEngine.query().getHistoryOrders(page, queryFilter); -// -// Cnd cnd = Cnd.NEW(); -// cnd.and("userId", "=", SecurityUtil.getUserId()); -// cnd.andEX("YEAR(submitTime)", "=", pageForm.getYear()); -// cnd.and(Cnd.likeEX("title", pageForm.getTitle())); -// cnd.desc("submitTime"); -// Pagination
pagination = articleService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); -// -// List> list = pagination.getList().stream().map(row -> { -// Map mapBean = BeanUtil.beanToMap(row); -// Optional hisOrder = historyOrders.stream().filter(historyOrder -> historyOrder.getVariableMap().get("businessId").equals(row.getId())).findFirst(); -// hisOrder.ifPresent(historyOrder -> mapBean.put("instance", historyOrder)); -// -// // 查询任务信息 -// if (hisOrder.isPresent()) { -// List tasks = snakerEngine.query().getActiveTasks(new QueryFilter().setOrderId(hisOrder.get().getId())); -// // 待办任务列表 -// mapBean.put("activeTasks", tasks); -// // 当前任务节点 -// mapBean.put("activeTaskName", tasks.stream().map(Task::getDisplayName).collect(Collectors.joining(","))); -// // 申请的任务列表 只会有一条吧 别搞 -// mapBean.put("applyTask", tasks.stream().filter(task -> task.getParentTaskId().equals("start")).findFirst().orElse(null)); -// } -// return mapBean; -// }).toList(); -// -// Pagination> mapPagination = new Pagination<>(pagination.getPageNo(), pagination.getPageSize(), pagination.getTotalCount(), list); -// -// return Result.success(mapPagination); } - @At - @SaCheckPermission("article.mine") - @ApiOperation("撤回") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "新闻投稿", msg = "撤回新闻投稿") - public Result revokeApply(@Valid String id) { -// bpmService.revokeApply(id); - return Result.success(); - } @At @SaCheckPermission("article.mine") @@ -143,7 +100,7 @@ public class ArticleMineController { @SLog(tag = "新闻投稿", msg = "删除新闻投稿") public Result delete(@Valid String id) { articleService.delete(id); -// bpmService.deleteInstance(id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java index cc175f9d..89d6e629 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleQueryController.java @@ -43,19 +43,14 @@ public class ArticleQueryController { Sql sql = Sqls.create(""" SELECT info.*, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeCode, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus + ins.id AS instanceId, + ins.processDefineId instanceProcessDefineId FROM article info - LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id $condition """); Cnd cnd = Cnd.NEW(); - cnd.and("inst.processInstanceNodeCode", "=", 80); cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear()); if (StrUtil.isNotBlank(pageForm.getTitle())) { cnd.and(Cnd.likeEX("info.title", pageForm.getTitle())); diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleSchoolUnionApprovalController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleSchoolUnionApprovalController.java index ac85754d..6d84a7ff 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleSchoolUnionApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleSchoolUnionApprovalController.java @@ -1,46 +1,30 @@ package com.budwk.app.zhgh.dayofficework.article.controller; -import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.lang.Dict; import cn.hutool.core.util.StrUtil; -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.base.utils.PageUtil; -import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; -import com.budwk.app.bpm.param.BpmTaskApprovalParam; import com.budwk.app.bpm.service.BpmService; -import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowEngine; 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.web.controllers.open.commons.service.CommonService; import com.budwk.app.zhgh.dayofficework.article.param.ArticleInfoPageParam; import com.budwk.app.zhgh.dayofficework.article.service.ArticleService; -import com.budwk.app.zhgh.dayofficework.article.vo.ArticleInfoPageVO; 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.Sqls; import org.nutz.dao.sql.Sql; -import org.nutz.dao.util.cri.Static; -import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.util.NutMap; 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.ArrayList; import java.util.List; -import java.util.Map; @IocBean @At("/platform/article/schoolUnionApproval") @@ -63,12 +47,6 @@ public class ArticleSchoolUnionApprovalController { public void index() { } - @At("/form") - @Ok("beetl:/platform/zhgh/dayofficework/article/schoolUnionApproval/form.html") - @SaCheckLogin - public void form() { - } - @At @SaCheckPermission("article.schoolUnionApproval") @@ -86,7 +64,7 @@ public class ArticleSchoolUnionApprovalController { ins.id AS instanceId, ins.businessNo, ins.state instanceState, - ins.variable instanceVariale, + ins.variable instanceVariable, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -95,20 +73,24 @@ public class ArticleSchoolUnionApprovalController { t.taskState, t.finishTime, t.taskParentId, - t.variable taskVariale + 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 article info ON info.id = ins.businessNo 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 $condition """); Cnd cnd = Cnd.NEW(); - cnd.and("t.taskName", "=", "a29bdec1-e285-41f3-aa2c-2c24fccefea1"); + cnd.and("t.taskName", "=", "749b6917-58ba-4564-8701-4bd2491fcb98"); cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); if (approval) { - cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } @@ -123,22 +105,11 @@ public class ArticleSchoolUnionApprovalController { } else { cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); Pagination pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pageVO); } - - @At - @SaCheckPermission("article.branchUnionApproval") - @Aop(TransAop.READ_COMMITTED) - public Result doApproval(Long taskId, @Param("submitType") Integer submitType) { - Dict args = new Dict(); -// flowEngine.executeProcessTask(taskId, SecurityUtil.getUserId(), args); - args.set(FlowConst.SUBMIT_TYPE, submitType); - flowEngine.executeAndJumpToFirstTaskNode(taskId, SecurityUtil.getUserId(), args); - - return Result.success(); - } - } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java index 01e926ce..f94981e9 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/controller/ArticleWriteController.java @@ -1,10 +1,9 @@ package com.budwk.app.zhgh.dayofficework.article.controller; -import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.lang.Dict; -import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.result.Result; import com.budwk.app.bpm.service.BpmService; @@ -13,6 +12,7 @@ import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.entity.ProcessInstance; import com.budwk.app.flow.entity.ProcessTask; import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.controllers.open.commons.service.CommonService; import com.budwk.app.zhgh.club.model.ClubUser; @@ -53,6 +53,8 @@ public class ArticleWriteController { private SysClubService sysClubService; @Inject private FlowEngine flowEngine; + @Inject + private FlowCommonService flowCommonService; @At("") @Ok("beetl:/platform/zhgh/dayofficework/article/write/index.html") @@ -62,24 +64,12 @@ public class ArticleWriteController { } - @At - @SaCheckLogin - @Ok("beetl:/platform/zhgh/dayofficework/article/write/index_.html") - public void index_() { - - } - - @At @SaCheckPermission("article.write") @ApiOperation("保存新闻投稿") @Aop(TransAop.READ_COMMITTED) + @SLog(tag = "新闻投稿-新建投稿", msg = "保存投稿") public Result save(@Param("article") Article article) { -// dao.insertOrUpdate(article); -// // 启动流程 阻塞在第一个任务节点 -// ProcessInstance instance = flowEngine.startProcessInstanceByKey("XWTG", article.getId(), SecurityUtil.getUserId(), null); - - // 保存 dao.insertOrUpdate(article); return Result.success(article); } @@ -88,43 +78,41 @@ public class ArticleWriteController { @SaCheckPermission("article.write") @ApiOperation("提交新闻投稿") @Aop(TransAop.READ_COMMITTED) - public Result submit(@Param("article") Article article, Long instanceId, Long taskId) { + @SLog(tag = "新闻投稿-新建投稿", msg = "提交投稿") + public Result submit(@Param("article") Article article) { dao.insertOrUpdate(article); - if (instanceId == null && taskId == null) { - ProcessInstance instance = flowEngine.startProcessInstanceByKey("XWTG", article.getId(), SecurityUtil.getUserId(), null); - List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), new String[]{}); - for (ProcessTask task : doingTaskList) { - Dict args = new Dict(); - args.put(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); - args.put("origin", article.getOrigin()); - flowEngine.executeProcessTask(task.getId(), FlowConst.AUTO_ID, args); - } - } else { - flowEngine.executeProcessTask(taskId, SecurityUtil.getUserId(), Dict.create().set("origin", article.getOrigin())); - } - return Result.success(); - } + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, article); + args.set("origin", article.getOrigin()); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("XWTG", article.getId(), SecurityUtil.getUserId(), args); + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + + return Result.success(article); + } @At @SaCheckPermission("article.write") - @ApiOperation("撤销新闻投稿") @Aop(TransAop.READ_COMMITTED) - public Result revokeApply(@Param("id") String id) { -// FlowInstance instance = dao.fetch(FlowInstance.class, Cnd.where(FlowInstance::getBusinessId, "=", id)); -// BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus()); -// FlowParams flowParams = FlowParams.build() -//// .message(message) -// .flowStatus(BusinessStatusEnum.CANCEL.getStatus()) -// .hisStatus(BusinessStatusEnum.CANCEL.getStatus()) -// .handler(SecurityUtil.getUserId()) -// .ignore(true); -// taskService.revoke(instance.getId(), flowParams); + @ApiOperation("重新提交投稿") + @SLog(tag = "新闻投稿-新建投稿", msg = "重新提交投稿") + public Result submitAgain(@Param("article") Article article, @Param("taskId") Long taskId) { + dao.insertOrUpdate(article); + + Dict dict = Dict.create(); + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + flowCommonService.executeTask(dict); return Result.success(); } - @At @SaCheckPermission("article.write") @ApiOperation("新闻投稿详情") diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/article/models/Article.java b/src/main/java/com/budwk/app/zhgh/dayofficework/article/models/Article.java index f2421191..d99544a1 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/article/models/Article.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/article/models/Article.java @@ -24,11 +24,6 @@ public class Article extends BaseModel { @PrevInsert(uu32 = true) private String id; - @Column - @Comment("流程实例ID") - @ColDefine(type = ColType.VARCHAR, width = 255) - private String instanceId; - @Column @Comment("标题") @ColDefine(type = ColType.VARCHAR, width = 100) diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduChapters.java b/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduChapters.java new file mode 100644 index 00000000..684c4ba4 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduChapters.java @@ -0,0 +1,38 @@ +package com.budwk.app.zhgh.dayofficework.edu.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +@EqualsAndHashCode(callSuper = true) +@Data +@Table("edu_chapters") +@Comment("理论学习视频章节表") +public class EduChapters extends BaseModel { + + @Comment("ID") + @Name + @PrevInsert(uu32 = true) + @ColDefine(type = ColType.VARCHAR, width = 32) + private String id; + + @Comment("课程ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @Column + private String courseId; + + @Comment("标题") + @ColDefine(type = ColType.VARCHAR, width = 200) + @Column + private String title; + + @Comment("排序码") + @ColDefine(type = ColType.INT) + @Column + private Integer sortCode; + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduCourses.java b/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduCourses.java new file mode 100644 index 00000000..5d8c5224 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduCourses.java @@ -0,0 +1,48 @@ +package com.budwk.app.zhgh.dayofficework.edu.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +@EqualsAndHashCode(callSuper = true) +@Data +@Table("edu_courses") +@Comment("理论学习课程表") +public class EduCourses extends BaseModel { + + @Comment("ID") + @Name + @PrevInsert(uu32 = true) + @ColDefine(type = ColType.VARCHAR, width = 32) + private String id; + + @Comment("标题") + @ColDefine(type = ColType.VARCHAR, width = 100) + @Column + private String title; + + @Comment("描述") + @ColDefine(type = ColType.VARCHAR, width = 500) + @Column + private String description; + + @Comment("封面") + @ColDefine(type = ColType.VARCHAR, width = 500) + @Column + private String cover; + + @Comment("分类") + @ColDefine(type = ColType.VARCHAR, width = 50) + @Column + private String category; + + @Comment("是否禁用") + @ColDefine(type = ColType.BOOLEAN) + @Column + @Default(value = "0") + private Boolean disabled; + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduStudyRecords.java b/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduStudyRecords.java new file mode 100644 index 00000000..c8a3da3d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduStudyRecords.java @@ -0,0 +1,56 @@ +package com.budwk.app.zhgh.dayofficework.edu.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.Date; + +@EqualsAndHashCode(callSuper = true) +@Data +@Table("edu_study_records") +@Comment("理论学习学习记录表") +public class EduStudyRecords extends BaseModel { + + @Comment("ID") + @Name + @PrevInsert(uu32 = true) + @ColDefine(type = ColType.VARCHAR, width = 32) + private String id; + + @Comment("用户ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @Column + private String userId; + + @Comment("视频ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @Column + private String videoId; + + @Comment("课程ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @Column + private String courseId; + + @Comment("观看时长") + @ColDefine(type = ColType.INT) + @Column + @Default("0") + private Integer watchedDuration; + + @Comment("上次观看时间") + @ColDefine(type = ColType.DATETIME) + @Column + private Date lastWatchedTime; + + @Comment("是否完成") + @ColDefine(type = ColType.BOOLEAN) + @Column + @Default("0") + private Boolean isCompleted; + + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduVideos.java b/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduVideos.java new file mode 100644 index 00000000..1634847f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/edu/models/EduVideos.java @@ -0,0 +1,51 @@ +package com.budwk.app.zhgh.dayofficework.edu.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +@EqualsAndHashCode(callSuper = true) +@Data +@Table("edu_videos") +@Comment("理论学习视频表") +public class EduVideos extends BaseModel { + + @Comment("ID") + @Name + @PrevInsert(uu32 = true) + @ColDefine(type = ColType.VARCHAR, width = 32) + private String id; + + @Comment("章节ID") + @ColDefine(type = ColType.VARCHAR, width = 32) + @Column + private String chapterId; + + @Comment("标题") + @ColDefine(type = ColType.VARCHAR, width = 200) + @Column + private String title; + + @Comment("视频地址") + @ColDefine(type = ColType.VARCHAR, width = 500) + @Column + private String url; + + @Comment("时长") + @ColDefine(type = ColType.INT) + @Column + @Default("0") + private Integer duration; + + @Comment("描述") + @ColDefine(type = ColType.VARCHAR, width = 500) + private String description; + + @Comment("排序码") + @ColDefine(type = ColType.INT) + @Column + private Integer sortCode; + +} diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/controller/QsvActivityController.java b/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/controller/QsvActivityController.java index 0832609f..65349f87 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/controller/QsvActivityController.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/qsv/controller/QsvActivityController.java @@ -43,7 +43,7 @@ public class QsvActivityController { } -// 分页查询 + //分页查询 @At @SaCheckPermission("qsv.activity") public Result pageData(@Valid PageForm pageForm, Integer year, String title) { @@ -55,7 +55,7 @@ public class QsvActivityController { } -// 保存问卷基础信息 + //保存问卷基础信息 @At @SaCheckPermission("qsv.activity") @ApiOperation("保存问卷基础信息") 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 2555459e..4cad0e13 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 @@ -46,7 +46,6 @@ public class ProposalCommonController { return Result.success(list); } - @At @SaCheckLogin @ApiOperation("查询全部的教代会") diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommitteeFilingController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommitteeFilingController.java index cc90e1a4..c80262ca 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommitteeFilingController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommitteeFilingController.java @@ -12,6 +12,7 @@ import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; import com.budwk.app.bpm.models.BpmProcessTask; import com.budwk.app.bpm.param.BpmTaskApprovalParam; import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.sys.services.SysMsgService; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; @@ -48,14 +49,8 @@ import java.util.Map; @Api(tags = "提案委员会立案审核") public class ProposalCommitteeFilingController { - @Inject - private BaseService baseService; - @Inject - private BpmService bpmService; @Inject private ProposalCommitteeFilingService proposalCommitteeFilingService; - @Inject - private SysMsgService sysMsgService; @At("") @Ok("beetl:/platform/zhgh/democratic/proposal/transact/committeeFiling/index.html") @@ -64,118 +59,58 @@ public class ProposalCommitteeFilingController { } @At - @SaCheckPermission("proposal.committeeFiling") + @SaCheckPermission("proposal.delegation") @ApiOperation("分页列表") - public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval) { + public Result pageData(@Valid ProposalSearchParam pageForm,boolean approval) { Sql sql = Sqls.create(""" SELECT info.*, type.name AS typeName, - tcs.fullName AS sessionName, - tcd.`name` AS delegationName, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - task.id processInstanceTaskId, - task.taskStatus processInstanceTaskStatus, - COUNT(p.consolidationIds) > 0 AS isConsolidation, - EXISTS ( - SELECT 1 - FROM bpm_process_task next_task - WHERE next_task.prevTaskId = task.id - AND next_task.taskStatus = 'COMPLETE' - ) AS nextTaskIsComplete + 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 - bpm_process_task task - INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId - INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId - INNER JOIN proposal_info info ON info.id = inst.processInstanceBusinessId - LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) + 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 + 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(); - if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { - cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); - } - cnd.and("nd.nodeCode", "=", 60); + cnd.and("t.taskName", "=", "9846ab38-40c5-4093-bafc-a9b3b443338b"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } ProposalSearchParam.buildSearch(cnd, pageForm); - cnd.and(new Static(""" - NOT EXISTS( - SELECT 1 - FROM bpm_process_task t2 - WHERE t2.processInstanceId = task.processInstanceId - AND t2.processTaskNodeCode = task.processTaskNodeCode - AND t2.createdOn > task.createdOn - ) - """)); - cnd.groupBy("info.id"); - cnd.groupBy("task.id"); + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); - Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class); + Pagination pagination = proposalCommitteeFilingService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(), sql); return Result.success(pagination); } - @At - @SaCheckPermission("proposal.committeeFiling") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案委员会立案审核", msg = "立案") - @ApiOperation("立案") - public Result approval(@Valid @Param("approval") ProposalCommitteeFilingApprovalParam approvalParam) { - proposalCommitteeFilingService.approval(approvalParam); - return Result.success(); - } - - @At - @SaCheckPermission("proposal.committeeFiling") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案委员会立案审核", msg = "退回提案人") - @ApiOperation("退回提案人") - public Result approvalBack(@Valid BpmTaskApprovalParam approvalParam) { - approvalParam.getBpmTaskApprovalTypeEnum(); - Map variables = BeanUtil.beanToMap(approvalParam); - variables.put("caseFilingResult","退回提案人"); - bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null); - - //退回要清空附议人 - List secondedTasks = proposalCommitteeFilingService.dao().query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", approvalParam.getProcessInstanceId()).and(BpmProcessTask::getProcessTaskNodeCode, "=", 20)); - for (BpmProcessTask task : secondedTasks) { - proposalCommitteeFilingService.dao().update(BpmProcessTask.class, Chain.make("delFlag", true), Cnd.where(BpmProcessTask::getId, "=", task.getId())); - } - - ProposalInfo proposalInfo = baseService.dao().fetch(ProposalInfo.class, approvalParam.getProcessInstanceBusinessId()); - String template = "{}代表您好!您的提案《{}》提案委员会已经审核,审核结果为退回提案人重新修改,您可重新编辑提案邀请附议人再次提交,请您登录系统查看详情。"; - String content = StrUtil.format(template, proposalInfo.getCreateUserName(), proposalInfo.getName()); - sysMsgService.sendMsg(proposalInfo.getCreateUserLoginName(), "提案委员会立案审核", content, SecurityUtil.getUserId()); - - return Result.success(); - } - - - @At - @SaCheckPermission("proposal.committeeFiling") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案委员会立案审核", msg = "委员会立案撤回") - public Result revoke(@Valid String taskId) { - proposalCommitteeFilingService.revoke(taskId); - return Result.success(); - } - - @At - @ApiOperation("查询承办单位") - @SaCheckPermission("proposal.committeeFiling") - public Result listUnderTake() { - List list = baseService.dao().query(ProposalUndertake.class, Cnd.NEW().asc(ProposalUndertake::getCode)); - return Result.success(list); - } - } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalDelegationController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalDelegationController.java index dae7a0cf..d1ba58f9 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalDelegationController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalDelegationController.java @@ -9,6 +9,7 @@ import com.budwk.app.base.service.BaseService; import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; import com.budwk.app.bpm.param.BpmTaskApprovalParam; import com.budwk.app.bpm.service.BpmService; +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.controller.vo.ProposalInfoPageVO; @@ -31,6 +32,7 @@ import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; import javax.validation.Valid; +import java.util.List; /** * 团长审核 @@ -65,76 +67,51 @@ public class ProposalDelegationController { SELECT info.*, type.name AS typeName, - tcs.fullName AS sessionName, - tcd.`name` AS delegationName, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - task.id processInstanceTaskId, - task.taskStatus processInstanceTaskStatus, - EXISTS ( - SELECT 1 - FROM bpm_process_task next_task - WHERE next_task.prevTaskId = task.id - AND next_task.taskStatus = 'COMPLETE' - ) AS nextTaskIsComplete + 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 - bpm_process_task task - INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId - INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId - INNER JOIN proposal_info info ON info.id = inst.processInstanceBusinessId + 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 + 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(); - if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ - cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); - } - cnd.and("nd.nodeCode", "=", 30); + cnd.and("t.taskName", "=", "93d5ba64-8220-4e62-9783-83422f474b36"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); - cnd.groupBy("info.id"); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } ProposalSearchParam.buildSearch(cnd, pageForm); - cnd.and(new Static(""" - NOT EXISTS( - SELECT 1 - FROM bpm_process_task t2 - WHERE t2.processInstanceId = task.processInstanceId - AND t2.processTaskNodeCode = task.processTaskNodeCode - AND t2.createdOn > task.createdOn - ) - """)); + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); - Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class); + Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(), sql); return Result.success(pagination); } - @At - @SaCheckPermission("proposal.delegation") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案", msg = "团长审核") - @ApiOperation("审核") - public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam) { - proposalDelegationService.approval(approvalParam); - return Result.success(); - } - - @At - @SaCheckPermission("proposal.delegation") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案", msg = "团长审核撤回") - @ApiOperation("撤回") - public Result revoke(@Valid String taskId) { - proposalDelegationService.revokeTask(taskId); -// bpmService.revokeTask(taskId); - return Result.success(); - } - } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalFeedbackEvaluationController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalFeedbackEvaluationController.java index 9e3e6a60..54dd16ad 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalFeedbackEvaluationController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalFeedbackEvaluationController.java @@ -8,12 +8,14 @@ import com.budwk.app.base.result.Result; import com.budwk.app.base.service.BaseService; import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; import com.budwk.app.bpm.service.BpmService; +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.controller.vo.ProposalInfoPageVO; import com.budwk.app.zhgh.democratic.proposal.param.ProposalFeedbackEvaluationParam; import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam; import com.budwk.app.zhgh.democratic.proposal.service.ProposalFeedbackEvaluationService; +import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -30,6 +32,7 @@ import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; import javax.validation.Valid; +import java.util.List; @IocBean @At("/platform/proposal/feedbackEvaluation") @@ -39,9 +42,7 @@ import javax.validation.Valid; public class ProposalFeedbackEvaluationController { @Inject - private BaseService baseService; - @Inject - private BpmService bpmService; + private ProposalCommonService proposalCommonService; @Inject private ProposalFeedbackEvaluationService proposalFeedbackEvaluationService; @@ -59,65 +60,54 @@ public class ProposalFeedbackEvaluationController { SELECT info.*, type.name AS typeName, - tcs.fullName AS sessionName, - tcd.`name` AS delegationName, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - task.id processInstanceTaskId, - task.taskStatus processInstanceTaskStatus, - COUNT(p.consolidationIds) > 0 AS isConsolidation, - COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete + 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 - bpm_process_task task - INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId - INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId - INNER JOIN proposal_info info ON info.id = inst.processInstanceBusinessId - LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) + 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 - LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE' + 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(); - if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ - cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); + cnd.and("t.taskName", "=", "013a7cf9-20dd-4188-a196-53fd595448e5"); + + if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); } - cnd.and("nd.nodeCode", "=", 100); + if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } - sql.setCondition(cnd); ProposalSearchParam.buildSearch(cnd, pageForm); - cnd.groupBy("info.id"); - cnd.groupBy("task.id"); - Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class); + 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 - @SaCheckPermission("proposal.feedbackEvaluation") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案", msg = "反馈评分审核") - @ApiOperation("审核") - public Result approval(@Param("approval") @Valid ProposalFeedbackEvaluationParam param) { - proposalFeedbackEvaluationService.approval(param); - return Result.success(); - } - - @At - @SaCheckPermission("proposal.feedbackEvaluation") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案", msg = "反馈评分撤回") - @ApiOperation("撤回") - public Result revoke(@Valid String taskId) { - bpmService.revokeTask(taskId); - return Result.success(); - } - } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalMineController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalMineController.java index 4081423c..6acd0d25 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalMineController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalMineController.java @@ -1,24 +1,23 @@ package com.budwk.app.zhgh.democratic.proposal.controller.transact; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.lang.Dict; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HtmlUtil; -import cn.hutool.json.JSONUtil; 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.param.PageForm; import com.budwk.app.base.result.Result; import com.budwk.app.base.service.BaseService; -import com.budwk.app.bpm.dto.BpmAssignmentDto; -import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; -import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum; -import com.budwk.app.bpm.models.BpmProcessInstance; -import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; +import com.budwk.app.flow.service.ProcessTaskService; import com.budwk.app.sys.services.SysMsgService; -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.controller.vo.ProposalInfoPageVO; import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInviteSeconderVO; import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam; @@ -35,6 +34,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; @@ -55,9 +55,13 @@ public class ProposalMineController { @Inject private ProposalCommonService proposalCommonService; @Inject - private BpmService bpmService; - @Inject private SysMsgService sysMsgService; + @Inject + private FlowEngine flowEngine; + @Inject + private ProcessTaskService processTaskService; + @Inject + private FlowCommonService flowCommonService; @At("") @Ok("beetl:/platform/zhgh/democratic/proposal/transact/mine/index.html") @@ -75,58 +79,50 @@ public class ProposalMineController { type.name AS typeName, tcs.fullName AS sessionName, tcd.`name` AS delegationName, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeCode, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - ( - SELECT - count( 1 ) > 0 - FROM - bpm_process_task - WHERE - prevTaskId = ( SELECT id FROM bpm_process_task WHERE processInstanceId = inst.id AND processTaskNodeCode IN ( 10, 40 ) ORDER BY createdAt DESC LIMIT 1 ) - AND taskStatus = 'COMPELTE' - ) AS nextTaskIsComplete + 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, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId FROM proposal_info info 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 - LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id $condition """); Cnd cnd = Cnd.NEW(); - if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { - cnd.and("inst.processInstanceInitiatorLoginName", "=", SecurityUtil.getUserLoginname()); - } + cnd.and("info.createdBy", "=", SecurityUtil.getUserId()); ProposalSearchParam.buildSearch(cnd, pageForm); cnd.andEX("info.sessionId", "=", sessionId); cnd.groupBy("info.id"); sql.setCondition(cnd); - Pagination pagination = proposalCommonService.listPageVO(pageForm, sql, ProposalInfoPageVO.class); + Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pagination); } @At @SaCheckPermission("proposal.mine") @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案", msg = "删除提案") + @SLog(tag = "提案管理系统-我的提案", msg = "删除提案") public Result delete(@Valid String id) { dao.delete(ProposalInfo.class, id); - bpmService.deleteInstance(id); - return Result.success(); - } - - @At - @SaCheckPermission("proposal.mine") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案", msg = "撤回提案申请") - public Result revokeApply(@Valid String id) { - bpmService.revokeApply(id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); return Result.success(); } @@ -143,37 +139,9 @@ public class ProposalMineController { public Result listSeconder(@Valid PageForm pageForm, @Valid String proposalId, @Valid String sessionId, String delegationId, boolean isInvite) { if (isInvite) { - Sql hasInviteSql = Sqls.create(""" - SELECT - task.id, - JSON_EXTRACT( task.createVariable, '$.loginName' ) AS loginName, - JSON_EXTRACT( task.createVariable, '$.userName' ) AS userName, - JSON_EXTRACT( task.createVariable, '$.unitName' ) AS unitName, - JSON_EXTRACT( task.createVariable, '$.unionName' ) AS unionName, - JSON_EXTRACT( task.createVariable, '$.delegationName' ) AS delegationName, - JSON_EXTRACT( task.createVariable, '$.sex' ) AS sex - FROM - `bpm_process_task` task - INNER JOIN bpm_process_instance inst ON task.processInstanceId = inst.id - $condition - """); - Cnd cnd = Cnd.NEW(); - cnd.and("inst.processInstanceBusinessId", "=", proposalId); - cnd.and("task.processTaskNodeCode", "=", 20); - cnd.and("task.taskStatus", "!=", BpmProcessTaskStatusEnum.REVOKE.name()); - cnd.and("task.delFlag", "=", 0); - - if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { - SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.orLike("JSON_EXTRACT( task.createVariable, '$.loginName' )", pageForm.getSearchKeyword()); - seg.orLike("JSON_EXTRACT( task.createVariable, '$.userName' )", pageForm.getSearchKeyword()); - cnd.and(seg); - } - cnd.andEX("JSON_EXTRACT( task.createVariable, '$.delegationId' )", "=", delegationId); - hasInviteSql.setCondition(cnd); - Pagination pagination = proposalCommonService.listPageVO(pageForm, hasInviteSql, ProposalInviteSeconderVO.class); - return Result.success(pagination); + // 查询已经邀请的附议人 } else { + // 查询可邀请的附议人 Sql sql = Sqls.create(""" SELECT t1.loginName, @@ -189,7 +157,7 @@ public class ProposalMineController { """); Cnd cnd = Cnd.where("t1.sessionId", "=", sessionId); cnd.andEX("t1.delegationId", "=", delegationId); - cnd.and("t1.roleId","=","19fb858ae9514ddd999c85306b38bd02"); + cnd.and("t1.roleId", "=", "72e24b5b4c4f4e90a6641e6af8487e42"); cnd.and("t1.loginName", "!=", SecurityUtil.getUserLoginname()); if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { SqlExpressionGroup seg = new SqlExpressionGroup(); @@ -197,24 +165,11 @@ public class ProposalMineController { seg.orLike("t1.userName", pageForm.getSearchKeyword()); cnd.and(seg); } - - Sql hasInviteSql = Sqls.create(""" - SELECT - JSON_EXTRACT( task.createVariable, '$.loginName' ) AS loginName - FROM - `bpm_process_task` task - INNER JOIN bpm_process_instance inst ON task.processInstanceId = inst.id - WHERE inst.processInstanceBusinessId = @proposalId - AND task.processTaskNodeCode = 20 - AND task.taskStatus != 'REVOKE' - AND task.delFlag = 0 - $condition - """).setParam("proposalId", proposalId); - cnd.and("t1.loginName", "not in", hasInviteSql); sql.setCondition(cnd); Pagination pagination = proposalCommonService.listPageVO(pageForm, sql, ProposalInviteSeconderVO.class); return Result.success(pagination); } + return Result.success(); } @At @@ -225,6 +180,7 @@ public class ProposalMineController { //插入附议人数据 Sql sql = Sqls.create(""" SELECT + t1.id seconderId, t1.loginName, t1.userName, t1.sex, @@ -238,36 +194,28 @@ public class ProposalMineController { $condition """); sql.setCondition(Cnd.where("t1.loginName", "in", seconders).groupBy("t1.loginName")); - List seconderVOS = proposalCommonService.listVO(sql, ProposalInviteSeconderVO.class); + List list = proposalCommonService.listMap(sql); + // 附议人ID + List userIds = list.stream().map(item -> item.getString("seconderId")).toList(); + // 获取流程实例 + ProcessInstance processInstance = flowEngine.processInstanceService().fetch(Cnd.where(ProcessInstance::getBusinessNo, "=", proposalId)); + // 获取正在执行的任务(邀请附议人||提案附议) + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(processInstance.getId(), null); - List bpmAssignmentDtos = seconderVOS.stream().map(seconderVO -> { - BpmAssignmentDto assignmentDto = new BpmAssignmentDto(); - assignmentDto.setLoginName(seconderVO.getLoginName()); - assignmentDto.setJsonObject(JSONUtil.parseObj(seconderVO)); - return assignmentDto; - }).toList(); - - BpmProcessInstance processInstance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", proposalId)); - - //判断是否为撰写任务 团长退回 委员会退回 - if (List.of(10, 40, 61).contains(processInstance.getProcessInstanceNodeCode())) { - //完成自己的待办 - String taskId = processInstance.getProcessInstanceTaskIds().get(0); - bpmService.completeTaskWithNextTaskVariable(taskId, BpmTaskApprovalTypeEnum.PASS, null, bpmAssignmentDtos); - } else if (processInstance.getProcessInstanceNodeCode() == 20) { - //继续添加附议人 - BpmProcessInstance instance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", proposalId)); - bpmService.addTaskAssignmentsWithVariable(instance.getId(), processInstance.getProcessInstanceNodeCode(), bpmAssignmentDtos); - } - - ProposalInfo info = dao.fetch(ProposalInfo.class, proposalId); - String createUserName = info.getCreateUserName(); - String proposalName = info.getName(); - - for (ProposalInviteSeconderVO seconderVO : seconderVOS) { - String template = "{}代表,您好,{}代表的提案《{}》邀请您作为附议人,请您登陆智慧校园下的暖心工会系统进行附议,感谢您对教代会提案工作的大力支持!"; - String content = StrUtil.format(template, seconderVO.getUserName(), createUserName, proposalName); - sysMsgService.sendMsg(seconderVO.getLoginName(), "提案附议", content, info.getCreateUserId()); + if (doingTaskList.stream().anyMatch(task -> task.getTaskName().equals("85b7b9bd-d706-48cb-99a1-ef1370fb1819"))) { + // 完成邀请任务并添加附议人 + for (ProcessTask task : doingTaskList) { + Dict args = Dict.create(); + args.set(FlowConst.PROCESS_TASK_ID_KEY, task.getId()); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.AGREE.getCode()); + args.set(FlowConst.NEXT_NODE_OPERATOR, userIds); + args.set(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", list); + flowCommonService.executeTask(args); +// flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + } else { + // 加签 + processTaskService.addCandidateActor(doingTaskList.get(0).getId(), userIds); } return Result.success(); 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 1ee2aea5..26a7379e 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 @@ -1,35 +1,31 @@ package com.budwk.app.zhgh.democratic.proposal.controller.transact; 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.base.service.BaseService; -import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; +import com.budwk.app.base.vo.LabelValueVO; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.flow.service.ProcessTaskService; 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.controller.vo.ProposalInfoPageVO; import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam; -import com.budwk.app.zhgh.democratic.proposal.param.ProposalUnderTakeSchoolLeaderApprovalParam; import com.budwk.app.zhgh.democratic.proposal.service.ProposalSchoolLeaderApprovalService; +import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -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.dao.util.cri.Static; -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; @IocBean @At("/platform/proposal/schoolLeaderApproval") @@ -41,9 +37,11 @@ public class ProposalSchoolLeaderApprovalController { @Inject private Dao dao; @Inject - private BaseService baseService; - @Inject private ProposalSchoolLeaderApprovalService proposalSchoolLeaderApprovalService; + @Inject + private ProposalCommonService proposalCommonService; + @Inject + private ProcessTaskService processTaskService; @At("") @Ok("beetl:/platform/zhgh/democratic/proposal/transact/schoolLeaderApproval/index.html") @@ -54,77 +52,69 @@ public class ProposalSchoolLeaderApprovalController { @At @SaCheckPermission("proposal.schoolLeaderApproval") @ApiOperation("分页列表") - public Result pageData(@Valid ProposalSearchParam pageForm,boolean approval) { + public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval) { +// List vos = processTaskService.jumpAbleTaskNameList(280L); Sql sql = Sqls.create(""" SELECT info.*, type.name AS typeName, - tcs.fullName AS sessionName, - tcd.`name` AS delegationName, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - task.id processInstanceTaskId, - task.taskStatus processInstanceTaskStatus, - JSON_EXTRACT(task.createVariable, '$.isMaster') AS isMasterUnderTake, - JSON_EXTRACT(task.createVariable, '$.underTakeName') AS underTakeName, - JSON_EXTRACT(task.createVariable, '$.underTakeId') AS underTakeId, - COUNT(p.consolidationIds) > 0 AS isConsolidation, - EXISTS ( - SELECT 1 - FROM bpm_process_task next_task - WHERE next_task.prevTaskId = task.id - AND next_task.taskStatus = 'COMPLETE' - ) AS nextTaskIsComplete + 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 - bpm_process_task task - INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId - INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId - INNER JOIN proposal_info info ON info.id = inst.processInstanceBusinessId - LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) + 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 + 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(); - if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ - cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); + cnd.and("t.taskName", "=", "04ecf80c-a9d0-4986-8aac-231758d6a7af"); + + if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); } - cnd.and("nd.nodeCode", "=", 90); + if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } ProposalSearchParam.buildSearch(cnd, pageForm); - cnd.groupBy("info.id"); - cnd.groupBy("task.id"); + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); - Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class); + Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pagination); } @At @SaCheckPermission("proposal.schoolLeaderApproval") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案", msg = "提案分管领导审核") - @ApiOperation("审核") - public Result approval(@Param("approval") @Valid ProposalUnderTakeSchoolLeaderApprovalParam param) { - proposalSchoolLeaderApprovalService.approval(param); + @ApiOperation("获取主办单位") + public Result getHostUnitId(){ + return Result.success(); } - @At - @SaCheckPermission("proposal.schoolLeaderApproval") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案", msg = "提案分管领导撤回") - @ApiOperation("撤回") - public Result revoke(@Valid String taskId) { - proposalSchoolLeaderApprovalService.revoke(taskId); - return Result.success(); - } } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalSecondedController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalSecondedController.java index b7195a50..3e0bee4b 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalSecondedController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalSecondedController.java @@ -9,6 +9,7 @@ import com.budwk.app.base.service.BaseService; import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; import com.budwk.app.bpm.param.BpmTaskApprovalParam; import com.budwk.app.bpm.service.BpmService; +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.controller.vo.ProposalInfoPageVO; @@ -32,6 +33,7 @@ import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; import javax.validation.Valid; +import java.util.List; /** * 附议提案 @@ -68,51 +70,50 @@ public class ProposalSecondedController { SELECT info.*, type.name AS typeName, - tcs.fullName AS sessionName, - tcd.`name` AS delegationName, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - task.id processInstanceTaskId, - task.taskStatus processInstanceTaskStatus, - JSON_EXTRACT( task.createVariable, '$.userName' ) AS seconderName, - COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete + 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 - bpm_process_task task - INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId - INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId - INNER JOIN proposal_info info ON info.id = inst.processInstanceBusinessId + 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 - LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE' + 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(); - if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){ - cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); - } - cnd.and("nd.nodeCode", "=", 20); + cnd.and("t.taskName", "=", "74458b33-ad6e-46c4-b8d9-1aa897142b25"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } ProposalSearchParam.buildSearch(cnd, pageForm); -// cnd.and(new Static(""" -// NOT EXISTS( -// SELECT 1 -// FROM bpm_process_task t2 -// WHERE t2.processInstanceId = task.processInstanceId -// AND t2.processTaskNodeCode = task.processTaskNodeCode -// AND t2.createdOn > task.createdOn -// ) -// """)); -// cnd.groupBy("task.id"); + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); - Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class); + Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(), sql); return Result.success(pagination); } 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 fc0ed5e5..59cc5cf3 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 @@ -1,40 +1,26 @@ package com.budwk.app.zhgh.democratic.proposal.controller.transact; 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.base.service.BaseService; -import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; -import com.budwk.app.bpm.models.BpmProcessTask; -import com.budwk.app.bpm.service.BpmService; -import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO; import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam; -import com.budwk.app.zhgh.democratic.proposal.param.ProposalUnderTakeReplyApprovalParam; -import com.budwk.app.zhgh.democratic.proposal.param.ProposalUnderTakeReplyTransferParam; import com.budwk.app.zhgh.democratic.proposal.service.ProposalUnderTakeReplyService; +import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; -import org.nutz.dao.util.cri.Static; -import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; -import org.nutz.lang.util.NutMap; 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; -import java.util.stream.Collectors; @IocBean @At("/platform/proposal/unitReply") @@ -44,9 +30,7 @@ import java.util.stream.Collectors; public class ProposalUnderTakeReplyController { @Inject - private BaseService baseService; - @Inject - private BpmService bpmService; + private ProposalCommonService proposalCommonService; @Inject private ProposalUnderTakeReplyService proposalUnderTakeReplyService; @@ -60,199 +44,55 @@ public class ProposalUnderTakeReplyController { @SaCheckPermission("proposal.unitReply") @ApiOperation("分页列表") public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval, boolean transfer) { - //获取每个实例每个节点每个单位的最新任务ID Sql sql = Sqls.create(""" SELECT info.*, type.name AS typeName, - tcs.fullName AS sessionName, - tcd.`name` AS delegationName, - inst.id processInstanceId, - inst.processInstanceNodeId, - inst.processInstanceNodeName, - inst.processInstanceTaskIds, - inst.processInstanceStatus, - task.id processInstanceTaskId, - task.taskStatus processInstanceTaskStatus, - JSON_EXTRACT(task.createVariable, '$.isMaster') AS isMasterUnderTake, - JSON_EXTRACT(task.createVariable, '$.underTakeName') AS underTakeName, - JSON_EXTRACT(task.createVariable, '$.underTakeId') AS underTakeId, - COUNT(p.consolidationIds) > 0 AS isConsolidation, - EXISTS ( - SELECT 1 - FROM bpm_process_task next_task - WHERE next_task.prevTaskId = task.id - AND next_task.taskStatus = 'COMPLETE' - ) AS nextTaskIsComplete, - EXISTS ( - SELECT 1 - FROM bpm_process_task next_task - WHERE next_task.id = task.transferAfterTaskId - AND next_task.taskStatus = 'COMPLETE' - ) AS nextTransferTaskIsComplete, - CASE - WHEN task.transferAfterTaskId IS NOT NULL AND task.taskStatus = 'TRANSFER' THEN ( - SELECT assignmentUserNames - FROM bpm_process_task - WHERE id = task.transferAfterTaskId - ) - ELSE NULL - END as underTakeTransferUserName, - task.transferAfterTaskId IS NOT NULL as underTakeReplyIsTransfer + 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 - bpm_process_task task - INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId - INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId - INNER JOIN proposal_info info ON info.id = inst.processInstanceBusinessId - LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id)) + 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 - LEFT JOIN bpm_process_task transferTask on transferTask.id = task.transferAfterTaskId + 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(); - if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { - cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname()))); - } - cnd.and("nd.nodeCode", "=", 80); + cnd.and("t.taskName", "in", List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "c9a1586e-272b-41b8-b438-0be9f9e3781d")); +// cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); - if (AuthUtil.hasRole(RoleConstant.PROPOSAL_UNIT_LEADER.name())) { - if (transfer) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.TRANSFER); - } else { - cnd.and(Cnd.exps("transferTask.id", "is", null) - .or("transferTask.taskStatus", "=", BpmProcessTaskStatusEnum.REVOKE.name())); -// cnd.and("task.transferAfterTaskId","is",null); - cnd.and(new Static(""" - NOT EXISTS ( - SELECT 1 - FROM bpm_process_task prev_task - WHERE prev_task.id = task.prevTaskId - AND prev_task.taskStatus = 'TRANSFER' - ) - """)); - cnd.and(new Static(""" - NOT EXISTS ( - SELECT 1 - FROM bpm_process_task source_task - WHERE source_task.transferAfterTaskId = task.id - ) - """)); - - if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); - } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); - } - } + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { - if (approval) { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE); - } else { - cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE); - } + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } - ProposalSearchParam.buildSearch(cnd, pageForm); - cnd.groupBy("info.id"); - cnd.groupBy("task.id"); - - - if (!transfer) { - cnd.and(new Static(""" - NOT EXISTS( - SELECT 1 - FROM bpm_process_task t2 - WHERE JSON_EXTRACT(t2.createVariable, '$.underTakeId') = JSON_EXTRACT(task.createVariable, '$.underTakeId') - AND t2.createdOn > task.createdOn - AND t2.taskStatus = 'COMPLETE' - AND t2.processTaskNodeCode = task.processTaskNodeCode - AND t2.processInstanceId = task.processInstanceId - ) - """)); - } + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); sql.setCondition(cnd); - Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class); + Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pagination); } - - @At - @SaCheckPermission("proposal.unitReply") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案承办单位答复", msg = "承办单位答复") - @ApiOperation("审核") - public Result approval(@Param("approval") @Valid ProposalUnderTakeReplyApprovalParam param) { - proposalUnderTakeReplyService.approval(param); - return Result.success(); - } - - @At - @SaCheckPermission("proposal.unitReply") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案承办单位答复", msg = "承办单位答复撤回") - @ApiOperation("撤回") - public Result revoke(@Valid String taskId) { - proposalUnderTakeReplyService.revokeTask(taskId); - return Result.success(); - } - - @At - @SaCheckPermission("proposal.unitReply") - @ApiOperation("查询本单位可转办用户") - public Result queryTransferUser(@Valid String keyword) { - return Result.success(proposalUnderTakeReplyService.queryTransferUser(keyword)); - } - - @At - @SaCheckPermission("proposal.unitReply") - @ApiOperation("转办") - @SLog(tag = "提案承办单位答复", msg = "转办") - @Aop(TransAop.READ_COMMITTED) - public Result transfer(@Valid @Param("transfer") ProposalUnderTakeReplyTransferParam param) { - proposalUnderTakeReplyService.transfer(param); - return Result.success(); - } - - @At - @SaCheckPermission("proposal.unitReply") - @ApiOperation("检查是否可以办理") - public Result checkCanReply(@Valid String taskId) { - String errorMsg = proposalUnderTakeReplyService.checkCanReply(taskId); - BpmProcessTask task = proposalUnderTakeReplyService.dao().fetch(BpmProcessTask.class, taskId); - - Sql sql = Sqls.create(""" - SELECT - JSON_UNQUOTE(JSON_EXTRACT( createVariable, '$.underTakeName' )) AS underTakeName, - JSON_UNQUOTE(JSON_EXTRACT(extVariable,'$.approvalOpinion')) as approvalOpinion - FROM - bpm_process_task - WHERE - processInstanceId = @processInstanceId - AND processTaskNodeCode = 80 - AND taskStatus = 'COMPLETE' - AND JSON_EXTRACT(createVariable,'$.isMaster')= false - """); - sql.setParam("processInstanceId", task.getProcessInstanceId()); - List slaveReplyList = proposalUnderTakeReplyService.listMap(sql); - String allSlaveApprovalOpinion = slaveReplyList.stream().map(slave -> slave.getString("underTakeName", "") + "
" + slave.getString("approvalOpinion", "")).collect(Collectors.joining("

")); - - NutMap map = NutMap.NEW(); - map.put("errMsg", errorMsg); - map.put("allSlaveApprovalOpinion", allSlaveApprovalOpinion); - map.put("task",task); - return Result.success().addData(map); - } - - @At - @SaCheckPermission("proposal.unitReply") - @Aop(TransAop.READ_COMMITTED) - @SLog(tag = "提案承办单位答复", msg = "承办单位转办撤回") - @ApiOperation("转办撤回") - public Result revokeTransfer(@Valid String taskId) { - proposalUnderTakeReplyService.revokeTransfer(taskId); - return Result.success(); - } - } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalWriteController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalWriteController.java index e6817218..1c92a42b 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalWriteController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalWriteController.java @@ -1,15 +1,24 @@ package com.budwk.app.zhgh.democratic.proposal.controller.transact; +import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.lang.Dict; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.constant.BpmProcessConstant; import com.budwk.app.base.result.Result; import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; import com.budwk.app.sys.models.Sys_dict; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo; import com.budwk.app.zhgh.democratic.proposal.service.ProposalWriteService; +import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox; import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -41,7 +50,10 @@ public class ProposalWriteController { @Inject private ProposalWriteService proposalWriteService; @Inject - private BpmService bpmService; + private FlowEngine flowEngine; + @Inject + private FlowCommonService flowCommonService; + @At("") @Ok("beetl:/platform/zhgh/democratic/proposal/transact/write/index.html") @@ -59,21 +71,51 @@ public class ProposalWriteController { proposalInfo.setCode(proposalWriteService.generateProposalCode(proposalInfo.getSessionId(),proposalInfo.getDelegationId())); } dao.insertOrUpdate(proposalInfo); - bpmService.startSaveProcessInstance(BpmProcessConstant.PROPOSAL.name(),proposalInfo.getName(),proposalInfo.getId(), null); return Result.success(proposalInfo); } @At @SaCheckPermission("proposal.write") @Aop(TransAop.READ_COMMITTED) - @ApiOperation("保存提案") - @SLog(tag = "提案管理系统-我的提案", msg = "手动提交提案") + @ApiOperation("提交提案") + @SLog(tag = "提案管理系统-我的提案", msg = "提交提案") public Result submit(@Param("info") ProposalInfo proposalInfo) { + if (StrUtil.isBlank(proposalInfo.getCode())) { + proposalInfo.setCode(proposalWriteService.generateProposalCode(proposalInfo.getSessionId(),proposalInfo.getDelegationId())); + } dao.insertOrUpdate(proposalInfo); - bpmService.startSubmitProcessInstance(BpmProcessConstant.PROPOSAL.name(),proposalInfo.getName(),proposalInfo.getId(), null,null); + + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, proposalInfo); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("JDHTA", proposalInfo.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(proposalInfo); } + @At + @SaCheckPermission("proposal.write") + @Aop(TransAop.READ_COMMITTED) + @ApiOperation("重新提交提案") + @SLog(tag = "提案管理系统-我的提案", msg = "重新提交提案") + public Result submitAgain(@Param("data") SuggestionBox suggestionBox, @Param("taskId") Long taskId) { + dao.insertOrUpdate(suggestionBox); + + Dict dict = Dict.create(); + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + flowCommonService.executeTask(dict); + return Result.success(); + } + + @At @SaCheckPermission("proposal.write") @ApiOperation("提案详情") 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 new file mode 100644 index 00000000..aef0cdaf --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalMasterUnitAssignmentHandler.java @@ -0,0 +1,66 @@ +package com.budwk.app.zhgh.democratic.proposal.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_role; +import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; + +import java.util.List; + +/** + * 提案主办单位处理人 + */ +public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler { + @Override + public List assign(TaskModel model, Execution execution) { + Dao dao = ServiceContext.find(Dao.class); + SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class); + + // 主办单位id + String hostUnitId = execution.getArgs().getStr("tf_hostUnitId"); + + if (StrUtil.isBlank(hostUnitId)) { + throw new BaseException("请选择主办单位"); + } + + // 获取主办单位 + ProposalUndertake undertake = dao.fetch(ProposalUndertake.class, hostUnitId); + + if (undertake == null) { + throw new BaseException("主办单位不存在"); + } + + // 获取负责人 + Sys_role sysRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_UNIT_LEADER); + + List sysUserRoles = dao.query(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sysRole.getId()).and(Sys_user_role::getUnderTakeId, "=", undertake.getId())); + List selectUserIds = sysUserRoles.stream().map(Sys_user_role::getUserId).toList(); + + if (selectUserIds.isEmpty()) { + throw new BaseException("主办单位没有负责人"); + } + + return selectUserIds; + } + + + @Override + public String getMessage() { + return "提案主办单位处理人"; + } + + @Override + public int getOrder() { + return 200; + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSchoolLeaderCandidateHandler.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSchoolLeaderCandidateHandler.java new file mode 100644 index 00000000..ba5195f1 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSchoolLeaderCandidateHandler.java @@ -0,0 +1,49 @@ +package com.budwk.app.zhgh.democratic.proposal.handler; + +import cn.hutool.core.lang.Dict; +import com.budwk.app.flow.engine.CandidateHandler; +import com.budwk.app.flow.engine.core.ServiceContext; +import com.budwk.app.flow.engine.model.TaskModel; +import com.budwk.app.flow.entity.Candidate; +import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.lang.util.NutMap; + +import java.util.List; + +public class ProposalSchoolLeaderCandidateHandler implements CandidateHandler { + + + @Override + public List handle(TaskModel model) { + Dao dao = ServiceContext.find(Dao.class); + ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW()); + List unitIds = proposalConfig.getSchoolLeaderUnitIds(); + Sql sql = Sqls.create("select id,username,loginname from vw_user where unitId in (@unitIds)"); + sql.setParam("unitIds", unitIds); + sql.setCallback(Sqls.callback.maps()); + dao.execute(sql); + List list = sql.getList(NutMap.class); + + List candidates = list.stream().map(item -> Candidate.builder() + .userId(item.getString("id")) + .userName(item.getString("username")) + .ext(Dict.of("loginName", item.getString("loginname"))) + .build() + ).toList(); + return candidates; + } + + @Override + public String getMessage() { + return "提案分管校领导"; + } + + @Override + public int getOrder() { + return 20; + } +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSlaveUnitAssignmentHandler.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSlaveUnitAssignmentHandler.java new file mode 100644 index 00000000..f52aca2d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSlaveUnitAssignmentHandler.java @@ -0,0 +1,69 @@ +package com.budwk.app.zhgh.democratic.proposal.handler; + +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_role; +import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig; +import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; + +import java.util.ArrayList; +import java.util.List; + +/** + * 提案协办单位处理人 + */ +public class ProposalSlaveUnitAssignmentHandler implements AssignmentHandler { + @Override + public List assign(TaskModel model, Execution execution) { + Dao dao = ServiceContext.find(Dao.class); + + List assignee = new ArrayList<>(); + + // 提案配置 + ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW()); + + // 不需要答复 + if (!proposalConfig.getSlaveUnitNeedReply()) { + return assignee; + } + + SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class); + + // 协办单位id + List helpUnitIds = (List) execution.getArgs().get("tf_helpUnitIds"); + if (helpUnitIds != null && !helpUnitIds.isEmpty()) { + + Sys_role sysRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_UNIT_LEADER); + + for (String helpUnitId : helpUnitIds) { + ProposalUndertake undertake = dao.fetch(ProposalUndertake.class, helpUnitId); + List sysUserRoles = dao.query(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sysRole.getId()).and(Sys_user_role::getUnderTakeId, "=", undertake.getId())); + if (sysUserRoles.isEmpty()) { + throw new BaseException(undertake.getName() + "单位没有设置负责人!"); + } + assignee.addAll(sysUserRoles.stream().map(Sys_user_role::getUserId).toList()); + } + return assignee; + } + return assignee; + } + + @Override + public String getMessage() { + return "提案协办单位处理人"; + } + + @Override + public int getOrder() { + return 210; + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalUnitReplyAssignmentHandler.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalUnitReplyAssignmentHandler.java deleted file mode 100644 index 4cb60abe..00000000 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalUnitReplyAssignmentHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.budwk.app.zhgh.democratic.proposal.handler; - -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 org.nutz.dao.Dao; - -import java.util.List; - -/** - * 承办单位答复人处理类 - */ -public class ProposalUnitReplyAssignmentHandler implements AssignmentHandler { - @Override - public List assign(TaskModel model, Execution execution) { - Dao dao = ServiceContext.find(Dao.class); - List unitIds = (List)execution.getArgs().get("unitIds"); - - - return List.of(); - } - - @Override - public String getMessage() { - return "承办单位答复人"; - } - - @Override - public int getOrder() { - return 20; - } -} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalApplyInterceptor.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalApplyInterceptor.java index dc808e1a..6495429b 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalApplyInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalApplyInterceptor.java @@ -19,22 +19,6 @@ import org.nutz.json.Json; public class ProposalApplyInterceptor implements FlowInterceptor { @Override public void intercept(Execution execution) { - ProposalWriteService writeService = ServiceContext.find(ProposalWriteService.class); - - String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); - ProposalInfo info = Json.fromJson(ProposalInfo.class, formDataStr); - - if (StrUtil.isBlank(info.getId())) { - String code = writeService.generateProposalCode(info.getSessionId(), info.getDelegationId()); - info.setCode(code); - } - - Dao dao = ServiceContext.find(Dao.class); - dao.insertOrUpdate(info); - execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(info)); - - int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY); - dao.update(ProcessInstance.class, Chain.make("businessNo", info.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId)); } } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalSchoolLeaderApprovalInterceptor.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalSchoolLeaderApprovalInterceptor.java new file mode 100644 index 00000000..e803b973 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalSchoolLeaderApprovalInterceptor.java @@ -0,0 +1,25 @@ +package com.budwk.app.zhgh.democratic.proposal.interceptor; + +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.enums.ProcessSubmitTypeEnum; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.Objects; + +/** + * 提案分管领导审批拦截器 + */ +@IocBean +public class ProposalSchoolLeaderApprovalInterceptor implements FlowInterceptor { + @Override + public void intercept(Execution execution) { + Integer submitType = execution.getArgs().getInt(FlowConst.SUBMIT_TYPE); + + // 退回到承办单位答复 需要设置退回节点及单位ID + if (Objects.equals(submitType, ProcessSubmitTypeEnum.JUMP.getCode())) { +// execution.getArgs().set(FlowConst.TASK_FORM_DATA_PREFIX + "hostUnitId", "da59e22f2a744a128b4f71c037c8d32e"); + } + } +} 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 4948eb6e..b5dc92e3 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 @@ -97,56 +97,56 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl imp """).setParam("id", id); NutMap nutMap = (NutMap) dao().execute(sql.setCallback(Sqls.callback.map())).getResult(); - List nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.PROPOSAL, id); - nutMap.put("nodeTasks", nodeTasks); - - //查询附议人信息 - BpmProcessInstance bpmProcessInstance = dao().fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", id)); - BpmProcessTask lastestWriteTask = dao().fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId()) - .and(BpmProcessTask::getTaskStatus, "=", BpmProcessTaskStatusEnum.COMPLETE.name()) - .and(BpmProcessTask::getProcessTaskNodeCode, "in", List.of(10, 40, 61)) - .and(BpmProcessTask::getDelFlag, "=", 0) - .desc(BpmProcessTask::getEndOn) - ); - - if (ObjectUtil.isNotEmpty(lastestWriteTask)) { - String lastestWriteTaskId = lastestWriteTask.getId(); - List seconderTasks = dao().query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getPrevTaskId, "=", lastestWriteTaskId) - .and(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId()) - .and(BpmProcessTask::getTaskStatus, "!=", BpmProcessTaskStatusEnum.REVOKE.name()) - .and(BpmProcessTask::getDelFlag, "=", 0) - .asc(BpmProcessTask::getCreatedOn) - ); - nutMap.put("seconders", seconderTasks); - } - - //查询并案的提案 - List consolidationProposalIds = getConsolidation(id); - List otherProposalIds = consolidationProposalIds.stream().filter(proposalId -> !proposalId.equals(id)).toList(); - if (ObjectUtil.isNotEmpty(otherProposalIds)) { - Sql otherProposalSql = Sqls.create(""" - SELECT - info.id, - info.name, - info.code, - info.createUserName, - type.name AS typeName, - tcs.fullName AS sessionName, - tcd.`name` AS delegationName - FROM - proposal_info info - 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 - WHERE info.id in (@otherProposalIds) - """).setParam("otherProposalIds", otherProposalIds); - List consolidationProposals = listMap(otherProposalSql); - nutMap.put("consolidationProposals", consolidationProposals); - nutMap.put("isConsolidation", true); - } else { - nutMap.put("consolidationProposals", null); - nutMap.put("isConsolidation", false); - } +// List nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.PROPOSAL, id); +// nutMap.put("nodeTasks", nodeTasks); +// +// //查询附议人信息 +// BpmProcessInstance bpmProcessInstance = dao().fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", id)); +// BpmProcessTask lastestWriteTask = dao().fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId()) +// .and(BpmProcessTask::getTaskStatus, "=", BpmProcessTaskStatusEnum.COMPLETE.name()) +// .and(BpmProcessTask::getProcessTaskNodeCode, "in", List.of(10, 40, 61)) +// .and(BpmProcessTask::getDelFlag, "=", 0) +// .desc(BpmProcessTask::getEndOn) +// ); +// +// if (ObjectUtil.isNotEmpty(lastestWriteTask)) { +// String lastestWriteTaskId = lastestWriteTask.getId(); +// List seconderTasks = dao().query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getPrevTaskId, "=", lastestWriteTaskId) +// .and(BpmProcessTask::getProcessInstanceId, "=", bpmProcessInstance.getId()) +// .and(BpmProcessTask::getTaskStatus, "!=", BpmProcessTaskStatusEnum.REVOKE.name()) +// .and(BpmProcessTask::getDelFlag, "=", 0) +// .asc(BpmProcessTask::getCreatedOn) +// ); +// nutMap.put("seconders", seconderTasks); +// } +// +// //查询并案的提案 +// List consolidationProposalIds = getConsolidation(id); +// List otherProposalIds = consolidationProposalIds.stream().filter(proposalId -> !proposalId.equals(id)).toList(); +// if (ObjectUtil.isNotEmpty(otherProposalIds)) { +// Sql otherProposalSql = Sqls.create(""" +// SELECT +// info.id, +// info.name, +// info.code, +// info.createUserName, +// type.name AS typeName, +// tcs.fullName AS sessionName, +// tcd.`name` AS delegationName +// FROM +// proposal_info info +// 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 +// WHERE info.id in (@otherProposalIds) +// """).setParam("otherProposalIds", otherProposalIds); +// List consolidationProposals = listMap(otherProposalSql); +// nutMap.put("consolidationProposals", consolidationProposals); +// nutMap.put("isConsolidation", true); +// } else { +// nutMap.put("consolidationProposals", null); +// nutMap.put("isConsolidation", false); +// } return nutMap; } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java index b380e0c6..f5b0ca09 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxQueryController.java @@ -44,7 +44,7 @@ public class SuggestionBoxQueryController { @At @SaCheckLogin - public Result pageData(Integer pageNumber, Integer pageSize) { + public Result pageData(Integer pageNumber, Integer pageSize, String title, Integer year) { Sql sql = Sqls.create(""" SELECT info.id, @@ -78,7 +78,8 @@ public class SuggestionBoxQueryController { $condition """); Cnd cnd = Cnd.NEW(); - cnd.and("info.createdBy", "=", SecurityUtil.getUserId()); + cnd.andEX("YEAR(info.submitTime)", "=", year); + cnd.and(Cnd.likeEX("info.title", title)); cnd.desc("info.submitTime"); sql.setCondition(cnd); Pagination pagination = suggestionBoxService.listPageMap(pageNumber, pageSize, sql); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java index cfc20fa5..e4dd2061 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionXghController.java @@ -79,7 +79,7 @@ public class SuggestionXghController { cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); if (approval) { - cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); } else { cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/interceptor/SuggestionBoxApplyInterceptor.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/interceptor/SuggestionBoxApplyInterceptor.java deleted file mode 100644 index 1d8258d0..00000000 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/interceptor/SuggestionBoxApplyInterceptor.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.budwk.app.zhgh.democratic.suggestionBox.interceptor; - -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.flow.entity.ProcessInstance; -import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox; -import org.nutz.dao.Chain; -import org.nutz.dao.Cnd; -import org.nutz.dao.Dao; -import org.nutz.json.Json; - -public class SuggestionBoxApplyInterceptor implements FlowInterceptor { - @Override - public void intercept(Execution execution) { - String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); - SuggestionBox suggestionBox = Json.fromJson(SuggestionBox.class, formDataStr); - - Dao dao = ServiceContext.find(Dao.class); - dao.insertOrUpdate(suggestionBox); - execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(suggestionBox)); - - int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY); - dao.update(ProcessInstance.class, Chain.make("businessNo", suggestionBox.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId)); - } -} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/controller/TeacherCongressSessionController.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/controller/TeacherCongressSessionController.java index f6af545b..027ba5ca 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/controller/TeacherCongressSessionController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/controller/TeacherCongressSessionController.java @@ -76,8 +76,8 @@ public class TeacherCongressSessionController { public Result update(Teacher_congress_session session) { int count = dao.count(Teacher_congress_session.class, Cnd.where(Teacher_congress_session::getJ, "=", session.getJ()) - .and(Teacher_congress_session::getC, "=", session.getC()) - .and(Teacher_congress_session::getId, "!=", session.getId()) + .and(Teacher_congress_session::getC, "=", session.getC()) + .and(Teacher_congress_session::getId, "!=", session.getId()) ); if (count > 0) { throw new BaseException("请勿重复创建"); @@ -92,6 +92,10 @@ public class TeacherCongressSessionController { @SaCheckPermission("tc.prepare.session") @ApiOperation(value = "删除届次信息") public Result delete(@Valid @ApiParam("id") String id) { + int count = dao.count(Teacher_congress_session.class, Cnd.NEW()); + if (count == 1) { + return Result.error("请勿删除所有届次信息"); + } teacherCongressSessionService.deleteSession(id); return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/models/Teacher_congress_session.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/models/Teacher_congress_session.java index c667aa54..1e860aab 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/models/Teacher_congress_session.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/prepare/models/Teacher_congress_session.java @@ -61,4 +61,14 @@ public class Teacher_congress_session extends BaseModel { @Default(value = "0") private Boolean enable; + @Column + @Comment("提案开始征集时间") + @ColDefine(type = ColType.DATETIME) + private Date collectStartTime; + + @Column + @Comment("提案结束征集时间") + @ColDefine(type = ColType.DATETIME) + private Date collectEndTime; + } diff --git a/src/main/resources/static/assets/platform/css/common.css b/src/main/resources/static/assets/platform/css/common.css index 2687073f..72fc3ba5 100644 --- a/src/main/resources/static/assets/platform/css/common.css +++ b/src/main/resources/static/assets/platform/css/common.css @@ -677,7 +677,7 @@ td.no-b { .flow-task-form .el-descriptions-item__label.is-bordered-label { background: rgb(248, 249, 250) !important; padding: 8px 12px !important; - border: 1px solid rgb(221, 221, 221) !important; + /*border: 1px solid rgb(221, 221, 221) !important;*/ text-align: center !important; } diff --git a/src/main/resources/static/components/plugins/sysQrCode/index.vue b/src/main/resources/static/components/plugins/sysQrCode/index.vue new file mode 100644 index 00000000..8470cb8a --- /dev/null +++ b/src/main/resources/static/components/plugins/sysQrCode/index.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/main/resources/views/layouts/v4/baseLayout.html b/src/main/resources/views/layouts/v4/baseLayout.html index ec10b51d..ada4bd9a 100644 --- a/src/main/resources/views/layouts/v4/baseLayout.html +++ b/src/main/resources/views/layouts/v4/baseLayout.html @@ -324,6 +324,7 @@ Vue.component("table-tool", httpVueLoader("/components/plugins/sysTableTool/index.vue?v=" + new Date().getTime())) Vue.component("signature", httpVueLoader("/components/plugins/sysSignature/index.vue?v=" + new Date().getTime())) Vue.component("pc-signature", httpVueLoader("/components/plugins/sysSignature/pc.vue?v=" + new Date().getTime())) + Vue.component("qr-code-plus", httpVueLoader("/components/plugins/sysQrCode/index.vue?v=" + new Date().getTime())) Vue.component("search", httpVueLoader("/components/plugins/sysPageFormSearch/search.vue?v=" + new Date().getTime())) Vue.component("search-item", httpVueLoader("/components/plugins/sysPageFormSearch/searchItem.vue?v=" + new Date().getTime())) Vue.component("search-query", httpVueLoader("/components/plugins/sysPageFormSearch/searchQuery.vue?v=" + new Date().getTime())) diff --git a/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/approval.html b/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/approval.html deleted file mode 100644 index ca82628a..00000000 --- a/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/approval.html +++ /dev/null @@ -1,49 +0,0 @@ - - -
- -
- - - - diff --git a/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/form.html b/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/form.html deleted file mode 100644 index dc7f7c80..00000000 --- a/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/form.html +++ /dev/null @@ -1,48 +0,0 @@ -
- - - - - - - - - - -
- - diff --git a/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/index.html b/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/index.html index 2f9d219d..0e49e604 100644 --- a/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/index.html +++ b/src/main/resources/views/platform/zhgh/dayofficework/article/branchUnionApproval/index.html @@ -8,12 +8,12 @@ layout("/layouts/platform.html"){ @@ -36,7 +36,7 @@ layout("/layouts/platform.html"){ - +