commit
This commit is contained in:
+14
@@ -0,0 +1,14 @@
|
||||
package com.budwk.app.base.event.flow.jumptofirsttask;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author FKY
|
||||
* @name:FlowJumpToFirstTaskNodeListener
|
||||
* @Date 2025/12/20 14:10
|
||||
* @注释
|
||||
*/
|
||||
public interface FlowJumpToFirstTaskNodeListener {
|
||||
|
||||
void receive(Long processTaskId);
|
||||
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.budwk.app.base.event.flow.jumptofirsttask;
|
||||
|
||||
import com.budwk.app.base.event.user.UserChangeEventListener;
|
||||
import com.budwk.app.base.utils.AppIocUtil;
|
||||
import org.nutz.ioc.Ioc;
|
||||
import org.nutz.mvc.Mvcs;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author FKY
|
||||
* @name:FlowJumpToFirstTaskNodeEvent
|
||||
* @Date 2025/12/20 14:09
|
||||
* @注释
|
||||
*/
|
||||
public class FlowJumpToFirstTaskNodePublisher {
|
||||
|
||||
public static void broadcast(Long processTaskId) {
|
||||
String[] names = Mvcs.getIoc().getNamesByType(FlowJumpToFirstTaskNodeListener.class);
|
||||
for (String listener : names) {
|
||||
FlowJumpToFirstTaskNodeListener listenerBean = Mvcs.getIoc().get(FlowJumpToFirstTaskNodeListener.class, listener);
|
||||
listenerBean.receive(processTaskId);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.budwk.app.flow.service;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.budwk.app.base.event.flow.jumptofirsttask.FlowJumpToFirstTaskNodePublisher;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||
@@ -52,6 +53,10 @@ public class FlowCommonService {
|
||||
} else if (ObjectUtil.equals(submitType, ProcessSubmitTypeEnum.ROLLBACK_TO_OPERATOR.getCode())) {
|
||||
// 退回发起人
|
||||
flowEngine.executeAndJumpToFirstTaskNode(processTaskId, operator, args);
|
||||
|
||||
// 退回发起人发送订阅消息,执行相关操作
|
||||
FlowJumpToFirstTaskNodePublisher.broadcast(processTaskId);
|
||||
|
||||
} else if (ObjectUtil.equals(submitType, ProcessSubmitTypeEnum.COUNTERSIGN_DISAGREE.getCode())) {
|
||||
// 会签不同意,追加不同意标识
|
||||
args.put(FlowConst.COUNTERSIGN_DISAGREE_FLAG, 1);
|
||||
|
||||
@@ -326,7 +326,7 @@ public class SysUnitController {
|
||||
public Object addDo(@Param("..") Sys_unit unit, @Param("parentId") String parentId, HttpServletRequest req) {
|
||||
try {
|
||||
if ("root".equals(parentId)) {
|
||||
parentId = "";
|
||||
parentId = "0";
|
||||
}
|
||||
unit.setCreatedBy(SecurityUtil.getUserId());
|
||||
unit.setUnitType("用户自建");
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ public class ProposalCommonController {
|
||||
@SaCheckLogin
|
||||
@ApiOperation("查询全部的教代会")
|
||||
public Result listSession() {
|
||||
List<Teacher_congress_session> list = dao.query(Teacher_congress_session.class, Cnd.NEW().desc("startDate"));
|
||||
List<Teacher_congress_session> list = dao.query(Teacher_congress_session.class, Cnd.NEW().asc("startDate"));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -93,7 +93,8 @@ public class ProposalSchoolLeaderApprovalController {
|
||||
t.taskParentId,
|
||||
t.variable taskVariable,
|
||||
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
|
||||
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
|
||||
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke,
|
||||
GROUP_CONCAT(DISTINCT ta.actorName, '(', ta.actorAccount, ')' ) AS auditUser
|
||||
FROM
|
||||
wf_process_task t
|
||||
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||
|
||||
+2
-1
@@ -104,7 +104,8 @@ public class ProposalUnderTakeReplyController {
|
||||
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
|
||||
transferUser.username AS transferUserName,
|
||||
GROUP_CONCAT(DISTINCT ta.actorName, '(', ta.actorAccount, ')' ) AS auditUser
|
||||
FROM
|
||||
wf_process_task t
|
||||
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||
|
||||
+6
-1
@@ -13,8 +13,10 @@ import com.budwk.app.sys.models.Sys_user_role;
|
||||
import com.budwk.app.sys.services.SysRoleService;
|
||||
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.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -22,7 +24,9 @@ import java.util.List;
|
||||
* 提案主办单位处理人
|
||||
*/
|
||||
public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler {
|
||||
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public List<String> assign(TaskModel model, Execution execution) {
|
||||
Dao dao = ServiceContext.find(Dao.class);
|
||||
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
|
||||
@@ -42,7 +46,8 @@ public class ProposalMasterUnitAssignmentHandler implements AssignmentHandler {
|
||||
|
||||
// 如果没有 认为是需要重新答复 从记录表里取值
|
||||
if(StrUtil.isBlank(masterUnitId)){
|
||||
ProposalReplyUnit masterUnit = dao.fetch(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", proposalId).and(ProposalReplyUnit::getIsMaster, "=", 1));
|
||||
ProposalReplyUnit masterUnit = dao.fetch(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", proposalId)
|
||||
.and(ProposalReplyUnit::getIsMaster, "=", 1));
|
||||
if (masterUnit == null) {
|
||||
throw new BaseException("系统异常");
|
||||
}
|
||||
|
||||
+7
-3
@@ -26,9 +26,13 @@ public class ProposalCaseTaskRevokeEventListener implements ProcessEventListener
|
||||
if (event.getEventType() == ProcessEventTypeEnum.PROCESS_TASK_REVOKE) {
|
||||
Long taskId = event.getSourceId();
|
||||
ProcessTask task = dao.fetch(ProcessTask.class, taskId);
|
||||
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||
String businessNo = instance.getBusinessNo();
|
||||
dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", businessNo));
|
||||
|
||||
ProcessTask parentProcessTask = dao.fetch(ProcessTask.class, task.getTaskParentId());
|
||||
if ("committee".equals(parentProcessTask.getTaskName())) {
|
||||
ProcessInstance instance = dao.fetch(ProcessInstance.class, task.getProcessInstanceId());
|
||||
String businessNo = instance.getBusinessNo();
|
||||
dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", businessNo));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.listenter;
|
||||
|
||||
import com.budwk.app.base.event.flow.jumptofirsttask.FlowJumpToFirstTaskNodeListener;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.service.ProcessInstanceService;
|
||||
import com.budwk.app.flow.service.ProcessTaskService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalSecond;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author FKY
|
||||
* @name:ProposalJumpToWriteEventListener
|
||||
* @Date 2025/12/20 14:50
|
||||
* @注释 提案退回发起人监听器
|
||||
*/
|
||||
@IocBean
|
||||
public class ProposalJumpToWriteEventListener implements FlowJumpToFirstTaskNodeListener {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private ProcessTaskService processTaskService;
|
||||
@Inject
|
||||
private ProcessInstanceService processInstanceService;
|
||||
|
||||
@Override
|
||||
public void receive(Long processTaskId) {
|
||||
ProcessTask processTask = processTaskService.getById(processTaskId);
|
||||
ProcessInstance processInstance = processInstanceService.getById(processTask.getProcessInstanceId());
|
||||
|
||||
// 清空提案的附议人
|
||||
dao.clear(ProposalSecond.class, Cnd.where(ProposalSecond::getProposalId, "=", processInstance.getBusinessNo()));
|
||||
}
|
||||
}
|
||||
+17
-1
@@ -8,6 +8,7 @@ import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.lang.Lang;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@@ -58,6 +59,8 @@ public class ProposalQueryComprehensiveParam extends PageForm {
|
||||
@ApiModelProperty(name = "通用关键字")
|
||||
private String commonKeyword;
|
||||
|
||||
@ApiModelProperty(name = "搜索关键字")
|
||||
private String createUserKeyword;
|
||||
|
||||
|
||||
/**
|
||||
@@ -71,7 +74,12 @@ public class ProposalQueryComprehensiveParam extends PageForm {
|
||||
cnd = Cnd.NEW();
|
||||
}
|
||||
//教代会届次
|
||||
cnd.andEX("info.sessionId", "=", searchParam.getSessionId());
|
||||
if (Lang.isNotEmpty(searchParam.getSessionIds())) {
|
||||
cnd.and("info.sessionId", "in", searchParam.getSessionIds());
|
||||
} else {
|
||||
cnd.andEX("info.sessionId", "=", searchParam.getSessionId());
|
||||
}
|
||||
|
||||
//提案名称
|
||||
if (StrUtil.isNotBlank(searchParam.getName())) {
|
||||
cnd.where().andLike("info.name", searchParam.getName());
|
||||
@@ -93,6 +101,14 @@ public class ProposalQueryComprehensiveParam extends PageForm {
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserName())) {
|
||||
cnd.where().andLike("info.createUserName", searchParam.getCreateUserName());
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(searchParam.getCreateUserKeyword())) {
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.orLike("info.createUserName", searchParam.getCreateUserKeyword());
|
||||
seg.orLike("info.createUserLoginName", searchParam.getCreateUserKeyword());
|
||||
cnd.and(seg);
|
||||
}
|
||||
|
||||
// 提案人分工会
|
||||
cnd.andEX("tcde.unionId", "=", searchParam.getUnionId());
|
||||
// 提案人单位
|
||||
|
||||
+4
-1
@@ -36,6 +36,7 @@ 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.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
@@ -209,7 +210,9 @@ 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(",")));
|
||||
if (Lang.isNotEmpty(seconders)) {
|
||||
list.get(i).put("secondedUserNames", seconders.stream().map(v -> v.getString("userName")).collect(Collectors.joining(",")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ const UNIT_MANAGE_TEMPLATE = {
|
||||
</el-card>
|
||||
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter); margin-top: 10px">
|
||||
<table-tool label="单位列表">
|
||||
<el-button @click="openAdd" type="primary" size="small">新建单位</el-button>
|
||||
<!-- <el-button @click="openAdd" type="primary" size="small">新建单位</el-button>-->
|
||||
</table-tool>
|
||||
<el-table :data="tableData" size="mini">
|
||||
<el-table-column label="序号" type="index" width="60">
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ layout("/layouts/platform.html"){
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
|
||||
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人</el-button>
|
||||
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
|
||||
<el-button @click="handleTaskAction(20)" size="small" type="danger">不同意</el-button>
|
||||
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意</el-button>
|
||||
</el-row>
|
||||
|
||||
@@ -28,9 +28,9 @@ const PROPOSAL_INFO = {
|
||||
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
|
||||
:value="viewData.caseFilingResult"></dict-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="调研情况" :span="3">
|
||||
<!--<el-descriptions-item label="调研情况" :span="3">
|
||||
<div class="text-left">{{viewData.researchFindings}}</div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions-item>-->
|
||||
<el-descriptions-item label="提案案由" :span="3">
|
||||
<div class="text-left" v-html="viewData.brief"></div>
|
||||
</el-descriptions-item>
|
||||
|
||||
+9
@@ -231,6 +231,14 @@ layout("/layouts/platform.html"){
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
// 是否有协办单位
|
||||
let tf_helpunitreply;
|
||||
if (this.formData.tf_slaveUnitIds && this.formData.tf_slaveUnitIds.length > 0) {
|
||||
tf_helpunitreply = 'HAS_HELP_UNIT'
|
||||
} else {
|
||||
tf_helpunitreply = 'NO_HELP_UNIT'
|
||||
}
|
||||
|
||||
const loading = createLoading('提交中')
|
||||
this.$axios.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify({
|
||||
@@ -239,6 +247,7 @@ layout("/layouts/platform.html"){
|
||||
tf_masterUnitName: this.formData.tf_masterUnitId ? this.underTakeOptions.find(v => v.id === this.formData.tf_masterUnitId)?.name : null,
|
||||
tf_slaveUnitNames: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name),
|
||||
tf_slaveUnitNameStr: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name).join(','),
|
||||
tf_helpunitreply: tf_helpunitreply
|
||||
})
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
|
||||
+1
@@ -137,6 +137,7 @@ layout("/layouts/platform.html"){
|
||||
{label: "提案类别", prop: "typeName"},
|
||||
{label: "是否并案", prop: "merge"},
|
||||
{label: "当前节点", prop: "curTaskName"},
|
||||
{label: "审核人", prop: "auditUser"},
|
||||
{label: "流程状态", prop: "instanceState"}
|
||||
],
|
||||
pageForm: {
|
||||
|
||||
+1
@@ -260,6 +260,7 @@ layout("/layouts/platform.html"){
|
||||
{label: "承办单位", prop: "underTakeName"},
|
||||
{label: "承办类型", prop: "underTakeIsMaster"},
|
||||
{label: "当前节点", prop: "curTaskName"},
|
||||
{label: "审核人", prop: "auditUser"},
|
||||
{label: "流程状态", prop: "instanceState"}
|
||||
],
|
||||
pageForm: {
|
||||
|
||||
+2
-2
@@ -270,7 +270,7 @@ layout("/layouts/platform_h5.html"){
|
||||
</van-cell-group>
|
||||
|
||||
<van-cell-group title="提案内容" class="form-group">
|
||||
<van-field
|
||||
<!--<van-field
|
||||
v-model="formData.researchFindings"
|
||||
name="researchFindings"
|
||||
label="调研情况"
|
||||
@@ -280,7 +280,7 @@ layout("/layouts/platform_h5.html"){
|
||||
placeholder="请输入调研情况"
|
||||
:rules="[{ required: true, message: '请填写调研情况' }]"
|
||||
required
|
||||
></van-field>
|
||||
></van-field>-->
|
||||
|
||||
<van-field
|
||||
v-model="formData.brief"
|
||||
|
||||
Reference in New Issue
Block a user