..
This commit is contained in:
+63
-55
@@ -1,39 +1,46 @@
|
||||
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.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.web.commons.auth.utils.AuthUtil;
|
||||
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.ArticleInfoPageVO;
|
||||
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.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.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -49,6 +56,9 @@ public class ArticleBranchUnionApprovalController {
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/article/branchUnionApproval/index.html")
|
||||
@@ -56,81 +66,79 @@ 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("分页查询")
|
||||
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 instanceVariale,
|
||||
t.id taskId,
|
||||
t.taskName AS taskKey,
|
||||
t.displayName taskName,
|
||||
t.taskType,
|
||||
t.performType taskPerformType,
|
||||
t.taskState,
|
||||
t.finishTime,
|
||||
t.taskParentId,
|
||||
t.variable taskVariale
|
||||
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
|
||||
$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);
|
||||
if(approval){
|
||||
cnd.and("task.taskStatus","=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
}else{
|
||||
cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE);
|
||||
cnd.and("t.taskName", "=", "f4d62c2d-3947-4c68-b34f-127af89952b0");
|
||||
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()));
|
||||
} else {
|
||||
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
|
||||
}
|
||||
|
||||
cnd.andEX("YEAR(info.submitTime)","=",pageForm.getYear());
|
||||
cnd.and(Cnd.likeEX("info.title",pageForm.getTitle()));
|
||||
cnd.desc("t.createdAt");
|
||||
|
||||
if(StrUtil.isAllBlank(pageForm.getPageOrderName(),pageForm.getPageOrderBy())){
|
||||
cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear());
|
||||
cnd.and(Cnd.likeEX("info.title", pageForm.getTitle()));
|
||||
|
||||
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.desc("info.submitTime");
|
||||
}else{
|
||||
} else {
|
||||
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.branchUnionApproval")
|
||||
@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);
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("article.branchUnionApproval")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "新闻投稿", msg = "分工会撤回")
|
||||
@ApiOperation("分工会撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+14
-12
@@ -31,9 +31,9 @@ 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.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -48,6 +48,8 @@ public class ArticleClubApprovalController {
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
// @Inject
|
||||
// private SnakerEngine snakerEngine;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/article/clubApproval/index.html")
|
||||
@@ -79,22 +81,22 @@ public class ArticleClubApprovalController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode","=",32);
|
||||
if(approval){
|
||||
cnd.and("task.taskStatus","=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
}else{
|
||||
cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE);
|
||||
cnd.and("nd.nodeCode", "=", 32);
|
||||
if (approval) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
|
||||
cnd.andEX("YEAR(info.submitTime)","=",pageForm.getYear());
|
||||
cnd.and(Cnd.likeEX("info.title",pageForm.getTitle()));
|
||||
cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear());
|
||||
cnd.and(Cnd.likeEX("info.title", pageForm.getTitle()));
|
||||
|
||||
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()));
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
@@ -111,7 +113,7 @@ public class ArticleClubApprovalController {
|
||||
approvalParam.getBpmTaskApprovalTypeEnum();
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
List<String> assignments = new ArrayList<>();
|
||||
if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
|
||||
if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)) {
|
||||
String schoolUnionApprovalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ARTICLE_ADMIN, Cnd.NEW());
|
||||
assignments.add(schoolUnionApprovalLoginName);
|
||||
}
|
||||
|
||||
+8
@@ -1,5 +1,6 @@
|
||||
package com.budwk.app.zhgh.dayofficework.article.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.dayofficework.article.service.ArticleService;
|
||||
@@ -30,4 +31,11 @@ public class ArticleCommonController {
|
||||
return Result.success(articleVO);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/article/common/fullForm.html")
|
||||
public void fullForm(){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+80
-36
@@ -1,16 +1,16 @@
|
||||
package com.budwk.app.zhgh.dayofficework.article.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
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;
|
||||
import com.budwk.app.zhgh.dayofficework.article.service.ArticleService;
|
||||
import com.budwk.app.zhgh.dayofficework.article.vo.ArticleInfoPageVO;
|
||||
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;
|
||||
@@ -20,10 +20,15 @@ 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 javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/article/mine")
|
||||
@@ -33,53 +38,92 @@ public class ArticleMineController {
|
||||
|
||||
@Inject
|
||||
private ArticleService articleService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/article/mine/index.html")
|
||||
@SaCheckPermission("article.mine")
|
||||
public void index() {}
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("article.mine")
|
||||
@ApiOperation("分页查询")
|
||||
public Result pageData(@Valid ArticleInfoPageParam pageForm){
|
||||
public Result pageData(@Valid ArticleInfoPageParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
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, 30 ) ORDER BY createdAt DESC LIMIT 1 )
|
||||
AND taskStatus = 'COMPELTE'
|
||||
) AS nextTaskIsComplete
|
||||
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 instanceVariale,
|
||||
t.id taskId,
|
||||
t.taskName AS taskKey,
|
||||
t.displayName taskName,
|
||||
t.taskType,
|
||||
t.performType taskPerformType,
|
||||
t.taskState,
|
||||
t.finishTime,
|
||||
t.taskParentId,
|
||||
t.variable taskVariale
|
||||
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
|
||||
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()) && !SecurityUtil.getUserLoginname().equals("20210004")) {
|
||||
cnd.and("inst.processInstanceInitiatorLoginName", "=", SecurityUtil.getUserLoginname());
|
||||
}
|
||||
|
||||
cnd.andEX("YEAR(info.submitTime)","=",pageForm.getYear());
|
||||
cnd.and(Cnd.likeEX("info.title",pageForm.getTitle()));
|
||||
cnd.and("info.createdBy", "=", SecurityUtil.getUserId());
|
||||
cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear());
|
||||
cnd.desc("info.submitTime");
|
||||
|
||||
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);
|
||||
|
||||
// // 获取当前用户发起的流程实例列表
|
||||
// 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
|
||||
@@ -87,8 +131,8 @@ public class ArticleMineController {
|
||||
@ApiOperation("撤回")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "新闻投稿", msg = "撤回新闻投稿")
|
||||
public Result revokeApply(@Valid String id){
|
||||
bpmService.revokeApply(id);
|
||||
public Result revokeApply(@Valid String id) {
|
||||
// bpmService.revokeApply(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@@ -97,9 +141,9 @@ public class ArticleMineController {
|
||||
@ApiOperation("删除")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "新闻投稿", msg = "删除新闻投稿")
|
||||
public Result delete(@Valid String id){
|
||||
public Result delete(@Valid String id) {
|
||||
articleService.delete(id);
|
||||
bpmService.deleteInstance(id);
|
||||
// bpmService.deleteInstance(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
+59
-54
@@ -1,7 +1,9 @@
|
||||
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;
|
||||
@@ -11,6 +13,9 @@ 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;
|
||||
@@ -27,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;
|
||||
@@ -48,6 +54,8 @@ public class ArticleSchoolUnionApprovalController {
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/article/schoolUnionApproval/index.html")
|
||||
@@ -55,85 +63,82 @@ 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")
|
||||
@ApiOperation("分页查询")
|
||||
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 instanceVariale,
|
||||
t.id taskId,
|
||||
t.taskName AS taskKey,
|
||||
t.displayName taskName,
|
||||
t.taskType,
|
||||
t.performType taskPerformType,
|
||||
t.taskState,
|
||||
t.finishTime,
|
||||
t.taskParentId,
|
||||
t.variable taskVariale
|
||||
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
|
||||
$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","=",40);
|
||||
if(approval){
|
||||
cnd.and("task.taskStatus","=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
}else{
|
||||
cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE);
|
||||
cnd.and("t.taskName", "=", "a29bdec1-e285-41f3-aa2c-2c24fccefea1");
|
||||
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()));
|
||||
} else {
|
||||
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
|
||||
}
|
||||
|
||||
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());
|
||||
cnd.desc("t.createdAt");
|
||||
|
||||
if(StrUtil.isAllBlank(pageForm.getPageOrderName(),pageForm.getPageOrderBy())){
|
||||
cnd.andEX("YEAR(info.submitTime)", "=", pageForm.getYear());
|
||||
cnd.and(Cnd.likeEX("info.title", pageForm.getTitle()));
|
||||
|
||||
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.desc("info.submitTime");
|
||||
}else{
|
||||
} else {
|
||||
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.schoolUnionApproval")
|
||||
@SaCheckPermission("article.branchUnionApproval")
|
||||
@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<>();
|
||||
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);
|
||||
|
||||
// 同意退回都到校工会投稿编辑人
|
||||
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.schoolUnionApproval")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "新闻投稿", msg = "校工会撤回")
|
||||
@ApiOperation("校工会撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+50
-62
@@ -1,20 +1,21 @@
|
||||
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.util.ObjectUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.models.BpmProcessInstance;
|
||||
import com.budwk.app.bpm.models.BpmProcessTask;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.sys.models.Sys_user_role;
|
||||
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.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.club.model.ClubUser;
|
||||
import com.budwk.app.zhgh.club.model.SysClub;
|
||||
import com.budwk.app.zhgh.club.service.SysClubService;
|
||||
import com.budwk.app.zhgh.dayofficework.article.models.Article;
|
||||
import io.swagger.annotations.Api;
|
||||
@@ -48,15 +49,24 @@ public class ArticleWriteController {
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
|
||||
@Inject
|
||||
private SysClubService sysClubService;
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/article/write/index.html")
|
||||
@SaCheckPermission("article.write")
|
||||
@ApiOperation("撰写新闻投稿")
|
||||
public void index() {
|
||||
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/article/write/index_.html")
|
||||
public void index_() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -66,74 +76,52 @@ public class ArticleWriteController {
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result save(@Param("article") Article article) {
|
||||
dao.insertOrUpdate(article);
|
||||
bpmService.startSaveProcessInstance(BpmProcessConstant.ARTICLE.name(), article.getTitle(), article.getId(), null);
|
||||
return Result.success();
|
||||
// 启动流程 阻塞在第一个任务节点
|
||||
ProcessInstance instance = flowEngine.startProcessInstanceByKey("XWTG", article.getId(), SecurityUtil.getUserId(), null);
|
||||
return Result.success(article);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("article.write")
|
||||
@ApiOperation("提交新闻投稿")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result submit(@Param("article") Article article) {
|
||||
List<String> assignments = new ArrayList<>();
|
||||
|
||||
if ("ARTICLE_ORIGIN_CLUB".equals(article.getOrigin())) {
|
||||
SysClub club = sysClubService.fetch(article.getClubId());
|
||||
article.setClubName(club.getClubName());
|
||||
//查询协会会长
|
||||
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);
|
||||
} else {
|
||||
//查询分工会主席
|
||||
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);
|
||||
}
|
||||
public Result submit(@Param("article") Article article, Long instanceId, Long taskId) {
|
||||
dao.insertOrUpdate(article);
|
||||
|
||||
|
||||
HashMap<String, Object> variables = new HashMap<>();
|
||||
variables.put("MODE", article.getOrigin());
|
||||
// 默认false
|
||||
variables.put("FIRST_EXAMINE_BACK", false);
|
||||
variables.put("FINAL_EXAMINE_BACK", false);
|
||||
|
||||
|
||||
// 查询最新一次审核的任务
|
||||
BpmProcessInstance instance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", article.getId()));
|
||||
if (ObjectUtil.isNotNull(instance)) {
|
||||
List<String> taskIds = instance.getProcessInstanceTaskIds();
|
||||
BpmProcessTask endBackTask = dao.fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getId, "in", taskIds).and(BpmProcessTask::getProcessTaskNodeCode, "in", List.of(38, 65)).desc(BpmProcessTask::getCreatedOn));
|
||||
if (ObjectUtil.isNotNull(endBackTask)) {
|
||||
BpmProcessTask prevTask = dao.fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getId, "=", endBackTask.getPrevTaskId()));
|
||||
String result = prevTask.getExtVariable().getStr("RESULT", "");
|
||||
Boolean processAgain = prevTask.getExtVariable().getBool("processAgain", false);
|
||||
if ("BACK_TO_START".equals(result) && !processAgain) {
|
||||
// 哪里来的回哪儿去
|
||||
if (prevTask.getProcessTaskNodeCode() == 36) {
|
||||
variables.put("FIRST_EXAMINE_BACK", true);
|
||||
} else if (prevTask.getProcessTaskNodeCode() == 60) {
|
||||
variables.put("FINAL_EXAMINE_BACK", true);
|
||||
}
|
||||
|
||||
// 重新赋值
|
||||
assignments = new ArrayList<>();
|
||||
String schoolUnionApprovalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ARTICLE_ADMIN, Cnd.NEW());
|
||||
assignments.add(schoolUnionApprovalLoginName);
|
||||
}
|
||||
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()));
|
||||
}
|
||||
|
||||
|
||||
bpmService.startSubmitProcessInstance(BpmProcessConstant.ARTICLE.name(), article.getTitle(), article.getId(), assignments, variables);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@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);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("article.write")
|
||||
@ApiOperation("新闻投稿详情")
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.budwk.app.zhgh.dayofficework.article.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.dayofficework.article.models.Article;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.json.Json;
|
||||
|
||||
public class ArticleSaveInterceptor implements FlowInterceptor {
|
||||
@Override
|
||||
public void intercept(Execution execution) {
|
||||
System.out.println("..................");
|
||||
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
|
||||
Article article = Json.fromJson(Article.class, formDataStr);
|
||||
|
||||
Dao dao = ServiceContext.find(Dao.class);
|
||||
dao.insertOrUpdate(article);
|
||||
|
||||
// 设置流程变量
|
||||
execution.getArgs().set("origin", article.getOrigin());
|
||||
|
||||
int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY);
|
||||
dao.update(ProcessInstance.class, Chain.make("businessNo", article.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId));
|
||||
|
||||
System.out.println(execution);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,11 @@ 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)
|
||||
@@ -96,7 +101,6 @@ public class Article extends BaseModel {
|
||||
@PrevUpdate(els = @EL("$me.now()"))
|
||||
private Date submitTime;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("投稿人联系方式")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@@ -111,7 +115,6 @@ public class Article extends BaseModel {
|
||||
@Comment("发布链接地质")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 500)
|
||||
private String publishLink;
|
||||
|
||||
public Date now() {
|
||||
return new Date();
|
||||
}
|
||||
|
||||
+2
-2
@@ -29,8 +29,8 @@ public class ArticleServiceImpl extends BaseServiceImpl<Article> implements Arti
|
||||
Article article = fetch(id);
|
||||
ArticleVO articleVO = BeanUtil.copyProperties(article, ArticleVO.class);
|
||||
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.ARTICLE, id);
|
||||
articleVO.setNodeTasks(nodeTasks);
|
||||
// List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.ARTICLE, id);
|
||||
// articleVO.setNodeTasks(nodeTasks);
|
||||
return articleVO;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.budwk.app.zhgh.dayofficework.article.vo;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@Data
|
||||
public class ArticlePageVo {
|
||||
|
||||
private boolean orderState;
|
||||
|
||||
private String currentTaskName;
|
||||
|
||||
private String parentTaskId;
|
||||
|
||||
private String businessId;
|
||||
|
||||
private String title;
|
||||
|
||||
private String userName;
|
||||
|
||||
private String loginName;
|
||||
|
||||
private String unitName;
|
||||
|
||||
private String unionName;
|
||||
|
||||
private String submitTime;
|
||||
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package com.budwk.app.zhgh.dayofficework.holidaywishes.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)
|
||||
@Table("holiday_wishes_matter")
|
||||
@Comment("节日祝福事项")
|
||||
@Data
|
||||
public class HolidayWishesMatter extends BaseModel {
|
||||
|
||||
@Comment("ID")
|
||||
@Name
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String name;
|
||||
|
||||
@Column
|
||||
@Comment("消息模板")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String msgTemplate;
|
||||
|
||||
@Column
|
||||
@Comment("发送方式(手动、自动)")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String sendWay;
|
||||
|
||||
@Column
|
||||
@Comment("自动发送时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String autoCron;
|
||||
|
||||
@Column
|
||||
@Comment("发送途径(系统、短信、企业微信)")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String sendChannel;
|
||||
|
||||
@Column
|
||||
@Comment("接收人")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String sendRange;
|
||||
|
||||
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.budwk.app.zhgh.dayofficework.holidaywishes.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;
|
||||
|
||||
@Table("holiday_wishes_message")
|
||||
@Comment("节日祝福信息")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class HolidayWishesMessage extends BaseModel {
|
||||
|
||||
@Comment("ID")
|
||||
@Name
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Comment("事项ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Column
|
||||
private String matterId;
|
||||
|
||||
@Comment("接收人ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Column
|
||||
private String receiverId;
|
||||
|
||||
@Comment("接收人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Column
|
||||
private String receiverName;
|
||||
|
||||
@Comment("接收人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Column
|
||||
private String receiverLoginName;
|
||||
|
||||
@Comment("接收人单位ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Column
|
||||
private String receiverUnitId;
|
||||
|
||||
@Comment("接收人单位名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
@Column
|
||||
private String receiverUnitName;
|
||||
|
||||
@Comment("发送内容")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
@Column
|
||||
private String sendContent;
|
||||
|
||||
@Comment("是否发送")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Column
|
||||
@Default("0")
|
||||
private Boolean isSend;
|
||||
|
||||
}
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
|
||||
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.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.Map;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressApprovalController
|
||||
* @Date 2024/8/16 17:21
|
||||
* @注释 基层双代会批复
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/approval")
|
||||
@Api(tags = "基层双代会批复")
|
||||
public class GrassrootsCongressApprovalController {
|
||||
|
||||
@Inject
|
||||
private GrassrootsCongressService grassrootsCongressService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/approval/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.approval")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("会议列表")
|
||||
@SaCheckPermission("grassrootsCongress.approval")
|
||||
public Result pageData(PageForm pageForm, Integer year, String unionId) {
|
||||
Pagination pagination = grassrootsCongressService.approvalPageData(pageForm, year, unionId);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会议批复")
|
||||
@SaCheckPermission("grassrootsCongress.approval")
|
||||
@SLog(type = "基层双代会", tag = "基层双代会批复", msg = "校工会批复信息")
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会议批复撤回")
|
||||
@SaCheckPermission("grassrootsCongress.approval")
|
||||
@SLog(type = "基层双代会", tag = "基层双代会批复撤回", msg = "校工会批复信息撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressMeetingService;
|
||||
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.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;
|
||||
|
||||
/**
|
||||
* @ClassName GrassrootsCongressMeetingAuditController
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2024/9/6 15:17
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/materials/audit")
|
||||
@Api(tags = "基层双代会资料审核")
|
||||
public class GrassrootsCongressMaterialsAuditController {
|
||||
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private GrassrootsCongressMeetingService grassrootsCongressMeetingService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/materials/audit/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.materials.audit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("资料列表")
|
||||
@SaCheckPermission("grassrootsCongress.materials.audit")
|
||||
public Result pageData(PageForm pageForm, Integer year, String unionId) {
|
||||
Pagination pagination = grassrootsCongressMeetingService.pageData(pageForm, year, unionId);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会议资料审核")
|
||||
@SaCheckPermission("grassrootsCongress.materials.audit")
|
||||
@SLog(type = "基层双代会", tag = "基层双代会资料审核", msg = "校工会审核信息")
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), null, null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会议批复撤回")
|
||||
@SaCheckPermission("grassrootsCongress.materials.audit")
|
||||
@SLog(type = "基层双代会", tag = "基层双代会资料撤回", msg = "基层双代会资料撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+143
@@ -0,0 +1,143 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.constant.RoleConstant;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
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.service.BpmService;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMaterialsInfo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressMeetingService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.vo.GrassrootsCongressMaterialVo;
|
||||
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.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName GrassrootsCongressMaterialsController
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2024/9/6 9:53
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/materials/manage")
|
||||
@Api(tags = "基层双代会资料管理")
|
||||
public class GrassrootsCongressMaterialsController {
|
||||
|
||||
@Inject
|
||||
private GrassrootsCongressMeetingService grassrootsCongressMeetingService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/materials/manage/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.materials.manage")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("我的资料列表")
|
||||
@SaCheckPermission("grassrootsCongress.materials.manage")
|
||||
public Result pageData(PageForm pageForm, Integer year) {
|
||||
Pagination pagination = grassrootsCongressMeetingService.pageData(pageForm, year);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("提交")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SaCheckPermission("grassrootsCongress.materials.manage")
|
||||
@SLog(tag = "基层双代会", msg = "上传会议资料", type = "grassrootsCongressMaterials")
|
||||
public Result doSave(@Param("data") GrassrootsCongressMaterialsInfo data) {
|
||||
data.setCreatedDate(new Date());
|
||||
data.setUserName(SecurityUtil.getUserUsername());
|
||||
data.setLoginName(SecurityUtil.getUserLoginname());
|
||||
data.setUserId(SecurityUtil.getUserId());
|
||||
grassrootsCongressMeetingService.insertOrUpdate(data);
|
||||
bpmService.startSaveProcessInstance(BpmProcessConstant.GRASSROOTS_CONGRESS_MATERIALS.name(), data.getMaterialsName(), data.getId(), null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("提交")
|
||||
@Aop({TransAop.READ_COMMITTED})
|
||||
@SaCheckPermission("grassrootsCongress.materials.manage")
|
||||
@SLog(type = "grassrootsCongressMaterials", tag = "基层双代会", msg = "会议请示添加会议")
|
||||
public Result doSubmit(@Param("data") GrassrootsCongressMaterialsInfo data) {
|
||||
data.setCreatedDate(new Date());
|
||||
data.setUserName(SecurityUtil.getUserUsername());
|
||||
data.setLoginName(SecurityUtil.getUserLoginname());
|
||||
data.setUserId(SecurityUtil.getUserId());
|
||||
grassrootsCongressMeetingService.insertOrUpdate(data);
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ADMIN);
|
||||
if (StrUtil.isBlank(approvalLoginName)) {
|
||||
throw new BaseException("会议资料审批人未设置");
|
||||
}
|
||||
bpmService.startSubmitProcessInstance(BpmProcessConstant.GRASSROOTS_CONGRESS_MATERIALS.name(), data.getMaterialsName(), data.getId(), List.of(approvalLoginName), null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("删除会议资料")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(type = "grassrootsCongressMaterials", tag = "基层双代会", msg = "删除会议资料")
|
||||
public Result doDelete(@Valid String id) {
|
||||
grassrootsCongressMeetingService.dao().delete(GrassrootsCongressMaterialsInfo.class, id);
|
||||
bpmService.deleteInstance(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("撤回申请")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "基层双代会", msg = "撤回申请")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
public Result revokeApply(@Valid String id) {
|
||||
bpmService.revokeApply(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("grassrootsCongress.materials.manage")
|
||||
@ApiOperation("查询单个会议资料信息")
|
||||
public Result findOne(@Valid String id) {
|
||||
Sql sql = Sqls.create("""
|
||||
select * from grassroots_congress_materials_info where id=@id
|
||||
""").setParam("id", id);
|
||||
GrassrootsCongressMaterialVo grassrootsCongressMaterialVo = (GrassrootsCongressMaterialVo) baseService.fetchVO(sql, GrassrootsCongressMaterialVo.class);
|
||||
grassrootsCongressMaterialVo.setNodeTasks(bpmService.getNodeTasks(BpmProcessConstant.GRASSROOTS_CONGRESS_MATERIALS, id));
|
||||
return Result.success(grassrootsCongressMaterialVo);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
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.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.vo.GrassrootsCongressVo;
|
||||
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.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;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressApplyController
|
||||
* @Date 2024/8/16 16:44
|
||||
* @注释 基层双代会请示
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/meeting")
|
||||
@Api(tags = "基层双代会请示")
|
||||
public class GrassrootsCongressMeetingController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/meetings/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.meeting")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("提交")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "基层双代会", msg = "会议请示添加会议")
|
||||
@SaCheckPermission("grassrootsCongress.meeting")
|
||||
public Result doSubmit(@Param("data") GrassrootsCongressMeetingInfo data) {
|
||||
data.setCreateTime(DateUtil.now());
|
||||
data.setCreateUserId(SecurityUtil.getUserId());
|
||||
data.setCreateUserName(SecurityUtil.getUserUsername());
|
||||
dao.insertOrUpdate(data);
|
||||
List<String> loginNameList = commonService.findUsersLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_WC_AUDIT_ADMIN);
|
||||
if (ObjectUtil.isEmpty(loginNameList)) {
|
||||
return Result.error("校工会基层双代会批复人未设置");
|
||||
}
|
||||
bpmService.startSubmitProcessInstance(BpmProcessConstant.GRASSROOTS_CONGRESS.name(), data.getMeetingName(), data.getId(), loginNameList, null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("保存")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "基层双代会", msg = "会议请示添加会议")
|
||||
@SaCheckPermission("grassrootsCongress.meeting")
|
||||
public Result doSave(@Param("data") GrassrootsCongressMeetingInfo data) {
|
||||
data.setCreateTime(DateUtil.now());
|
||||
data.setCreateUserId(SecurityUtil.getUserId());
|
||||
data.setCreateUserName(SecurityUtil.getUserUsername());
|
||||
dao.insertOrUpdate(data);
|
||||
bpmService.startSaveProcessInstance(BpmProcessConstant.GRASSROOTS_CONGRESS.name(), data.getMeetingName(), data.getId(), null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("grassrootsCongress")
|
||||
@ApiOperation("查询单个会议信息")
|
||||
public Result findOne(@Valid String id) {
|
||||
Sql sql = Sqls.create("""
|
||||
select * from grassroots_congress_meeting_info where id=@id
|
||||
""").setParam("id", id);
|
||||
GrassrootsCongressVo grassrootsCongressVo = (GrassrootsCongressVo) baseService.fetchVO(sql, GrassrootsCongressVo.class);
|
||||
grassrootsCongressVo.setNodeTasks(bpmService.getNodeTasks(BpmProcessConstant.GRASSROOTS_CONGRESS, id));
|
||||
return Result.success(grassrootsCongressVo);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("根据unionId查询所有基层双代会")
|
||||
public Result querySessionList(String unionId) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRoleOr(RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||
}
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
cnd.groupBy("fullName");
|
||||
cnd.desc("createdAt");
|
||||
List<GrassrootsCongressMeetingInfo> infoList = dao.query(GrassrootsCongressMeetingInfo.class, cnd);
|
||||
|
||||
return Result.success(infoList);
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressMeetingStatisticsController
|
||||
* @Date 2024/11/14 19:25
|
||||
* @注释
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/meetingStatistics")
|
||||
@Api(tags = "基层双代会汇总统计")
|
||||
public class GrassrootsCongressMeetingStatisticsController {
|
||||
|
||||
@Inject
|
||||
private GrassrootsCongressService grassrootsCongressService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/meetingstatistics/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.meetingStatistics")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("汇总统计列表")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
public Result pageData(GrassrootsCongressPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
su.*,
|
||||
sum(CASE WHEN info.unionId = su.id THEN 1 ELSE 0 END) as unionNum
|
||||
FROM
|
||||
sys_union su
|
||||
LEFT JOIN grassroots_congress_meeting_info info ON su.id = info.unionId $yearSql $nameSql
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (pageForm.getYear() != null) {
|
||||
sql.setVar("yearSql", new Static(" and YEAR(info.createTime) = %s".formatted( pageForm.getYear())));
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getFullName())) {
|
||||
sql.setVar("nameSql", new Static(" and info.fullName = '%s'".formatted(pageForm.getFullName())));
|
||||
}
|
||||
// cnd.andEX("YEAR(info.createTime)", "=", pageForm.getYear());
|
||||
// cnd.andEX("info.fullName", "=", pageForm.getFullName());
|
||||
cnd.andEX("su.id", "=", pageForm.getUnionId());
|
||||
cnd.groupBy("su.id");
|
||||
sql.setCondition(cnd);
|
||||
return Result.success(grassrootsCongressService.listMap(sql));
|
||||
}
|
||||
}
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.base.service.BaseService;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
|
||||
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.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName GrassrootsCongressMyMeetingController
|
||||
* @Description 我的申请
|
||||
* @Author zhf
|
||||
* @Date 2024/9/5 9:57
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/myMeeting")
|
||||
@Api(tags = "基层双代会我的请示")
|
||||
public class GrassrootsCongressMyMeetingController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private GrassrootsCongressService grassrootsCongressService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/myMeetings/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("我的请示列表")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
public Result pageData(@Valid GrassrootsCongressPageForm pageForm, Integer year) {
|
||||
Pagination pagination = grassrootsCongressService.pageData(pageForm, year);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("删除会议请示")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(type = "grassrootsCongress", tag = "基层双代会", msg = "删除会议请示")
|
||||
public Result doDelete(@Valid String id) {
|
||||
baseService.dao().delete(GrassrootsCongressMeetingInfo.class, id);
|
||||
grassrootsCongressService.delete(id);
|
||||
bpmService.deleteInstance(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会议请示撤回")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
@SLog(type = "基层双代会", tag = "基层双代会请示撤回", msg = "会议请示信息撤回")
|
||||
public Result revoke(@Valid String id) {
|
||||
bpmService.revokeApply(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("基层双代会届次")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
public Result getAllJc(Integer year){
|
||||
List<GrassrootsCongressMeetingInfo> query = baseService.dao().query(GrassrootsCongressMeetingInfo.class,
|
||||
Cnd.where("YEAR(createTime)", "=", year).and("fullName", "is not", null).groupBy("fullName"));
|
||||
if (Lang.isNotEmpty(query)) {
|
||||
List<String> list = query.stream().map(GrassrootsCongressMeetingInfo::getFullName).toList();
|
||||
return Result.success(list);
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.models;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
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;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName GrassrootsCongressMaterialsInfo
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2024/9/6 10:06
|
||||
*/
|
||||
@Data
|
||||
@Comment("基层双代会资料")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Table("grassroots_congress_materials_info")
|
||||
public class GrassrootsCongressMaterialsInfo extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("创建人id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@Comment("创建人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String userName;
|
||||
|
||||
@Column
|
||||
@Comment("创建人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 120)
|
||||
private String loginName;
|
||||
|
||||
@Column
|
||||
@Comment("创建人工会")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("教代会id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String sessionId;
|
||||
|
||||
@Column
|
||||
@Comment("教代会全称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String fullName;
|
||||
|
||||
@Column
|
||||
@Comment("资料类型")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String materialsType;
|
||||
|
||||
@Column
|
||||
@Comment("资料名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String materialsName;
|
||||
|
||||
@Column
|
||||
@Comment("附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> files;
|
||||
@Column
|
||||
@Comment("创建时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date createdDate;
|
||||
|
||||
|
||||
}
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.models;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressInfo
|
||||
* @Date 2024/8/16 16:49
|
||||
* @注释 基层双代会信息
|
||||
*/
|
||||
@Data
|
||||
@Comment("基层双代会信息")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Table("grassroots_congress_meeting_info")
|
||||
public class GrassrootsCongressMeetingInfo extends BaseModel {
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@Prev(els = {@EL("uuid()")})
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("会议名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String meetingName;
|
||||
|
||||
@Column
|
||||
@Comment("会议类型")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String meetingType;
|
||||
|
||||
@Column
|
||||
@Comment("届数")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 8)
|
||||
private String j;
|
||||
|
||||
@Column
|
||||
@Comment("次数")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 8)
|
||||
private String c;
|
||||
|
||||
@Column
|
||||
@Comment("所属单位")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unitId;
|
||||
|
||||
@Column
|
||||
@Comment("所属单位")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("所属工会")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionId;
|
||||
@Column
|
||||
@Comment("所属工会")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("创建时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String createTime;
|
||||
|
||||
@Column
|
||||
@Comment("创建人")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String createUserId;
|
||||
|
||||
@Column
|
||||
@Comment("创建人")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String createUserName;
|
||||
|
||||
@Column
|
||||
@Comment("届次")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String sessionId;
|
||||
|
||||
@Column
|
||||
@Comment("会议时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
private String meetingTime;
|
||||
|
||||
@Column
|
||||
@Comment("会议议程")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String meetingTopic;
|
||||
|
||||
|
||||
@Column
|
||||
@Comment("会议备注")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 500)
|
||||
private String meetingRemark;
|
||||
|
||||
@Column
|
||||
@Comment("文件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> files;
|
||||
|
||||
@Column
|
||||
@Comment("教代会全称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String fullName;
|
||||
|
||||
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.param;
|
||||
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressPageForm
|
||||
* @Date 2024/11/14 19:29
|
||||
* @注释
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class GrassrootsCongressPageForm extends PageForm<GrassrootsCongressPageForm> {
|
||||
|
||||
private Integer year;
|
||||
|
||||
private String unionId;
|
||||
|
||||
private String fullName;
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.service;
|
||||
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMaterialsInfo;
|
||||
|
||||
public interface GrassrootsCongressMeetingService extends BaseService<GrassrootsCongressMaterialsInfo> {
|
||||
|
||||
Pagination pageData(PageForm pageForm,Integer year);
|
||||
Pagination pageData(PageForm pageForm,Integer year,String unionId);
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.service;
|
||||
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
|
||||
|
||||
public interface GrassrootsCongressService extends BaseService<GrassrootsCongressMeetingInfo> {
|
||||
|
||||
Pagination pageData(GrassrootsCongressPageForm pageForm, Integer year);
|
||||
|
||||
Pagination approvalPageData(PageForm pageForm, Integer year,String unionId);
|
||||
|
||||
}
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMaterialsInfo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressMeetingService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.vo.GrassrootsCongressMaterialPageVo;
|
||||
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.loader.annotation.IocBean;
|
||||
|
||||
/**
|
||||
* @ClassName GrassrootsCongressMeetingServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2024/9/6 9:55
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class GrassrootsCongressMeetingServiceImpl extends BaseServiceImpl<GrassrootsCongressMaterialsInfo> implements GrassrootsCongressMeetingService {
|
||||
public GrassrootsCongressMeetingServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pagination pageData(PageForm pageForm, Integer year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus,
|
||||
nd.nodeType AS processInstanceTaskNodeType,
|
||||
(
|
||||
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, 70 ) ORDER BY createdAt DESC LIMIT 1 )
|
||||
AND taskStatus = 'COMPELTE'
|
||||
) AS nextTaskIsComplete
|
||||
FROM
|
||||
grassroots_congress_materials_info info
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
LEFT JOIN bpm_process_node_define nd ON nd.id = inst.processInstanceNodeId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(info.createdDate)", "=", year);
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
cnd.and(Cnd.likeEX("info.materialsName", pageForm.getSearchKeyword()));
|
||||
}
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("info.userId", "=", SecurityUtil.getUserId());
|
||||
}
|
||||
cnd.desc("info.createdAt");
|
||||
sql.setCondition(cnd);
|
||||
return listPageVO(pageForm, sql, GrassrootsCongressMaterialPageVo.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pagination pageData(PageForm pageForm, Integer year, String unionId) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("nd.nodeCode", "=", 20);
|
||||
cnd.andEX("YEAR(info.createdDate)", "=", year);
|
||||
cnd.andEX("info.unionId", "=", unionId);
|
||||
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
|
||||
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 grassroots_congress_materials_info info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
$condition
|
||||
""");
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
cnd.and(Cnd.likeEX("info.materialsName", pageForm.getSearchKeyword()));
|
||||
}
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
if (pageForm.getAudit()) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
cnd.desc("info.createdBy");
|
||||
sql.setCondition(cnd);
|
||||
return listPageVO(pageForm, sql, GrassrootsCongressMaterialPageVo.class);
|
||||
}
|
||||
}
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.vo.GrassrootsCongressPageVo;
|
||||
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.loader.annotation.IocBean;
|
||||
|
||||
/**
|
||||
* @ClassName GrassrootsCongressServiceImpl
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2024/9/5 18:06
|
||||
*/
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class GrassrootsCongressServiceImpl extends BaseServiceImpl<GrassrootsCongressMeetingInfo> implements GrassrootsCongressService {
|
||||
public GrassrootsCongressServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pagination pageData(GrassrootsCongressPageForm pageForm, Integer year) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus,
|
||||
nd.nodeType AS processInstanceTaskNodeType,
|
||||
(
|
||||
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
|
||||
FROM
|
||||
grassroots_congress_meeting_info info
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
LEFT JOIN bpm_process_node_define nd ON nd.id = inst.processInstanceNodeId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("YEAR(info.createTime)", "=", year);
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
cnd.and(Cnd.likeEX("info.meetingName", pageForm.getSearchKeyword()));
|
||||
}
|
||||
if(!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_CHAIRMAN.name(), RoleConstant.SCHOOL_UNION_VICE_CHAIRMAN.name(), RoleConstant.SCHOOL_UNION_WC_AUDIT_ADMIN.name())){
|
||||
cnd.and("info.createUserId", "=", SecurityUtil.getUserId());
|
||||
}
|
||||
cnd.desc("info.createTime");
|
||||
sql.setCondition(cnd);
|
||||
return listPageVO(pageForm, sql, GrassrootsCongressPageVo.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pagination approvalPageData(PageForm pageForm, Integer year, String unionId) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("nd.nodeCode", "=", 20);
|
||||
cnd.andEX("YEAR(info.createTime)", "=", year);
|
||||
cnd.andEX("info.unionId", "=", unionId);
|
||||
Sql sql = generateSql(pageForm, cnd);
|
||||
sql.setCondition(cnd);
|
||||
return listPageVO(pageForm, sql, GrassrootsCongressPageVo.class);
|
||||
}
|
||||
|
||||
|
||||
private Sql generateSql(PageForm pageForm, Cnd cnd) {
|
||||
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
|
||||
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 grassroots_congress_meeting_info info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
|
||||
$condition
|
||||
""");
|
||||
if(!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_CHAIRMAN.name(), RoleConstant.SCHOOL_UNION_VICE_CHAIRMAN.name(), RoleConstant.SCHOOL_UNION_WC_AUDIT_ADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
if (pageForm.getAudit()) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
cnd.desc("info.createTime");
|
||||
return sql;
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.vo;
|
||||
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalVo;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressMaterialPageVo
|
||||
* @Date 2024/10/23 13:59
|
||||
* @注释 基层双代会资料
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class GrassrootsCongressMaterialPageVo extends BpmTaskApprovalVo {
|
||||
|
||||
private String id;
|
||||
private String userId;
|
||||
private String userName;
|
||||
private String loginName;
|
||||
private String unionName;
|
||||
private String sessionId;
|
||||
private String fullName;
|
||||
private String materialsType;
|
||||
private String materialsName;
|
||||
private String files;
|
||||
private Date createdDate;
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.vo;
|
||||
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMaterialsInfo;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressMaterialVo
|
||||
* @Date 2024/10/23 15:28
|
||||
* @注释
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class GrassrootsCongressMaterialVo extends GrassrootsCongressMaterialsInfo {
|
||||
|
||||
@ApiModelProperty("节点审批记录")
|
||||
private List<BpmTaskApprovalRecordVo> nodeTasks;
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.vo;
|
||||
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalVo;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressVo
|
||||
* @Date 2024/10/22 18:21
|
||||
* @注释
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class GrassrootsCongressPageVo extends BpmTaskApprovalVo {
|
||||
|
||||
private String id;
|
||||
private String meetingName;
|
||||
private String unitId;
|
||||
private String unionId;
|
||||
private Date createTime;
|
||||
private String sessionId;
|
||||
private Date meetingTime;
|
||||
private String meetingTopic;
|
||||
private String meetingRemark;
|
||||
private String files;
|
||||
private String createdBy;
|
||||
private long createdAt;
|
||||
private String updatedBy;
|
||||
private long updatedAt;
|
||||
private boolean delFlag;
|
||||
private String meetingType;
|
||||
private String j;
|
||||
private String c;
|
||||
private String unitName;
|
||||
private String unionName;
|
||||
private String fullName;
|
||||
private String createUserId;
|
||||
private String createUserName;
|
||||
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.vo;
|
||||
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressVo
|
||||
* @Date 2024/10/23 15:26
|
||||
* @注释
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class GrassrootsCongressVo extends GrassrootsCongressMeetingInfo {
|
||||
|
||||
@ApiModelProperty("节点审批记录")
|
||||
private List<BpmTaskApprovalRecordVo> nodeTasks;
|
||||
}
|
||||
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.common;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalType;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
||||
import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation;
|
||||
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
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 javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/common")
|
||||
@Ok("json:full")
|
||||
public class ProposalCommonController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal")
|
||||
@ApiOperation("提案详情")
|
||||
public Result proposalInfo(@Valid String id) {
|
||||
return Result.success(proposalCommonService.info(id));
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("查询全部的提案类型")
|
||||
@SaCheckLogin
|
||||
public Result listProposalType(){
|
||||
List<ProposalType> list = dao.query(ProposalType.class, Cnd.NEW().asc(ProposalType::getCode));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("查询全部的教代会")
|
||||
public Result listSession() {
|
||||
List<Teacher_congress_session> list = dao.query(Teacher_congress_session.class, Cnd.NEW().desc("startDate"));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("查询开启的教代会")
|
||||
public Result listOpenSession() {
|
||||
List<Teacher_congress_session> list = dao.query(Teacher_congress_session.class, Cnd.where("enable", "=", 1).desc("startDate"));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("查询当前用户所属的教代会")
|
||||
public Result listOpenSessionByUser() {
|
||||
List<Teacher_congress_session> list = dao.query(Teacher_congress_session.class, Cnd.where("enable", "=", 1).desc("startDate"));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("查询当前教代会的代表团")
|
||||
public Result listDelegation(@Valid String sessionId) {
|
||||
List<Teacher_congress_delegation> list = dao.query(Teacher_congress_delegation.class, Cnd.where("sessionId", "=", sessionId).asc("code"));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("承办单位列表")
|
||||
public Result listUnderTake() {
|
||||
List<ProposalUndertake> list = dao.query(ProposalUndertake.class, Cnd.NEW());
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal")
|
||||
@ApiOperation("提案配置")
|
||||
public Result config() {
|
||||
ProposalConfig config = dao.fetch(ProposalConfig.class, Cnd.NEW());
|
||||
return Result.success(config);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@SaCheckPermission("proposal")
|
||||
public void exportProposalAsDocx(String id, HttpServletResponse response) {
|
||||
proposalCommonService.exportProposalAsDocx(id, response);
|
||||
}
|
||||
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.config;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Dao;
|
||||
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;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/config/all")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api("提案全局配置")
|
||||
public class ProposalConfigAllController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/config/all/index.html")
|
||||
@SaCheckPermission("proposal.config.all")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.all")
|
||||
@ApiOperation("查询提案配置")
|
||||
public Object findOne() {
|
||||
ProposalConfig config = dao.fetch(ProposalConfig.class);
|
||||
return Result.success(config);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.all")
|
||||
@ApiOperation("修改提案配置")
|
||||
public Object update(@Param("config") ProposalConfig proposalConfig) {
|
||||
dao.updateIgnoreNull(proposalConfig);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.config;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
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.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalType;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/config/type")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api("提案类型配置")
|
||||
public class ProposalConfigTypeController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/config/type/index.html")
|
||||
@SaCheckPermission("proposal.config.type")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.type")
|
||||
@ApiModelProperty("分页查询提案类型")
|
||||
public Result pageData(@Valid PageForm pageForm,String name){
|
||||
Sql sql = Sqls.create("select * from proposal_type $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and(Cnd.likeEX("name", name));
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalType.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.type")
|
||||
@ApiModelProperty("新增提案类型")
|
||||
@SLog(type = "提案类型配置", tag = "新增提案类型", msg = "${type.name}")
|
||||
public Result insert(ProposalType type){
|
||||
int count = dao.count(ProposalType.class, Cnd.where("code", "=", type.getCode()));
|
||||
if(count>0){
|
||||
return Result.error("编码重复!");
|
||||
}
|
||||
dao.insert(type);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.type")
|
||||
@ApiModelProperty("修改提案类型")
|
||||
@SLog(type = "提案类型配置", tag = "修改提案类型", msg = "${type.name}")
|
||||
public Result update(ProposalType type){
|
||||
int count = dao.count(ProposalType.class, Cnd.where("code", "=", type.getCode()).and("id", "!=", type.getId()));
|
||||
if (count > 0) {
|
||||
return Result.error("编码重复!");
|
||||
}
|
||||
dao.updateIgnoreNull(type);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.type")
|
||||
@ApiModelProperty("删除提案类型")
|
||||
@SLog(type = "提案类型配置", tag = "删除提案类型", msg = "${id}")
|
||||
public Result delete(@Valid Integer id){
|
||||
int count = dao.count(ProposalInfo.class, Cnd.where(ProposalInfo::getTypeId, "=", id));
|
||||
if(count > 0){
|
||||
return Result.error("该类型有关联的提案,无法删除!");
|
||||
}
|
||||
dao.delete(ProposalType.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
+243
@@ -0,0 +1,243 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.config;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
import cn.hutool.core.lang.tree.TreeNode;
|
||||
import cn.hutool.core.lang.tree.TreeUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.sys.models.Sys_role;
|
||||
import com.budwk.app.sys.models.Sys_unit;
|
||||
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 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.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.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 提案承办单位配置
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/proposal/config/unit")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
public class ProposalConfigUnitController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private SysRoleService sysRoleService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/config/unit/index.html")
|
||||
@SaCheckPermission("proposal.config.unit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.unit")
|
||||
public Result tree() {
|
||||
List<ProposalUndertake> list = dao.query(ProposalUndertake.class, Cnd.NEW().asc(ProposalUndertake::getCode));
|
||||
List<TreeNode<String>> treeNodes = new ArrayList<>(list.stream().map(undertake -> new TreeNode<>(undertake.getId(), "0", undertake.getName(), 0)).toList());
|
||||
treeNodes.add(new TreeNode<>("0", "", "提案承办单位", 1000));
|
||||
List<Tree<String>> build = TreeUtil.build(treeNodes, "");
|
||||
return Result.success(build);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.unit")
|
||||
public Result pageData(@Valid PageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.*,
|
||||
u1.username AS branchSchoolLeader,
|
||||
u2.username AS unitLeader
|
||||
FROM
|
||||
proposal_undertake t1
|
||||
LEFT JOIN sys_user_role sur1 ON sur1.underTakeId = t1.id
|
||||
AND sur1.roleId = ( SELECT r.id FROM sys_role r WHERE r.CODE = @PROPOSAL_BRANCH_SCHOOL_LEADER )
|
||||
LEFT JOIN sys_user u1 ON u1.id = sur1.userId
|
||||
LEFT JOIN sys_user_role sur2 ON sur2.underTakeId = t1.id
|
||||
AND sur2.roleId = ( SELECT r.id FROM sys_role r WHERE r.CODE = @PROPOSAL_UNIT_LEADER)
|
||||
LEFT JOIN sys_user u2 ON u2.id = sur2.userId
|
||||
$condition
|
||||
""");
|
||||
sql.setParam("PROPOSAL_BRANCH_SCHOOL_LEADER", RoleConstant.PROPOSAL_BRANCH_SCHOOL_LEADER.name());
|
||||
sql.setParam("PROPOSAL_UNIT_LEADER", RoleConstant.PROPOSAL_UNIT_LEADER.name());
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
cnd.where().orLike("u1.username", pageForm.getSearchKeyword());
|
||||
cnd.where().orLike("u1.loginname", pageForm.getSearchKeyword());
|
||||
cnd.where().orLike("u2.username", pageForm.getSearchKeyword());
|
||||
cnd.where().orLike("u2.loginname", pageForm.getSearchKeyword());
|
||||
cnd.where().orLike("t1.name", pageForm.getSearchKeyword());
|
||||
}
|
||||
cnd.asc("t1.code");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步系统单位数
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.unit")
|
||||
@SLog(tag = "提案", msg = "承办单位同步系统单位")
|
||||
public Result syncSysUnit() {
|
||||
Sql sql = Sqls.create("select code from proposal_undertake");
|
||||
List<Sys_unit> sysUnits = dao.query(Sys_unit.class, Cnd.where(Sys_unit::getUnitcode, "not in", sql).and(Sys_unit::getUnitLevel, "=", 2));
|
||||
List<ProposalUndertake> proposalUndertakes = sysUnits.stream().map(unit -> {
|
||||
ProposalUndertake proposalUndertake = new ProposalUndertake();
|
||||
proposalUndertake.setCode(unit.getUnitcode());
|
||||
proposalUndertake.setEnable(true);
|
||||
proposalUndertake.setName(unit.getName());
|
||||
return proposalUndertake;
|
||||
}).toList();
|
||||
dao.insert(proposalUndertakes);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置分管校领导
|
||||
*
|
||||
* @param id
|
||||
* @param userIds
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.unit")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "提案", msg = "设置分管校领导")
|
||||
public Result updateBranchSchoolLeader(@Valid String id, @Param("userIds") String[] userIds) {
|
||||
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_BRANCH_SCHOOL_LEADER);
|
||||
//删除原来的用户
|
||||
dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sysRole.getId())
|
||||
.and(Sys_user_role::getUnderTakeId, "=", id));
|
||||
List<Sys_user_role> sysUserRoles = Arrays.stream(userIds).map(userId -> {
|
||||
Sys_user_role sysUserRole = new Sys_user_role();
|
||||
sysUserRole.setRoleId(sysRole.getId());
|
||||
sysUserRole.setUserId(userId);
|
||||
sysUserRole.setUnderTakeId(id);
|
||||
return sysUserRole;
|
||||
}).toList();
|
||||
dao.insert(sysUserRoles);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置单位负责人
|
||||
*
|
||||
* @param id
|
||||
* @param userIds
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.unit")
|
||||
@SLog(tag = "提案", msg = "设置承办单位领导")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result updateUnitLeader(@Valid String id, @Param("userIds") String[] userIds) {
|
||||
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_UNIT_LEADER);
|
||||
//删除原来的用户
|
||||
dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sysRole.getId())
|
||||
.and(Sys_user_role::getUnderTakeId, "=", id));
|
||||
List<Sys_user_role> sysUserRoles = Arrays.stream(userIds).map(userId -> {
|
||||
Sys_user_role sysUserRole = new Sys_user_role();
|
||||
sysUserRole.setRoleId(sysRole.getId());
|
||||
sysUserRole.setUserId(userId);
|
||||
sysUserRole.setUnderTakeId(id);
|
||||
return sysUserRole;
|
||||
}).toList();
|
||||
dao.insert(sysUserRoles);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 分管领导数据
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.unit")
|
||||
public Result branchSchoolLeaderTransferData(@Valid String id) {
|
||||
//已设置的领导
|
||||
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_BRANCH_SCHOOL_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, "=", id));
|
||||
List<String> selectUserIds = sysUserRoles.stream().map(Sys_user_role::getUserId).toList();
|
||||
|
||||
//查询全部的校领导
|
||||
Sql sql = Sqls.create("select id,username,loginname,unitname,concat(username,'(',loginname,')') label from vw_user where unitId in (@unitId)");
|
||||
ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW());
|
||||
if(ObjectUtil.isNull(proposalConfig)){
|
||||
return Result.error("提案全局配置未配置,请在提案管理-基础配置-提案配置页面进行配置。");
|
||||
}
|
||||
if(ObjectUtil.isEmpty(proposalConfig.getSchoolLeaderUnitIds())){
|
||||
return Result.error("校领导单位未配置,请在提案管理-基础配置-提案配置页面进行配置。");
|
||||
}
|
||||
|
||||
sql.setParam("unitId", proposalConfig.getSchoolLeaderUnitIds());
|
||||
List<NutMap> allUsers = baseService.listMap(sql);
|
||||
|
||||
return Result.success(Map.of("allUsers", allUsers, "selectUserIds", selectUserIds));
|
||||
}
|
||||
|
||||
/**
|
||||
* 单位成员数据
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission("proposal.config.unit")
|
||||
public Result unitUsersTransferData(@Valid String id) {
|
||||
//已设置的单位领导
|
||||
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, "=", id));
|
||||
List<String> selectUserIds = sysUserRoles.stream().map(Sys_user_role::getUserId).toList();
|
||||
|
||||
//查询该单位下全部的用户
|
||||
ProposalUndertake proposalUndertake = dao.fetch(ProposalUndertake.class, id);
|
||||
|
||||
Sql sql = Sqls.create("select id,username,loginname,unitname,concat(username,'(',loginname,')') label from vw_user $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("unitCode","=",proposalUndertake.getCode());
|
||||
cnd.orEX("id","in",selectUserIds);
|
||||
sql.setCondition(cnd);
|
||||
// sql.setParam("unitCode", proposalUndertake.getCode());
|
||||
// sql.setParam("selectUserIds", selectUserIds);
|
||||
List<NutMap> allUsers = baseService.listMap(sql);
|
||||
|
||||
return Result.success(Map.of("allUsers", allUsers, "selectUserIds", selectUserIds));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.dashboard;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.TeacherCongressDashBoardService;
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
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 javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/teacherCongress/dashboard")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api("教代会数据看板")
|
||||
public class TeacherCongressDashBoardController {
|
||||
|
||||
@Inject
|
||||
private TeacherCongressDashBoardService teacherCongressDashBoardService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/teachercongress/dashboard/index.html")
|
||||
@SaCheckPermission("tc.dashboard")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
//查询各代表团人数根据届次
|
||||
@At
|
||||
@SaCheckPermission("tc.dashboard")
|
||||
public Result listDelegationCount(@Valid String sessionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
tcd.id,
|
||||
tcd.name,
|
||||
COALESCE(tcdd.delegate_count, 0) AS delegateCount
|
||||
FROM
|
||||
teacher_congress_delegation tcd
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
delegationId,
|
||||
COUNT(*) AS delegate_count
|
||||
FROM
|
||||
teacher_congress_delegate
|
||||
WHERE sessionId = @sessionId
|
||||
GROUP BY
|
||||
delegationId
|
||||
) tcdd ON tcd.id = tcdd.delegationId
|
||||
WHERE
|
||||
tcd.sessionId = @sessionId
|
||||
ORDER BY tcd.code
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
List<NutMap> list = teacherCongressDashBoardService.listMap(sql);
|
||||
return Result.success(list);
|
||||
}
|
||||
}
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.export;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalExportService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
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.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:ProposalExportComprehensiveController
|
||||
* @Date 2024/10/10 9:52
|
||||
* @注释
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/proposal/export/comprehensive")
|
||||
public class ProposalExportComprehensiveController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@Inject
|
||||
private ProposalExportService proposalExportService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/export/comprehensive/index.html")
|
||||
@SaCheckPermission("proposal.export.comprehensive")
|
||||
public void index() {}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.query.comprehensive")
|
||||
@ApiOperation(value = "分页列表")
|
||||
public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) {
|
||||
Sql sql = proposalExportService.exportComprehensiveSql(pageForm);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出提案汇总表excel")
|
||||
@SaCheckPermission("proposal.query.comprehensive")
|
||||
public void exportProposalSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
||||
proposalExportService.exportProposalSummaryAsExcel(pageForm, response);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出提案立案汇总表excel")
|
||||
@SaCheckPermission("proposal.query.comprehensive")
|
||||
public void exportProposalRegisterSummaryAsExcel(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
||||
proposalExportService.exportProposalRegisterSummaryAsExcel(pageForm, response);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出全部提案ZIP")
|
||||
@SaCheckPermission("proposal.query.comprehensive")
|
||||
public void exportAllProposalAsZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
||||
proposalExportService.exportProposalStatisticsAsZip(pageForm, response);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation("导出全部提案反馈表ZIP")
|
||||
@SaCheckPermission("proposal.query.comprehensive")
|
||||
public void exportAllProposalFeedBackAsZip(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm, HttpServletResponse response){
|
||||
proposalExportService.exportFeedBackAsZip(pageForm, response);
|
||||
}
|
||||
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.param;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@Data
|
||||
@ApiModel("提案承办单位答复转办参数")
|
||||
public class ProposalUnderTakeReplyTransferParam {
|
||||
|
||||
@ApiModelProperty("提案id")
|
||||
@NotBlank(message = "提案id不能为空")
|
||||
private String proposalId;
|
||||
|
||||
@ApiModelProperty("承办单位id")
|
||||
@NotBlank(message = "承办单位id不能为空")
|
||||
private String underTakeId;
|
||||
|
||||
@ApiModelProperty("流程实例id")
|
||||
@NotBlank(message = "流程实例id不能为空")
|
||||
private String processInstanceId;
|
||||
|
||||
@ApiModelProperty("流程实例任务id")
|
||||
@NotBlank(message = "流程实例任务id不能为空")
|
||||
private String processInstanceTaskId;
|
||||
|
||||
@ApiModelProperty("转办用户工号")
|
||||
@NotBlank(message = "转办用户工号不能为空")
|
||||
private String transferUserLoginName;
|
||||
|
||||
}
|
||||
+154
@@ -0,0 +1,154 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.query;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.sys.models.Sys_dict;
|
||||
import com.budwk.app.sys.services.SysDictService;
|
||||
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.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
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 java.util.List;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/query/chart")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案类型统计")
|
||||
public class ProposalQueryChartController {
|
||||
|
||||
@Inject
|
||||
private SysDictService sysDictService;
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/query/chart/index.html")
|
||||
@SaCheckPermission("proposal.query.chart")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("提案类型统计")
|
||||
@SaCheckPermission("proposal.query.chart")
|
||||
public Result typeData(String sessionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
concat(type.`name`,'(',type.code,')') AS typeName,
|
||||
count( info.id ) AS count
|
||||
FROM
|
||||
proposal_type type
|
||||
LEFT JOIN proposal_info info ON info.typeId = type.id AND info.sessionId = @sessionId
|
||||
GROUP BY
|
||||
type.id
|
||||
ORDER BY
|
||||
type.code
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
List<NutMap> list = sysDictService.listMap(sql);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("提案立案统计")
|
||||
@SaCheckPermission("proposal.query.chart")
|
||||
public Result resultData(String sessionId) {
|
||||
Sys_dict typeDict = sysDictService.fetch(Cnd.where(Sys_dict::getCode, "=", "PROPOSAL_CASE_FILING_RESULT"));
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
d.`name`,
|
||||
count( info.id ) AS count
|
||||
FROM
|
||||
sys_dict d
|
||||
LEFT JOIN proposal_info info ON info.caseFilingResult = d.`code`
|
||||
AND info.sessionId = @sessionId
|
||||
WHERE
|
||||
d.parentId = @parentId
|
||||
and d.disabled = 0
|
||||
GROUP BY
|
||||
d.id
|
||||
ORDER BY
|
||||
d.location
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
sql.setParam("parentId", typeDict.getId());
|
||||
List<NutMap> list = sysDictService.listMap(sql);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("提案满意度统计")
|
||||
@SaCheckPermission("proposal.query.chart")
|
||||
public Result feedBackScoreData(String sessionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
WITH LatestTask AS ( SELECT processInstanceId, MAX( endOn ) AS maxEndOn FROM bpm_process_task WHERE processTaskNodeCode = 100 AND taskStatus = 'COMPLETE' GROUP BY processInstanceId )\s
|
||||
|
||||
SELECT
|
||||
JSON_UNQUOTE(JSON_EXTRACT( feedBackScoreTask.extVariable, '$.feedBackScore' )) AS feedBackScore
|
||||
FROM
|
||||
bpm_process_instance inst
|
||||
INNER JOIN proposal_info info ON info.id = inst.processInstanceBusinessId
|
||||
LEFT JOIN LatestTask lt ON lt.processInstanceId = inst.id
|
||||
LEFT JOIN bpm_process_task feedBackScoreTask ON feedBackScoreTask.processInstanceId = inst.id
|
||||
AND feedBackScoreTask.processTaskNodeCode = 100
|
||||
AND feedBackScoreTask.taskStatus = 'COMPLETE'
|
||||
AND feedBackScoreTask.endOn = lt.maxEndOn
|
||||
""");
|
||||
List<NutMap> list = proposalCommonService.listMap(sql);
|
||||
List<Sys_dict> dicts = sysDictService.getSubListByCode("PROPOSAL_FEEDBACK_UNIT");
|
||||
|
||||
List<NutMap> result = dicts.stream().map(v -> {
|
||||
long count = list.stream().filter(v1 -> v1.getString("feedBackScore","").equals(v.getCode())).count();
|
||||
return NutMap.NEW().addv("name", v.getName()).addv("count", count);
|
||||
}).toList();
|
||||
|
||||
return Result.success(result);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("提案状态统计")
|
||||
@SaCheckPermission("proposal.query.chart")
|
||||
public Result stateData(String sessionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
nd.nodeName as name,
|
||||
(
|
||||
SELECT
|
||||
count( DISTINCT(task.processInstanceId) )
|
||||
FROM
|
||||
bpm_process_task task
|
||||
LEFT JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
LEFT JOIN proposal_info info ON info.id = inst.processInstanceBusinessId
|
||||
WHERE
|
||||
task.processTaskNodeId = nd.id AND task.taskStatus in ('ACTIVE','AUTO_COMPLETE') AND
|
||||
task.delFlag = 0 AND info.sessionId = @sessionId
|
||||
) AS count
|
||||
FROM
|
||||
bpm_process_node_define nd
|
||||
LEFT JOIN bpm_process_define d ON d.id = nd.processDefineId
|
||||
WHERE
|
||||
d.`code` = 'PROPOSAL'
|
||||
GROUP BY
|
||||
nd.id
|
||||
ORDER BY
|
||||
nd.nodeCode
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
List<NutMap> list = proposalCommonService.listMap(sql);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
}
|
||||
+135
@@ -0,0 +1,135 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.query;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
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.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
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;
|
||||
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/query/collectProgress")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "征集进度查询")
|
||||
public class ProposalQueryCollectProgressController {
|
||||
|
||||
static List<NutMap> states = new ArrayList<>() {{
|
||||
add(NutMap.NEW().addv("code", 10).addv("id", 10).addv("name", "撰写提案"));
|
||||
add(NutMap.NEW().addv("code", 20).addv("id", 20).addv("name", "附议提案"));
|
||||
add(NutMap.NEW().addv("code", 30).addv("id", 30).addv("name", "待团长审核"));
|
||||
add(NutMap.NEW().addv("code", 40).addv("id", 40).addv("name", "团长审核退回"));
|
||||
add(NutMap.NEW().addv("code", 50).addv("id", 50).addv("name", "团长审核通过"));
|
||||
}};
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/query/collectProgress/index.html")
|
||||
@SaCheckPermission("proposal.query.collectProgress")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.query.collectProgress")
|
||||
@ApiOperation(value = "分页列表")
|
||||
public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
info.name,
|
||||
info.code,
|
||||
info.createUserName,
|
||||
type.NAME AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeName,
|
||||
count( secondedTask.id ) seconderSum,
|
||||
sum( CASE WHEN secondedTask.taskStatus = 'ACTIVE' THEN 1 ELSE 0 END ) activeCount,
|
||||
sum( CASE WHEN secondedTask.taskStatus = 'COMPLETE' THEN 1 ELSE 0 END ) completeCount
|
||||
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 teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
LEFT JOIN bpm_process_task secondedTask ON secondedTask.processInstanceId = inst.id
|
||||
AND secondedTask.taskStatus IN ( 'ACTIVE', 'COMPLETE' )
|
||||
AND secondedTask.processTaskNodeCode = 20
|
||||
$condition
|
||||
""");
|
||||
sql.setParam("sessionId", pageForm.getSessionId());
|
||||
Cnd cnd = Cnd.NEW();
|
||||
// Sql subSql = Sqls.create("""
|
||||
// SELECT
|
||||
// inst.id
|
||||
// FROM
|
||||
// bpm_process_instance inst
|
||||
// INNER JOIN proposal_info info ON info.id = inst.processInstanceBusinessId
|
||||
// $condition
|
||||
// """);
|
||||
// Cnd subCnd = Cnd.NEW();
|
||||
// subCnd.and("info.sessionId", "=", pageForm.getSessionId());
|
||||
// subCnd.and("inst.processInstanceNodeCode", "in", pageForm.getCollectIds());
|
||||
// if (ArrayUtil.contains(pageForm.getCollectIds(), 50)) {
|
||||
// subCnd.and("inst.processInstanceNodeCode", ">", pageForm.getCollectIds());
|
||||
// }
|
||||
// subSql.setCondition(subCnd);
|
||||
// cnd.and("inst.id", "in", subSql);
|
||||
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
if (ArrayUtil.contains(pageForm.getCollectIds(), 10)) {
|
||||
seg.or("inst.processInstanceNodeCode", "=", 10);
|
||||
}
|
||||
if (ArrayUtil.contains(pageForm.getCollectIds(), 20)) {
|
||||
seg.or("inst.processInstanceNodeCode", "=", 20);
|
||||
}
|
||||
if (ArrayUtil.contains(pageForm.getCollectIds(), 30)) {
|
||||
seg.or("inst.processInstanceNodeCode", "=", 30);
|
||||
}
|
||||
if (ArrayUtil.contains(pageForm.getCollectIds(), 40)) {
|
||||
seg.or("inst.processInstanceNodeCode", "=", 40);
|
||||
}
|
||||
if (ArrayUtil.contains(pageForm.getCollectIds(), 50)) {
|
||||
seg.or("inst.processInstanceNodeCode", ">", 50);
|
||||
}
|
||||
if (!seg.isEmpty()) {
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
// cnd.and("inst.processInstanceNodeCode", "in", List.of(10, 20, 30, 40, 50));
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation(value = "获取征集状态")
|
||||
@SaCheckPermission("proposal.query.collectProgress")
|
||||
public Result collectState() {
|
||||
return Result.success(states);
|
||||
}
|
||||
|
||||
}
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.query;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||
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.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
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.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/query/comprehensive")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案综合查询")
|
||||
public class ProposalQueryComprehensiveController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/query/comprehensive/index.html")
|
||||
@SaCheckPermission("proposal.query.comprehensive")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.query.comprehensive")
|
||||
@ApiOperation(value = "分页列表")
|
||||
public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(caseUnitTasks.extVariable, '$.hostUnit')) AS masterUnderTakeName,
|
||||
JSON_EXTRACT(caseUnitTasks.extVariable, '$.helpUnits') AS slaveUnderTakeNames
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
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_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
processInstanceId,
|
||||
MAX(endOn) AS maxEndOn
|
||||
FROM
|
||||
bpm_process_task
|
||||
WHERE
|
||||
processTaskNodeCode = 70 AND taskStatus = 'COMPLETE'
|
||||
GROUP BY
|
||||
processInstanceId
|
||||
) latestTasks ON latestTasks.processInstanceId = inst.id
|
||||
LEFT JOIN bpm_process_task caseUnitTasks ON caseUnitTasks.processInstanceId = inst.id AND caseUnitTasks.processTaskNodeCode = 70 AND caseUnitTasks.taskStatus = 'COMPLETE' AND caseUnitTasks.endOn = latestTasks.maxEndOn
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if(StrUtil.isNotBlank(pageForm.getUndertakeUnitId())){
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("JSON_EXTRACT(caseUnitTasks.extVariable, '$.hostUnitId')","=",pageForm.getUndertakeUnitId());
|
||||
seg.orLike("JSON_UNQUOTE(JSON_EXTRACT(caseUnitTasks.extVariable, '$.helpUnitIds'))",pageForm.getUndertakeUnitId());
|
||||
cnd.and(seg);
|
||||
}
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm,sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation(value = "导出单个提案word")
|
||||
public void exportDocx(String id, HttpServletResponse response) {
|
||||
proposalCommonService.exportProposalAsDocx(id, response);
|
||||
}
|
||||
}
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.query;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.sys.models.Sys_dict;
|
||||
import com.budwk.app.sys.services.SysDictService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
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 java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/query/delegation")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "代表团提案统计")
|
||||
public class ProposalQueryDelegationController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@Inject
|
||||
private SysDictService sysDictService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/query/delegation/index.html")
|
||||
@SaCheckPermission("proposal.query.delegation")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("代表团提案统计")
|
||||
@SaCheckPermission("proposal.query.delegation")
|
||||
public Result pageData(String sessionId) {
|
||||
List<Sys_dict> dictList = sysDictService.getSubListByCode("PROPOSAL_CASE_FILING_RESULT");
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
dbt.id,
|
||||
dbt.`name` AS dbtName,
|
||||
(select count(1) from proposal_info info where info.delegationId = dbt.id and info.sessionId = dbt.sessionId ) as TOTAL,
|
||||
(select count(1) from proposal_info info where info.delegationId = dbt.id and info.sessionId = dbt.sessionId and info.isSubmit = 1 ) as SUBMIT_COUNT,
|
||||
$resultSql
|
||||
FROM
|
||||
teacher_congress_delegation dbt
|
||||
$condition
|
||||
""");
|
||||
String resultStr = dictList.stream().map(v -> {
|
||||
return "( select count(1) from proposal_info info where info.delegationId = dbt.id and info.sessionId = dbt.sessionId and info.caseFilingResult= '%s' ) as `%s`".formatted(v.getCode(), v.getCode());
|
||||
}).collect(Collectors.joining(","));
|
||||
sql.setVar("resultSql", resultStr);
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("dbt.sessionId", "=", sessionId);
|
||||
if (!AuthUtil.hasRoleOr("SYSADMIN", "SCHOOL_UNION_ADMIN")) {
|
||||
}
|
||||
cnd.asc("dbt.`code`");
|
||||
sql.setCondition(cnd);
|
||||
return Result.success(baseService.listMap(sql));
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("代表团提案列表")
|
||||
@SaCheckPermission("proposal.query.delegation")
|
||||
public Result getProposalsByDelegation(ProposalSearchParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
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
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
ProposalSearchParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
}
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.query;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
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;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/query/history")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案管理系统-查询统计-历史提案查询")
|
||||
public class ProposalQueryHistoryController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/query/history/index.html")
|
||||
@SaCheckPermission("proposal.query.history")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.query.history")
|
||||
@ApiOperation(value = "分页列表")
|
||||
public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
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_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
}
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.query;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.bpm.models.BpmProcessTask;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.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 java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 承办单位办理统计
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/proposal/query/unitReply")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
public class ProposalQueryUnitReplyController {
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/query/underTakeReply/index.html")
|
||||
@SaCheckPermission("proposal.query.unitReply")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.query.unitReply")
|
||||
public Result data(String sessionId, String undertakeUnitId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
inst.id AS instId
|
||||
FROM
|
||||
proposal_info info
|
||||
INNER JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
WHERE info.sessionId = @sessionId
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
List<NutMap> list = proposalCommonService.listMap(sql);
|
||||
List<String> instIds = list.stream().map(v -> v.getString("instId")).toList();
|
||||
|
||||
//查询提案委员会分配的承办单位
|
||||
List<BpmProcessTask> caseUnitTasks = dao.query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(BpmProcessTask::getTaskStatus, "=", BpmProcessTaskStatusEnum.COMPLETE.name())
|
||||
.and(BpmProcessTask::getProcessTaskNodeCode, "=", 70)
|
||||
.and(BpmProcessTask::getDelFlag, "=", 0)
|
||||
);
|
||||
List<JSONObject> caseUnitTaskExtVariables = caseUnitTasks.stream().map(BpmProcessTask::getExtVariable).toList();
|
||||
|
||||
//所有承办单位
|
||||
Set<String> underTakeIds = new HashSet<>();
|
||||
|
||||
if (StrUtil.isNotBlank(undertakeUnitId)) {
|
||||
underTakeIds.add(undertakeUnitId);
|
||||
} else {
|
||||
for (JSONObject caseUnitTaskExtVariable : caseUnitTaskExtVariables) {
|
||||
String hostUnitId = caseUnitTaskExtVariable.getStr("hostUnitId");
|
||||
List<String> helpUnitIds = caseUnitTaskExtVariable.getBeanList("helpUnitIds", String.class);
|
||||
underTakeIds.addAll(helpUnitIds);
|
||||
underTakeIds.add(hostUnitId);
|
||||
}
|
||||
}
|
||||
|
||||
List<ProposalUndertake> undertakes = dao.query(ProposalUndertake.class, Cnd.where(ProposalUndertake::getId, "in", underTakeIds));
|
||||
Map<String, ProposalUndertake> undertakeMap = undertakes.stream().collect(Collectors.toMap(ProposalUndertake::getId, v -> v));
|
||||
|
||||
//查询承办单位任务
|
||||
List<BpmProcessTask> underTakeTasks = dao.query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(BpmProcessTask::getProcessTaskNodeCode, "=", 80)
|
||||
.and(BpmProcessTask::getDelFlag, "=", 0)
|
||||
);
|
||||
|
||||
ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW());
|
||||
Boolean slaveNeedReply = ObjectUtil.defaultIfNull(proposalConfig.getSlaveUnitLeaderNeedApprove(), false);
|
||||
|
||||
List<NutMap> tableData = new ArrayList<>();
|
||||
|
||||
for (String underTakeId : underTakeIds) {
|
||||
NutMap tableRow = NutMap.NEW();
|
||||
tableRow.put("id", underTakeId);
|
||||
tableRow.put("name", undertakeMap.get(underTakeId).getName());
|
||||
|
||||
//找出承办提案总数
|
||||
long sum = caseUnitTasks.stream().filter(v -> v.getExtVariable().getStr("hostUnitId").equals(underTakeId) || v.getExtVariable().getBeanList("helpUnitIds", String.class).contains(underTakeId)).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
//找出主办提案数量
|
||||
long hostSum = underTakeTasks.stream().filter(v -> v.getCreateVariable().getStr("underTakeId").equals(underTakeId) && v.getCreateVariable().getBool("isMaster", false)).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
//主办已答复的数量
|
||||
long hostReplySum = underTakeTasks.stream().filter(v -> v.getCreateVariable().getStr("underTakeId").equals(underTakeId) && v.getCreateVariable().getBool("isMaster", false) && v.getTaskStatus().equals(BpmProcessTaskStatusEnum.COMPLETE.name())).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
//主办未答复的数量
|
||||
long hostNoReplySum = hostSum - hostReplySum;
|
||||
|
||||
tableRow.put("sum", sum);
|
||||
tableRow.put("hostSum", hostSum);
|
||||
tableRow.put("hostReplySum", hostReplySum);
|
||||
tableRow.put("hostNoReplySum", hostNoReplySum);
|
||||
|
||||
if (slaveNeedReply) {
|
||||
//协办提案数量
|
||||
long helpSum = underTakeTasks.stream().filter(v -> v.getCreateVariable().getStr("underTakeId").equals(underTakeId) && !v.getCreateVariable().getBool("isMaster", false)).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
//协办已答复的数量
|
||||
long helpReplySum = underTakeTasks.stream().filter(v -> v.getCreateVariable().getStr("underTakeId").equals(underTakeId) && !v.getCreateVariable().getBool("isMaster", false) && v.getTaskStatus().equals(BpmProcessTaskStatusEnum.COMPLETE.name())).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
//协办未答复的数量
|
||||
long helpNoReplySum = helpSum - helpReplySum;
|
||||
tableRow.put("helpSum", helpSum);
|
||||
tableRow.put("helpReplySum", helpReplySum);
|
||||
tableRow.put("helpNoReplySum", helpNoReplySum);
|
||||
} else {
|
||||
//不需要协办答复 计算出提案总数即可
|
||||
int helpSum = caseUnitTasks.stream()
|
||||
.filter(v -> v.getExtVariable().getBeanList("helpUnitIds", String.class).contains(underTakeId))
|
||||
.map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
tableRow.put("helpSum", helpSum);
|
||||
}
|
||||
tableData.add(tableRow);
|
||||
}
|
||||
return Result.success().addData(Map.of("tableData", tableData, "slaveNeedReply", slaveNeedReply));
|
||||
}
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.query;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||
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.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
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.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/query/yearReport")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案年度报告")
|
||||
public class ProposalQueryYearReportController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/query/yearReport/index.html")
|
||||
@SaCheckPermission("proposal.query.yearReport")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.query.yearReport")
|
||||
@ApiOperation(value = "分页列表")
|
||||
public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(caseUnitTasks.extVariable, '$.hostUnit')) AS masterUnderTakeName,
|
||||
JSON_EXTRACT(caseUnitTasks.extVariable, '$.helpUnits') AS slaveUnderTakeNames
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
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_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
processInstanceId,
|
||||
MAX(endOn) AS maxEndOn
|
||||
FROM
|
||||
bpm_process_task
|
||||
WHERE
|
||||
processTaskNodeCode = 70 AND taskStatus = 'COMPLETE'
|
||||
GROUP BY
|
||||
processInstanceId
|
||||
) latestTasks ON latestTasks.processInstanceId = inst.id
|
||||
LEFT JOIN bpm_process_task caseUnitTasks ON caseUnitTasks.processInstanceId = inst.id AND caseUnitTasks.processTaskNodeCode = 70 AND caseUnitTasks.taskStatus = 'COMPLETE' AND caseUnitTasks.endOn = latestTasks.maxEndOn
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm,sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@ApiOperation(value = "导出年度报告")
|
||||
public void exportYearReport(@Valid String sessionId, HttpServletResponse response) {
|
||||
proposalCommonService.exportYearReport(sessionId, response);
|
||||
}
|
||||
}
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.senior;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/senior/basic")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案-高级管理-提案内容修改")
|
||||
public class ProposalSeniorBasicController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/senior/basic/index.html")
|
||||
@SaCheckPermission("proposal.senior.basic")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.senior.basic")
|
||||
@ApiOperation(value = "分页列表")
|
||||
public Result pageData(@Valid ProposalQueryComprehensiveParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
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
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.senior.basic")
|
||||
@ApiOperation(value = "提案内容修改")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result update(@Valid ProposalInfo proposalInfo) {
|
||||
dao.update(proposalInfo,"^name|typeId|brief|measures|excerpt$$");
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.senior;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalReplyUnit;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalSeconded;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/senior/delete")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案-高级管理-删除")
|
||||
public class ProposalSeniorDeleteController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/senior/delete/index.html")
|
||||
@SaCheckPermission("proposal.senior.delete")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.senior.delete")
|
||||
@ApiOperation(value = "分页列表")
|
||||
public Result pageData(@Valid ProposalQueryComprehensiveParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
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
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.senior.delete")
|
||||
@ApiOperation(value = "删除提案")
|
||||
@SLog(tag = "提案管理系统-高级管理-万能删除提案", msg = "删除提案")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result delete(String id) {
|
||||
dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", id));
|
||||
dao.clear(ProposalSeconded.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", id));
|
||||
dao.clear(ProposalInfo.class, Cnd.where(ProposalInfo::getId, "=", id));
|
||||
bpmService.deleteInstance(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.senior;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSeniorUpdateTypeParam;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/senior/type")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案-高级管理-修改类型")
|
||||
public class ProposalSeniorTypeController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/senior/type/index.html")
|
||||
@SaCheckPermission("proposal.senior.type")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.senior.type")
|
||||
@ApiOperation(value = "分页列表")
|
||||
public Result pageData(@Valid ProposalQueryComprehensiveParam pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
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
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.senior.type")
|
||||
@ApiOperation(value = "修改提案类型")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result update(@Valid ProposalSeniorUpdateTypeParam param) {
|
||||
dao.update(ProposalInfo.class, Chain.make("typeId", param.getTypeId()),Cnd.where("id", "=", param.getId()));
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
+181
@@ -0,0 +1,181 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
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.service.BaseService;
|
||||
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.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.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalCommitteeFilingApprovalParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalCommitteeFilingService;
|
||||
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.Chain;
|
||||
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.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.Map;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/committeeFiling")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@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")
|
||||
@SaCheckPermission("proposal.committeeFiling")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.committeeFiling")
|
||||
@ApiOperation("分页列表")
|
||||
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
|
||||
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))
|
||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||
LEFT JOIN teacher_congress_session tcs ON tcs.id = info.sessionId
|
||||
LEFT JOIN teacher_congress_delegation tcd ON tcd.id = info.delegationId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode", "=", 60);
|
||||
if (approval) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
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");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<ProposalInfoPageVO> pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
+186
@@ -0,0 +1,186 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
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.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalCommitteeFilingUnitApprovalParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalCommitteeFilingUnitService;
|
||||
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.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/committeeFilingUnit")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案-办理-确认承办单位")
|
||||
public class ProposalCommitteeFilingUnitController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private ProposalCommitteeFilingUnitService proposalCommitteeFilingUnitService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/committeeFilingUnit/index.html")
|
||||
@SaCheckPermission("proposal.committeeFilingUnit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.committeeFilingUnit")
|
||||
@ApiOperation("分页列表")
|
||||
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
|
||||
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))
|
||||
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'
|
||||
$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", "=", 70);
|
||||
if (approval) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
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");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.committeeFilingUnit")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "委员会确认承办单位", msg = "委员会确认承办单位")
|
||||
@ApiOperation("委员会确认承办单位")
|
||||
public Result approval(@Valid @Param("approval") ProposalCommitteeFilingUnitApprovalParam approvalParam) {
|
||||
proposalCommitteeFilingUnitService.approval(approvalParam);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.committeeFilingUnit")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "委员会确认承办单位", msg = "委员会确认承办单位撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
proposalCommitteeFilingUnitService.revoke(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.committeeFilingUnit")
|
||||
@ApiOperation("查询立案的结果及承办单位")
|
||||
public Result committeeFiling(@Valid String processInstanceId, @Valid String processInstanceTaskId) {
|
||||
JSONObject newJson = new JSONObject();
|
||||
|
||||
BpmProcessTask caseUnitTask = proposalCommitteeFilingUnitService.dao().fetch(BpmProcessTask.class,
|
||||
Cnd.where(BpmProcessTask::getId, "=", processInstanceTaskId)
|
||||
.and(BpmProcessTask::getProcessInstanceId, "=", processInstanceId)
|
||||
.and(BpmProcessTask::getProcessTaskNodeCode, "=", 70)
|
||||
.and(BpmProcessTask::getDelFlag, "=", 0)
|
||||
);
|
||||
if (ObjectUtil.isNotNull(caseUnitTask) && ObjectUtil.isNotEmpty(caseUnitTask.getExtVariable())) {
|
||||
JSONObject jsonObject = caseUnitTask.getExtVariable();
|
||||
newJson.set("caseFilingResult", jsonObject.get("caseFilingResult"));
|
||||
newJson.set("hostUnitId", jsonObject.get("hostUnitId"));
|
||||
newJson.set("helpUnitIds", jsonObject.getBeanList("helpUnitIds", String.class));
|
||||
newJson.set("approvalOpinion", jsonObject.get("approvalOpinion"));
|
||||
newJson.set("consolidationIds", jsonObject.getBeanList("consolidationIds", String.class));
|
||||
return Result.success(newJson);
|
||||
}
|
||||
|
||||
BpmProcessTask caseTask = proposalCommitteeFilingUnitService.dao().fetch(BpmProcessTask.class,
|
||||
Cnd.where(BpmProcessTask::getProcessInstanceId, "=", processInstanceId)
|
||||
.and(BpmProcessTask::getDelFlag, "=", 0)
|
||||
.and(BpmProcessTask::getProcessTaskNodeCode, "=", 60)
|
||||
.desc(BpmProcessTask::getCreatedOn)
|
||||
);
|
||||
JSONObject jsonObject = caseTask.getExtVariable();
|
||||
newJson.set("caseFilingResult", jsonObject.get("caseFilingResult"));
|
||||
newJson.set("hostUnitId", jsonObject.get("hostUnitId"));
|
||||
newJson.set("helpUnitIds", jsonObject.getBeanList("helpUnitIds", String.class));
|
||||
newJson.set("approvalOpinion", jsonObject.get("approvalOpinion"));
|
||||
newJson.set("consolidationIds", jsonObject.getBeanList("consolidationIds", String.class));
|
||||
return Result.success(newJson);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.committeeFilingUnit")
|
||||
@ApiOperation("查询承办单位")
|
||||
public Result listUnderTake() {
|
||||
List<ProposalUndertake> list = baseService.dao().query(ProposalUndertake.class, Cnd.NEW().asc(ProposalUndertake::getCode));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
}
|
||||
+140
@@ -0,0 +1,140 @@
|
||||
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.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
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.service.ProposalDelegationService;
|
||||
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.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* 团长审核
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/proposal/delegation")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案-办理-团长审核")
|
||||
public class ProposalDelegationController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
private ProposalDelegationService proposalDelegationService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/delegation/index.html")
|
||||
@SaCheckPermission("proposal.delegation")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.delegation")
|
||||
@ApiOperation("分页列表")
|
||||
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,
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM bpm_process_task next_task
|
||||
WHERE next_task.prevTaskId = task.id
|
||||
AND next_task.taskStatus = 'COMPLETE'
|
||||
) AS nextTaskIsComplete
|
||||
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_type type on type.id = info.typeId
|
||||
LEFT JOIN teacher_congress_session tcs ON tcs.id = info.sessionId
|
||||
LEFT JOIN teacher_congress_delegation tcd ON tcd.id = info.delegationId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode", "=", 30);
|
||||
if (approval) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
cnd.groupBy("info.id");
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
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
|
||||
)
|
||||
"""));
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
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.service.BpmService;
|
||||
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 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.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/feedbackEvaluation")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案-办理-反馈评分")
|
||||
public class ProposalFeedbackEvaluationController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private ProposalFeedbackEvaluationService proposalFeedbackEvaluationService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/feedbackEvaluation/index.html")
|
||||
@SaCheckPermission("proposal.feedbackEvaluation")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.feedbackEvaluation")
|
||||
@ApiOperation("分页列表")
|
||||
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,
|
||||
COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete
|
||||
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))
|
||||
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'
|
||||
$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", "=", 100);
|
||||
if (approval) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
ProposalSearchParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
cnd.groupBy("task.id");
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
+298
@@ -0,0 +1,298 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.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;
|
||||
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.SqlExpressionGroup;
|
||||
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/mine")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案管理-我的提案")
|
||||
public class ProposalMineController {
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private SysMsgService sysMsgService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/mine/index.html")
|
||||
@SaCheckPermission("proposal.mine")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.mine")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result pageData(@Valid ProposalSearchParam pageForm, String sessionId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
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
|
||||
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
|
||||
$condition
|
||||
""");
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("inst.processInstanceInitiatorLoginName", "=", SecurityUtil.getUserLoginname());
|
||||
}
|
||||
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);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.mine")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@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);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.mine")
|
||||
public Result detail(@Valid String id) {
|
||||
ProposalInfo info = dao.fetch(ProposalInfo.class, id);
|
||||
return Result.success(info);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.mine")
|
||||
@ApiOperation("查询可邀请的附议人")
|
||||
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,
|
||||
t1.userName,
|
||||
t1.sex,
|
||||
t1.unitName,
|
||||
t1.unionName,
|
||||
t2.NAME AS delegationName
|
||||
FROM
|
||||
teacher_congress_delegate t1
|
||||
LEFT JOIN teacher_congress_delegation t2 ON t2.id = t1.delegationId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.where("t1.sessionId", "=", sessionId);
|
||||
cnd.andEX("t1.delegationId", "=", delegationId);
|
||||
cnd.and("t1.roleId","=","19fb858ae9514ddd999c85306b38bd02");
|
||||
cnd.and("t1.loginName", "!=", SecurityUtil.getUserLoginname());
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("t1.loginName", pageForm.getSearchKeyword());
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.mine")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "提案", msg = "邀请附议人")
|
||||
public Result inviteSeconder(@Param("seconders") String[] seconders, @Valid String proposalId) {
|
||||
//插入附议人数据
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.loginName,
|
||||
t1.userName,
|
||||
t1.sex,
|
||||
t1.unitName,
|
||||
t1.unionName,
|
||||
t1.delegationId,
|
||||
t2.NAME AS delegationName
|
||||
FROM
|
||||
teacher_congress_delegate t1
|
||||
LEFT JOIN teacher_congress_delegation t2 ON t2.id = t1.delegationId
|
||||
$condition
|
||||
""");
|
||||
sql.setCondition(Cnd.where("t1.loginName", "in", seconders).groupBy("t1.loginName"));
|
||||
List<ProposalInviteSeconderVO> seconderVOS = proposalCommonService.listVO(sql, ProposalInviteSeconderVO.class);
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.mine")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "提案", msg = "检查能否邀请邀请附议人")
|
||||
public Result inviteCheck(@Valid String id) {
|
||||
ProposalInfo info = dao.fetch(ProposalInfo.class, id);
|
||||
String measures = HtmlUtil.cleanHtmlTag(StrUtil.nullToDefault(info.getMeasures(), ""));
|
||||
String brief = HtmlUtil.cleanHtmlTag(StrUtil.nullToDefault(info.getBrief(), ""));
|
||||
|
||||
if (StrUtil.isBlank(info.getSessionId()) || StrUtil.isBlank(info.getDelegationId())
|
||||
|| StrUtil.isBlank(info.getName())
|
||||
|| StrUtil.isBlank(info.getName())
|
||||
|| StrUtil.isBlank(info.getBrief())
|
||||
|| StrUtil.isBlank(measures)
|
||||
|| StrUtil.isBlank(brief)
|
||||
) {
|
||||
return Result.error("提案信息填写不完整,请填写完成后再邀请代表附议!");
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
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.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 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;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/schoolLeaderApproval")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案分管领导审批")
|
||||
public class ProposalSchoolLeaderApprovalController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private ProposalSchoolLeaderApprovalService proposalSchoolLeaderApprovalService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/schoolLeaderApproval/index.html")
|
||||
@SaCheckPermission("proposal.schoolLeaderApproval")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.schoolLeaderApproval")
|
||||
@ApiOperation("分页列表")
|
||||
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,
|
||||
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
|
||||
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))
|
||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||
LEFT JOIN teacher_congress_session tcs ON tcs.id = info.sessionId
|
||||
LEFT JOIN teacher_congress_delegation tcd ON tcd.id = info.delegationId
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
|
||||
}
|
||||
cnd.and("nd.nodeCode", "=", 90);
|
||||
if (approval) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
ProposalSearchParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
cnd.groupBy("task.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
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);
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
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.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
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.service.ProposalSecondedService;
|
||||
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;
|
||||
|
||||
/**
|
||||
* 附议提案
|
||||
*/
|
||||
@IocBean
|
||||
@At("/platform/proposal/seconded")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案管理系统-提案附议")
|
||||
public class ProposalSecondedController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private ProposalSecondedService proposalSecondedService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/seconded/index.html")
|
||||
@SaCheckPermission("proposal.seconded")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.seconded")
|
||||
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,
|
||||
JSON_EXTRACT( task.createVariable, '$.userName' ) AS seconderName,
|
||||
COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete
|
||||
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_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'
|
||||
$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);
|
||||
if (approval) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
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");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.seconded")
|
||||
@ApiOperation("附议")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "提案", msg = "提案人附议")
|
||||
public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam) {
|
||||
proposalSecondedService.approval(approvalParam);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
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.service.BpmService;
|
||||
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.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.ProposalUnderTakeReadApprovalParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalUnderTakeReadService;
|
||||
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.SqlExpressionGroup;
|
||||
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.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/proposal/unitRead")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案承办单位初步阅览")
|
||||
public class ProposalUnderTakeReadController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private ProposalUnderTakeReadService proposalUnderTakeReadService;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
private SysRoleService sysRoleService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/unitRead/index.html")
|
||||
@SaCheckPermission("proposal.unitRead")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.unitRead")
|
||||
@ApiOperation("分页列表")
|
||||
public Result pageData(@Valid ProposalSearchParam pageForm, boolean approval, boolean transfer) {
|
||||
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,
|
||||
task.extVariable,
|
||||
JSON_EXTRACT(unit_data.data, '$.isMaster') AS isMasterUnderTake,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(unit_data.data, '$.underTakeName')) AS underTakeName,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(unit_data.data, '$.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
|
||||
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))
|
||||
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,
|
||||
JSON_TABLE(
|
||||
JSON_EXTRACT(task.extVariable, '$.units'),
|
||||
'$[*]' COLUMNS (
|
||||
data JSON PATH '$'
|
||||
)
|
||||
) unit_data
|
||||
$condition
|
||||
""");
|
||||
|
||||
boolean isSysAdmin = AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(),RoleConstant.SCHOOL_UNION_PROPOSAL_ADMIN.name());
|
||||
Set<String> unitIds = new HashSet<>();
|
||||
String unitIdsStr = "''";
|
||||
|
||||
if (!isSysAdmin) {
|
||||
Sys_role role = sysRoleService.getByCode(RoleConstant.PROPOSAL_UNIT_LEADER.name());
|
||||
List<Sys_user_role> userRoles = proposalCommonService.dao().query(Sys_user_role.class,
|
||||
Cnd.where(Sys_user_role::getUserId, "=", SecurityUtil.getUserId())
|
||||
.and(Sys_user_role::getRoleId, "=", role.getId())
|
||||
);
|
||||
unitIds = userRoles.stream().map(Sys_user_role::getUnderTakeId).collect(Collectors.toSet());
|
||||
unitIdsStr = unitIds.stream()
|
||||
.map(id -> "'" + id + "'")
|
||||
.collect(Collectors.joining(","));
|
||||
}
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or(isSysAdmin ? "1" : "0", "=", 1);
|
||||
seg.or(new Static("JSON_UNQUOTE(JSON_EXTRACT(unit_data.data, '$.underTakeId')) IN (%s)".formatted(unitIdsStr)));
|
||||
cnd.and(seg);
|
||||
|
||||
cnd.and("nd.nodeCode", "=", 60);
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
|
||||
ProposalSearchParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id","task.id","JSON_EXTRACT( unit_data.DATA, '$.underTakeId' )");
|
||||
// cnd.groupBy("task.id");
|
||||
// cnd.groupBy("JSON_EXTRACT( unit_data.DATA, '$.underTakeId' ) ");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.unitRead")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "提案承办单位初步阅览", msg = "承办单位阅览")
|
||||
@ApiOperation("承办单位阅览")
|
||||
public Result approval(@Param("approval") @Valid ProposalUnderTakeReadApprovalParam param) {
|
||||
// proposalUnderTakeReadService.approval(param);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.unitRead")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "提案承办单位初步阅览", msg = "承办单位阅览撤回")
|
||||
@ApiOperation("撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
// proposalUnderTakeReadService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
+258
@@ -0,0 +1,258 @@
|
||||
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.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 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")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案承办单位答复")
|
||||
public class ProposalUnderTakeReplyController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private ProposalUnderTakeReplyService proposalUnderTakeReplyService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/unitReply/index.html")
|
||||
@SaCheckPermission("proposal.unitReply")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@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
|
||||
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))
|
||||
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
|
||||
$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);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (approval) {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.COMPLETE);
|
||||
} else {
|
||||
cnd.and("task.taskStatus", "=", BpmProcessTaskStatusEnum.ACTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
)
|
||||
"""));
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.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.teachercongress.delegate.models.Teacher_congress_delegate;
|
||||
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.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/write")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案管理-提案撰写")
|
||||
public class ProposalWriteController {
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private ProposalWriteService proposalWriteService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/write/index.html")
|
||||
@SaCheckPermission("proposal.write")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.write")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("保存提案")
|
||||
@SLog(tag = "提案管理系统-我的提案", msg = "保存提案")
|
||||
public Result save(@Param("info") ProposalInfo proposalInfo) {
|
||||
if (StrUtil.isBlank(proposalInfo.getCode())) {
|
||||
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 = "手动提交提案")
|
||||
public Result submit(@Param("info") ProposalInfo proposalInfo) {
|
||||
dao.insertOrUpdate(proposalInfo);
|
||||
bpmService.startSubmitProcessInstance(BpmProcessConstant.PROPOSAL.name(),proposalInfo.getName(),proposalInfo.getId(), null,null);
|
||||
return Result.success(proposalInfo);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.write")
|
||||
@ApiOperation("提案详情")
|
||||
public Result detail(@Valid String id) {
|
||||
ProposalInfo info = dao.fetch(ProposalInfo.class, id);
|
||||
return Result.success(info);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.write")
|
||||
@ApiOperation("查询自己所属代表团")
|
||||
public Result searchMineDelegation(@Valid String sessionId) {
|
||||
Teacher_congress_delegate delegate = dao.fetch(Teacher_congress_delegate.class,
|
||||
Cnd.where(Teacher_congress_delegate::getSessionId, "=", sessionId)
|
||||
.and(Teacher_congress_delegate::getUserId, "=", SecurityUtil.getUserId())
|
||||
);
|
||||
return Result.success().addData(delegate != null ? delegate.getDelegationId() : null);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.write")
|
||||
@ApiOperation("查询自己可撰写的提案方式(个人、代表团、委员会)")
|
||||
public Result listSource(@Valid String sessionId) {
|
||||
List<Sys_dict> sysDicts = proposalWriteService.listSource(sessionId);
|
||||
return Result.success().addData(sysDicts);
|
||||
}
|
||||
|
||||
}
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.vo;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalVo;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class ProposalInfoPageVO extends BpmTaskApprovalVo {
|
||||
|
||||
@ApiModelProperty("主键")
|
||||
private String id;
|
||||
|
||||
@ApiModelProperty("提案编号")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty("提案名称")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("提案类型")
|
||||
private int typeId;
|
||||
|
||||
@ApiModelProperty("提案来源")
|
||||
private String source;
|
||||
|
||||
@ApiModelProperty("立案结果(字典表)")
|
||||
private String caseFilingResult;
|
||||
|
||||
@ApiModelProperty("届次")
|
||||
private String sessionId;
|
||||
|
||||
@ApiModelProperty("创建人")
|
||||
private String createUserId;
|
||||
|
||||
@ApiModelProperty("创建人姓名")
|
||||
private String createUserName;
|
||||
|
||||
@ApiModelProperty("创建人工号")
|
||||
private String createUserLoginName;
|
||||
|
||||
@ApiModelProperty("所属代表团ID")
|
||||
private String delegationId;
|
||||
|
||||
@ApiModelProperty("所属委员会ID")
|
||||
private String committeeId;
|
||||
|
||||
@ApiModelProperty("是否提交")
|
||||
private boolean isSubmit;
|
||||
|
||||
@ApiModelProperty("创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty("案由")
|
||||
private String brief;
|
||||
|
||||
@ApiModelProperty("建议措施")
|
||||
private String measures;
|
||||
|
||||
@ApiModelProperty("摘要")
|
||||
private String excerpt;
|
||||
|
||||
@ApiModelProperty("建议落实部门")
|
||||
private String implementUnitName;
|
||||
|
||||
@ApiModelProperty("提案状态")
|
||||
private String stateCode;
|
||||
|
||||
@ApiModelProperty("附件")
|
||||
private List<JSONObject> files;
|
||||
|
||||
@ApiModelProperty("是否公示提案")
|
||||
private boolean publicity;
|
||||
|
||||
@ApiModelProperty("是否优秀提案")
|
||||
private boolean excellent;
|
||||
|
||||
@ApiModelProperty("签字")
|
||||
private String signature;
|
||||
|
||||
@ApiModelProperty("附议人姓名")
|
||||
private String seconderName;
|
||||
|
||||
@ApiModelProperty("提案类型名称")
|
||||
private String typeName;
|
||||
|
||||
@ApiModelProperty("届次")
|
||||
private String sessionName;
|
||||
|
||||
@ApiModelProperty("代表团")
|
||||
private String delegationName;
|
||||
|
||||
@ApiModelProperty("办理数据")
|
||||
private JSONObject extVariable;
|
||||
|
||||
@ApiModelProperty("是否是主办承办单位")
|
||||
private boolean isMasterUnderTake;
|
||||
|
||||
@ApiModelProperty("承办单位ID")
|
||||
private String underTakeId;
|
||||
|
||||
@ApiModelProperty("承办单位")
|
||||
private String underTakeName;
|
||||
|
||||
@ApiModelProperty("是否并案")
|
||||
private boolean isConsolidation;
|
||||
|
||||
@ApiModelProperty("主办承办单位")
|
||||
private String masterUnderTakeName;
|
||||
|
||||
@ApiModelProperty("协办承办单位")
|
||||
private String[] slaveUnderTakeNames;
|
||||
|
||||
@ApiModelProperty("承办单位答复是否转办")
|
||||
private boolean underTakeReplyIsTransfer;
|
||||
|
||||
@ApiModelProperty("承办单位答复转办答复人")
|
||||
private String[] underTakeTransferUserName;
|
||||
|
||||
}
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.vo;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class ProposalInfoVO extends ProposalInfo {
|
||||
|
||||
@ApiModelProperty("流程实例ID")
|
||||
private String processInstanceId;
|
||||
|
||||
@ApiModelProperty("流程实例当前节点ID")
|
||||
private String processInstanceNodeId;
|
||||
|
||||
@ApiModelProperty("流程实例当前节点名称")
|
||||
private String processInstanceNodeName;
|
||||
|
||||
@ApiModelProperty("流程实例任务IDS")
|
||||
private List<String> processInstanceTaskIds;
|
||||
|
||||
@ApiModelProperty("流程实例任务ID")
|
||||
private String processInstanceTaskId;
|
||||
|
||||
@ApiModelProperty("流程实例任务状态")
|
||||
private String processInstanceTaskStatus;
|
||||
|
||||
@ApiModelProperty("流程状态")
|
||||
private String processInstanceStatus;
|
||||
|
||||
@ApiModelProperty("当前节点任务类型")
|
||||
private String processInstanceTaskNodeType;
|
||||
|
||||
@ApiModelProperty("下一节点任务是否完成")
|
||||
private Boolean nextTaskIsComplete;
|
||||
|
||||
@ApiModelProperty("审批参数")
|
||||
private JSONObject approvalParam;
|
||||
|
||||
public JSONObject getApprovalParam() {
|
||||
JSONObject object = new JSONObject();
|
||||
object.set("processInstanceBusinessId",this.getId());
|
||||
object.set("processInstanceId",this.getProcessInstanceId());
|
||||
object.set("processInstanceNodeId",this.getProcessInstanceNodeId());
|
||||
object.set("processInstanceNodeName",this.getProcessInstanceNodeName());
|
||||
object.set("processInstanceTaskIds",this.getProcessInstanceTaskIds());
|
||||
object.set("processInstanceTaskId",this.getProcessInstanceTaskId());
|
||||
object.set("processInstanceTaskNodeType",this.getProcessInstanceTaskNodeType());
|
||||
return object;
|
||||
}
|
||||
|
||||
@ApiModelProperty("提案类型名称")
|
||||
private String typeName;
|
||||
|
||||
@ApiModelProperty("届次")
|
||||
private String sessionName;
|
||||
|
||||
@ApiModelProperty("代表团")
|
||||
private String delegationName;
|
||||
|
||||
@ApiModelProperty("是否是主办承办单位")
|
||||
private boolean isMasterUnderTake;
|
||||
|
||||
@ApiModelProperty("承办单位")
|
||||
private String underTakeName;
|
||||
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ApiModel("提案邀请附议人")
|
||||
public class ProposalInviteSeconderVO {
|
||||
|
||||
@ApiModelProperty("工号")
|
||||
private String loginName;
|
||||
|
||||
@ApiModelProperty("姓名")
|
||||
private String userName;
|
||||
|
||||
@ApiModelProperty("手机号")
|
||||
private String mobile;
|
||||
|
||||
@ApiModelProperty("性别")
|
||||
private String sex;
|
||||
|
||||
@ApiModelProperty("单位")
|
||||
private String unitName;
|
||||
|
||||
@ApiModelProperty("分工会")
|
||||
private String unionName;
|
||||
|
||||
@ApiModelProperty("代表团ID")
|
||||
private String delegationId;
|
||||
|
||||
@ApiModelProperty("代表团")
|
||||
private String delegationName;
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.h5controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/h5/proposal/common")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "h5提案公共")
|
||||
public class H5ProposalCommonController {
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/proposal/common/info/index.html")
|
||||
@SaCheckPermission("h5.proposal")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.h5controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/h5/proposal/delegation")
|
||||
@Ok("json:full")
|
||||
@Api("h5提案附议")
|
||||
public class H5ProposalDelegationController {
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/proposal/transact/delegation/index.html")
|
||||
@SaCheckPermission("h5.proposal.delegation")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.h5controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/h5/proposal/mine")
|
||||
@Ok("json:full")
|
||||
@Api("h5我的提案")
|
||||
public class H5ProposalMineController {
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/proposal/transact/mine/index.html")
|
||||
@SaCheckPermission("h5.proposal.mine")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.h5controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/h5/proposal/query/comprehensive")
|
||||
@Slf4j
|
||||
@Ok("json:full")
|
||||
@Api(tags = "提案综合查询")
|
||||
public class H5ProposalQueryComprehensiveController {
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/proposal/query/comprehensive/index.html")
|
||||
@SaCheckPermission("h5.proposal.query.comprehensive")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.h5controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/h5/proposal/seconded")
|
||||
@Ok("json:full")
|
||||
@Api("h5提案附议")
|
||||
public class H5ProposalSecondedController {
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/proposal/transact/seconded/index.html")
|
||||
@SaCheckPermission("h5.proposal.seconded")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.h5controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/h5/proposal/write")
|
||||
@Ok("json:full")
|
||||
@Api("h5提案撰写")
|
||||
public class H5ProposalWriteController {
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhghh5/democratic/proposal/transact/write/index.html")
|
||||
@SaCheckPermission("h5.proposal.write")
|
||||
public void index() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.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.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("proposal_config")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案配置")
|
||||
public class ProposalConfig extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("附议人数量")
|
||||
@ColDefine(type = ColType.INT, width = 1)
|
||||
@Default("1")
|
||||
private Integer seconderNum;
|
||||
|
||||
@Column
|
||||
@Comment("案由最少字数")
|
||||
@ColDefine(type = ColType.INT, width = 1)
|
||||
@Default("1")
|
||||
private Integer briefMinLength;
|
||||
|
||||
@Column
|
||||
@Comment("协办单位是否需要答复")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default("0")
|
||||
private Boolean slaveUnitNeedReply;
|
||||
|
||||
@Column
|
||||
@Comment("协办单位是否首先答复")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default("0")
|
||||
private Boolean slaveUnitFirstReply;
|
||||
|
||||
@Column
|
||||
@Comment("协办单位领导单位是否需要审批")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default("0")
|
||||
private Boolean slaveUnitLeaderNeedApprove;
|
||||
|
||||
@Column
|
||||
@Comment("撰写须知")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String writeRemind;
|
||||
|
||||
@Column
|
||||
@Comment("校领导单位")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<String> schoolLeaderUnitIds;
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("proposal_consolidation")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案并案")
|
||||
public class ProposalConsolidation extends BaseModel {
|
||||
|
||||
@Id
|
||||
@Comment("id")
|
||||
private Long id;
|
||||
|
||||
@Column
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
@Comment("并案id")
|
||||
private List<String> consolidationIds;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.models;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
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 org.nutz.json.JsonField;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("proposal_info")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案信息")
|
||||
@TableIndexes({
|
||||
@Index(name = "INDEX_PROPOSAL_INFO_SESSION_CODE", fields = {"sessionId","code"})
|
||||
})
|
||||
public class ProposalInfo extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("提案编号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String code;
|
||||
|
||||
@Column
|
||||
@Comment("提案名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
@NotBlank(message = "提案名称不能为空")
|
||||
@Size(max = 100)
|
||||
private String name;
|
||||
|
||||
@Column
|
||||
@Comment("提案类型")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer typeId;
|
||||
|
||||
@Column
|
||||
@Comment("提案来源")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String source;
|
||||
|
||||
@Column
|
||||
@Comment("立案结果(字典表)")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String caseFilingResult;
|
||||
|
||||
@Column
|
||||
@Comment("教代会ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String sessionId;
|
||||
|
||||
@Column
|
||||
@Comment("提案人ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String createUserId;
|
||||
|
||||
@Column
|
||||
@Comment("提案人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String createUserName;
|
||||
|
||||
@Column
|
||||
@Comment("提案人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 120)
|
||||
private String createUserLoginName;
|
||||
|
||||
@Column
|
||||
@Comment("联系电话")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
private String mobile;
|
||||
|
||||
@Column
|
||||
@Comment("所属代表团ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String delegationId;
|
||||
|
||||
@Column
|
||||
@Comment("所属委员会ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String committeeId;
|
||||
|
||||
@Column
|
||||
@Comment("单位")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("是否提交")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default(value = "0")
|
||||
private Boolean isSubmit;
|
||||
|
||||
@Column
|
||||
@Comment("创建时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 30)
|
||||
@JsonField(dataFormat = "yyyy-MM-dd")
|
||||
private String createTime;
|
||||
|
||||
@Column
|
||||
@Comment("摘要")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String excerpt;
|
||||
|
||||
@Column
|
||||
@Comment("案由")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String brief;
|
||||
|
||||
@Column
|
||||
@Comment("建议措施")
|
||||
@ColDefine(type = ColType.TEXT)
|
||||
private String measures;
|
||||
|
||||
@Column
|
||||
@Comment("建议落实部门")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 500)
|
||||
private String implementUnitName;
|
||||
|
||||
@Column
|
||||
@Comment("提案状态")
|
||||
@ColDefine(type = ColType.INT, width = 4)
|
||||
private Integer stateCode;
|
||||
|
||||
@Column
|
||||
@Comment("附件")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<JSONObject> files;
|
||||
|
||||
@Column
|
||||
@Comment("提案人签字ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String signId;
|
||||
|
||||
@Column
|
||||
@Comment("是否公示提案")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default(value = "0")
|
||||
private Boolean publicity;
|
||||
|
||||
@Column
|
||||
@Comment("是否优秀提案")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default(value = "0")
|
||||
private Boolean excellent;
|
||||
|
||||
@Comment("签字")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
@Column(hump = true)
|
||||
private String signature;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
@Table("proposal_reply_unit")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案答复表")
|
||||
public class ProposalReply extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("提案ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String proposalId;
|
||||
|
||||
@Column
|
||||
@Comment("承办单位ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unitId;
|
||||
|
||||
@Column
|
||||
@Comment("承办单位code")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unitCode;
|
||||
|
||||
@Column
|
||||
@Comment("承办单位名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("是否主办单位")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default("0")
|
||||
private Boolean isMaster;
|
||||
|
||||
@Column
|
||||
@Comment("是否答复")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default("0")
|
||||
private Boolean isReply;
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
@Table("proposal_reply_unit")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案信息")
|
||||
public class ProposalReplyUnit extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("提案ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String proposalId;
|
||||
|
||||
@Column
|
||||
@Comment("承办单位ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unitId;
|
||||
|
||||
@Column
|
||||
@Comment("承办单位code")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unitCode;
|
||||
|
||||
@Column
|
||||
@Comment("承办单位名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("是否主办单位")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default("0")
|
||||
private Boolean isMaster;
|
||||
|
||||
@Column
|
||||
@Comment("是否答复")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default("0")
|
||||
private Boolean isReply;
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.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;
|
||||
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("proposal_seconded")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案附议信息")
|
||||
public class ProposalSeconded extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("提案ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String proposalId;
|
||||
|
||||
@Column
|
||||
@Comment("附议人ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String seconderId;
|
||||
|
||||
@Column
|
||||
@Comment("附议人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String seconderName;
|
||||
|
||||
@Column
|
||||
@Comment("附议人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String seconderLoginName;
|
||||
|
||||
@Column
|
||||
@Comment("附议人单位")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String seconderUnitName;
|
||||
|
||||
@Column
|
||||
@Comment("附议人手机号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String seconderMobile;
|
||||
|
||||
@Column
|
||||
@Comment("附议时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date secondedTime;
|
||||
|
||||
@Column
|
||||
@Comment("邀请时间")
|
||||
@ColDefine(type = ColType.DATETIME)
|
||||
private Date inviteTime;
|
||||
|
||||
@Column
|
||||
@Comment("附议人签字id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String seconderSignId;
|
||||
|
||||
@Column
|
||||
@Comment("附议结果")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
private Boolean isAgree;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.models;
|
||||
|
||||
import com.budwk.app.base.model.BaseModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
@Table("proposal_type")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案类型")
|
||||
public class ProposalType extends BaseModel {
|
||||
|
||||
@Id
|
||||
@Comment("id")
|
||||
private Integer id;
|
||||
|
||||
@Column
|
||||
@Comment("编码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String code;
|
||||
|
||||
@Column
|
||||
@Comment("名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 10)
|
||||
private String name;
|
||||
|
||||
@Column
|
||||
@Comment("排序")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer sort;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.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;
|
||||
|
||||
@Table("proposal_undertake")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案承办单位")
|
||||
public class ProposalUndertake extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("承办单位编码")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String code;
|
||||
|
||||
@Column
|
||||
@Comment("承办单位名称")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String name;
|
||||
|
||||
@Column
|
||||
@Comment("是否启用")
|
||||
@ColDefine(type = ColType.BOOLEAN)
|
||||
@Default(value = "1")
|
||||
private Boolean enable;
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel(description = "提案委员会立案参数")
|
||||
public class ProposalCommitteeFilingApprovalParam extends BpmTaskApprovalParam {
|
||||
|
||||
@NotEmpty(message = "提案id不能为空,多条即为并案")
|
||||
private String[] proposalIds;
|
||||
|
||||
@NotBlank(message = "立案结果不能为空")
|
||||
private String caseFilingResult;
|
||||
|
||||
@ApiModelProperty("主办单位")
|
||||
private String hostUnitId;
|
||||
|
||||
@ApiModelProperty("协办单位")
|
||||
private String[] helpUnitIds;
|
||||
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* 提案委员会立案参数
|
||||
*/
|
||||
@Data
|
||||
public class ProposalCommitteeFilingParam {
|
||||
|
||||
@NotBlank(message = "提案id不能为空")
|
||||
String id;
|
||||
|
||||
@NotBlank(message = "立案结果不能为空")
|
||||
private String caseFilingResult;
|
||||
|
||||
private String hostUnit;
|
||||
|
||||
private String[] helpUnit;
|
||||
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel(description = "提案委员会确认承办单位参数")
|
||||
public class ProposalCommitteeFilingUnitApprovalParam extends BpmTaskApprovalParam {
|
||||
|
||||
@NotEmpty(message = "提案id不能为空,这里是立案的时候储存的提案id集合")
|
||||
private String[] proposalIds;
|
||||
|
||||
@NotBlank(message = "立案结果不能为空")
|
||||
private String caseFilingResult;
|
||||
|
||||
@ApiModelProperty("主办单位")
|
||||
private String hostUnitId;
|
||||
|
||||
@ApiModelProperty("协办单位")
|
||||
private String[] helpUnitIds;
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("提案反馈评分")
|
||||
public class ProposalFeedbackEvaluationParam extends BpmTaskApprovalParam {
|
||||
|
||||
@ApiModelProperty("反馈评价")
|
||||
@NotBlank(message = "反馈评价不能为空")
|
||||
private String feedBackScore;
|
||||
|
||||
}
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel(description = "提案办理进度参数")
|
||||
public class ProposalQueryCollectProgressParam extends PageForm {
|
||||
|
||||
@ApiModelProperty(name = "提案名称")
|
||||
private String name;
|
||||
@ApiModelProperty(name = "提案编号")
|
||||
private String code;
|
||||
@ApiModelProperty(name = "教代会ID")
|
||||
private String sessionId;
|
||||
@ApiModelProperty(name = "代表团ID")
|
||||
private String delegationId;
|
||||
@ApiModelProperty(name = "提案人姓名")
|
||||
private String createUserName;
|
||||
@ApiModelProperty(name = "提案人工号")
|
||||
private String createUserLoginName;
|
||||
@ApiModelProperty(name = "提案立案结果")
|
||||
private String caseFilingResult;
|
||||
@ApiModelProperty(name = "提案立案结果")
|
||||
private String[] caseFilingResults;
|
||||
@ApiModelProperty(name = "提案类型")
|
||||
private String type;
|
||||
@ApiModelProperty(name = "提案类型")
|
||||
private String[] typeIds;
|
||||
@ApiModelProperty(name = "提案人分工会ID")
|
||||
private String unionId;
|
||||
@ApiModelProperty(name = "提案人单位ID")
|
||||
private String unitId;
|
||||
@ApiModelProperty(name = "承办单位编码")
|
||||
private String replyUnitCode;
|
||||
|
||||
/**
|
||||
* 构建通用查询参数
|
||||
*
|
||||
* @param cnd cnd
|
||||
* @param searchParam searchParam
|
||||
*/
|
||||
public static void buildSearch(Cnd cnd, ProposalQueryCollectProgressParam searchParam) {
|
||||
if (cnd == null) {
|
||||
cnd = Cnd.NEW();
|
||||
}
|
||||
//教代会届次
|
||||
cnd.andEX("info.sessionId", "=", searchParam.getSessionId());
|
||||
//提案名称
|
||||
if (StrUtil.isNotBlank(searchParam.getName())) {
|
||||
cnd.where().andLike("info.name", searchParam.getName());
|
||||
}
|
||||
//提案编号
|
||||
if (StrUtil.isNotBlank(searchParam.getCode())) {
|
||||
cnd.where().andLike("info.code", searchParam.getCode());
|
||||
}
|
||||
//代表团ID
|
||||
cnd.andEX("info.delegationId", "=", searchParam.getDelegationId());
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserName())) {
|
||||
cnd.where().andLike("info.createUserName", searchParam.getCreateUserName());
|
||||
}
|
||||
//提案人工号
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserLoginName())) {
|
||||
cnd.where().andLike("info.createUserLoginName", searchParam.getCreateUserLoginName());
|
||||
}
|
||||
//提案人姓名
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserName())) {
|
||||
cnd.where().andLike("info.createUserName", searchParam.getCreateUserName());
|
||||
}
|
||||
//提案人分工会
|
||||
cnd.andEX("tcd.unionId", "=", searchParam.getUnionId());
|
||||
//提案人单位
|
||||
cnd.andEX("tcd.unitId", "=", searchParam.getUnitId());
|
||||
//提案类型
|
||||
cnd.andEX("info.typeId", "=", searchParam.getType());
|
||||
cnd.andEX("info.typeId", "in", searchParam.getTypeIds());
|
||||
//提案立案结果
|
||||
cnd.andEX("info.caseFilingResult", "in", searchParam.getCaseFilingResults());
|
||||
//承办单位编码
|
||||
cnd.andEX("pru.code", "=", searchParam.getReplyUnitCode());
|
||||
}
|
||||
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel(description = "提案综合查询参数")
|
||||
public class ProposalQueryComprehensiveParam extends PageForm {
|
||||
|
||||
@ApiModelProperty(name = "提案名称")
|
||||
private String name;
|
||||
@ApiModelProperty(name = "提案编号")
|
||||
private String code;
|
||||
@ApiModelProperty(name = "教代会ID")
|
||||
private String sessionId;
|
||||
@ApiModelProperty(name = "代表团ID")
|
||||
private String delegationId;
|
||||
@ApiModelProperty(name = "提案人姓名")
|
||||
private String createUserName;
|
||||
@ApiModelProperty(name = "提案人工号")
|
||||
private String createUserLoginName;
|
||||
@ApiModelProperty(name = "提案立案结果")
|
||||
private String caseFilingResult;
|
||||
@ApiModelProperty(name = "提案立案结果")
|
||||
private String[] caseFilingResults;
|
||||
@ApiModelProperty(name = "提案类型")
|
||||
private String type;
|
||||
@ApiModelProperty(name = "提案类型")
|
||||
private String[] typeIds;
|
||||
@ApiModelProperty(name = "提案人分工会ID")
|
||||
private String unionId;
|
||||
@ApiModelProperty(name = "提案人单位ID")
|
||||
private String unitId;
|
||||
@ApiModelProperty(name = "承办单位编码")
|
||||
private String replyUnitCode;
|
||||
@ApiModelProperty(name = "承办单位ID")
|
||||
private String undertakeUnitId;
|
||||
|
||||
@ApiModelProperty(name = "征集进度状态")
|
||||
private Integer[] collectIds;
|
||||
|
||||
|
||||
/**
|
||||
* 构建通用查询参数
|
||||
*
|
||||
* @param cnd cnd
|
||||
* @param searchParam searchParam
|
||||
*/
|
||||
public static void buildSearch(Cnd cnd, ProposalQueryComprehensiveParam searchParam) {
|
||||
if (cnd == null) {
|
||||
cnd = Cnd.NEW();
|
||||
}
|
||||
//教代会届次
|
||||
cnd.andEX("info.sessionId", "=", searchParam.getSessionId());
|
||||
//提案名称
|
||||
if (StrUtil.isNotBlank(searchParam.getName())) {
|
||||
cnd.where().andLike("info.name", searchParam.getName());
|
||||
}
|
||||
//提案编号
|
||||
if (StrUtil.isNotBlank(searchParam.getCode())) {
|
||||
cnd.where().andLike("info.code", searchParam.getCode());
|
||||
}
|
||||
//代表团ID
|
||||
cnd.andEX("info.delegationId", "=", searchParam.getDelegationId());
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserName())) {
|
||||
cnd.where().andLike("info.createUserName", searchParam.getCreateUserName());
|
||||
}
|
||||
//提案人工号
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserLoginName())) {
|
||||
cnd.where().andLike("info.createUserLoginName", searchParam.getCreateUserLoginName());
|
||||
}
|
||||
//提案人姓名
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserName())) {
|
||||
cnd.where().andLike("info.createUserName", searchParam.getCreateUserName());
|
||||
}
|
||||
//提案人分工会
|
||||
cnd.andEX("tcde.unionId", "=", searchParam.getUnionId());
|
||||
//提案人单位
|
||||
cnd.andEX("tcde.unitId", "=", searchParam.getUnitId());
|
||||
//提案类型
|
||||
cnd.andEX("info.typeId", "=", searchParam.getType());
|
||||
cnd.andEX("info.typeId", "in", searchParam.getTypeIds());
|
||||
//提案立案结果
|
||||
cnd.andEX("info.caseFilingResult", "in", searchParam.getCaseFilingResults());
|
||||
//承办单位编码
|
||||
cnd.andEX("pru.code", "=", searchParam.getReplyUnitCode());
|
||||
|
||||
//承办单位Id
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
if(StrUtil.isNotBlank(searchParam.getUndertakeUnitId())){
|
||||
seg.orLike("JSON_EXTRACT(caseUnitTasks.extVariable, '$.hostUnitId')",searchParam.getUndertakeUnitId());
|
||||
seg.orLike("JSON_EXTRACT(caseUnitTasks.extVariable, '$.helpUnitIds')",searchParam.getUndertakeUnitId());
|
||||
cnd.and(seg);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
|
||||
/**
|
||||
* 提案通用搜索
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class ProposalSearchParam extends PageForm<ProposalInfo> {
|
||||
|
||||
private String name;
|
||||
private String code;
|
||||
private String sessionId;
|
||||
private String delegationId;
|
||||
private String createUserName;
|
||||
private String createUserLoginName;
|
||||
private String caseFilingResult;
|
||||
|
||||
/**
|
||||
* 构建通用查询参数
|
||||
*
|
||||
* @param cnd cnd
|
||||
* @param searchParam searchParam
|
||||
*/
|
||||
public static void buildSearch(Cnd cnd, ProposalSearchParam searchParam) {
|
||||
if (cnd == null) {
|
||||
cnd = Cnd.NEW();
|
||||
}
|
||||
if (StrUtil.isNotBlank(searchParam.getName())) {
|
||||
cnd.where().andLike("info.name", searchParam.getName());
|
||||
}
|
||||
if (StrUtil.isNotBlank(searchParam.getCode())) {
|
||||
cnd.where().andLike("info.code", searchParam.getCode());
|
||||
}
|
||||
cnd.andEX("info.sessionId", "=", searchParam.getSessionId());
|
||||
cnd.andEX("info.delegationId", "=", searchParam.getDelegationId());
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserName())) {
|
||||
cnd.where().andLike("info.createUserName", searchParam.getCreateUserName());
|
||||
}
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserLoginName())) {
|
||||
cnd.where().andLike("info.createUserLoginName", searchParam.getCreateUserLoginName());
|
||||
}
|
||||
cnd.andEX("info.caseFilingResult", "=", searchParam.getCaseFilingResult());
|
||||
|
||||
if(StrUtil.isAllNotBlank(searchParam.getPageOrderName(), searchParam.getPageOrderBy())){
|
||||
cnd.orderBy(searchParam.getPageOrderName(), PageUtil.getOrder(searchParam.getPageOrderBy()));
|
||||
}else{
|
||||
cnd.asc("info.code");
|
||||
}
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@Data
|
||||
@ApiModel(description = "修改提案类型参数")
|
||||
public class ProposalSeniorUpdateTypeParam {
|
||||
|
||||
@ApiModelProperty(value = "提案ID")
|
||||
@NotBlank(message = "提案ID不能为空")
|
||||
private String id;
|
||||
|
||||
@ApiModelProperty(value = "类型")
|
||||
@NotBlank(message = "提案类型不能为空")
|
||||
private String typeId;
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("承办单位阅览意见参数")
|
||||
public class ProposalUnderTakeReadApprovalParam extends BpmTaskApprovalParam {
|
||||
|
||||
@ApiModelProperty("能否承办")
|
||||
@NotBlank(message = "能否承办不能为空")
|
||||
private String canTake;
|
||||
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("承办单位答复参数")
|
||||
public class ProposalUnderTakeReplyApprovalParam extends BpmTaskApprovalParam {
|
||||
|
||||
@ApiModelProperty("落实情况")
|
||||
@NotBlank(message = "落实情况不能为空")
|
||||
private String implementState;
|
||||
|
||||
@ApiModelProperty("承办单位id")
|
||||
@NotBlank(message = "承办单位id不能为空")
|
||||
private String underTakeId;
|
||||
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@Data
|
||||
@ApiModel("提案承办单位答复转办参数")
|
||||
public class ProposalUnderTakeReplyTransferParam {
|
||||
|
||||
@ApiModelProperty("提案id")
|
||||
@NotBlank(message = "提案id不能为空")
|
||||
private String proposalId;
|
||||
|
||||
@ApiModelProperty("承办单位id")
|
||||
@NotBlank(message = "承办单位id不能为空")
|
||||
private String underTakeId;
|
||||
|
||||
@ApiModelProperty("流程实例id")
|
||||
@NotBlank(message = "流程实例id不能为空")
|
||||
private String processInstanceId;
|
||||
|
||||
@ApiModelProperty("流程实例任务id")
|
||||
@NotBlank(message = "流程实例任务id不能为空")
|
||||
private String processInstanceTaskId;
|
||||
|
||||
@ApiModelProperty("转办用户工号")
|
||||
@NotBlank(message = "转办用户工号不能为空")
|
||||
private String transferUserLoginName;
|
||||
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("承办单位分管校领导审批参数")
|
||||
public class ProposalUnderTakeSchoolLeaderApprovalParam extends BpmTaskApprovalParam {
|
||||
|
||||
// @ApiModelProperty("是否同意")
|
||||
// @NotBlank(message = "是否同意不能为空")
|
||||
// private boolean isAgree;
|
||||
|
||||
@ApiModelProperty("承办单位id")
|
||||
@NotBlank(message = "承办单位id不能为空")
|
||||
private String underTakeId;
|
||||
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.param;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
@Data
|
||||
@ApiModel("承办单位答复参数")
|
||||
public class ProposalUnitReplyParam {
|
||||
|
||||
@ApiModelProperty("落实情况")
|
||||
@NotBlank(message = "落实情况不能为空")
|
||||
private String implementState;
|
||||
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalCommitteeFilingApprovalParam;
|
||||
|
||||
public interface ProposalCommitteeFilingService extends BaseService<ProposalInfo> {
|
||||
|
||||
void approval(ProposalCommitteeFilingApprovalParam approvalParam);
|
||||
|
||||
void revoke(String taskId);
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalCommitteeFilingUnitApprovalParam;
|
||||
|
||||
public interface ProposalCommitteeFilingUnitService extends BaseService<ProposalInfo> {
|
||||
|
||||
void approval(ProposalCommitteeFilingUnitApprovalParam approvalParam);
|
||||
|
||||
void revoke(String taskId);
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
|
||||
public interface ProposalDelegationService extends BaseService<ProposalInfo> {
|
||||
|
||||
/**
|
||||
* 团长审核
|
||||
* @param approvalParam
|
||||
*/
|
||||
void approval(BpmTaskApprovalParam approvalParam);
|
||||
|
||||
/**
|
||||
* 撤回
|
||||
* @param taskId
|
||||
*/
|
||||
void revokeTask(String taskId);
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:ProposalExportService
|
||||
* @Date 2024/10/10 10:26
|
||||
* @注释
|
||||
*/
|
||||
public interface ProposalExportService extends BaseService<ProposalInfo> {
|
||||
|
||||
/**
|
||||
* 某些页面的公共SQL,用于导出或者综合查询
|
||||
* @param pageForm
|
||||
* @return
|
||||
*/
|
||||
Sql exportComprehensiveSql(ProposalQueryComprehensiveParam pageForm);
|
||||
|
||||
/**
|
||||
* 导出提案汇总表excel
|
||||
* @param pageForm
|
||||
* @param response
|
||||
*/
|
||||
void exportProposalSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 导出提案立案汇总表excel
|
||||
* @param pageForm
|
||||
* @param response
|
||||
*/
|
||||
void exportProposalRegisterSummaryAsExcel(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 导出提案统计表zip
|
||||
* @param pageForm
|
||||
* @param response
|
||||
*/
|
||||
void exportProposalStatisticsAsZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 导出反馈表
|
||||
* @param pageForm
|
||||
* @param response
|
||||
*/
|
||||
void exportFeedBackAsZip(ProposalQueryComprehensiveParam pageForm, HttpServletResponse response);
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalFeedbackEvaluationParam;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
public interface ProposalFeedbackEvaluationService extends BaseService<ProposalInfo> {
|
||||
void approval(@Valid ProposalFeedbackEvaluationParam param);
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalUnderTakeSchoolLeaderApprovalParam;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
public interface ProposalSchoolLeaderApprovalService extends BaseService<ProposalInfo> {
|
||||
|
||||
void approval(ProposalUnderTakeSchoolLeaderApprovalParam param);
|
||||
|
||||
void revoke(@Valid String taskId);
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalSeconded;
|
||||
|
||||
public interface ProposalSecondedService extends BaseService<ProposalSeconded> {
|
||||
|
||||
/**
|
||||
* 附议
|
||||
* @param approvalParam
|
||||
*/
|
||||
void approval(BpmTaskApprovalParam approvalParam);
|
||||
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalUnderTakeReadApprovalParam;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
public interface ProposalUnderTakeReadService {
|
||||
|
||||
Pagination pageData(ProposalSearchParam param);
|
||||
|
||||
void approval(ProposalUnderTakeReadApprovalParam param);
|
||||
|
||||
/**
|
||||
* 撤回
|
||||
* @param taskId
|
||||
*/
|
||||
void revokeTask(@Valid String taskId);
|
||||
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
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 org.nutz.lang.util.NutMap;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
public interface ProposalUnderTakeReplyService extends BaseService<ProposalInfo> {
|
||||
|
||||
Pagination pageData(ProposalSearchParam param);
|
||||
|
||||
void approval(ProposalUnderTakeReplyApprovalParam param);
|
||||
|
||||
/**
|
||||
* 查询本单位可转办用户
|
||||
* @param keyword
|
||||
*/
|
||||
List<NutMap> queryTransferUser(String keyword);
|
||||
|
||||
/**
|
||||
* 转办
|
||||
* @param param
|
||||
*/
|
||||
void transfer(ProposalUnderTakeReplyTransferParam param);
|
||||
|
||||
/**
|
||||
* 撤回
|
||||
* @param taskId
|
||||
*/
|
||||
void revokeTask(@Valid String taskId);
|
||||
|
||||
/**
|
||||
* 检查是否可以办理
|
||||
* @param taskId
|
||||
*/
|
||||
String checkCanReply(String taskId);
|
||||
|
||||
/**
|
||||
* 撤回转办
|
||||
* @param taskId
|
||||
*/
|
||||
void revokeTransfer(String taskId);
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.sys.models.Sys_dict;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ProposalWriteService extends BaseService<ProposalInfo> {
|
||||
|
||||
List<Sys_dict> listSource(String sessionId);
|
||||
|
||||
/**
|
||||
* 生成提案编号 代表团编码+顺序号
|
||||
*
|
||||
* @param sessionId 届次id
|
||||
* @param delegationId 代表团id
|
||||
*/
|
||||
String generateProposalCode(String sessionId,String delegationId);
|
||||
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
|
||||
|
||||
public interface TeacherCongressDashBoardService extends BaseService<Teacher_congress_session> {
|
||||
}
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service.common;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.List;
|
||||
|
||||
public interface ProposalCommonService extends BaseService<ProposalInfo> {
|
||||
|
||||
/**
|
||||
* 查询提案信息
|
||||
*/
|
||||
NutMap info(String id);
|
||||
|
||||
void exportProposalAsDocx(String id, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 导出word
|
||||
*
|
||||
* @param id
|
||||
* @param byteArrayOutputStream
|
||||
*/
|
||||
void exportProposalAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream);
|
||||
|
||||
/**
|
||||
* 导出单个反馈表
|
||||
* @param id
|
||||
* @param byteArrayOutputStream
|
||||
*/
|
||||
void exportProposalFeedBackAsDocx(String id,ByteArrayOutputStream byteArrayOutputStream);
|
||||
|
||||
/**
|
||||
* 根据提案id查询团长
|
||||
*
|
||||
* @param proposalId
|
||||
* @return
|
||||
*/
|
||||
String getDelegationHeadByProposalId(String proposalId);
|
||||
|
||||
/**
|
||||
* 根据代表团id查询团长
|
||||
*
|
||||
* @param delegationId
|
||||
* @return
|
||||
*/
|
||||
String getDelegationHeadById(String delegationId);
|
||||
|
||||
/**
|
||||
* 根据提案id查询提案委员会主任
|
||||
*
|
||||
* @param proposalId
|
||||
* @return
|
||||
*/
|
||||
String getCommitteeDirectorByProposalId(String proposalId);
|
||||
|
||||
/**
|
||||
* 获取自管代表团
|
||||
* @return
|
||||
*/
|
||||
List<String> getSelfManageDelegationIds();
|
||||
|
||||
|
||||
/**
|
||||
* 根据提案id查询并案的提案
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
List<String> getConsolidation(String id);
|
||||
|
||||
/**
|
||||
* 导出年度报告
|
||||
* @param sessionId
|
||||
* @param response
|
||||
*/
|
||||
void exportYearReport(String sessionId, HttpServletResponse response);
|
||||
}
|
||||
+719
@@ -0,0 +1,719 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service.common;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HtmlUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||
import com.budwk.app.base.utils.SysOfficeTemplateUtil;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.bpm.models.BpmProcessInstance;
|
||||
import com.budwk.app.bpm.models.BpmProcessTask;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.bpm.vo.BpmProcessTaskVo;
|
||||
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
|
||||
import com.budwk.app.sys.models.Sys_role;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.models.Sys_user_role;
|
||||
import com.budwk.app.sys.services.SysRoleService;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConsolidation;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
|
||||
import com.deepoove.poi.XWPFTemplate;
|
||||
import com.deepoove.poi.config.Configure;
|
||||
import com.deepoove.poi.data.AttachmentRenderData;
|
||||
import com.deepoove.poi.data.Attachments;
|
||||
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
|
||||
import com.deepoove.poi.policy.AttachmentRenderPolicy;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.ddr.poi.html.HtmlRenderPolicy;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.FieldFilter;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> implements ProposalCommonService {
|
||||
|
||||
//找出富文本里面上传的图片
|
||||
static String IMG_SRC_REGEX = "<img\\s+[^>]*src\\s*=\\s*([\"'])(/platform/sys/file/download\\?id=.*?)\\1[^>]*>";
|
||||
|
||||
@Inject
|
||||
private SysRoleService sysRoleService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private SysOfficeTemplateUtil sysOfficeTemplateUtil;
|
||||
|
||||
public ProposalCommonServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap info(String id) {
|
||||
if (StrUtil.isBlank(id)) {
|
||||
throw new BaseException("提案信息不存在");
|
||||
}
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
type.name AS typeName,
|
||||
tcs.fullName,
|
||||
tcs.fullName as sessionName,
|
||||
tcd.unionName,
|
||||
tcde.NAME AS delegationName,
|
||||
tci.`name` AS committeeName
|
||||
FROM
|
||||
`proposal_info` info
|
||||
LEFT JOIN teacher_congress_session tcs ON tcs.id = info.sessionId
|
||||
LEFT JOIN teacher_congress_delegate tcd ON tcd.userId = info.createUserId
|
||||
AND tcd.sessionId = info.sessionId
|
||||
LEFT JOIN teacher_congress_delegation tcde ON tcde.id = tcd.delegationId
|
||||
LEFT JOIN teacher_congress_institution tci ON tci.id = info.committeeId
|
||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||
WHERE
|
||||
info.id = @id
|
||||
""").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);
|
||||
}
|
||||
return nutMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportProposalAsDocx(String id, HttpServletResponse response) {
|
||||
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
|
||||
exportProposalAsDocx(id, byteArrayOutputStream);
|
||||
FieldFilter fieldFilter = FieldFilter.create(ProposalInfo.class, "^name|code$");
|
||||
ProposalInfo proposalInfo = Daos.ext(dao(), fieldFilter).fetch(ProposalInfo.class, id);
|
||||
String name = proposalInfo.getName();
|
||||
String code = proposalInfo.getCode();
|
||||
CommonDownloadUtil.download(code + "-" + name + ".docx", byteArrayOutputStream.toByteArray(), response);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportProposalAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream) {
|
||||
if (id == null || id.isEmpty()) {
|
||||
throw new BaseException("提案信息不存在");
|
||||
}
|
||||
// 查询提案信息
|
||||
HashMap<String, Object> docData = new HashMap<>();
|
||||
|
||||
//基本信息
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.name,
|
||||
info.code,
|
||||
info.brief,
|
||||
info.measures,
|
||||
info.createUserName,
|
||||
tcde.unitName,
|
||||
tcde.mobile,
|
||||
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
|
||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
WHERE info.id = @id
|
||||
""").setParam("id", id);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
execute(sql);
|
||||
NutMap info = (NutMap) sql.getResult();
|
||||
//处理下富文本
|
||||
String brief = info.getString("brief");
|
||||
String measures = info.getString("measures");
|
||||
info.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(brief));
|
||||
info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(measures));
|
||||
|
||||
docData.put("info", info);
|
||||
|
||||
//查询附议人信息
|
||||
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, "=", 10)
|
||||
.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)
|
||||
);
|
||||
List<HashMap<String, Object>> seconders = seconderTasks.stream().filter(v -> v.getTaskStatus().equals(BpmProcessTaskStatusEnum.COMPLETE.name()) && ObjectUtil.isNotEmpty(v.getExtVariable().getStr("bpmTaskApprovalType").equals("PASS"))).map(v -> {
|
||||
HashMap<String, Object> seconderApproval = new HashMap<>();
|
||||
seconderApproval.put("userName", v.getCreateVariable().getStr("userName"));
|
||||
seconderApproval.put("loginName", v.getCreateVariable().getStr("loginName"));
|
||||
seconderApproval.put("unitName", v.getCreateVariable().getStr("unitName"));
|
||||
return seconderApproval;
|
||||
}).toList();
|
||||
|
||||
docData.put("seconders", seconders);
|
||||
}
|
||||
|
||||
//审批记录
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.PROPOSAL, id);
|
||||
|
||||
//团长审核
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 30)
|
||||
.flatMap(v -> v.getTasks().stream())
|
||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
||||
.ifPresent(v -> {
|
||||
HashMap<String, Object> delegationApproval = new HashMap<>();
|
||||
delegationApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
||||
delegationApproval.put("user", v.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
||||
delegationApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
||||
delegationApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
||||
}
|
||||
docData.put("tz", delegationApproval);
|
||||
});
|
||||
|
||||
//委员会立案
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 60)
|
||||
.flatMap(v -> v.getTasks().stream())
|
||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
||||
.ifPresent(v -> {
|
||||
HashMap<String, Object> committeeApproval = new HashMap<>();
|
||||
committeeApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
||||
committeeApproval.put("user", v.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
||||
committeeApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
||||
committeeApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
||||
committeeApproval.put("hostUnit", v.getExtVariable().getStr("hostUnit"));
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable().getBeanList("helpUnits", String.class))) {
|
||||
committeeApproval.put("helpUnits", String.join("、", v.getExtVariable().getBeanList("helpUnits", String.class)));
|
||||
}
|
||||
}
|
||||
docData.put("wyh", committeeApproval);
|
||||
});
|
||||
|
||||
//委员会确认承办单位
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 70)
|
||||
.flatMap(v -> v.getTasks().stream())
|
||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
||||
.ifPresent(v -> {
|
||||
HashMap<String, Object> committeeConfirm = new HashMap<>();
|
||||
committeeConfirm.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
||||
committeeConfirm.put("user", v.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
||||
committeeConfirm.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
||||
committeeConfirm.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
||||
committeeConfirm.put("hostUnit", v.getExtVariable().getStr("hostUnit"));
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable().getBeanList("helpUnits", String.class))) {
|
||||
committeeConfirm.put("helpUnits", String.join("、", v.getExtVariable().getBeanList("helpUnits", String.class)));
|
||||
}
|
||||
}
|
||||
docData.put("wyhConfirm", committeeConfirm);
|
||||
});
|
||||
|
||||
//主办单位答复
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 80)
|
||||
.flatMap(v -> v.getTasks().stream())
|
||||
.filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && v1.getCreateVariable().getBool("isMaster"))
|
||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
||||
.ifPresent(v -> {
|
||||
HashMap<String, Object> masterUnderTakeReply = new HashMap<>();
|
||||
masterUnderTakeReply.put("name", v.getCreateVariable().getStr("underTakeName"));
|
||||
masterUnderTakeReply.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
||||
masterUnderTakeReply.put("user", v.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
||||
masterUnderTakeReply.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
||||
masterUnderTakeReply.put("implementState", v.getExtVariable().getStr("implementState"));
|
||||
masterUnderTakeReply.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
||||
}
|
||||
docData.put("zbdf", masterUnderTakeReply);
|
||||
});
|
||||
|
||||
//协办单位答复
|
||||
List<HashMap<String, Object>> slaveUnderTakeReplyList = new ArrayList<>();
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 80).flatMap(v -> v.getTasks().stream())
|
||||
.filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && !v1.getCreateVariable().getBool("isMaster"))
|
||||
.collect(Collectors.groupingBy(v1 -> v1.getCreateVariable().getStr("underTakeId")))
|
||||
.forEach((k, v1) -> {
|
||||
v1.stream().max(Comparator.comparing(BpmProcessTask::getEndOn)).ifPresent(v2 -> {
|
||||
HashMap<String, Object> slaveUnderTakeReply = new HashMap<>();
|
||||
slaveUnderTakeReply.put("name", v2.getCreateVariable().getStr("underTakeName"));
|
||||
slaveUnderTakeReply.put("date", DateUtil.format(v2.getEndOn(), "yyyy年MM月dd日"));
|
||||
slaveUnderTakeReply.put("user", v2.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v2.getExtVariable())) {
|
||||
slaveUnderTakeReply.put("opinion",HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(v2.getExtVariable().getStr("approvalOpinion"), "")));
|
||||
slaveUnderTakeReply.put("implementState", v2.getExtVariable().getStr("implementState"));
|
||||
slaveUnderTakeReply.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v2.getExtVariable().getStr("approvalSignature")));
|
||||
}
|
||||
slaveUnderTakeReplyList.add(slaveUnderTakeReply);
|
||||
});
|
||||
});
|
||||
docData.put("xbdf", slaveUnderTakeReplyList);
|
||||
|
||||
//主办校领导审批
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 90)
|
||||
.flatMap(v -> v.getTasks().stream())
|
||||
.filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && v1.getCreateVariable().getBool("isMaster"))
|
||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
||||
.ifPresent(v -> {
|
||||
HashMap<String, Object> masterLeaderApproval = new HashMap<>();
|
||||
masterLeaderApproval.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
||||
masterLeaderApproval.put("user", v.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
||||
masterLeaderApproval.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
||||
masterLeaderApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
||||
}
|
||||
docData.put("zbldsp", masterLeaderApproval);
|
||||
});
|
||||
|
||||
List<HashMap<String, Object>> slaveLeaderApprovalList = new ArrayList<>();
|
||||
|
||||
//协办校领导审批
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 90).flatMap(v -> v.getTasks().stream())
|
||||
.filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && !v1.getCreateVariable().getBool("isMaster"))
|
||||
.collect(Collectors.groupingBy(v1 -> v1.getCreateVariable().getStr("underTakeId")))
|
||||
.forEach((k, v1) -> {
|
||||
v1.stream().max(Comparator.comparing(BpmProcessTask::getEndOn)).ifPresent(v2 -> {
|
||||
HashMap<String, Object> slaveLeaderApproval = new HashMap<>();
|
||||
slaveLeaderApproval.put("name", v2.getCreateVariable().getStr("underTakeName"));
|
||||
slaveLeaderApproval.put("date", DateUtil.format(v2.getEndOn(), "yyyy年MM月dd日"));
|
||||
slaveLeaderApproval.put("user", v2.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v2.getExtVariable())) {
|
||||
slaveLeaderApproval.put("opinion", v2.getExtVariable().getStr("approvalOpinion"));
|
||||
slaveLeaderApproval.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v2.getExtVariable().getStr("approvalSignature")));
|
||||
}
|
||||
slaveLeaderApprovalList.add(slaveLeaderApproval);
|
||||
});
|
||||
});
|
||||
docData.put("xbldsp", slaveLeaderApprovalList);
|
||||
|
||||
//反馈评分
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 100)
|
||||
.flatMap(v -> v.getTasks().stream())
|
||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
||||
.ifPresent(v -> {
|
||||
HashMap<String, Object> feedbackScore = new HashMap<>();
|
||||
feedbackScore.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
||||
feedbackScore.put("user", v.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
||||
feedbackScore.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
||||
String feedBackScore = v.getExtVariable().getStr("feedBackScore", "");
|
||||
feedbackScore.put("manyi", feedBackScore.equals("满意") ? "√" : "");
|
||||
feedbackScore.put("jibenmanyi", feedBackScore.equals("基本满意") ? "√" : "");
|
||||
feedbackScore.put("bumanyi", feedBackScore.equals("不满意") ? "√" : "");
|
||||
}
|
||||
docData.put("fk", feedbackScore);
|
||||
});
|
||||
|
||||
AttachmentRenderData attachmentRenderData = Attachments.ofLocal("C:\\Users\\zxy\\Desktop\\1.七届二次教代会提案反馈表(xxx部门).docx").create();
|
||||
docData.put("attachment", attachmentRenderData);
|
||||
|
||||
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
|
||||
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
||||
htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
|
||||
AttachmentRenderPolicy attachmentRenderPolicy = new AttachmentRenderPolicy();
|
||||
|
||||
Configure config = Configure.builder()
|
||||
.bind("seconders", policy)
|
||||
.bind("info.brief", htmlRenderPolicy)
|
||||
.bind("info.measures", htmlRenderPolicy)
|
||||
.bind("zbdf.opinion", htmlRenderPolicy)
|
||||
.bind("attachment", attachmentRenderPolicy)
|
||||
.build();
|
||||
|
||||
try {
|
||||
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal"), config).render(docData).writeAndClose(byteArrayOutputStream);
|
||||
} catch (IOException e) {
|
||||
log.error("提案导出失败{},提案id:{}", e.getMessage(), id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportProposalFeedBackAsDocx(String id, ByteArrayOutputStream byteArrayOutputStream) {
|
||||
if (id == null || id.isEmpty()) {
|
||||
throw new BaseException("提案信息不存在");
|
||||
}
|
||||
// 查询提案信息
|
||||
HashMap<String, Object> docData = new HashMap<>();
|
||||
|
||||
//基本信息
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.name,
|
||||
info.code,
|
||||
info.excerpt,
|
||||
info.brief,
|
||||
info.measures,
|
||||
info.createUserName,
|
||||
tcde.unitName,
|
||||
tcde.mobile,
|
||||
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
|
||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
WHERE info.id = @id
|
||||
""").setParam("id", id);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
execute(sql);
|
||||
NutMap info = (NutMap) sql.getResult();
|
||||
// String brief = info.getString("brief");
|
||||
// info.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(brief));
|
||||
|
||||
String excerpt = StrUtil.blankToDefault(info.getString("excerpt"),"");
|
||||
info.put("excerpt", HtmlUtil.cleanHtmlTag(excerpt));
|
||||
|
||||
docData.put("info", info);
|
||||
|
||||
//审批记录
|
||||
List<BpmTaskApprovalRecordVo> nodeTasks = bpmService.getNodeTasks(BpmProcessConstant.PROPOSAL, id);
|
||||
|
||||
//委员会确认承办单位
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 70)
|
||||
.flatMap(v -> v.getTasks().stream())
|
||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
||||
.ifPresent(v -> {
|
||||
HashMap<String, Object> committeeConfirm = new HashMap<>();
|
||||
committeeConfirm.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
||||
committeeConfirm.put("user", v.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
||||
committeeConfirm.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
||||
committeeConfirm.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
||||
committeeConfirm.put("hostUnit", v.getExtVariable().getStr("hostUnit"));
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable().getBeanList("helpUnits", String.class))) {
|
||||
committeeConfirm.put("helpUnits", String.join("、", v.getExtVariable().getBeanList("helpUnits", String.class)));
|
||||
}
|
||||
}
|
||||
docData.put("wyhConfirm", committeeConfirm);
|
||||
});
|
||||
|
||||
//主办单位答复
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 80)
|
||||
.flatMap(v -> v.getTasks().stream())
|
||||
.filter(v1 -> ObjectUtil.isNotEmpty(v1.getCreateVariable()) && v1.getCreateVariable().getBool("isMaster"))
|
||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
||||
.ifPresent(v -> {
|
||||
HashMap<String, Object> masterUnderTakeReply = new HashMap<>();
|
||||
masterUnderTakeReply.put("name", v.getCreateVariable().getStr("underTakeName"));
|
||||
masterUnderTakeReply.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
||||
masterUnderTakeReply.put("user", v.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
||||
masterUnderTakeReply.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
||||
masterUnderTakeReply.put("implementState", v.getExtVariable().getStr("implementState"));
|
||||
masterUnderTakeReply.put("sign", sysOfficeTemplateUtil.createPictureRenderData(v.getExtVariable().getStr("approvalSignature")));
|
||||
}
|
||||
docData.put("zbdf", masterUnderTakeReply);
|
||||
});
|
||||
//反馈评分
|
||||
nodeTasks.stream().filter(v -> v.getNodeCode() == 100)
|
||||
.flatMap(v -> v.getTasks().stream())
|
||||
.max(Comparator.comparing(BpmProcessTaskVo::getEndOn))
|
||||
.ifPresent(v -> {
|
||||
HashMap<String, Object> feedbackScore = new HashMap<>();
|
||||
feedbackScore.put("date", DateUtil.format(v.getEndOn(), "yyyy年MM月dd日"));
|
||||
feedbackScore.put("user", v.getActualOwnerUserName());
|
||||
if (ObjectUtil.isNotEmpty(v.getExtVariable())) {
|
||||
feedbackScore.put("opinion", v.getExtVariable().getStr("approvalOpinion"));
|
||||
String feedBackScore = v.getExtVariable().getStr("feedBackScore", "");
|
||||
feedbackScore.put("manyi", feedBackScore.equals("满意") ? "√" : "");
|
||||
feedbackScore.put("jibenmanyi", feedBackScore.equals("基本满意") ? "√" : "");
|
||||
feedbackScore.put("bumanyi", feedBackScore.equals("不满意") ? "√" : "");
|
||||
}
|
||||
docData.put("fk", feedbackScore);
|
||||
});
|
||||
|
||||
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
||||
htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
|
||||
|
||||
Configure config = Configure.builder()
|
||||
.bind("info.excerpt", htmlRenderPolicy)
|
||||
.bind("zbdf.opinion", htmlRenderPolicy)
|
||||
.build();
|
||||
try {
|
||||
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal_feedback"), config).render(docData).writeAndClose(byteArrayOutputStream);
|
||||
} catch (IOException e) {
|
||||
log.error("提案导出失败{},提案id:{}", e.getMessage(), id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDelegationHeadByProposalId(String proposalId) {
|
||||
ProposalInfo proposalInfo = dao().fetch(ProposalInfo.class, proposalId);
|
||||
return getDelegationHeadById(proposalInfo.getDelegationId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDelegationHeadById(String delegationId) {
|
||||
Sys_role sys_role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
|
||||
Sys_user_role sys_user_role = dao().fetch(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sys_role.getId()).and(Sys_user_role::getTcDelegationId, "=", delegationId));
|
||||
if (ObjectUtil.isEmpty(sys_user_role)) {
|
||||
throw new BaseException("您所在的代表团没有设置团长,无法流转到下一步,请联系管理员进行设置。");
|
||||
}
|
||||
Sys_user sys_user = dao().fetch(Sys_user.class, sys_user_role.getUserId());
|
||||
if (ObjectUtil.isEmpty(sys_user)) {
|
||||
throw new BaseException("您所在的代表团没有设置团长,无法流转到下一步,请联系管理员进行设置。");
|
||||
}
|
||||
return sys_user.getLoginname();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCommitteeDirectorByProposalId(String proposalId) {
|
||||
ProposalInfo proposalInfo = dao().fetch(ProposalInfo.class, proposalId);
|
||||
String sessionId = proposalInfo.getSessionId();
|
||||
Sys_role sys_role = sysRoleService.getByCode(RoleConstant.PROPOSAL_COMMITTEE_DIRECTOR);
|
||||
Sys_user_role sys_user_role = dao().fetch(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", sys_role.getId()).and(Sys_user_role::getTcSessionId, "=", sessionId));
|
||||
if (ObjectUtil.isEmpty(sys_user_role)) {
|
||||
// throw new BaseException("本届教代会没有设置提案委员会主任,请联系管理员进行设置。");
|
||||
return "";
|
||||
}
|
||||
Sys_user sys_user = dao().fetch(Sys_user.class, sys_user_role.getUserId());
|
||||
if (ObjectUtil.isEmpty(sys_user)) {
|
||||
// throw new BaseException("本届教代会没有设置提案委员会主任,请联系管理员进行设置。");
|
||||
return "";
|
||||
}
|
||||
return sys_user.getLoginname();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getSelfManageDelegationIds() {
|
||||
Sys_role role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD.name());
|
||||
List<Sys_user_role> sysUserRoles = dao().query(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", role.getId())
|
||||
.and(Sys_user_role::getUserId, "=", SecurityUtil.getUserId()));
|
||||
List<String> delegationIds = sysUserRoles.stream()
|
||||
.map(Sys_user_role::getTcDelegationId)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.toList();
|
||||
return delegationIds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getConsolidation(String id) {
|
||||
ProposalConsolidation consolidation = dao().fetch(ProposalConsolidation.class, Cnd.where(new Static("JSON_CONTAINS(consolidationIds,'\"" + id + "\"')")));
|
||||
if (ObjectUtil.isNotEmpty(consolidation)) {
|
||||
return consolidation.getConsolidationIds();
|
||||
}
|
||||
return List.of(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportYearReport(String sessionId, HttpServletResponse response) {
|
||||
HashMap<String, Object> docData = new HashMap<>();
|
||||
|
||||
Teacher_congress_session session = dao().fetch(Teacher_congress_session.class, sessionId);
|
||||
docData.put("sessionName", session.getFullName());
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
info.caseFilingResult,
|
||||
type.`name` typeName
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_type type ON type.id = info.typeId
|
||||
WHERE info.sessionId = @sessionId
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
List<NutMap> list = listMap(sql);
|
||||
|
||||
|
||||
//提案数量
|
||||
docData.put("sum", list.size());
|
||||
//提案类型
|
||||
docData.put("typeNames", list.stream().filter(v -> StrUtil.isNotBlank(v.getString("typeName"))).map(v -> v.getString("typeName")).distinct().collect(Collectors.joining(",")));
|
||||
//立案
|
||||
docData.put("caseFilingSum", list.stream().filter(v -> StrUtil.isNotBlank(v.getString("caseFilingResult")) && v.getString("caseFilingResult").equals("CONFIRM_FILING")).count());
|
||||
//作为意见
|
||||
docData.put("opinionSum", list.stream().filter(v -> StrUtil.isNotBlank(v.getString("caseFilingResult")) && v.getString("caseFilingResult").equals("SUGGESTION")).count());
|
||||
//不予立案
|
||||
docData.put("notCaseFilingSum", list.stream().filter(v -> StrUtil.isNotBlank(v.getString("caseFilingResult")) && v.getString("caseFilingResult").equals("NOT")).count());
|
||||
|
||||
Set<String> underTakeNames = new HashSet<>();
|
||||
|
||||
Sql caseUnitSql = Sqls.create("""
|
||||
SELECT
|
||||
task.extVariable
|
||||
FROM
|
||||
bpm_process_task task
|
||||
INNER JOIN ( SELECT processInstanceId, MAX( endOn ) AS maxEndOn FROM bpm_process_task WHERE processTaskNodeCode = 70 AND taskStatus = 'COMPLETE' GROUP BY processInstanceId ) latestTask ON task.processInstanceId = latestTask.processInstanceId\s
|
||||
AND task.endOn = latestTask.maxEndOn
|
||||
LEFT JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
|
||||
WHERE
|
||||
inst.processInstanceBusinessId IN (@businessIds)
|
||||
""");
|
||||
caseUnitSql.setParam("businessIds", list.stream().map(v -> v.getString("id")).toList());
|
||||
List<NutMap> caseUnitList = listMap(caseUnitSql);
|
||||
for (NutMap v : caseUnitList) {
|
||||
JSONObject extVariable = Json.fromJson(JSONObject.class, v.getString("extVariable"));
|
||||
String hostUnitName = extVariable.getStr("hostUnit");
|
||||
List<String> helpUnitNames = extVariable.getBeanList("helpUnits", String.class);
|
||||
underTakeNames.add(hostUnitName);
|
||||
underTakeNames.addAll(helpUnitNames);
|
||||
}
|
||||
|
||||
//承办单位数量
|
||||
docData.put("underTakeNum", underTakeNames.size());
|
||||
//承办单位名称
|
||||
docData.put("underTakeNames", String.join(",", underTakeNames));
|
||||
|
||||
//提案办理的详细情况
|
||||
Sql transactSql = Sqls.create("""
|
||||
SELECT
|
||||
concat( type.`name`, '(', type.CODE, ')' ) AS typeName,
|
||||
count( info.id ) AS sum,
|
||||
count(case when info.caseFilingResult = 'CONFIRM_FILING' then info.id end) confirmFilingCount,
|
||||
count(case when info.caseFilingResult = 'SUGGESTION' then info.id end) suggestionCount,
|
||||
count(case when info.caseFilingResult = 'NOT' then info.id end) notCount
|
||||
FROM
|
||||
proposal_type type
|
||||
LEFT JOIN proposal_info info ON info.typeId = type.id
|
||||
AND info.sessionId = @sessionId
|
||||
GROUP BY
|
||||
type.id
|
||||
ORDER BY
|
||||
type.CODE
|
||||
""");
|
||||
transactSql.setParam("sessionId", sessionId);
|
||||
List<NutMap> transactList = listMap(transactSql);
|
||||
|
||||
int sum = transactList.stream().mapToInt(v -> v.getInt("sum")).sum();
|
||||
docData.put("transactSum", sum);
|
||||
docData.put("transactConfirmFilingSum", transactList.stream().mapToInt(v -> v.getInt("confirmFilingCount")).sum());
|
||||
docData.put("transactSuggestionSum", transactList.stream().mapToInt(v -> v.getInt("suggestionCount")).sum());
|
||||
docData.put("transactNotSum", transactList.stream().mapToInt(v -> v.getInt("notCount")).sum());
|
||||
|
||||
|
||||
for (int i = 0; i < transactList.size(); i++) {
|
||||
NutMap v = transactList.get(i);
|
||||
v.setv("index", i + 1);
|
||||
v.setv("ratio", NumberUtil.decimalFormat("#.##%", v.getInt("sum") / sum));
|
||||
}
|
||||
|
||||
docData.put("transacts", transactList);
|
||||
|
||||
//下届教代会信息
|
||||
Teacher_congress_session nextSession = dao().fetch(Teacher_congress_session.class, Cnd.where(Teacher_congress_session::getStartDate, ">", session.getStartDate()).asc(Teacher_congress_session::getStartDate));
|
||||
if (ObjectUtil.isNotEmpty(nextSession)) {
|
||||
docData.put("newSessionYear", nextSession.getStartDate().getYear());
|
||||
docData.put("newSessionMonth", nextSession.getStartDate().getMonth());
|
||||
docData.put("newSessionDay", nextSession.getStartDate().getMonth());
|
||||
docData.put("newSessionName", nextSession.getFullName());
|
||||
docData.put("currentMonth", DateUtil.thisMonth());
|
||||
|
||||
Sql newSessionSql = Sqls.create("""
|
||||
SELECT
|
||||
concat( type.`name`, '(', type.CODE, ')' ) AS typeName,
|
||||
count( info.id ) AS count
|
||||
FROM
|
||||
proposal_type type
|
||||
LEFT JOIN proposal_info info ON info.typeId = type.id
|
||||
AND info.sessionId = @newSessionId
|
||||
GROUP BY
|
||||
type.id
|
||||
ORDER BY
|
||||
type.CODE
|
||||
""");
|
||||
newSessionSql.setParam("newSessionId", nextSession.getId());
|
||||
List<NutMap> newSessionProposals = listMap(sql);
|
||||
docData.put("newSum", newSessionProposals.stream().mapToInt(v -> v.getInt("count", 0)).sum());
|
||||
|
||||
docData.put("newTypesSummary", newSessionProposals.stream()
|
||||
.map(proposal -> proposal.getString("typeName") + ": " + proposal.getInt("count") + "条")
|
||||
.collect(Collectors.joining(",")));
|
||||
docData.put("newTypeNames", newSessionProposals.stream()
|
||||
.map(proposal -> proposal.getString("typeName"))
|
||||
.collect(Collectors.joining(",")));
|
||||
}
|
||||
|
||||
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
|
||||
Configure config = Configure.builder().bind("transacts", policy).build();
|
||||
|
||||
|
||||
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
|
||||
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposalYearReport"), config).render(docData).write(byteArrayOutputStream);
|
||||
CommonDownloadUtil.download(session.getFullName() + "提案报告.docx", byteArrayOutputStream.toByteArray(), response);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+196
@@ -0,0 +1,196 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.bpm.dto.BpmAssignmentDto;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
import com.budwk.app.bpm.models.BpmProcessInstance;
|
||||
import com.budwk.app.bpm.models.BpmProcessTask;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.sys.models.Sys_user_role;
|
||||
import com.budwk.app.sys.services.SysMsgService;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConsolidation;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalCommitteeFilingApprovalParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalCommitteeFilingService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
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 java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class ProposalCommitteeFilingServiceImpl extends BaseServiceImpl<ProposalInfo> implements ProposalCommitteeFilingService {
|
||||
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private SysMsgService sysMsgService;
|
||||
|
||||
public ProposalCommitteeFilingServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void approval(ProposalCommitteeFilingApprovalParam approvalParam) {
|
||||
approvalParam.getBpmTaskApprovalTypeEnum();
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
variables.put("proposalIds", approvalParam.getProposalIds());
|
||||
variables.put("hostUnitId", approvalParam.getHostUnitId());
|
||||
variables.put("helpUnitIds", approvalParam.getHelpUnitIds());
|
||||
variables.put("caseFilingResult", approvalParam.getCaseFilingResult());
|
||||
variables.put("consolidationIds", approvalParam.getProposalIds());
|
||||
|
||||
ProposalUndertake hostUnit = null;
|
||||
List<ProposalUndertake> helpUnits = null;
|
||||
//承办单位答复人初步阅览
|
||||
List<BpmAssignmentDto> nextApprovals = new ArrayList<>();
|
||||
|
||||
if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.DYNAMIC)) {
|
||||
if (List.of("CONFIRM_FILING", "SUGGESTION").contains(approvalParam.getCaseFilingResult())) {
|
||||
hostUnit = dao().fetch(ProposalUndertake.class, approvalParam.getHostUnitId());
|
||||
helpUnits = dao().query(ProposalUndertake.class, Cnd.where(ProposalUndertake::getId, "in", approvalParam.getHelpUnitIds()));
|
||||
variables.put("hostUnit", hostUnit.getName());
|
||||
variables.put("helpUnits", helpUnits.stream().map(ProposalUndertake::getName).toArray(String[]::new));
|
||||
|
||||
List<JSONObject> units = new ArrayList<>();
|
||||
units.add(new JSONObject()
|
||||
.set("isMaster",true)
|
||||
.set("underTakeId", hostUnit.getId())
|
||||
.set("underTakeName", hostUnit.getName())
|
||||
.set("underTakeCode", hostUnit.getCode())
|
||||
);
|
||||
|
||||
if(ObjectUtil.isNotEmpty(helpUnits)){
|
||||
for (ProposalUndertake helpUnit : helpUnits) {
|
||||
units.add(new JSONObject()
|
||||
.set("isMaster",false)
|
||||
.set("underTakeId", helpUnit.getId())
|
||||
.set("underTakeName", helpUnit.getName())
|
||||
.set("underTakeCode", helpUnit.getCode())
|
||||
);
|
||||
}
|
||||
}
|
||||
variables.put("units",units);
|
||||
}
|
||||
|
||||
//并案审核
|
||||
if (approvalParam.getProposalIds().length > 1) {
|
||||
ProposalConsolidation proposalConsolidation = new ProposalConsolidation();
|
||||
proposalConsolidation.setConsolidationIds(Arrays.asList(approvalParam.getProposalIds()));
|
||||
dao().insert(proposalConsolidation);
|
||||
}
|
||||
|
||||
//立案和作为意见会有承办单位
|
||||
if (approvalParam.getCaseFilingResult().equals("CONFIRM_FILING") || approvalParam.getCaseFilingResult().equals("SUGGESTION")) {
|
||||
List<ProposalUndertake> units = new ArrayList<>();
|
||||
units.add(hostUnit);
|
||||
if (ObjectUtil.isNotNull(helpUnits)) {
|
||||
units.addAll(helpUnits);
|
||||
}
|
||||
for (ProposalUndertake unit : units) {
|
||||
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.PROPOSAL_UNIT_LEADER, Cnd.where(Sys_user_role::getUnderTakeId, "=", unit.getId()));
|
||||
if (StrUtil.isBlank(approvalLoginName)) {
|
||||
throw new BaseException("{}答复人没有配置,请到承办单位管理页面设置!", unit.getName());
|
||||
}
|
||||
|
||||
assert hostUnit != null;
|
||||
nextApprovals.add(new BpmAssignmentDto()
|
||||
.setLoginName(approvalLoginName)
|
||||
.setJsonObject(new JSONObject()
|
||||
.set("isMaster", hostUnit.getId().equals(unit.getId()))
|
||||
.set("underTakeId", unit.getId())
|
||||
.set("underTakeName", unit.getName())
|
||||
.set("underTakeCode", unit.getCode())
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//下一个审批人
|
||||
String nextApprovalLoginName = proposalCommonService.getCommitteeDirectorByProposalId(approvalParam.getProcessInstanceBusinessId());
|
||||
|
||||
//提交并案
|
||||
for (String consolidationProposalId : approvalParam.getProposalIds()) {
|
||||
BpmProcessInstance instance = dao().fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", consolidationProposalId));
|
||||
// bpmService.completeTaskWithNextTaskVariable(instance.getProcessInstanceTaskIds().get(0), approvalParam.getBpmTaskApprovalTypeEnum(), variables, nextApprovals);
|
||||
bpmService.completeTask(instance.getProcessInstanceTaskIds().get(0), approvalParam.getBpmTaskApprovalTypeEnum(), variables, List.of(nextApprovalLoginName));
|
||||
}
|
||||
|
||||
//修改提案立案结果
|
||||
dao().update(ProposalInfo.class, Chain.make("caseFilingResult", approvalParam.getCaseFilingResult()), Cnd.where(ProposalInfo::getId, "in", approvalParam.getProposalIds()));
|
||||
|
||||
List<ProposalInfo> proposalInfos = dao().query(ProposalInfo.class, Cnd.where(ProposalInfo::getId, "in", approvalParam.getProposalIds()));
|
||||
for (ProposalInfo proposalInfo : proposalInfos) {
|
||||
//给代表发送消息
|
||||
if("CONFIRM_FILING".equals(approvalParam.getCaseFilingResult())){
|
||||
String template = "{}代表您好!您的提案《{}》提案委员会已立案审核,审核结果为准予立案,您可登陆智慧校园下的暖心工会查看详情。";
|
||||
String content = StrUtil.format(template, proposalInfo.getCreateUserName(), proposalInfo.getName());
|
||||
sysMsgService.sendMsg(proposalInfo.getCreateUserLoginName(), "提案委员会立案审核", content, SecurityUtil.getUserId());
|
||||
}else if("SUGGESTION".equals(approvalParam.getCaseFilingResult())){
|
||||
|
||||
}else if("NOT".equals(approvalParam.getCaseFilingResult())){
|
||||
String template = "{}代表您好!您的提案《{}》提案委员会已立案审核,审核结果为不予立案,您可登陆智慧校园下的暖心工会查看详情。";
|
||||
String content = StrUtil.format(template, proposalInfo.getCreateUserName(), proposalInfo.getName());
|
||||
sysMsgService.sendMsg(proposalInfo.getCreateUserLoginName(), "提案委员会立案审核", content, SecurityUtil.getUserId());
|
||||
}
|
||||
|
||||
//给承办单位发送消息
|
||||
if("CONFIRM_FILING".equals(approvalParam.getCaseFilingResult())){
|
||||
for (BpmAssignmentDto nextApproval : nextApprovals) {
|
||||
String template = "经提案委员会立案审核,提案《{}》由{}作为{}单位,您可登陆智慧校园下的暖心工会查看详情,感谢您对教代会提案工作的大力支持!。";
|
||||
String underTakeName = nextApproval.getJsonObject().getStr("underTakeName");
|
||||
Boolean isMaster = nextApproval.getJsonObject().getBool("isMaster", false);
|
||||
String content = StrUtil.format(template, proposalInfo.getName(), underTakeName,isMaster?"主办":"协办");
|
||||
sysMsgService.sendMsg(nextApproval.getLoginName(), "承办单位初步意见", content, SecurityUtil.getUserId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void revoke(String taskId) {
|
||||
BpmProcessTask task = dao().fetch(BpmProcessTask.class, taskId);
|
||||
String instanceId = task.getProcessInstanceId();
|
||||
BpmProcessInstance instance = dao().fetch(BpmProcessInstance.class, instanceId);
|
||||
String instanceBusinessId = instance.getProcessInstanceBusinessId();
|
||||
List<String> consolidationIds = proposalCommonService.getConsolidation(instanceBusinessId);
|
||||
for (String consolidationId : consolidationIds) {
|
||||
BpmProcessInstance consolidationProposalInstance = dao().fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", consolidationId));
|
||||
if (ObjectUtil.isNotEmpty(consolidationProposalInstance.getProcessInstanceTaskIds())) {
|
||||
//还有待处理的任务 那么走的就是确定立案
|
||||
String activeTaskId = consolidationProposalInstance.getProcessInstanceTaskIds().get(0);
|
||||
BpmProcessTask activeTask = dao().fetch(BpmProcessTask.class, Cnd.where(BpmProcessTask::getId, "=", activeTaskId));
|
||||
bpmService.revokeTask(activeTask.getPrevTaskId());
|
||||
}else{
|
||||
//不予立案后撤回
|
||||
bpmService.revokeTask(taskId);
|
||||
}
|
||||
}
|
||||
dao().update(ProposalInfo.class, Chain.make("caseFilingResult", null), Cnd.where(ProposalInfo::getId, "in", consolidationIds));
|
||||
dao().clear(ProposalConsolidation.class, Cnd.where(new Static("JSON_CONTAINS(consolidationIds,'\"" + instanceBusinessId + "\"')")));
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user