..
This commit is contained in:
+1
-1
@@ -114,7 +114,7 @@ public class ProposalConfigUnitController {
|
||||
@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<Sys_unit> sysUnits = dao.query(Sys_unit.class, Cnd.where(Sys_unit::getUnitcode, "not in", sql).and(Sys_unit::getUnitTypeCode, "=", 1));
|
||||
List<ProposalUndertake> proposalUndertakes = sysUnits.stream().map(unit -> {
|
||||
ProposalUndertake proposalUndertake = new ProposalUndertake();
|
||||
proposalUndertake.setCode(unit.getUnitcode());
|
||||
|
||||
+3
-4
@@ -133,8 +133,8 @@ public class ProposalDashboardController {
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId,
|
||||
t.displayName curTaskName,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
||||
caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 1 THEN pru.unitName END) AS masterUnitName,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
@@ -143,8 +143,7 @@ public class ProposalDashboardController {
|
||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
|
||||
LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id
|
||||
LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime
|
||||
LEFT JOIN proposal_reply_unit pru ON pru.proposalId = info.id
|
||||
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
|
||||
$condition
|
||||
""");
|
||||
|
||||
+4
-15
@@ -21,22 +21,12 @@ 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;
|
||||
|
||||
@@ -62,8 +52,8 @@ public class ProposalExportComprehensiveController {
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId,
|
||||
t.displayName curTaskName,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
||||
caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 1 THEN pru.unitName END) AS masterUnitName,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
@@ -72,16 +62,15 @@ public class ProposalExportComprehensiveController {
|
||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
|
||||
LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id
|
||||
LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime
|
||||
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
|
||||
LEFT JOIN proposal_reply_unit pru ON pru.proposalId = 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);
|
||||
Pagination pagination = proposalExportService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
+3
-4
@@ -59,8 +59,8 @@ public class ProposalQueryComprehensiveController {
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId,
|
||||
t.displayName curTaskName,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
||||
caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 1 THEN pru.unitName END) AS masterUnitName,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
@@ -69,9 +69,8 @@ public class ProposalQueryComprehensiveController {
|
||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
|
||||
LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id
|
||||
LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime
|
||||
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
|
||||
LEFT JOIN proposal_reply_unit pru ON pru.proposalId = info.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
+3
-4
@@ -52,8 +52,8 @@ public class ProposalQueryHistoryController {
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId,
|
||||
t.displayName curTaskName,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
||||
caseTasks.variable->>'$.tf_helpUnitNameStr' AS slaveUnitNames
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 1 THEN pru.unitName END) AS masterUnitName,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
@@ -62,9 +62,8 @@ public class ProposalQueryHistoryController {
|
||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
|
||||
LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id
|
||||
LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime
|
||||
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
|
||||
LEFT JOIN proposal_reply_unit pru ON pru.proposalId = info.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
+73
-96
@@ -2,26 +2,24 @@ 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.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.engine.util.FlowUtil;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
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.models.ProposalConfig;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalReplyUnit;
|
||||
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.json.Json;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -47,111 +45,90 @@ public class ProposalQueryUnitReplyController {
|
||||
@At
|
||||
@SaCheckPermission("proposal.query.unitReply")
|
||||
public Result data(String sessionId, String undertakeUnitId) {
|
||||
List<ProposalInfo> infos = dao.query(ProposalInfo.class, Cnd.where(ProposalInfo::getSessionId, "=", sessionId));
|
||||
List<String> infoIds = infos.stream().map(v -> v.getId()).toList();
|
||||
List<ProcessInstance> instances = dao.query(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "in", infoIds));
|
||||
List<Long> instIds = instances.stream().map(v -> v.getId()).toList();
|
||||
// 提案配置 协办是否需要答复
|
||||
ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW());
|
||||
boolean slaveNeedReply = proposalConfig.getSlaveUnitNeedReply();
|
||||
|
||||
// 立案任务记录
|
||||
List<ProcessTask> caseTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode())
|
||||
.and(ProcessTask::getTaskName, "=", "9846ab38-40c5-4093-bafc-a9b3b443338b"));
|
||||
// 当前届次所有的提案ID
|
||||
Sql sql = Sqls.create("select id from proposal_info where sessionId = @sessionId").setParam("sessionId", sessionId);
|
||||
sql.setCallback(Sqls.callback.strList());
|
||||
dao.execute(sql);
|
||||
List<String> proposalIds = sql.getList(String.class);
|
||||
|
||||
// 主办任务记录
|
||||
List<ProcessTask> masterUnitTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.DOING.getCode()))
|
||||
.and(ProcessTask::getTaskName, "in", List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "5ed5a1be-0cd3-4b47-a0d5-238d53b61f34")));
|
||||
|
||||
// 协办任务记录
|
||||
List<ProcessTask> slaveUnitTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.DOING.getCode()))
|
||||
.and(ProcessTask::getTaskName, "=", "c9a1586e-272b-41b8-b438-0be9f9e3781d"));
|
||||
if(proposalIds.isEmpty()){
|
||||
return Result.success().addData(Map.of("tableData", Collections.EMPTY_LIST, "slaveNeedReply", slaveNeedReply));
|
||||
}
|
||||
|
||||
|
||||
//该届次所有涉及到的承办单位
|
||||
List<String> underTakeIds = caseTasks.stream().map(v -> {
|
||||
NutMap variable = Json.fromJson(NutMap.class, v.getVariable());
|
||||
String hostUnitId = variable.getString("tf_hostUnitId");
|
||||
List<String> helpUnitIds = variable.getAsList("tf_helpUnitIds", String.class);
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add(hostUnitId);
|
||||
list.addAll(helpUnitIds);
|
||||
return list;
|
||||
})
|
||||
.flatMap(List::stream)
|
||||
.distinct()
|
||||
.toList();
|
||||
// 关联所有的实例ID
|
||||
Sql instSql = Sqls.create("select id from wf_process_instance where businessNo in (@proposalIds)");
|
||||
instSql.setParam("proposalIds", proposalIds);
|
||||
instSql.setCallback(Sqls.callback.strList());
|
||||
dao.execute(instSql);
|
||||
List<String> instIds = instSql.getList(String.class);
|
||||
|
||||
// 提案委员会立案分配的承办单位
|
||||
Cnd cnd = Cnd.where(ProposalReplyUnit::getProposalId, "in", proposalIds);
|
||||
cnd.andEX(ProposalReplyUnit::getUnitId, "=", undertakeUnitId);
|
||||
List<ProposalReplyUnit> replyUnits = dao.query(ProposalReplyUnit.class, cnd);
|
||||
|
||||
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<ProcessTask> replyTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds).and(ProcessTask::getTaskName, "in", List.of("master_reply", "slave_reply", "opinion_master_reply")).and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.DOING.getCode())));
|
||||
|
||||
// 承办单位
|
||||
List<NutMap> tableData = new ArrayList<>();
|
||||
|
||||
for (String underTakeId : underTakeIds) {
|
||||
replyUnits.stream().collect(Collectors.groupingBy(ProposalReplyUnit::getUnitCode)).forEach((k, v) -> {
|
||||
NutMap tableRow = NutMap.NEW();
|
||||
tableRow.put("id", underTakeId);
|
||||
if(undertakeMap.get(underTakeId) == null){
|
||||
continue;
|
||||
}
|
||||
tableRow.put("name", undertakeMap.get(underTakeId).getName());
|
||||
tableRow.put("id", k);
|
||||
v.stream().findAny().ifPresent(item -> {
|
||||
tableRow.put("unitName", item.getUnitName());
|
||||
tableRow.put("unitCode", item.getUnitCode());
|
||||
});
|
||||
|
||||
//找出承办提案总数
|
||||
long sum = caseTasks.stream()
|
||||
.filter(v -> {
|
||||
NutMap variable = Json.fromJson(NutMap.class, v.getVariable());
|
||||
if (variable == null) {
|
||||
return false;
|
||||
}
|
||||
// 提案总数
|
||||
tableRow.put("sum", v.size());
|
||||
// 主办提案数
|
||||
tableRow.put("masterSum", v.stream().filter(unit -> Objects.equals(unit.getUnitCode(), k) && unit.getIsMaster()).count());
|
||||
// 协办提案数
|
||||
tableRow.put("slaveSum", v.stream().filter(unit -> Objects.equals(unit.getUnitCode(), k) && !unit.getIsMaster()).count());
|
||||
|
||||
String hostUnitId = variable.getString("tf_hostUnitId");
|
||||
List<String> helpUnitIds = variable.getAsList("tf_helpUnitIds", String.class);
|
||||
// 主办提案已答复数
|
||||
long masterReplySum = replyTasks.stream().filter(x ->
|
||||
FlowUtil.variableToNutMap(x.getVariable()).getString("underTakeId", "").equals(k)
|
||||
&& FlowUtil.variableToNutMap(x.getVariable()).getBoolean("underTakeIsMaster")
|
||||
&& x.getTaskState().equals(ProcessTaskStateEnum.FINISHED.getCode())
|
||||
).map(ProcessTask::getProcessInstanceId).distinct().count();
|
||||
|
||||
boolean isHost = underTakeId != null && underTakeId.equals(hostUnitId);
|
||||
boolean isHelper = helpUnitIds != null && helpUnitIds.contains(underTakeId);
|
||||
// 主办提案未答复数
|
||||
long masterNoReplySum = replyTasks.stream().filter(x ->
|
||||
FlowUtil.variableToNutMap(x.getVariable()).getString("underTakeId", "").equals(k)
|
||||
&& FlowUtil.variableToNutMap(x.getVariable()).getBoolean("underTakeIsMaster")
|
||||
&& x.getTaskState().equals(ProcessTaskStateEnum.DOING.getCode())
|
||||
).map(ProcessTask::getProcessInstanceId).distinct().count();
|
||||
|
||||
return isHost || isHelper;
|
||||
})
|
||||
.map(ProcessTask::getProcessInstanceId)
|
||||
.distinct()
|
||||
.count();
|
||||
// 协办提案已答复数
|
||||
long slaveReplySum = replyTasks.stream().filter(x ->
|
||||
FlowUtil.variableToNutMap(x.getVariable()).getString("underTakeId", "").equals(k)
|
||||
&& !FlowUtil.variableToNutMap(x.getVariable()).getBoolean("underTakeIsMaster")
|
||||
&& x.getTaskState().equals(ProcessTaskStateEnum.FINISHED.getCode())
|
||||
).map(ProcessTask::getProcessInstanceId).distinct().count();
|
||||
|
||||
// 主办提案数量
|
||||
long hostSum = masterUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count();
|
||||
// 主办已答复的数量
|
||||
long hostReplySum = masterUnitTasks.stream().filter(v -> Objects.equals(v.getTaskState(), ProcessTaskStateEnum.FINISHED.getCode())).map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count();
|
||||
// 主办未答复的数量
|
||||
long hostNoReplySum = hostSum - hostReplySum;
|
||||
// 协办提案未答复数
|
||||
long slaveNoReplySum = replyTasks.stream().filter(x ->
|
||||
FlowUtil.variableToNutMap(x.getVariable()).getString("underTakeId", "").equals(k)
|
||||
&& !FlowUtil.variableToNutMap(x.getVariable()).getBoolean("underTakeIsMaster")
|
||||
&& x.getTaskState().equals(ProcessTaskStateEnum.DOING.getCode())
|
||||
).map(ProcessTask::getProcessInstanceId).distinct().count();
|
||||
|
||||
tableRow.put("masterReplySum", masterReplySum);
|
||||
tableRow.put("masterNoReplySum", masterNoReplySum);
|
||||
tableRow.put("slaveReplySum", slaveReplySum);
|
||||
tableRow.put("slaveNoReplySum", slaveNoReplySum);
|
||||
|
||||
// 协办提案数量
|
||||
long slaveSum = slaveUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && !variable.getBoolean("isMaster")).count();
|
||||
|
||||
tableRow.put("sum", sum);
|
||||
tableRow.put("hostSum", hostSum);
|
||||
tableRow.put("hostReplySum", hostReplySum);
|
||||
tableRow.put("hostNoReplySum", hostNoReplySum);
|
||||
tableRow.put("slaveSum", slaveSum);
|
||||
|
||||
// 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", false));
|
||||
});
|
||||
|
||||
return Result.success().addData(Map.of("tableData", tableData, "slaveNeedReply", slaveNeedReply));
|
||||
}
|
||||
}
|
||||
|
||||
+12
-23
@@ -29,8 +29,6 @@ import javax.validation.Valid;
|
||||
@Api(tags = "提案年度报告")
|
||||
public class ProposalQueryYearReportController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
|
||||
@@ -51,13 +49,14 @@ public class ProposalQueryYearReportController {
|
||||
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
|
||||
ins.id AS instanceId,
|
||||
ins.businessNo,
|
||||
ins.state instanceState,
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId,
|
||||
t.displayName curTaskName,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 1 THEN pru.unitName END) AS masterUnitName,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN pru.isMaster = 0 THEN pru.unitName END) AS slaveUnitNames
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
@@ -65,26 +64,16 @@ public class ProposalQueryYearReportController {
|
||||
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
|
||||
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 proposal_reply_unit pru ON pru.proposalId = 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);
|
||||
Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(),sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
+67
-93
@@ -2,26 +2,26 @@ 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.flow.engine.util.FlowUtil;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.sys.models.Sys_dict;
|
||||
import com.budwk.app.sys.services.SysDictService;
|
||||
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.models.ProposalConfig;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalReplyUnit;
|
||||
import io.swagger.annotations.Api;
|
||||
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.json.Json;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean
|
||||
@@ -44,98 +44,72 @@ public class ProposalUnderTakeSatisfactionController {
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.query.underTake.satisfaction")
|
||||
public Result data(String sessionId){
|
||||
List<ProposalInfo> infos = dao.query(ProposalInfo.class, Cnd.where(ProposalInfo::getSessionId, "=", sessionId));
|
||||
List<String> infoIds = infos.stream().map(v -> v.getId()).toList();
|
||||
List<ProcessInstance> instances = dao.query(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "in", infoIds));
|
||||
List<Long> instIds = instances.stream().map(v -> v.getId()).toList();
|
||||
public Result data(String sessionId, String undertakeUnitId) {
|
||||
List<Sys_dict> feedbackCodes = sysDictService.getSubListByCode("PROPOSAL_FEEDBACK");
|
||||
|
||||
// 立案任务记录
|
||||
List<ProcessTask> caseTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode())
|
||||
.and(ProcessTask::getTaskName, "=", "9846ab38-40c5-4093-bafc-a9b3b443338b"));
|
||||
|
||||
// 主办任务记录
|
||||
List<ProcessTask> masterUnitTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.DOING.getCode()))
|
||||
.and(ProcessTask::getTaskName, "in", List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "5ed5a1be-0cd3-4b47-a0d5-238d53b61f34")));
|
||||
|
||||
// 协办任务记录
|
||||
List<ProcessTask> slaveUnitTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.DOING.getCode()))
|
||||
.and(ProcessTask::getTaskName, "=", "c9a1586e-272b-41b8-b438-0be9f9e3781d"));
|
||||
|
||||
|
||||
// 所有承办单位任务记录
|
||||
List<ProcessTask> allUnitTasks = new ArrayList<>();
|
||||
allUnitTasks.addAll(masterUnitTasks);
|
||||
allUnitTasks.addAll(slaveUnitTasks);
|
||||
|
||||
|
||||
//该届次所有涉及到的承办单位
|
||||
List<String> underTakeIds = caseTasks.stream().map(v -> {
|
||||
NutMap variable = Json.fromJson(NutMap.class, v.getVariable());
|
||||
String hostUnitId = variable.getString("tf_hostUnitId");
|
||||
List<String> helpUnitIds = variable.getAsList("tf_helpUnitIds", String.class);
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add(hostUnitId);
|
||||
list.addAll(helpUnitIds);
|
||||
return list;
|
||||
})
|
||||
.flatMap(List::stream)
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
|
||||
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<NutMap> tableData = new ArrayList<>();
|
||||
|
||||
// 反馈评分
|
||||
List<Sys_dict> proposalFeedback = sysDictService.getSubListByCode("PROPOSAL_FEEDBACK");
|
||||
|
||||
for (String underTakeId : underTakeIds) {
|
||||
NutMap tableRow = NutMap.NEW();
|
||||
tableRow.put("id", underTakeId);
|
||||
if (undertakeMap.get(underTakeId) == null) {
|
||||
continue;
|
||||
}
|
||||
tableRow.put("name", undertakeMap.get(underTakeId).getName());
|
||||
|
||||
//找出承办提案总数
|
||||
long sum = caseTasks.stream()
|
||||
.filter(v -> {
|
||||
NutMap variable = Json.fromJson(NutMap.class, v.getVariable());
|
||||
if (variable == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
String hostUnitId = variable.getString("tf_hostUnitId");
|
||||
List<String> helpUnitIds = variable.getAsList("tf_helpUnitIds", String.class);
|
||||
|
||||
boolean isHost = underTakeId != null && underTakeId.equals(hostUnitId);
|
||||
boolean isHelper = helpUnitIds != null && helpUnitIds.contains(underTakeId);
|
||||
|
||||
return isHost || isHelper;
|
||||
})
|
||||
.map(ProcessTask::getProcessInstanceId)
|
||||
.distinct()
|
||||
.count();
|
||||
|
||||
// 主办提案数量
|
||||
long hostSum = masterUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && variable.getBoolean("isMaster")).count();
|
||||
|
||||
// 协办提案数量
|
||||
long slaveSum = slaveUnitTasks.stream().map(v -> Json.fromJson(NutMap.class, v.getVariable())).filter(variable -> underTakeId.equals(variable.getString("unitId")) && !variable.getBoolean("isMaster")).count();
|
||||
|
||||
// 满意
|
||||
// allUnitTasks
|
||||
// 当前届次所有的提案ID
|
||||
Sql sql = Sqls.create("select id from proposal_info where sessionId = @sessionId").setParam("sessionId", sessionId);
|
||||
sql.setCallback(Sqls.callback.strList());
|
||||
dao.execute(sql);
|
||||
List<String> proposalIds = sql.getList(String.class);
|
||||
|
||||
if (proposalIds.isEmpty()) {
|
||||
return Result.success(Collections.EMPTY_LIST);
|
||||
}
|
||||
|
||||
// 关联所有的实例ID
|
||||
Sql instSql = Sqls.create("select id from wf_process_instance where businessNo in (@proposalIds)");
|
||||
instSql.setParam("proposalIds", proposalIds);
|
||||
instSql.setCallback(Sqls.callback.strList());
|
||||
dao.execute(instSql);
|
||||
List<String> instIds = instSql.getList(String.class);
|
||||
|
||||
return Result.success();
|
||||
// 提案委员会立案分配的承办单位
|
||||
Cnd cnd = Cnd.where(ProposalReplyUnit::getProposalId, "in", proposalIds);
|
||||
cnd.andEX(ProposalReplyUnit::getUnitId, "=", undertakeUnitId);
|
||||
List<ProposalReplyUnit> replyUnits = dao.query(ProposalReplyUnit.class, cnd);
|
||||
|
||||
// 反馈评分记录
|
||||
// List<ProcessTask> feedbackTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds)
|
||||
// .and(ProcessTask::getTaskName, "=", "feedback")
|
||||
// .and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode()));
|
||||
|
||||
// 承办单位
|
||||
List<NutMap> tableData = new ArrayList<>();
|
||||
|
||||
replyUnits.stream().collect(Collectors.groupingBy(ProposalReplyUnit::getUnitCode)).forEach((k, v) -> {
|
||||
NutMap tableRow = NutMap.NEW();
|
||||
tableRow.put("id", k);
|
||||
v.stream().findAny().ifPresent(item -> {
|
||||
tableRow.put("unitName", item.getUnitName());
|
||||
tableRow.put("unitCode", item.getUnitCode());
|
||||
});
|
||||
|
||||
// 提案总数
|
||||
tableRow.put("sum", v.size());
|
||||
// 主办提案数
|
||||
tableRow.put("masterSum", v.stream().filter(unit -> Objects.equals(unit.getUnitCode(), k) && unit.getIsMaster()).count());
|
||||
// 协办提案数
|
||||
tableRow.put("slaveSum", v.stream().filter(unit -> Objects.equals(unit.getUnitCode(), k) && !unit.getIsMaster()).count());
|
||||
|
||||
// 该单位负责的提案
|
||||
List<String> thisUnitProposalIds = v.stream().map(ProposalReplyUnit::getProposalId).toList();
|
||||
List<ProcessInstance> instances = dao.query(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "in", thisUnitProposalIds));
|
||||
List<Long> thisUnitInstIds = instances.stream().map(ProcessInstance::getId).toList();
|
||||
|
||||
// 反馈评分记录
|
||||
List<ProcessTask> feedbackTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", thisUnitInstIds)
|
||||
.and(ProcessTask::getTaskName, "=", "feedback")
|
||||
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode()));
|
||||
|
||||
for (Sys_dict code : feedbackCodes) {
|
||||
long count = feedbackTasks.stream().filter(task -> FlowUtil.variableToNutMap(task.getVariable()).getString("tf_feedback", "").equals(code.getCode())).map(ProcessTask::getProcessInstanceId).distinct().count();
|
||||
tableRow.put(code.getCode(), count);
|
||||
}
|
||||
tableData.add(tableRow);
|
||||
});
|
||||
|
||||
return Result.success(tableData);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-1
@@ -85,7 +85,9 @@ public class ProposalExpeditingController {
|
||||
IFNULL(GROUP_CONCAT(DISTINCT nt.taskName),'结束') curTaskKey,
|
||||
CASE WHEN t.taskState = 20 AND ( rt.id IS NULL OR rt.taskState = 10 ) THEN 1 ELSE 0 END AS canRevoke,
|
||||
t.variable->>'$.unitName' AS taskUnitName,
|
||||
IF(JSON_EXTRACT(t.variable, '$.isMaster') = true, 1, 0) AS taskIsMaster
|
||||
IF(JSON_EXTRACT(t.variable, '$.isMaster') = true, 1, 0) AS taskIsMaster,
|
||||
ta.actorName,
|
||||
ta.actorAccount
|
||||
FROM
|
||||
wf_process_task t
|
||||
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||
|
||||
-5
@@ -5,13 +5,8 @@ import cn.hutool.core.util.StrUtil;
|
||||
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.flow.engine.FlowEngine;
|
||||
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 com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
||||
import io.swagger.annotations.Api;
|
||||
|
||||
+1
-1
@@ -78,7 +78,7 @@ public class ProposalCommitteeFilingController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "=", "9846ab38-40c5-4093-bafc-a9b3b443338b");
|
||||
cnd.and("t.taskName", "=", "committee");
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
}
|
||||
|
||||
+1
-1
@@ -105,7 +105,7 @@ public class ProposalDelegationController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "=", "93d5ba64-8220-4e62-9783-83422f474b36");
|
||||
cnd.and("t.taskName", "=", "delegation");
|
||||
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
|
||||
+1
-1
@@ -92,7 +92,7 @@ public class ProposalFeedbackEvaluationController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "=", "013a7cf9-20dd-4188-a196-53fd595448e5");
|
||||
cnd.and("t.taskName", "=", "feedback");
|
||||
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
|
||||
+47
-77
@@ -12,7 +12,6 @@ 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.entity.ProcessTaskActor;
|
||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.flow.service.FlowCommonService;
|
||||
@@ -21,6 +20,7 @@ import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInviteSeconderVO;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalSecond;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
||||
import io.swagger.annotations.Api;
|
||||
@@ -42,6 +42,7 @@ import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@@ -123,7 +124,7 @@ public class ProposalMineController {
|
||||
@At
|
||||
@SaCheckPermission("proposal.mine")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result selectOne(@Valid String id){
|
||||
public Result selectOne(@Valid String id) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
@@ -189,22 +190,26 @@ public class ProposalMineController {
|
||||
String delegationId, boolean isInvite) {
|
||||
|
||||
// 查询已经邀请的附议人
|
||||
ProcessInstance processInstance = dao.fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", proposalId));
|
||||
|
||||
// 查询最新一次的邀请附议人任务
|
||||
ProcessTask inviteTask = dao.fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstance.getId())
|
||||
.and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819")
|
||||
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||
.desc(ProcessTask::getCreatedAt));
|
||||
|
||||
List<ProcessTask> taskList = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstance.getId())
|
||||
.and(ProcessTask::getTaskName, "=", "74458b33-ad6e-46c4-b8d9-1aa897142b25")
|
||||
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||
.and(ProcessTask::getId, ">", inviteTask.getId())
|
||||
);
|
||||
List<ProposalSecond> seconds = dao.query(ProposalSecond.class, Cnd.where(ProposalSecond::getProposalId, "=", proposalId));
|
||||
|
||||
|
||||
List<ProcessTaskActor> taskActors = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "in", taskList.stream().map(ProcessTask::getId).toList()));
|
||||
// // 查询已经邀请的附议人
|
||||
// ProcessInstance processInstance = dao.fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", proposalId));
|
||||
//
|
||||
// // 查询最新一次的邀请附议人任务
|
||||
// ProcessTask inviteTask = dao.fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstance.getId())
|
||||
// .and(ProcessTask::getTaskName, "=", "invite")
|
||||
// .and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||
// .desc(ProcessTask::getCreatedAt));
|
||||
//
|
||||
// List<ProcessTask> taskList = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstance.getId())
|
||||
// .and(ProcessTask::getTaskName, "=", "second")
|
||||
// .and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||
// .and(ProcessTask::getId, ">", inviteTask.getId())
|
||||
// );
|
||||
//
|
||||
//
|
||||
// List<ProcessTaskActor> taskActors = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "in", taskList.stream().map(ProcessTask::getId).toList()));
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
@@ -213,6 +218,7 @@ public class ProposalMineController {
|
||||
t1.sex,
|
||||
t1.unitName,
|
||||
t1.unionName,
|
||||
t1.mobile,
|
||||
t2.NAME AS delegationName
|
||||
FROM
|
||||
teacher_congress_delegate t1
|
||||
@@ -225,9 +231,9 @@ public class ProposalMineController {
|
||||
cnd.and("t1.loginName", "!=", SecurityUtil.getUserLoginname());
|
||||
|
||||
if (isInvite) {
|
||||
cnd.and("t1.loginName", "in", taskActors.stream().map(ProcessTaskActor::getActorAccount).toList());
|
||||
cnd.and("t1.loginName", "in", seconds.stream().map(ProposalSecond::getLoginName).toList());
|
||||
} else {
|
||||
cnd.andEX("t1.loginName", "not in", taskActors.stream().map(ProcessTaskActor::getActorAccount).toList());
|
||||
cnd.andEX("t1.loginName", "not in", seconds.stream().map(ProposalSecond::getLoginName).toList());
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
@@ -239,59 +245,6 @@ public class ProposalMineController {
|
||||
sql.setCondition(cnd);
|
||||
Pagination<ProposalInviteSeconderVO> pagination = proposalCommonService.listPageVO(pageForm, sql, ProposalInviteSeconderVO.class);
|
||||
return Result.success(pagination);
|
||||
|
||||
|
||||
// if (isInvite) {
|
||||
// // 先执行条件过滤再手动分页
|
||||
// List<ProposalInviteSeconderVO> pageList = voList;
|
||||
// if (StrUtil.isNotBlank(delegationId)) {
|
||||
// pageList = voList.stream().filter(vo -> vo.getDelegationId().equals(delegationId)).toList();
|
||||
// }
|
||||
// if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
// pageList = voList.stream().filter(vo -> (vo.getLoginName().contains(pageForm.getSearchKeyword()) || vo.getUserName().contains(pageForm.getSearchKeyword()))).toList();
|
||||
// }
|
||||
//
|
||||
// pageList = pageList.stream()
|
||||
// .skip((long) (pageForm.getPageNumber() - 1) * pageForm.getPageSize()).limit(pageForm.getPageSize()).toList();
|
||||
//
|
||||
// Pagination<ProposalInviteSeconderVO> pagination = new Pagination<>();
|
||||
// pagination.setList(pageList);
|
||||
// pagination.setPageNo(pageForm.getPageNumber());
|
||||
// pagination.setPageSize(pageForm.getPageSize());
|
||||
// pagination.setTotalCount(voList.size());
|
||||
// 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", "=", "72e24b5b4c4f4e90a6641e6af8487e42");
|
||||
// cnd.and("t1.loginName", "!=", SecurityUtil.getUserLoginname());
|
||||
// // 过滤到已邀请的附议人
|
||||
// cnd.and("t1.loginName", "not in", voList.stream().map(ProposalInviteSeconderVO::getLoginName).toList());
|
||||
//
|
||||
// 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.setCondition(cnd);
|
||||
// Pagination<ProposalInviteSeconderVO> pagination = proposalCommonService.listPageVO(pageForm, sql, ProposalInviteSeconderVO.class);
|
||||
// return Result.success(pagination);
|
||||
// }
|
||||
}
|
||||
|
||||
@At
|
||||
@@ -304,12 +257,13 @@ public class ProposalMineController {
|
||||
|
||||
// 查询最新一次的邀请附议人任务
|
||||
ProcessTask inviteTask = dao.fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstance.getId())
|
||||
.and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819")
|
||||
.and(ProcessTask::getTaskName, "=", "invite")
|
||||
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||
.desc(ProcessTask::getCreatedAt));
|
||||
|
||||
// 已完成附议的代表
|
||||
List<ProcessTask> taskList = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstance.getId())
|
||||
.and(ProcessTask::getTaskName, "=", "74458b33-ad6e-46c4-b8d9-1aa897142b25")
|
||||
.and(ProcessTask::getTaskName, "=", "second")
|
||||
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||
.and(ProcessTask::getId, ">", inviteTask.getId())
|
||||
);
|
||||
@@ -330,7 +284,7 @@ public class ProposalMineController {
|
||||
t1.sex,
|
||||
t1.unitName,
|
||||
t1.unionName,
|
||||
t1.delegationId,
|
||||
t1.mobile,
|
||||
t2.NAME AS delegationName
|
||||
FROM
|
||||
teacher_congress_delegate t1
|
||||
@@ -344,7 +298,7 @@ public class ProposalMineController {
|
||||
// 获取正在执行的任务(邀请附议人||提案附议)
|
||||
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(processInstance.getId(), null);
|
||||
|
||||
if (doingTaskList.stream().anyMatch(task -> task.getTaskName().equals("85b7b9bd-d706-48cb-99a1-ef1370fb1819"))) {
|
||||
if (doingTaskList.stream().anyMatch(task -> task.getTaskName().equals("invite"))) {
|
||||
// 完成邀请任务并添加附议人
|
||||
for (ProcessTask task : doingTaskList) {
|
||||
Dict args = Dict.create();
|
||||
@@ -366,6 +320,22 @@ public class ProposalMineController {
|
||||
dao.update(inviteTask, "variable");
|
||||
}
|
||||
|
||||
// 储存到提案附议表
|
||||
List<ProposalSecond> secondeds = list.stream().map(item -> {
|
||||
ProposalSecond seconded = new ProposalSecond();
|
||||
seconded.setProposalId(proposalId);
|
||||
seconded.setSeconderId(item.getString("userId"));
|
||||
seconded.setUserName(item.getString("userName"));
|
||||
seconded.setLoginName(item.getString("loginName"));
|
||||
seconded.setUnitName(item.getString("unitName"));
|
||||
seconded.setUnionName(item.getString("unionName"));
|
||||
seconded.setDelegationName(item.getString("delegationName"));
|
||||
seconded.setMobile(item.getString("mobile"));
|
||||
seconded.setInviteTime(new Date());
|
||||
return seconded;
|
||||
}).toList();
|
||||
dao.insert(secondeds);
|
||||
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@@ -378,8 +348,8 @@ public class ProposalMineController {
|
||||
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())
|
||||
if (StrUtil.isBlank(info.getSessionId())
|
||||
|| StrUtil.isBlank(info.getDelegationId())
|
||||
|| StrUtil.isBlank(info.getName())
|
||||
|| StrUtil.isBlank(info.getBrief())
|
||||
|| StrUtil.isBlank(measures)
|
||||
|
||||
+1
-1
@@ -97,7 +97,7 @@ public class ProposalSchoolLeaderApprovalController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "=", "04ecf80c-a9d0-4986-8aac-231758d6a7af");
|
||||
cnd.and("t.taskName", "=", "school_leader");
|
||||
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
|
||||
+8
-12
@@ -1,36 +1,28 @@
|
||||
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.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.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.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;
|
||||
@@ -107,9 +99,9 @@ public class ProposalSecondedController {
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "=", "74458b33-ad6e-46c4-b8d9-1aa897142b25");
|
||||
cnd.and("t.taskName", "=", "second");
|
||||
|
||||
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
}
|
||||
|
||||
@@ -122,7 +114,11 @@ public class ProposalSecondedController {
|
||||
cnd.groupBy("t.id");
|
||||
cnd.desc("t.createdAt");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(), sql);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = pagination.getList(NutMap.class);
|
||||
for (NutMap row : list) {
|
||||
// String instanceId = row.getString("instanceId");
|
||||
}
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
+70
-11
@@ -5,23 +5,31 @@ import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.flow.service.FlowCommonService;
|
||||
import com.budwk.app.flow.service.ProcessTaskService;
|
||||
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.sys.services.SysUserService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalUnderTakeReplyService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
@@ -37,7 +45,13 @@ public class ProposalUnderTakeReplyController {
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
private ProposalUnderTakeReplyService proposalUnderTakeReplyService;
|
||||
private FlowCommonService flowCommonService;
|
||||
@Inject
|
||||
private ProcessTaskService processTaskService;
|
||||
@Inject
|
||||
private SysRoleService sysRoleService;
|
||||
@Inject
|
||||
private SysUserService sysUserService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/unitReply/index.html")
|
||||
@@ -78,8 +92,10 @@ public class ProposalUnderTakeReplyController {
|
||||
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
|
||||
IFNULL(GROUP_CONCAT(DISTINCT nt.taskName),'结束') curTaskKey,
|
||||
CASE WHEN t.taskState = 20 AND ( rt.id IS NULL OR rt.taskState = 10 ) THEN 1 ELSE 0 END AS canRevoke,
|
||||
t.variable->>'$.unitName' AS taskUnitName,
|
||||
IF(JSON_EXTRACT(t.variable, '$.isMaster') = true, 1, 0) AS taskIsMaster
|
||||
t.variable->>'$.underTakeName' AS underTakeName,
|
||||
IF(JSON_EXTRACT(t.variable, '$.underTakeIsMaster') = true, 1, 0) AS underTakeIsMaster,
|
||||
t.variable->>'$.tf_transferUserId' AS tf_transferUserId,
|
||||
transferUser.username AS transferUserName
|
||||
FROM
|
||||
wf_process_task t
|
||||
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||
@@ -90,17 +106,18 @@ public class ProposalUnderTakeReplyController {
|
||||
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 sys_user transferUser on transferUser.id = t.variable->>'$.tf_transferUserId'
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "in", List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "c9a1586e-272b-41b8-b438-0be9f9e3781d","5ed5a1be-0cd3-4b47-a0d5-238d53b61f34"));
|
||||
cnd.and("t.taskName", "in", List.of("master_reply", "slave_reply", "opinion_master_reply"));
|
||||
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
}
|
||||
|
||||
if (approval) {
|
||||
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
|
||||
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.TRANSFER.getCode()));
|
||||
} else {
|
||||
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
|
||||
}
|
||||
@@ -113,12 +130,12 @@ public class ProposalUnderTakeReplyController {
|
||||
List<NutMap> list = pagination.getList();
|
||||
for (NutMap row : list) {
|
||||
if (row.getInt("taskIsMaster") == 1) {
|
||||
boolean b = Stream.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "c9a1586e-272b-41b8-b438-0be9f9e3781d", "04ecf80c-a9d0-4986-8aac-231758d6a7af")
|
||||
boolean b = Stream.of("master_reply", "slave_reply", "school_leader")
|
||||
.anyMatch(a -> row.getString("curTaskKey").contains(a));
|
||||
row.setv("canRevoke",b && row.getInt("taskState") == ProcessTaskStateEnum.FINISHED.getCode());
|
||||
}else{
|
||||
boolean b = Stream.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "c9a1586e-272b-41b8-b438-0be9f9e3781d").anyMatch(a -> row.getString("curTaskKey").contains(a));
|
||||
row.setv("canRevoke",b && row.getInt("taskState") == ProcessTaskStateEnum.FINISHED.getCode());
|
||||
row.setv("canRevoke", b && row.getInt("taskState") == ProcessTaskStateEnum.FINISHED.getCode());
|
||||
} else {
|
||||
boolean b = Stream.of("master_reply", "slave_reply").anyMatch(a -> row.getString("curTaskKey").contains(a));
|
||||
row.setv("canRevoke", b && row.getInt("taskState") == ProcessTaskStateEnum.FINISHED.getCode());
|
||||
}
|
||||
}
|
||||
pagination.setList(list);
|
||||
@@ -126,4 +143,46 @@ public class ProposalUnderTakeReplyController {
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.unitReply")
|
||||
@ApiOperation("查询本单位可转办用户")
|
||||
public Result selectViceUser(@Param("keyword") @Valid String keyword) {
|
||||
Sql sql = Sqls.create("select id,loginname,username from vw_user $condition");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.andEX("unitId", "=", SecurityUtil.getUnitId());
|
||||
cnd.andEX("id", "!=", SecurityUtil.getUserId());
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("username", keyword);
|
||||
seg.orLike("loginname", keyword);
|
||||
cnd.and(seg);
|
||||
sql.setCondition(cnd);
|
||||
|
||||
sql.setParam("unitId", SecurityUtil.getUnitId());
|
||||
sql.setParam("userId", SecurityUtil.getUserId());
|
||||
Pagination pagination = proposalCommonService.listPageMap(1, 10, sql);
|
||||
return Result.success(pagination.getList());
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.unitReply")
|
||||
@ApiOperation("转办")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result transfer(@Param("taskId") @Valid Long taskId, @Param("userId") @Valid String userId) {
|
||||
// 此处设置转办用户的角色即可
|
||||
Sys_role proxyRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_UNIT_PROXY);
|
||||
int count = sysRoleService.dao().count(Sys_user_role.class, Cnd.where(Sys_user_role::getUserId, "=", userId).and(Sys_user_role::getRoleId, "=", proxyRole.getId()));
|
||||
if (count == 0) {
|
||||
// 添加转办用户的角色
|
||||
Sys_user_role userRole = new Sys_user_role();
|
||||
userRole.setUserId(userId);
|
||||
userRole.setRoleId(proxyRole.getId());
|
||||
sysRoleService.insert(userRole);
|
||||
sysUserService.clearCache();
|
||||
sysRoleService.clearCache();
|
||||
}
|
||||
|
||||
processTaskService.transfer(taskId, userId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
-3
@@ -26,14 +26,14 @@ public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler {
|
||||
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
|
||||
|
||||
// 主办单位id
|
||||
String hostUnitId = execution.getArgs().getStr("tf_hostUnitId");
|
||||
String masterUnitId = execution.getArgs().getStr("tf_masterUnitId");
|
||||
|
||||
if (StrUtil.isBlank(hostUnitId)) {
|
||||
if (StrUtil.isBlank(masterUnitId)) {
|
||||
throw new BaseException("请选择主办单位");
|
||||
}
|
||||
|
||||
// 获取主办单位
|
||||
ProposalUndertake undertake = dao.fetch(ProposalUndertake.class, hostUnitId);
|
||||
ProposalUndertake undertake = dao.fetch(ProposalUndertake.class, masterUnitId);
|
||||
|
||||
if (undertake == null) {
|
||||
throw new BaseException("主办单位不存在");
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ public class ProposalSlaveUnitAssignmentHandler implements AssignmentHandler {
|
||||
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
|
||||
|
||||
// 协办单位id
|
||||
List<String> helpUnitIds = (List<String>) execution.getArgs().get("tf_helpUnitIds");
|
||||
List<String> helpUnitIds = (List<String>) execution.getArgs().get("tf_slaveUnitIds");
|
||||
if (helpUnitIds != null && !helpUnitIds.isEmpty()) {
|
||||
|
||||
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_UNIT_LEADER);
|
||||
|
||||
+60
-6
@@ -1,5 +1,8 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.interceptor;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowInterceptor;
|
||||
import com.budwk.app.flow.engine.core.Execution;
|
||||
@@ -7,7 +10,11 @@ import com.budwk.app.flow.engine.core.ServiceContext;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.entity.ProcessTaskActor;
|
||||
import com.budwk.app.sys.models.Sys_role;
|
||||
import com.budwk.app.sys.services.SysRoleService;
|
||||
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.ProposalUndertake;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
@@ -26,28 +33,75 @@ public class ProposalCaseFilingInterceptor implements FlowInterceptor {
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void intercept(Execution execution) {
|
||||
Dao dao = ServiceContext.find(Dao.class);
|
||||
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
|
||||
|
||||
// 获取负责人
|
||||
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.PROPOSAL_UNIT_LEADER);
|
||||
|
||||
// 提案ID
|
||||
String proposalId = execution.getProcessInstance().getBusinessNo();
|
||||
|
||||
List<ProcessTask> processTaskList = execution.getProcessTaskList();
|
||||
|
||||
for (ProcessTask task : processTaskList) {
|
||||
NutMap variable = Json.fromJson(NutMap.class, task.getVariable());
|
||||
|
||||
ProcessTaskActor taskActor = dao.fetch(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", task.getId()));
|
||||
|
||||
// 单位名称
|
||||
variable.setv("unitName", taskActor.getActorUnitName());
|
||||
variable.setv("unitId", taskActor.getActorUnitId());
|
||||
|
||||
variable.setv("underTakeName", taskActor.getActorUnitName());
|
||||
variable.setv("underTakeId", taskActor.getActorUnitId());
|
||||
|
||||
// 是否主办
|
||||
variable.setv("isMaster", task.getTaskName().equals("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0"));
|
||||
variable.setv("isMaster", task.getTaskName().equals("master_reply") || task.getTaskName().equals("opinion_master_reply"));
|
||||
variable.setv("underTakeIsMaster", List.of("master_reply", "opinion_master_reply").contains(task.getTaskName()));
|
||||
|
||||
task.setVariable(Json.toJson(variable));
|
||||
}
|
||||
|
||||
// 更新立案结果
|
||||
// 立案结果
|
||||
String caseFilingResult = execution.getArgs().getStr(FlowConst.TASK_FORM_DATA_PREFIX + "caseFilingResult");
|
||||
|
||||
// 储存承办单位
|
||||
if (StrUtil.isNotBlank(caseFilingResult) && List.of("CONFIRM_FILING", "SUGGESTION").contains(caseFilingResult)) {
|
||||
// 删除原来的记录
|
||||
dao.clear(ProposalReplyUnit.class,Cnd.where(ProposalReplyUnit::getProposalId, "=", proposalId));
|
||||
|
||||
// 主办单位
|
||||
String masterUnitId = execution.getArgs().getStr(FlowConst.TASK_FORM_DATA_PREFIX + "masterUnitId");
|
||||
ProposalUndertake masterUnit = dao.fetch(ProposalUndertake.class, masterUnitId);
|
||||
ProposalReplyUnit masterReplyUnit = new ProposalReplyUnit();
|
||||
masterReplyUnit.setProposalId(proposalId);
|
||||
masterReplyUnit.setUnitId(masterUnit.getId());
|
||||
masterReplyUnit.setUnitCode(masterUnit.getCode());
|
||||
masterReplyUnit.setUnitName(masterUnit.getName());
|
||||
masterReplyUnit.setIsMaster(true);
|
||||
dao.insert(masterReplyUnit);
|
||||
|
||||
// 协办单位
|
||||
List<String> helpUnitIds = (List<String>) execution.getArgs().getObj(FlowConst.TASK_FORM_DATA_PREFIX + "slaveUnitIds");
|
||||
if(ObjectUtil.isNotEmpty(helpUnitIds)){
|
||||
for (String helpUnitId : helpUnitIds) {
|
||||
ProposalUndertake helpUnit = dao.fetch(ProposalUndertake.class, helpUnitId);
|
||||
ProposalReplyUnit helpReplyUnit = new ProposalReplyUnit();
|
||||
helpReplyUnit.setProposalId(proposalId);
|
||||
helpReplyUnit.setUnitId(helpUnit.getId());
|
||||
helpReplyUnit.setUnitCode(helpUnit.getCode());
|
||||
helpReplyUnit.setUnitName(helpUnit.getName());
|
||||
helpReplyUnit.setIsMaster(false);
|
||||
dao.insert(helpReplyUnit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 更新立案结果、立案类型
|
||||
ProcessInstance processInstance = execution.getProcessInstance();
|
||||
String businessNo = processInstance.getBusinessNo();
|
||||
dao.update(ProposalInfo.class, Chain.make("caseFilingResult", execution.getArgs().getStr(FlowConst.TASK_FORM_DATA_PREFIX + "caseFilingResult")), Cnd.where(ProposalInfo::getId, "=", businessNo));
|
||||
|
||||
Chain chain = Chain.make("caseFilingResult", execution.getArgs().getStr(FlowConst.TASK_FORM_DATA_PREFIX + "caseFilingResult"));
|
||||
chain.add("caseFilingType", execution.getArgs().getStr(FlowConst.TASK_FORM_DATA_PREFIX + "caseFilingType"));
|
||||
dao.update(ProposalInfo.class, chain, Cnd.where(ProposalInfo::getId, "=", businessNo));
|
||||
|
||||
dao.update(processTaskList, "variable");
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.util.List;
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案信息")
|
||||
@TableIndexes({
|
||||
@Index(name = "INDEX_PROPOSAL_INFO_SESSION_CODE", fields = {"sessionId","code"})
|
||||
@Index(name = "INDEX_PROPOSAL_INFO_SESSION_CODE", fields = {"sessionId", "code"})
|
||||
})
|
||||
public class ProposalInfo extends BaseModel {
|
||||
|
||||
@@ -55,6 +55,11 @@ public class ProposalInfo extends BaseModel {
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String caseFilingResult;
|
||||
|
||||
@Column
|
||||
@Comment("立案类型(重点、普通提案)")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String caseFilingType;
|
||||
|
||||
@Column
|
||||
@Comment("教代会ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
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;
|
||||
}
|
||||
+16
-11
@@ -11,10 +11,10 @@ import java.util.Date;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table("proposal_seconded")
|
||||
@Table("proposal_second")
|
||||
@TableMeta("{'mysql-charset':'utf8mb4'}")
|
||||
@Comment("提案附议信息")
|
||||
public class ProposalSeconded extends BaseModel {
|
||||
public class ProposalSecond extends BaseModel {
|
||||
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@@ -35,22 +35,32 @@ public class ProposalSeconded extends BaseModel {
|
||||
@Column
|
||||
@Comment("附议人姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String seconderName;
|
||||
private String userName;
|
||||
|
||||
@Column
|
||||
@Comment("附议人工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String seconderLoginName;
|
||||
private String loginName;
|
||||
|
||||
@Column
|
||||
@Comment("附议人单位")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String seconderUnitName;
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("附议人分工会")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("附议人代表团")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 255)
|
||||
private String delegationName;
|
||||
|
||||
@Column
|
||||
@Comment("附议人手机号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String seconderMobile;
|
||||
private String mobile;
|
||||
|
||||
@Column
|
||||
@Comment("附议时间")
|
||||
@@ -62,11 +72,6 @@ public class ProposalSeconded extends BaseModel {
|
||||
@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)
|
||||
+2
-8
@@ -1,15 +1,9 @@
|
||||
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;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalSecond;
|
||||
|
||||
public interface ProposalSecondedService extends BaseService<ProposalSeconded> {
|
||||
public interface ProposalSecondedService extends BaseService<ProposalSecond> {
|
||||
|
||||
/**
|
||||
* 附议
|
||||
* @param approvalParam
|
||||
*/
|
||||
void approval(BpmTaskApprovalParam approvalParam);
|
||||
|
||||
}
|
||||
|
||||
+5
@@ -15,6 +15,11 @@ public interface ProposalCommonService extends BaseService<ProposalInfo> {
|
||||
*/
|
||||
NutMap info(String id);
|
||||
|
||||
/**
|
||||
* 导出word
|
||||
* @param id
|
||||
* @param response
|
||||
*/
|
||||
void exportProposalAsDocx(String id, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
|
||||
+76
-150
@@ -4,28 +4,24 @@ 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.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.flow.engine.util.FlowUtil;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.flow.vo.ProcessTaskVO;
|
||||
import com.budwk.app.sys.models.Sys_dict;
|
||||
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.SysDictService;
|
||||
import com.budwk.app.sys.services.SysRoleService;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.commons.base.Globals;
|
||||
@@ -34,10 +30,7 @@ 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;
|
||||
@@ -68,9 +61,11 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
@Inject
|
||||
private SysRoleService sysRoleService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private SysOfficeTemplateUtil sysOfficeTemplateUtil;
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
@Inject
|
||||
private SysDictService sysDictService;
|
||||
|
||||
public ProposalCommonServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
@@ -101,59 +96,11 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
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;
|
||||
NutMap info = (NutMap) dao().execute(sql.setCallback(Sqls.callback.map())).getResult();
|
||||
if (StrUtil.isNotBlank(info.getString("suggestUnits"))) {
|
||||
info.put("suggestUnits", String.join(",", Json.fromJson(ArrayList.class, info.getString("suggestUnits"))));
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -175,8 +122,6 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
if (id == null || id.isEmpty()) {
|
||||
throw new BaseException("提案信息不存在");
|
||||
}
|
||||
// 查询提案信息
|
||||
HashMap<String, Object> docData = new HashMap<>();
|
||||
|
||||
//基本信息
|
||||
Sql sql = Sqls.create("""
|
||||
@@ -186,6 +131,8 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
info.brief,
|
||||
info.measures,
|
||||
info.createUserName,
|
||||
DATE_FORMAT(info.createTime, '%Y年%m月%d日') AS createTime,
|
||||
info.unitName,
|
||||
tcde.unitName,
|
||||
tcde.mobile,
|
||||
type.name AS typeName,
|
||||
@@ -201,26 +148,41 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
""").setParam("id", id);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
execute(sql);
|
||||
NutMap info = (NutMap) sql.getResult();
|
||||
NutMap docData = (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));
|
||||
String brief = docData.getString("brief");
|
||||
String measures = docData.getString("measures");
|
||||
docData.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(brief));
|
||||
docData.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(measures));
|
||||
|
||||
docData.put("info", info);
|
||||
List<Sys_dict> feedBackDict = sysDictService.getSubListByCode("PROPOSAL_FEEDBACK");
|
||||
Map<String, String> feedBackMap = feedBackDict.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName));
|
||||
|
||||
|
||||
// 流程实例
|
||||
ProcessInstance processInstance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id));
|
||||
|
||||
List<ProcessTaskVO> doneTaskVos = new ArrayList<>();
|
||||
List<ProcessTask> doneTaskList = flowEngine.processTaskService().getDoneTaskList(processInstance.getId(), null);
|
||||
for (ProcessTask doneTask : doneTaskList) {
|
||||
ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId());
|
||||
doneTaskVos.add(taskVO);
|
||||
}
|
||||
|
||||
// 按任务节点分组
|
||||
Map<String, List<ProcessTaskVO>> taskGroups = doneTaskVos.stream().collect(Collectors.groupingBy(ProcessTaskVO::getDisplayName));
|
||||
docData.putAll(taskGroups);
|
||||
|
||||
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)
|
||||
.bind("提案附议", policy)
|
||||
.bind("brief", htmlRenderPolicy)
|
||||
.bind("measures", htmlRenderPolicy)
|
||||
.bind("taskFormData.tf_opinion", htmlRenderPolicy)
|
||||
.build();
|
||||
|
||||
try {
|
||||
@@ -243,15 +205,13 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
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
|
||||
tcd.`name` AS delegationName,
|
||||
tcs.j,
|
||||
tcs.c
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||
@@ -263,80 +223,46 @@ public class ProposalCommonServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
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));
|
||||
// 获取流程实例
|
||||
ProcessInstance processInstance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id));
|
||||
|
||||
docData.put("info", info);
|
||||
// 主办办理情况
|
||||
ProcessTask masterUnitReplyTask = dao().fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstance.getId())
|
||||
.and(ProcessTask::getTaskName, "in", List.of("master_reply", "opinion_master_reply"))
|
||||
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode())
|
||||
.desc(ProcessTask::getFinishTime)
|
||||
);
|
||||
if (masterUnitReplyTask != null) {
|
||||
// 办理解决情况
|
||||
String implementState = FlowUtil.variableToDict(masterUnitReplyTask.getVariable()).getStr("tf_implementState");
|
||||
info.put(implementState, "√");
|
||||
// 承办单位名称
|
||||
info.put("underTakeName",FlowUtil.variableToDict(masterUnitReplyTask.getVariable()).getStr("underTakeName"));
|
||||
}
|
||||
|
||||
//审批记录
|
||||
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);
|
||||
});
|
||||
// 反馈评价
|
||||
ProcessTask feedbackTask = dao().fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstance.getId())
|
||||
.and(ProcessTask::getTaskName, "=", "feedback")
|
||||
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode())
|
||||
.desc(ProcessTask::getFinishTime)
|
||||
);
|
||||
if (feedbackTask != null) {
|
||||
info.put(FlowUtil.variableToDict(feedbackTask.getVariable()).getStr("tf_feedback"), "√");
|
||||
info.put("tf_feedback", FlowUtil.variableToDict(feedbackTask.getVariable()).getStr("tf_feedback"));
|
||||
info.put("tf_opinion", FlowUtil.variableToDict(feedbackTask.getVariable()).getStr("tf_opinion"));
|
||||
info.put("tf_phone", FlowUtil.variableToDict(feedbackTask.getVariable()).getStr("tf_phone"));
|
||||
info.put("tf_address", FlowUtil.variableToDict(feedbackTask.getVariable()).getStr("tf_address"));
|
||||
info.put("tf_postcode", FlowUtil.variableToDict(feedbackTask.getVariable()).getStr("tf_postcode"));
|
||||
}
|
||||
|
||||
HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
|
||||
htmlRenderPolicy.getConfig().setShowDefaultTableBorderInTableCell(true);
|
||||
|
||||
Configure config = Configure.builder()
|
||||
.bind("info.excerpt", htmlRenderPolicy)
|
||||
.bind("zbdf.opinion", htmlRenderPolicy)
|
||||
.build();
|
||||
Configure config = Configure.builder().build();
|
||||
try {
|
||||
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal_feedback"), config).render(docData).writeAndClose(byteArrayOutputStream);
|
||||
XWPFTemplate.compile(sysOfficeTemplateUtil.getTemplate("proposal_feedback"), config).render(info).writeAndClose(byteArrayOutputStream);
|
||||
} catch (IOException e) {
|
||||
log.error("提案导出失败{},提案id:{}", e.getMessage(), id);
|
||||
}
|
||||
|
||||
+30
-10
@@ -10,6 +10,7 @@ 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.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.util.FlowUtil;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
@@ -38,7 +39,6 @@ import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -186,8 +186,8 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
// 添加序号,去除富文本,获取附议人
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
list.get(i).put("index", i + 1);
|
||||
list.get(i).put("brief",HtmlUtil.cleanHtmlTag(list.get(i).getString("brief")));
|
||||
list.get(i).put("measures",HtmlUtil.cleanHtmlTag(list.get(i).getString("measures")));
|
||||
list.get(i).put("brief", HtmlUtil.cleanHtmlTag(list.get(i).getString("brief")));
|
||||
list.get(i).put("measures", HtmlUtil.cleanHtmlTag(list.get(i).getString("measures")));
|
||||
|
||||
// 流程实例
|
||||
ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", list.get(i).getString("id")));
|
||||
@@ -203,7 +203,7 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
if (inviteTask != null) {
|
||||
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
||||
List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
|
||||
list.get(i).put("secondedUserNames", seconders.stream().map(v->v.getString("userName")).collect(Collectors.joining(",")));
|
||||
list.get(i).put("secondedUserNames", seconders.stream().map(v -> v.getString("userName")).collect(Collectors.joining(",")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,6 +352,7 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.groupBy("info.id");
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = listMap(sql);
|
||||
@@ -385,13 +386,15 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
SELECT
|
||||
info.name,
|
||||
info.code,
|
||||
DATE_FORMAT(info.createTime, '%Y年%m月%d日') AS createTime,
|
||||
info.suggestUnits,
|
||||
info.researchFindings,
|
||||
info.brief,
|
||||
info.measures,
|
||||
info.createUserName,
|
||||
type.name AS typeName,
|
||||
tcde.unitName,
|
||||
tcde.mobile,
|
||||
type.name AS typeName,
|
||||
tcs.j,
|
||||
tcs.c,
|
||||
tcs.fullName AS sessionName,
|
||||
@@ -412,8 +415,10 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
info.put("brief", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("brief")));
|
||||
info.put("measures", sysOfficeTemplateUtil.convertRichTextToDocText(info.getString("measures")));
|
||||
|
||||
// 添加高校信息
|
||||
info.put("schoolName", Globals.AppName);
|
||||
// 处理建议承办单位
|
||||
if(StrUtil.isNotBlank(info.getString("suggestUnits"))){
|
||||
info.put("suggestUnits", String.join("、", Json.fromJsonAsList(String.class, info.getString("suggestUnits"))));
|
||||
}
|
||||
|
||||
// 创建docData,直接复用info中的数据
|
||||
HashMap<String, Object> docData = new HashMap<>(info);
|
||||
@@ -425,7 +430,7 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
// 查询附议人信息
|
||||
ProcessTask inviteTask = dao().fetch(ProcessTask.class,
|
||||
Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
|
||||
.and(ProcessTask::getTaskName, "=", "85b7b9bd-d706-48cb-99a1-ef1370fb1819")
|
||||
.and(ProcessTask::getTaskName, "=", "invite")
|
||||
.and(ProcessTask::getTaskState, "in",
|
||||
List.of(ProcessTaskStateEnum.DOING.getCode(), ProcessTaskStateEnum.FINISHED.getCode()))
|
||||
.desc(ProcessTask::getCreatedAt));
|
||||
@@ -434,9 +439,24 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
||||
if (variable != null) {
|
||||
List<NutMap> seconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
|
||||
docData.put("seconders", seconders != null ? seconders : Collections.emptyList());
|
||||
if(seconders != null){
|
||||
String secondersNames = seconders.stream().map(seconder -> seconder.getString("userName")).collect(Collectors.joining("、"));
|
||||
docData.put("secondersNames", secondersNames);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 委员会立案信息
|
||||
ProcessTask caseTask = dao().fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId())
|
||||
.and(ProcessTask::getTaskName, "=", "committee")
|
||||
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode())
|
||||
.desc(ProcessTask::getCreatedAt)
|
||||
);
|
||||
if (caseTask != null) {
|
||||
String opinion = FlowUtil.variableToDict(caseTask.getVariable()).getStr("tf_opinion");
|
||||
docData.put("committeeOpinion", opinion);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 配置渲染策略
|
||||
@@ -469,13 +489,13 @@ public class ProposalExportServiceImpl extends BaseServiceImpl<ProposalInfo> imp
|
||||
info.name
|
||||
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
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.groupBy("info.id");
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
sql.setCondition(cnd);
|
||||
List<NutMap> list = listMap(sql);
|
||||
|
||||
+2
-94
@@ -1,113 +1,21 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
|
||||
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.models.Sys_user_role;
|
||||
import com.budwk.app.sys.services.SysMsgService;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalSeconded;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalSecond;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalSecondedService;
|
||||
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 java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class ProposalSecondedServiceImpl extends BaseServiceImpl<ProposalSeconded> implements ProposalSecondedService {
|
||||
public class ProposalSecondedServiceImpl extends BaseServiceImpl<ProposalSecond> implements ProposalSecondedService {
|
||||
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private SysMsgService sysMsgService;
|
||||
|
||||
public ProposalSecondedServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void approval(BpmTaskApprovalParam approvalParam) {
|
||||
approvalParam.getBpmTaskApprovalTypeEnum();
|
||||
// 将审批参数转换为Map
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
|
||||
// 获取提案配置中的最少附议人数
|
||||
ProposalConfig proposalConfig = dao().fetch(ProposalConfig.class, Cnd.NEW());
|
||||
Integer seconderNum = proposalConfig.getSeconderNum();
|
||||
|
||||
//团长接收人
|
||||
List<String> assignments = new ArrayList<>();
|
||||
|
||||
ProposalInfo proposalInfo = dao().fetch(ProposalInfo.class, approvalParam.getProcessInstanceBusinessId());
|
||||
BpmProcessTask processTask = dao().fetch(BpmProcessTask.class, approvalParam.getProcessInstanceTaskId());
|
||||
|
||||
//查询其他人是否附议完成
|
||||
List<BpmProcessTask> otherTasks = dao().query(BpmProcessTask.class,
|
||||
Cnd.where(BpmProcessTask::getProcessInstanceId, "=", approvalParam.getProcessInstanceId())
|
||||
.and(BpmProcessTask::getId, "!=", approvalParam.getProcessInstanceTaskId())
|
||||
.and(BpmProcessTask::getPrevTaskId, "=", processTask.getPrevTaskId())
|
||||
.and(BpmProcessTask::getDelFlag, "=", 0));
|
||||
boolean otherTaskAllComplete = otherTasks.stream().allMatch(v -> v.getTaskStatus().equals(BpmProcessTaskStatusEnum.COMPLETE.name()) || v.getTaskStatus().equals(BpmProcessTaskStatusEnum.REVOKE.name()));
|
||||
boolean finish = otherTaskAllComplete && otherTasks.size() + 1 >= seconderNum;
|
||||
|
||||
variables.put("finish", finish);
|
||||
|
||||
if (finish) {
|
||||
//查询团长
|
||||
assignments.add(commonService.findUserLoginNameByRoleCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD, Cnd.where(Sys_user_role::getTcSessionId, "=", proposalInfo.getSessionId()).and(Sys_user_role::getTcDelegationId, "=", proposalInfo.getDelegationId())));
|
||||
}
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), BpmTaskApprovalTypeEnum.DYNAMIC, variables, assignments);
|
||||
|
||||
if (finish) {
|
||||
for (String assignment : assignments) {
|
||||
String template = "{}代表的提案《{}》已经完成附议,请您登陆智慧校园下的暖心工会系统进行审批,感谢您对教代会提案工作的大力支持!";
|
||||
String content = StrUtil.format(template, proposalInfo.getCreateUserName(), proposalInfo.getName());
|
||||
sysMsgService.sendMsg(assignment, "团长审核", content, proposalInfo.getCreateUserId());
|
||||
}
|
||||
}
|
||||
|
||||
//查询已完成任务同意的数量
|
||||
// List<BpmProcessTask> tasks = dao().query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "=", approvalParam.getProcessInstanceId()).and(BpmProcessTask::getTaskStatus, "=", BpmProcessTaskStatusEnum.COMPLETE.name()).and(BpmProcessTask::getPrevTaskId, "=", processTask.getPrevTaskId()).and(BpmProcessTask::getDelFlag, "=", 0));
|
||||
// long agreeCount = tasks.stream().filter(v -> v.getExtVariable().getStr("bpmTaskApprovalType").equals(BpmTaskApprovalTypeEnum.PASS.name())).count();
|
||||
// if (approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)) {
|
||||
// agreeCount = agreeCount + 1;
|
||||
// }
|
||||
//
|
||||
// ProposalConfig proposalConfig = dao().fetch(ProposalConfig.class, Cnd.NEW());
|
||||
// Integer seconderNum = proposalConfig.getSeconderNum();
|
||||
// variables.put("finish", agreeCount == seconderNum);
|
||||
//
|
||||
// if (agreeCount == seconderNum) {
|
||||
// //查询团长
|
||||
// assignments.add(commonService.findUserLoginNameByRoleCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD, Cnd.where(Sys_user_role::getTcSessionId, "=", proposalInfo.getSessionId()).and(Sys_user_role::getTcDelegationId, "=", proposalInfo.getDelegationId())));
|
||||
// }
|
||||
// bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), BpmTaskApprovalTypeEnum.DYNAMIC, variables, assignments);
|
||||
//
|
||||
//
|
||||
// if (agreeCount == seconderNum) {
|
||||
// for (String assignment : assignments) {
|
||||
// String template = "{}代表的提案《{}》已经完成附议,请您登陆智慧校园下的暖心工会系统进行审批,感谢您对教代会提案工作的大力支持!";
|
||||
// String content = StrUtil.format(template, proposalInfo.getCreateUserName(), proposalInfo.getName());
|
||||
// sysMsgService.sendMsg(assignment, "团长审核", content, proposalInfo.getCreateUserId());
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+27
-19
@@ -7,6 +7,7 @@ import cn.hutool.core.lang.tree.TreeNode;
|
||||
import cn.hutool.core.lang.tree.TreeUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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;
|
||||
@@ -74,12 +75,15 @@ public class TeacherCongressDelegationController {
|
||||
public Result pageData(@Valid @ApiParam(value = "分页表单") PageForm pageForm, @Valid @ApiParam(value = "届次ID") String sessionId) {
|
||||
Sys_role role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
|
||||
Sys_role role2 = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD);
|
||||
Sys_role role3 = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_CONTACT);
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
tcd.*,
|
||||
tcs.fullName as sessionName,
|
||||
GROUP_CONCAT(u.username,u.loginname) as delegationHead,
|
||||
GROUP_CONCAT(u2.username,u2.loginname) as viceDelegationHead
|
||||
GROUP_CONCAT(u2.username,u2.loginname) as viceDelegationHead,
|
||||
GROUP_CONCAT(u3.username,u3.loginname) as delegationContact
|
||||
FROM
|
||||
teacher_congress_delegation tcd
|
||||
LEFT JOIN teacher_congress_session tcs ON tcs.id = tcd.sessionId
|
||||
@@ -87,9 +91,12 @@ public class TeacherCongressDelegationController {
|
||||
LEFT JOIN sys_user u ON u.id = sur.userId
|
||||
LEFT JOIN sys_user_role sur2 ON sur2.tcDelegationId = tcd.id AND sur2.roleId = @roleId2
|
||||
LEFT JOIN sys_user u2 ON u2.id = sur2.userId
|
||||
LEFT JOIN sys_user_role sur3 ON sur3.tcDelegationId = tcd.id AND sur3.roleId = @roleId3
|
||||
LEFT JOIN sys_user u3 ON u3.id = sur3.userId
|
||||
$condition""");
|
||||
sql.setParam("roleId", role.getId());
|
||||
sql.setParam("roleId2", role2.getId());
|
||||
sql.setParam("roleId3", role3.getId());
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("tcd.sessionId", "=", sessionId);
|
||||
cnd.asc("tcd.code");
|
||||
@@ -268,8 +275,12 @@ public class TeacherCongressDelegationController {
|
||||
Sys_role role = null;
|
||||
if (type.equals(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD.name())) {
|
||||
role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
|
||||
} else {
|
||||
} else if (type.equals(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD.name())) {
|
||||
role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD);
|
||||
} else if (type.equals(RoleConstant.TEACHER_CONGRESS_DELEGATION_CONTACT.name())) {
|
||||
role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_CONTACT);
|
||||
} else {
|
||||
throw new BaseException("参数错误");
|
||||
}
|
||||
|
||||
Record record = dao.fetch("sys_user_role", Cnd.where("tcSessionId", "=", sessionId).and("tcDelegationId", "=", delegationId).and("roleId", "=", role.getId()));
|
||||
@@ -298,31 +309,32 @@ public class TeacherCongressDelegationController {
|
||||
/**
|
||||
* 设置团长
|
||||
*
|
||||
* @param delegationId
|
||||
* @param sessionId
|
||||
* @param userId
|
||||
* @param delegationId 代表团ID
|
||||
* @param sessionId 届次ID
|
||||
* @param userId 团长id
|
||||
* @param viceUserId 副团长id
|
||||
* @param contactUserId 联络人
|
||||
* @return
|
||||
*/
|
||||
@At
|
||||
@SaCheckPermission("tc.delegation")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result insertHead(@Valid String delegationId, @Valid String sessionId, @Valid String userId, String viceUserId) {
|
||||
public Result insertHead(@Valid String delegationId, @Valid String sessionId, @Valid String userId, @Valid String viceUserId, String contactUserId) {
|
||||
// 团长
|
||||
Sys_role role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
|
||||
dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", delegationId)
|
||||
.and(Sys_user_role::getTcSessionId, "=", sessionId)
|
||||
.and(Sys_user_role::getRoleId, "=", role.getId())
|
||||
);
|
||||
dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", delegationId).and(Sys_user_role::getTcSessionId, "=", sessionId).and(Sys_user_role::getRoleId, "=", role.getId()));
|
||||
dao.insert("sys_user_role", Chain.make("userId", userId).add("roleId", role.getId()).add("tcDelegationId", delegationId).add("tcSessionId", sessionId));
|
||||
|
||||
// 副团长
|
||||
Sys_role role2 = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_VICE_DELEGATION_HEAD);
|
||||
dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", delegationId)
|
||||
.and(Sys_user_role::getTcSessionId, "=", sessionId)
|
||||
.and(Sys_user_role::getRoleId, "=", role2.getId())
|
||||
);
|
||||
dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", delegationId).and(Sys_user_role::getTcSessionId, "=", sessionId).and(Sys_user_role::getRoleId, "=", role2.getId()));
|
||||
dao.insert("sys_user_role", Chain.make("userId", viceUserId).add("roleId", role2.getId()).add("tcDelegationId", delegationId).add("tcSessionId", sessionId));
|
||||
|
||||
// 联络人
|
||||
Sys_role role3 = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_CONTACT);
|
||||
dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", delegationId).and(Sys_user_role::getTcSessionId, "=", sessionId).and(Sys_user_role::getRoleId, "=", role3.getId()));
|
||||
dao.insert("sys_user_role", Chain.make("userId", contactUserId).add("roleId", role3.getId()).add("tcDelegationId", delegationId).add("tcSessionId", sessionId));
|
||||
|
||||
sysUserService.clearCache();
|
||||
return Result.success();
|
||||
}
|
||||
@@ -340,11 +352,7 @@ public class TeacherCongressDelegationController {
|
||||
public Result deleteHead(@Valid String delegationId, @Valid String sessionId, @Valid String userId) {
|
||||
Sys_role role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
|
||||
//先删除角色
|
||||
dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", delegationId)
|
||||
.and(Sys_user_role::getTcSessionId, "=", sessionId)
|
||||
.and(Sys_user_role::getRoleId, "=", role.getId())
|
||||
.and(Sys_user_role::getUserId, "=", userId)
|
||||
);
|
||||
dao.clear(Sys_user_role.class, Cnd.where(Sys_user_role::getTcDelegationId, "=", delegationId).and(Sys_user_role::getTcSessionId, "=", sessionId).and(Sys_user_role::getRoleId, "=", role.getId()).and(Sys_user_role::getUserId, "=", userId));
|
||||
sysUserService.clearCache();
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user