..
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<String> 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
|
||||
|
||||
@@ -401,10 +401,10 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
|
||||
// 增加是否为第一个任务节点标识
|
||||
execution.getArgs().put(FlowConst.IS_FIRST_TASK_NODE, FlowUtil.isFistTaskName(execution.getProcessModel(), taskModel.getName()));
|
||||
//过滤上个任务的表单数据 避免造成污染 每个任务只保存自己的表单数据
|
||||
List<String> 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<String> 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);
|
||||
|
||||
+10
-50
@@ -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<NutMap> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+38
-50
@@ -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<ArticleInfoPageVO> pageVO = articleService.listPageVO(pageForm, sql, ArticleInfoPageVO.class);
|
||||
Pagination<NutMap> 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<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
List<String> 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();
|
||||
}
|
||||
}
|
||||
|
||||
+42
-71
@@ -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<ArticleInfoPageVO> pageVO = articleService.listPageVO(pageForm, sql, ArticleInfoPageVO.class);
|
||||
Pagination<NutMap> 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<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
variables.put("RESULT", result);
|
||||
variables.put("publishLink", publishLink);
|
||||
|
||||
Article article = dao.fetch(Article.class, approvalParam.getProcessInstanceBusinessId());
|
||||
|
||||
List<String> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
+8
-51
@@ -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<NutMap> pageVO = articleService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pageVO);
|
||||
|
||||
// // 获取当前用户发起的流程实例列表
|
||||
// Page<HistoryOrder> page = new Page<>();
|
||||
// page.setPageNo(pageForm.getPageNumber());
|
||||
// page.setPageSize(pageForm.getPageSize());
|
||||
// QueryFilter queryFilter = new QueryFilter();
|
||||
//// queryFilter.setProcessId("89032d1a30ee46e79361b503a5d250db");
|
||||
// queryFilter.setName("XWTG");
|
||||
//
|
||||
// List<HistoryOrder> 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<Article> pagination = articleService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
|
||||
//
|
||||
// List<Map<String, Object>> list = pagination.getList().stream().map(row -> {
|
||||
// Map<String, Object> mapBean = BeanUtil.beanToMap(row);
|
||||
// Optional<HistoryOrder> hisOrder = historyOrders.stream().filter(historyOrder -> historyOrder.getVariableMap().get("businessId").equals(row.getId())).findFirst();
|
||||
// hisOrder.ifPresent(historyOrder -> mapBean.put("instance", historyOrder));
|
||||
//
|
||||
// // 查询任务信息
|
||||
// if (hisOrder.isPresent()) {
|
||||
// List<Task> 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<Map<String, Object>> 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();
|
||||
}
|
||||
|
||||
|
||||
+3
-8
@@ -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()));
|
||||
|
||||
+10
-39
@@ -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<NutMap> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+30
-42
@@ -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<ProcessTask> 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<ProcessTask> 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("新闻投稿详情")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
+2
-2
@@ -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("保存问卷基础信息")
|
||||
|
||||
-1
@@ -46,7 +46,6 @@ public class ProposalCommonController {
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("查询全部的教代会")
|
||||
|
||||
+37
-102
@@ -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<ProposalInfoPageVO> 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<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
variables.put("caseFilingResult","退回提案人");
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
|
||||
|
||||
//退回要清空附议人
|
||||
List<BpmProcessTask> 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<ProposalUndertake> list = baseService.dao().query(ProposalUndertake.class, Cnd.NEW().asc(ProposalUndertake::getCode));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+36
-59
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+41
-51
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+64
-116
@@ -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<ProposalInfoPageVO> pagination = proposalCommonService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
Pagination<NutMap> 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<ProposalInviteSeconderVO> 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<ProposalInviteSeconderVO> 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<ProposalInviteSeconderVO> seconderVOS = proposalCommonService.listVO(sql, ProposalInviteSeconderVO.class);
|
||||
List<NutMap> list = proposalCommonService.listMap(sql);
|
||||
// 附议人ID
|
||||
List<String> userIds = list.stream().map(item -> item.getString("seconderId")).toList();
|
||||
// 获取流程实例
|
||||
ProcessInstance processInstance = flowEngine.processInstanceService().fetch(Cnd.where(ProcessInstance::getBusinessNo, "=", proposalId));
|
||||
// 获取正在执行的任务(邀请附议人||提案附议)
|
||||
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(processInstance.getId(), null);
|
||||
|
||||
List<BpmAssignmentDto> 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();
|
||||
|
||||
+50
-60
@@ -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<LabelValueVO> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+36
-35
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+37
-197
@@ -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<NutMap> slaveReplyList = proposalUnderTakeReplyService.listMap(sql);
|
||||
String allSlaveApprovalOpinion = slaveReplyList.stream().map(slave -> slave.getString("underTakeName", "") + "<br/>" + slave.getString("approvalOpinion", "")).collect(Collectors.joining("<br/><br/>"));
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+47
-5
@@ -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<ProcessTask> 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("提案详情")
|
||||
|
||||
+66
@@ -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<String> 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<Sys_user_role> sysUserRoles = dao.query(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sysRole.getId()).and(Sys_user_role::getUnderTakeId, "=", undertake.getId()));
|
||||
List<String> 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;
|
||||
}
|
||||
|
||||
}
|
||||
+49
@@ -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<Candidate> handle(TaskModel model) {
|
||||
Dao dao = ServiceContext.find(Dao.class);
|
||||
ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW());
|
||||
List<String> 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<NutMap> list = sql.getList(NutMap.class);
|
||||
|
||||
List<Candidate> 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;
|
||||
}
|
||||
}
|
||||
+69
@@ -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<String> assign(TaskModel model, Execution execution) {
|
||||
Dao dao = ServiceContext.find(Dao.class);
|
||||
|
||||
List<String> assignee = new ArrayList<>();
|
||||
|
||||
// 提案配置
|
||||
ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW());
|
||||
|
||||
// 不需要答复
|
||||
if (!proposalConfig.getSlaveUnitNeedReply()) {
|
||||
return assignee;
|
||||
}
|
||||
|
||||
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
|
||||
|
||||
// 协办单位id
|
||||
List<String> helpUnitIds = (List<String>) 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<Sys_user_role> 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;
|
||||
}
|
||||
|
||||
}
|
||||
-33
@@ -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<String> assign(TaskModel model, Execution execution) {
|
||||
Dao dao = ServiceContext.find(Dao.class);
|
||||
List<String> unitIds = (List<String>)execution.getArgs().get("unitIds");
|
||||
|
||||
|
||||
return List.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "承办单位答复人";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return 20;
|
||||
}
|
||||
}
|
||||
-16
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
+25
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
+50
-50
@@ -97,56 +97,56 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
""").setParam("id", id);
|
||||
NutMap nutMap = (NutMap) dao().execute(sql.setCallback(Sqls.callback.map())).getResult();
|
||||
|
||||
List<BpmTaskApprovalRecordVo> 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<BpmProcessTask> 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<String> consolidationProposalIds = getConsolidation(id);
|
||||
List<String> 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<NutMap> consolidationProposals = listMap(otherProposalSql);
|
||||
nutMap.put("consolidationProposals", consolidationProposals);
|
||||
nutMap.put("isConsolidation", true);
|
||||
} else {
|
||||
nutMap.put("consolidationProposals", null);
|
||||
nutMap.put("isConsolidation", false);
|
||||
}
|
||||
// List<BpmTaskApprovalRecordVo> 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<BpmProcessTask> 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<String> consolidationProposalIds = getConsolidation(id);
|
||||
// List<String> 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<NutMap> consolidationProposals = listMap(otherProposalSql);
|
||||
// nutMap.put("consolidationProposals", consolidationProposals);
|
||||
// nutMap.put("isConsolidation", true);
|
||||
// } else {
|
||||
// nutMap.put("consolidationProposals", null);
|
||||
// nutMap.put("isConsolidation", false);
|
||||
// }
|
||||
return nutMap;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -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<NutMap> pagination = suggestionBoxService.listPageMap(pageNumber, pageSize, sql);
|
||||
|
||||
+1
-1
@@ -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());
|
||||
}
|
||||
|
||||
-27
@@ -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));
|
||||
}
|
||||
}
|
||||
+6
-2
@@ -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();
|
||||
}
|
||||
|
||||
+10
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user