..
This commit is contained in:
@@ -65,6 +65,10 @@ public interface FlowConst {
|
||||
String NR_OF_INSTANCES = "nrOfInstances";
|
||||
// 会签已完成实例数
|
||||
String NR_OF_COMPLETED_INSTANCES = "nrOfCompletedInstances";
|
||||
|
||||
// 会签已完成并且已通过实例数
|
||||
String NR_OF_COMPLETED_AGREE_INSTANCES = "nrOfCompletedAgreeInstances";
|
||||
|
||||
// 会签操作人列表
|
||||
String COUNTERSIGN_OPERATOR_LIST = "operatorList";
|
||||
// 会签类型 PARALLEL表示并行会签,SEQUENTIAL表示串行会签
|
||||
@@ -106,4 +110,5 @@ public interface FlowConst {
|
||||
String PROCESS_INSTANCE_NAME = "instanceName";
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -15,52 +15,63 @@ import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 会签任务处理,用于判断会签任务是否可通过
|
||||
*
|
||||
* @author mldong
|
||||
* @date 2023/11/24
|
||||
*/
|
||||
public class CountersignHandler implements IHandler {
|
||||
private TaskModel taskModel;
|
||||
|
||||
public CountersignHandler(TaskModel taskModel) {
|
||||
this.taskModel = taskModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(Execution execution) {
|
||||
boolean isMerged = false;
|
||||
String countersignType = taskModel.getExt().get("countersignType","PARALLEL");
|
||||
String countersignCompletionCondition = taskModel.getExt().get("countersignCompletionCondition","");
|
||||
String countersignType = taskModel.getExt().get("countersignType", "PARALLEL");
|
||||
String countersignCompletionCondition = taskModel.getExt().get("countersignCompletionCondition", "");
|
||||
countersignCompletionCondition = taskModel.getCountersignCompletionCondition();
|
||||
String prefix = FlowConst.COUNTERSIGN_VARIABLE_PREFIX +taskModel.getName()+"_";
|
||||
String prefix = FlowConst.COUNTERSIGN_VARIABLE_PREFIX + taskModel.getName() + "_";
|
||||
// 会签办理人列表
|
||||
List<String> operatorList = Convert.toList(String.class,execution.getArgs().get(prefix+FlowConst.COUNTERSIGN_OPERATOR_LIST));
|
||||
List<String> operatorList = Convert.toList(String.class, execution.getArgs().get(prefix + FlowConst.COUNTERSIGN_OPERATOR_LIST));
|
||||
// 循环计数器,办理人在列表中的索引
|
||||
int loopCounter = operatorList.indexOf(execution.getOperator());
|
||||
// 追加计数器
|
||||
execution.getArgs().put(prefix+FlowConst.LOOP_COUNTER,loopCounter);
|
||||
execution.getArgs().put(prefix + FlowConst.LOOP_COUNTER, loopCounter);
|
||||
// 追加已完成数量
|
||||
execution.getArgs().put(prefix + FlowConst.NR_OF_COMPLETED_INSTANCES,
|
||||
execution.getArgs().get(prefix + FlowConst.NR_OF_COMPLETED_INSTANCES,0)+1);
|
||||
execution.getArgs().get(prefix + FlowConst.NR_OF_COMPLETED_INSTANCES, 0) + 1);
|
||||
|
||||
// 追加已完成并且同意数量
|
||||
if (!execution.getArgs().containsKey(FlowConst.COUNTERSIGN_DISAGREE_FLAG)) {
|
||||
execution.getArgs().put(prefix + FlowConst.NR_OF_COMPLETED_AGREE_INSTANCES,
|
||||
execution.getArgs().get(prefix + FlowConst.NR_OF_COMPLETED_AGREE_INSTANCES, 0) + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* ● 全部通过:为空
|
||||
* ● 按数量通过:#nrOfCompletedInstances==n,这里表示n人完成任务,会签结束。
|
||||
* ● 按比例通过:#nrOfCompletedInstances/nrOfInstances==n,这里表示已完成会签数与总实例数达到一定比例时,会签结束
|
||||
* ● 一票通过:#nrOfCompletedInstances==1,这里表示1人完成任务,会签结束。
|
||||
* ● 一票否决:ONE_VOTE_VETO
|
||||
*/
|
||||
if("ONE_VOTE_VETO".equalsIgnoreCase(countersignCompletionCondition)) {
|
||||
if ("ONE_VOTE_VETO".equalsIgnoreCase(countersignCompletionCondition)) {
|
||||
// 一票否决
|
||||
if(execution.getArgs().containsKey(FlowConst.COUNTERSIGN_DISAGREE_FLAG)) {
|
||||
if (execution.getArgs().containsKey(FlowConst.COUNTERSIGN_DISAGREE_FLAG)) {
|
||||
// 存在拒绝标识,则直接通过
|
||||
isMerged = true;
|
||||
}
|
||||
} else if(!StrUtil.isBlank(countersignCompletionCondition)) {
|
||||
} else if (!StrUtil.isBlank(countersignCompletionCondition)) {
|
||||
// 根据条件判断是否通过
|
||||
Dict dict = Dict.create();
|
||||
execution.getArgs().forEach((k,v)->{
|
||||
dict.set(k.replace(prefix,""),v);
|
||||
execution.getArgs().forEach((k, v) -> {
|
||||
dict.set(k.replace(prefix, ""), v);
|
||||
});
|
||||
isMerged = Convert.toBool(ExpressionUtil.eval(countersignCompletionCondition, dict));
|
||||
}
|
||||
if(!isMerged && CountersignTypeEnum.SEQUENTIAL.toString().equalsIgnoreCase(countersignType)) {
|
||||
if (!isMerged && CountersignTypeEnum.SEQUENTIAL.toString().equalsIgnoreCase(countersignType)) {
|
||||
// 串行未通过,则判断是否为最后一个
|
||||
if (loopCounter == operatorList.size() - 1) {
|
||||
isMerged = true;
|
||||
@@ -69,27 +80,28 @@ public class CountersignHandler implements IHandler {
|
||||
execution.getEngine().processTaskService().createCountersignTask(taskModel, execution);
|
||||
}
|
||||
}
|
||||
if(!isMerged && CountersignTypeEnum.PARALLEL.toString().equalsIgnoreCase(countersignType)) {
|
||||
if (!isMerged && CountersignTypeEnum.PARALLEL.toString().equalsIgnoreCase(countersignType)) {
|
||||
// 是否所有会签任务已完成
|
||||
isMerged = execution.getEngine().processTaskService().getDoingTaskList(execution.getProcessInstanceId(), new String[]{taskModel.getName()}).size()==0;
|
||||
if(!isMerged) {
|
||||
isMerged = execution.getEngine().processTaskService().getDoingTaskList(execution.getProcessInstanceId(), new String[]{taskModel.getName()}).size() == 0;
|
||||
if (!isMerged) {
|
||||
// 未通过,更新已完成实例数量
|
||||
Dict addVariable = Dict.create();
|
||||
addVariable.put(prefix + FlowConst.NR_OF_COMPLETED_INSTANCES, execution.getArgs().get(prefix+FlowConst.NR_OF_COMPLETED_INSTANCES));
|
||||
addVariable.put(prefix + FlowConst.NR_OF_COMPLETED_INSTANCES, execution.getArgs().get(prefix + FlowConst.NR_OF_COMPLETED_INSTANCES));
|
||||
addVariable.put(prefix + FlowConst.NR_OF_COMPLETED_AGREE_INSTANCES, execution.getArgs().get(prefix + FlowConst.NR_OF_COMPLETED_AGREE_INSTANCES));
|
||||
execution.getEngine().processInstanceService().addVariable(execution.getProcessInstanceId(), addVariable);
|
||||
}
|
||||
}
|
||||
if(isMerged) {
|
||||
if (isMerged) {
|
||||
// 获取所有会签参数键值
|
||||
List<String> keys = execution.getArgs().keySet().stream().filter(k->k.startsWith(prefix)).collect(Collectors.toList());
|
||||
List<String> keys = execution.getArgs().keySet().stream().filter(k -> k.startsWith(prefix)).collect(Collectors.toList());
|
||||
keys.add(FlowConst.COUNTERSIGN_DISAGREE_FLAG);
|
||||
// 如果可以合并,则把流程实例中的会签参数清空
|
||||
execution.getEngine().processInstanceService().removeVariable(
|
||||
execution.getProcessInstanceId(),
|
||||
keys.toArray(new String[]{}));
|
||||
// 如果为并行会签,需将其他会签任务设置为废弃
|
||||
if(CountersignTypeEnum.PARALLEL.toString().equalsIgnoreCase(countersignType)) {
|
||||
execution.getEngine().processTaskService().getDoingTaskList(execution.getProcessInstanceId(), new String[]{taskModel.getName()}).stream().forEach(t->{
|
||||
if (CountersignTypeEnum.PARALLEL.toString().equalsIgnoreCase(countersignType)) {
|
||||
execution.getEngine().processTaskService().getDoingTaskList(execution.getProcessInstanceId(), new String[]{taskModel.getName()}).stream().forEach(t -> {
|
||||
execution.getEngine().processTaskService().abandonProcessTask(t.getId(), FlowConst.AUTO_ID, execution.getArgs());
|
||||
});
|
||||
}
|
||||
|
||||
@@ -42,6 +42,10 @@ public class ProcessTaskActor extends BaseModel {
|
||||
@Column
|
||||
private String actorName;
|
||||
|
||||
@Comment("参与者单位ID")
|
||||
@Column
|
||||
private String actorUnitId;
|
||||
|
||||
@Comment("参与者单位")
|
||||
@Column
|
||||
private String actorUnitName;
|
||||
|
||||
@@ -36,18 +36,14 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
|
||||
*/
|
||||
boolean update(ProcessTask param);
|
||||
|
||||
/**
|
||||
* 自定义分页查询流程任务
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
// CommonPage<ProcessTaskVO> page(ProcessTaskPageParam param);
|
||||
|
||||
/**
|
||||
* 通过id查询
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
ProcessTaskVO findById(Long id);
|
||||
|
||||
/**
|
||||
* 保存流程任务
|
||||
* @param processTask
|
||||
@@ -67,6 +63,7 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
|
||||
* @return
|
||||
*/
|
||||
List<ProcessTask> getDoingTaskList(Long processInstanceId, String[] taskNames);
|
||||
|
||||
/**
|
||||
* 根据流程实例ID获取已完成的任务
|
||||
* @param processInstanceId 流程实例ID
|
||||
@@ -74,6 +71,7 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
|
||||
* @return
|
||||
*/
|
||||
List<ProcessTask> getDoneTaskList(Long processInstanceId, String[] taskNames);
|
||||
|
||||
/**
|
||||
* 将流程任务修改为已完成
|
||||
* @param processTaskId
|
||||
@@ -104,12 +102,14 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
|
||||
* @return
|
||||
*/
|
||||
ProcessTask getById(Long id);
|
||||
|
||||
/**
|
||||
* 向指定的任务id添加参与者
|
||||
* @param processTaskId 任务id
|
||||
* @param actors 参与者
|
||||
*/
|
||||
void addTaskActor(Long processTaskId, List<String> actors);
|
||||
|
||||
/**
|
||||
* 向指定的任务id添加参与者
|
||||
* @param processTaskId 流程任务id
|
||||
@@ -137,18 +137,7 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
|
||||
* @return
|
||||
*/
|
||||
List<String> getTaskActors(Long processTaskId);
|
||||
/**
|
||||
* 查询待办列表
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
// CommonPage<ProcessTaskVO> todoList(ProcessTaskPageParam param);
|
||||
/**
|
||||
* 查询已办列表
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
// CommonPage<ProcessTaskVO> doneList(ProcessTaskPageParam param);
|
||||
|
||||
/**
|
||||
* 根据当前任务对象驳回至上一步处理
|
||||
* @param model 流程定义模型,用以获取上一步模型对象
|
||||
@@ -164,12 +153,6 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
|
||||
*/
|
||||
List<LabelValueVO> jumpAbleTaskNameList(Long processInstanceId);
|
||||
|
||||
/**
|
||||
* 分页查询获取候选人
|
||||
* @param query
|
||||
* @return
|
||||
*/
|
||||
// CommonPage<Map<String,Object>> candidatePage(Dict query);
|
||||
/**
|
||||
* 创建会签任务
|
||||
* @param taskModel
|
||||
@@ -177,6 +160,7 @@ public interface ProcessTaskService extends BaseService<ProcessTask> {
|
||||
* @return
|
||||
*/
|
||||
List<ProcessTask> createCountersignTask(TaskModel taskModel, Execution execution);
|
||||
|
||||
/**
|
||||
* 根据执行对象、自定义节点模型创建历史任务记录
|
||||
* @param execution 执行对象
|
||||
|
||||
@@ -211,7 +211,7 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
|
||||
if (CollectionUtil.isEmpty(actors)) return;
|
||||
List<String> dbActors = getTaskActors(processTaskId);
|
||||
List<String> newActors = actors.stream().filter(actor -> !dbActors.contains(actor)).toList();
|
||||
Sql sql = Sqls.create("select id,username,loginname,unitname from vw_user where id in (@ids)");
|
||||
Sql sql = Sqls.create("select id,username,loginname,unitName from vw_user where id in (@ids)");
|
||||
sql.setParam("ids", newActors);
|
||||
List<NutMap> list = listMap(sql);
|
||||
|
||||
@@ -221,7 +221,7 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
|
||||
processTaskActor.setActorId(actor.getString("id"));
|
||||
processTaskActor.setActorName(actor.getString("username"));
|
||||
processTaskActor.setActorAccount(actor.getString("loginname"));
|
||||
processTaskActor.setActorUnitName(actor.getString("unitname"));
|
||||
processTaskActor.setActorUnitName(actor.getString("unitName"));
|
||||
processTaskActor.setCreatedAt(System.currentTimeMillis());
|
||||
System.out.println(StrUtil.format("给任务:{},添加参与者:{}", processTaskId, actor.toString()));
|
||||
insert(processTaskActor);
|
||||
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
package com.budwk.app.zhgh.dayofficework.edu.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.dayofficework.edu.models.EduChapters;
|
||||
import com.budwk.app.zhgh.dayofficework.edu.models.EduVideos;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/edu/chapters")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "理论学习课程章节")
|
||||
public class EduChaptersController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("数据列表")
|
||||
public Result list(@Param("courseId") String courseId) {
|
||||
List<EduChapters> list = dao.query(EduChapters.class, Cnd.where(EduChapters::getCourseId, "=", courseId).asc(EduChapters::getSortCode));
|
||||
for (EduChapters chapters : list) {
|
||||
dao.fetchLinks(chapters, "videos", Cnd.NEW().asc(EduVideos::getSortCode));
|
||||
}
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("添加")
|
||||
@SLog(tag = "理论学习课程", msg = "添加课程章节")
|
||||
public Result insert(EduChapters eduChapters) {
|
||||
dao.insert(eduChapters);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("修改")
|
||||
@SLog(tag = "理论学习课程", msg = "修改课程章节")
|
||||
public Result update(EduChapters eduChapters) {
|
||||
dao.update(eduChapters);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("删除")
|
||||
@SLog(tag = "理论学习课程", msg = "删除课程章节,id:${args[0]}")
|
||||
public Result delete(@Param("id") String id) {
|
||||
dao.delete(EduChapters.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
package com.budwk.app.zhgh.dayofficework.edu.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.dayofficework.edu.models.EduCourses;
|
||||
import com.budwk.app.zhgh.dayofficework.edu.service.EduCoursesService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/edu/courses")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "理论学习课程")
|
||||
public class EduCoursesController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private EduCoursesService eduCoursesService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/dayofficework/edu/courses/index.html")
|
||||
@SaCheckPermission("edu.courses")
|
||||
public void index() {
|
||||
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("数据列表")
|
||||
public Result pageData(PageForm pageForm) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Pagination pagination = eduCoursesService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("添加")
|
||||
@SLog(tag = "理论学习课程", msg = "添加课程")
|
||||
public Result insert(EduCourses eduCourses) {
|
||||
dao.insert(eduCourses);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("修改")
|
||||
@SLog(tag = "理论学习课程", msg = "修改课程")
|
||||
public Result update(EduCourses eduCourses) {
|
||||
dao.update(eduCourses);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("删除")
|
||||
@SLog(tag = "理论学习课程", msg = "删除课程,id:${args[0]}")
|
||||
public Result delete(@Param("id") String id) {
|
||||
dao.delete(EduCourses.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.budwk.app.zhgh.dayofficework.edu.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.dayofficework.edu.models.EduChapters;
|
||||
import com.budwk.app.zhgh.dayofficework.edu.models.EduVideos;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@IocBean
|
||||
@At("/platform/edu/video")
|
||||
@Ok("json:full")
|
||||
@Api(tags = "理论学习课程视频")
|
||||
public class EduVideoController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("数据列表")
|
||||
public Result list(@Param("chapterId") String chapterId) {
|
||||
List<EduVideos> list = dao.query(EduVideos.class, Cnd.where(EduVideos::getChapterId, "=", chapterId).asc(EduVideos::getSortCode));
|
||||
return Result.success(list);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("添加")
|
||||
@SLog(tag = "理论学习课程", msg = "添加课程视频")
|
||||
public Result insert(EduVideos eduVideos) {
|
||||
dao.insert(eduVideos);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("修改")
|
||||
@SLog(tag = "理论学习课程", msg = "修改课程视频")
|
||||
public Result update(EduVideos eduVideos) {
|
||||
dao.update(eduVideos);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("edu.courses")
|
||||
@ApiOperation("删除")
|
||||
@SLog(tag = "理论学习课程", msg = "删除课程视频,id:${args[0]}")
|
||||
public Result delete(@Param("id") String id) {
|
||||
dao.delete(EduVideos.class, id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -6,6 +6,8 @@ import lombok.EqualsAndHashCode;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@Table("edu_chapters")
|
||||
@@ -33,6 +35,11 @@ public class EduChapters extends BaseModel {
|
||||
@Column
|
||||
private Integer sortCode;
|
||||
|
||||
/**
|
||||
* 视频
|
||||
*/
|
||||
@Many(field = "chapterId")
|
||||
private List<EduVideos> videos;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.budwk.app.zhgh.dayofficework.edu.service;
|
||||
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.zhgh.dayofficework.edu.models.EduCourses;
|
||||
|
||||
public interface EduCoursesService extends BaseService<EduCourses> {
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.budwk.app.zhgh.dayofficework.edu.service.impl;
|
||||
|
||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||
import com.budwk.app.zhgh.dayofficework.edu.models.EduCourses;
|
||||
import com.budwk.app.zhgh.dayofficework.edu.service.EduCoursesService;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class EduCoursesServiceImpl extends BaseServiceImpl<EduCourses> implements EduCoursesService {
|
||||
public EduCoursesServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
}
|
||||
-81
@@ -1,81 +0,0 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressApprovalController
|
||||
* @Date 2024/8/16 17:21
|
||||
* @注释 基层双代会批复
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/approval")
|
||||
@Api(tags = "基层双代会批复")
|
||||
public class GrassrootsCongressApprovalController {
|
||||
|
||||
@Inject
|
||||
private GrassrootsCongressService grassrootsCongressService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/approval/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.approval")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("会议列表")
|
||||
@SaCheckPermission("grassrootsCongress.approval")
|
||||
public Result pageData(PageForm pageForm, Integer year, String unionId) {
|
||||
Pagination pagination = grassrootsCongressService.approvalPageData(pageForm, year, unionId);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会议批复")
|
||||
@SaCheckPermission("grassrootsCongress.approval")
|
||||
@SLog(type = "基层双代会", tag = "基层双代会批复", msg = "校工会批复信息")
|
||||
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
|
||||
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会议批复撤回")
|
||||
@SaCheckPermission("grassrootsCongress.approval")
|
||||
@SLog(type = "基层双代会", tag = "基层双代会批复撤回", msg = "校工会批复信息撤回")
|
||||
public Result revoke(@Valid String taskId) {
|
||||
bpmService.revokeTask(taskId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
-71
@@ -1,71 +0,0 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressMeetingStatisticsController
|
||||
* @Date 2024/11/14 19:25
|
||||
* @注释
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/meetingStatistics")
|
||||
@Api(tags = "基层双代会汇总统计")
|
||||
public class GrassrootsCongressMeetingStatisticsController {
|
||||
|
||||
@Inject
|
||||
private GrassrootsCongressService grassrootsCongressService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/meetingstatistics/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.meetingStatistics")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("汇总统计列表")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
public Result pageData(GrassrootsCongressPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
su.*,
|
||||
sum(CASE WHEN info.unionId = su.id THEN 1 ELSE 0 END) as unionNum
|
||||
FROM
|
||||
sys_union su
|
||||
LEFT JOIN grassroots_congress_meeting_info info ON su.id = info.unionId $yearSql $nameSql
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (pageForm.getYear() != null) {
|
||||
sql.setVar("yearSql", new Static(" and YEAR(info.createTime) = %s".formatted( pageForm.getYear())));
|
||||
}
|
||||
if (StrUtil.isNotBlank(pageForm.getFullName())) {
|
||||
sql.setVar("nameSql", new Static(" and info.fullName = '%s'".formatted(pageForm.getFullName())));
|
||||
}
|
||||
// cnd.andEX("YEAR(info.createTime)", "=", pageForm.getYear());
|
||||
// cnd.andEX("info.fullName", "=", pageForm.getFullName());
|
||||
cnd.andEX("su.id", "=", pageForm.getUnionId());
|
||||
cnd.groupBy("su.id");
|
||||
sql.setCondition(cnd);
|
||||
return Result.success(grassrootsCongressService.listMap(sql));
|
||||
}
|
||||
}
|
||||
-100
@@ -1,100 +0,0 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName GrassrootsCongressMyMeetingController
|
||||
* @Description 我的申请
|
||||
* @Author zhf
|
||||
* @Date 2024/9/5 9:57
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/myMeeting")
|
||||
@Api(tags = "基层双代会我的请示")
|
||||
public class GrassrootsCongressMyMeetingController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
@Inject
|
||||
private GrassrootsCongressService grassrootsCongressService;
|
||||
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/myMeetings/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("我的请示列表")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
public Result pageData(@Valid GrassrootsCongressPageForm pageForm, Integer year) {
|
||||
Pagination pagination = grassrootsCongressService.pageData(pageForm, year);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("删除会议请示")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(type = "grassrootsCongress", tag = "基层双代会", msg = "删除会议请示")
|
||||
public Result doDelete(@Valid String id) {
|
||||
baseService.dao().delete(GrassrootsCongressMeetingInfo.class, id);
|
||||
grassrootsCongressService.delete(id);
|
||||
bpmService.deleteInstance(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@ApiOperation("会议请示撤回")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
@SLog(type = "基层双代会", tag = "基层双代会请示撤回", msg = "会议请示信息撤回")
|
||||
public Result revoke(@Valid String id) {
|
||||
bpmService.revokeApply(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("基层双代会届次")
|
||||
@SaCheckPermission("grassrootsCongress.myMeeting")
|
||||
public Result getAllJc(Integer year){
|
||||
List<GrassrootsCongressMeetingInfo> query = baseService.dao().query(GrassrootsCongressMeetingInfo.class,
|
||||
Cnd.where("YEAR(createTime)", "=", year).and("fullName", "is not", null).groupBy("fullName"));
|
||||
if (Lang.isNotEmpty(query)) {
|
||||
List<String> list = query.stream().map(GrassrootsCongressMeetingInfo::getFullName).toList();
|
||||
return Result.success(list);
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.meeting;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.utils.PageUtil;
|
||||
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.grassrootscongress.service.GrassrootsCongressService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/meeting/approval")
|
||||
@Api(tags = "基层双代会批复")
|
||||
public class GrassrootsCongressMeetingApprovalController {
|
||||
|
||||
@Inject
|
||||
private GrassrootsCongressService grassrootsCongressService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/meeting/approval/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.approval")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("会议列表")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.approval")
|
||||
public Result pageData(PageForm pageForm, Integer year, String meetingName, String unionId, boolean approval) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
ins.id AS instanceId,
|
||||
ins.businessNo,
|
||||
ins.state instanceState,
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId,
|
||||
t.id taskId,
|
||||
t.taskName AS taskKey,
|
||||
t.displayName taskName,
|
||||
t.taskType,
|
||||
t.performType taskPerformType,
|
||||
t.taskState,
|
||||
t.finishTime,
|
||||
t.taskParentId,
|
||||
t.variable taskVariable,
|
||||
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
|
||||
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
|
||||
FROM
|
||||
wf_process_task t
|
||||
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||
LEFT JOIN grassroots_congress_meeting_info info ON info.id = ins.businessNo
|
||||
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
||||
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
|
||||
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "=", "8384aafd-3cdb-49ab-a11f-c5d145b1672c");
|
||||
|
||||
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()));
|
||||
} else {
|
||||
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
|
||||
}
|
||||
|
||||
cnd.andEX("YEAR(info.createTime)", "=", year);
|
||||
cnd.and(Cnd.likeEX("info.meetingName", meetingName));
|
||||
cnd.andEX("info.unionId", "=", unionId);
|
||||
|
||||
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.desc("info.createdAt");
|
||||
} else {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||
}
|
||||
cnd.groupBy("t.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<NutMap> pageVO = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pageVO);
|
||||
}
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.meeting;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/meeting/common")
|
||||
@Api(tags = "基层双代会")
|
||||
public class GrassrootsCongressMeetingCommonController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("获取申请信息")
|
||||
public Result info(@Param("id") String id) {
|
||||
GrassrootsCongressMeetingInfo info = dao.fetch(GrassrootsCongressMeetingInfo.class, id);
|
||||
return Result.success(info);
|
||||
}
|
||||
|
||||
}
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.meeting;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.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.flow.engine.FlowEngine;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
|
||||
import 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.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/meeting/mine")
|
||||
@Api(tags = "基层双代会我的请示")
|
||||
public class GrassrootsCongressMeetingMineController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
@Inject
|
||||
private GrassrootsCongressService grassrootsCongressService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/meeting/mine/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.mine")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("我的请示列表")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.mine")
|
||||
public Result pageData(@Valid GrassrootsCongressPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
ins.id AS instanceId,
|
||||
ins.businessNo,
|
||||
ins.state instanceState,
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId,
|
||||
t.id taskId,
|
||||
t.taskName AS taskKey,
|
||||
t.displayName taskName,
|
||||
t.taskType,
|
||||
t.performType taskPerformType,
|
||||
t.taskState,
|
||||
t.finishTime,
|
||||
t.taskParentId,
|
||||
t.variable taskVariable,
|
||||
IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke,
|
||||
(select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId
|
||||
FROM
|
||||
grassroots_congress_meeting_info info
|
||||
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
|
||||
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
|
||||
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("info.createdBy", "=", SecurityUtil.getUserId());
|
||||
|
||||
cnd.andEX("YEAR(info.createTime)", "=", pageForm.getYear());
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
cnd.and(Cnd.likeEX("info.meetingName", pageForm.getSearchKeyword()));
|
||||
}
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("info.createUserId", "=", SecurityUtil.getUserId());
|
||||
}
|
||||
cnd.desc("info.createTime");
|
||||
|
||||
sql.setCondition(cnd);
|
||||
Pagination<NutMap> pagination = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("删除会议请示")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.mine")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "基层双代会-我的请示", msg = "删除会议请示")
|
||||
public Result delete(@Valid String id) {
|
||||
grassrootsCongressService.delete(id);
|
||||
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("基层双代会届次")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.mine")
|
||||
public Result getAllJc(Integer year) {
|
||||
List<GrassrootsCongressMeetingInfo> query = baseService.dao().query(GrassrootsCongressMeetingInfo.class,
|
||||
Cnd.where("YEAR(createTime)", "=", year).and("fullName", "is not", null).groupBy("fullName"));
|
||||
if (Lang.isNotEmpty(query)) {
|
||||
List<String> list = query.stream().map(GrassrootsCongressMeetingInfo::getFullName).toList();
|
||||
return Result.success(list);
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.meeting;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/meeting/statistics")
|
||||
@Api(tags = "基层双代会汇总统计")
|
||||
public class GrassrootsCongressMeetingStatisticsController {
|
||||
|
||||
@Inject
|
||||
private GrassrootsCongressService grassrootsCongressService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/meeting/statistics/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.statistics")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("汇总统计列表")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.statistics")
|
||||
public Result pageData(GrassrootsCongressPageForm pageForm) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.*,
|
||||
ins.id AS instanceId,
|
||||
ins.businessNo,
|
||||
ins.state instanceState,
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId
|
||||
FROM
|
||||
grassroots_congress_meeting_info info
|
||||
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("ins.state","=", ProcessInstanceStateEnum.FINISHED.getCode());
|
||||
|
||||
cnd.andEX("YEAR(info.createTime)", "=", pageForm.getYear());
|
||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||
cnd.and(Cnd.likeEX("info.meetingName", pageForm.getSearchKeyword()));
|
||||
}
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("info.createUserId", "=", SecurityUtil.getUserId());
|
||||
}
|
||||
cnd.desc("info.createTime");
|
||||
sql.setCondition(cnd);
|
||||
Pagination<NutMap> pagination = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
}
|
||||
+54
-46
@@ -1,27 +1,27 @@
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
|
||||
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.meeting;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.constant.BpmProcessConstant;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.bpm.service.BpmService;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowEngine;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||
import com.budwk.app.flow.service.FlowCommonService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
|
||||
import com.budwk.app.zhgh.democratic.grassrootscongress.vo.GrassrootsCongressVo;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
@@ -32,78 +32,86 @@ import org.nutz.mvc.annotation.Param;
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @version 1.0
|
||||
* @Author zzr
|
||||
* @name:GrassrootsCongressApplyController
|
||||
* @Date 2024/8/16 16:44
|
||||
* @注释 基层双代会请示
|
||||
*/
|
||||
@Slf4j
|
||||
@IocBean
|
||||
@Ok("json:full")
|
||||
@At("/platform/grassrootsCongress/meeting")
|
||||
@Api(tags = "基层双代会请示")
|
||||
public class GrassrootsCongressMeetingController {
|
||||
@At("/platform/grassrootsCongress/meeting/write")
|
||||
@Api(tags = "基层双代会-会议请示")
|
||||
public class GrassrootsCongressMeetingWriteController {
|
||||
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
private FlowEngine flowEngine;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private CommonService commonService;
|
||||
private FlowCommonService flowCommonService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/meetings/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.meeting")
|
||||
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/meeting/write/index.html")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.write")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ApiOperation("提交")
|
||||
@ApiOperation("保存")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "基层双代会", msg = "会议请示添加会议")
|
||||
@SaCheckPermission("grassrootsCongress.meeting")
|
||||
public Result doSubmit(@Param("data") GrassrootsCongressMeetingInfo data) {
|
||||
@SLog(tag = "基层双代会-会议请示", msg = "保存会议")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.write")
|
||||
public Result save(@Param("data") GrassrootsCongressMeetingInfo data) {
|
||||
data.setCreateTime(DateUtil.now());
|
||||
data.setCreateUserId(SecurityUtil.getUserId());
|
||||
data.setCreateUserName(SecurityUtil.getUserUsername());
|
||||
dao.insertOrUpdate(data);
|
||||
List<String> loginNameList = commonService.findUsersLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_WC_AUDIT_ADMIN);
|
||||
if (ObjectUtil.isEmpty(loginNameList)) {
|
||||
return Result.error("校工会基层双代会批复人未设置");
|
||||
}
|
||||
bpmService.startSubmitProcessInstance(BpmProcessConstant.GRASSROOTS_CONGRESS.name(), data.getMeetingName(), data.getId(), loginNameList, null);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@ApiOperation("保存")
|
||||
@ApiOperation("提交")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "基层双代会", msg = "会议请示添加会议")
|
||||
@SaCheckPermission("grassrootsCongress.meeting")
|
||||
public Result doSave(@Param("data") GrassrootsCongressMeetingInfo data) {
|
||||
@SLog(tag = "基层双代会-会议请示", msg = "提交会议")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.write")
|
||||
public Result submit(@Param("data") GrassrootsCongressMeetingInfo data) {
|
||||
data.setCreateTime(DateUtil.now());
|
||||
data.setCreateUserId(SecurityUtil.getUserId());
|
||||
data.setCreateUserName(SecurityUtil.getUserUsername());
|
||||
dao.insertOrUpdate(data);
|
||||
bpmService.startSaveProcessInstance(BpmProcessConstant.GRASSROOTS_CONGRESS.name(), data.getMeetingName(), data.getId(), null);
|
||||
|
||||
// 开启流程实例
|
||||
Dict args = Dict.create();
|
||||
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
|
||||
ProcessInstance instance = flowEngine.startProcessInstanceByKey("JCSDH", data.getId(), SecurityUtil.getUserId(), args);
|
||||
|
||||
// 自动完成第一个申请任务
|
||||
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null);
|
||||
for (ProcessTask task : doingTaskList) {
|
||||
flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args);
|
||||
}
|
||||
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@ApiOperation("重新提交申请")
|
||||
@SLog(tag = "基层双代会-会议请示", msg = "重新提交申请")
|
||||
@SaCheckPermission("grassrootsCongress.meeting.write")
|
||||
public Result submitAgain(@Param("data") GrassrootsCongressMeetingInfo data, @Param("taskId") Long taskId) {
|
||||
dao.insertOrUpdate(data);
|
||||
|
||||
Dict dict = Dict.create();
|
||||
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
|
||||
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
|
||||
flowCommonService.executeTask(dict);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckPermission("grassrootsCongress")
|
||||
@ApiOperation("查询单个会议信息")
|
||||
public Result findOne(@Valid String id) {
|
||||
Sql sql = Sqls.create("""
|
||||
select * from grassroots_congress_meeting_info where id=@id
|
||||
""").setParam("id", id);
|
||||
GrassrootsCongressVo grassrootsCongressVo = (GrassrootsCongressVo) baseService.fetchVO(sql, GrassrootsCongressVo.class);
|
||||
grassrootsCongressVo.setNodeTasks(bpmService.getNodeTasks(BpmProcessConstant.GRASSROOTS_CONGRESS, id));
|
||||
return Result.success(grassrootsCongressVo);
|
||||
public Result info(@Valid String id) {
|
||||
GrassrootsCongressMeetingInfo info = dao.fetch(GrassrootsCongressMeetingInfo.class, id);
|
||||
return Result.success(info);
|
||||
}
|
||||
|
||||
|
||||
+1
-25
@@ -61,41 +61,17 @@ public class ProposalQueryCollectProgressController {
|
||||
info.createUserName,
|
||||
type.NAME AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeName,
|
||||
count( secondedTask.id ) seconderSum,
|
||||
sum( CASE WHEN secondedTask.taskStatus = 'ACTIVE' THEN 1 ELSE 0 END ) activeCount,
|
||||
sum( CASE WHEN secondedTask.taskStatus = 'COMPLETE' THEN 1 ELSE 0 END ) completeCount
|
||||
tcd.`name` AS delegationName
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_type type ON type.id = info.typeId
|
||||
LEFT JOIN teacher_congress_session tcs ON tcs.id = info.sessionId
|
||||
LEFT JOIN teacher_congress_delegation tcd ON tcd.id = info.delegationId
|
||||
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
LEFT JOIN bpm_process_task secondedTask ON secondedTask.processInstanceId = inst.id
|
||||
AND secondedTask.taskStatus IN ( 'ACTIVE', 'COMPLETE' )
|
||||
AND secondedTask.processTaskNodeCode = 20
|
||||
$condition
|
||||
""");
|
||||
sql.setParam("sessionId", pageForm.getSessionId());
|
||||
Cnd cnd = Cnd.NEW();
|
||||
// Sql subSql = Sqls.create("""
|
||||
// SELECT
|
||||
// inst.id
|
||||
// FROM
|
||||
// bpm_process_instance inst
|
||||
// INNER JOIN proposal_info info ON info.id = inst.processInstanceBusinessId
|
||||
// $condition
|
||||
// """);
|
||||
// Cnd subCnd = Cnd.NEW();
|
||||
// subCnd.and("info.sessionId", "=", pageForm.getSessionId());
|
||||
// subCnd.and("inst.processInstanceNodeCode", "in", pageForm.getCollectIds());
|
||||
// if (ArrayUtil.contains(pageForm.getCollectIds(), 50)) {
|
||||
// subCnd.and("inst.processInstanceNodeCode", ">", pageForm.getCollectIds());
|
||||
// }
|
||||
// subSql.setCondition(subCnd);
|
||||
// cnd.and("inst.id", "in", subSql);
|
||||
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
if (ArrayUtil.contains(pageForm.getCollectIds(), 10)) {
|
||||
|
||||
+14
-25
@@ -53,13 +53,14 @@ public class ProposalQueryComprehensiveController {
|
||||
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,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
||||
JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
@@ -67,32 +68,20 @@ public class ProposalQueryComprehensiveController {
|
||||
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 (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
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if(StrUtil.isNotBlank(pageForm.getUndertakeUnitId())){
|
||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||
seg.or("JSON_EXTRACT(caseUnitTasks.extVariable, '$.hostUnitId')","=",pageForm.getUndertakeUnitId());
|
||||
seg.orLike("JSON_UNQUOTE(JSON_EXTRACT(caseUnitTasks.extVariable, '$.helpUnitIds'))",pageForm.getUndertakeUnitId());
|
||||
cnd.and(seg);
|
||||
|
||||
}
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm,sql, ProposalInfoPageVO.class);
|
||||
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
+8
-6
@@ -84,18 +84,20 @@ public class ProposalQueryDelegationController {
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus
|
||||
ins.id AS instanceId,
|
||||
ins.businessNo,
|
||||
ins.state instanceState,
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId,
|
||||
t.displayName curTaskName
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
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
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
+12
-6
@@ -46,11 +46,14 @@ public class ProposalQueryHistoryController {
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus
|
||||
ins.id AS instanceId,
|
||||
ins.businessNo,
|
||||
ins.state instanceState,
|
||||
ins.variable instanceVariable,
|
||||
ins.processDefineId instanceProcessDefineId,
|
||||
t.displayName curTaskName,
|
||||
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
|
||||
JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
@@ -58,7 +61,10 @@ public class ProposalQueryHistoryController {
|
||||
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 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
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
+78
-61
@@ -7,7 +7,11 @@ import cn.hutool.json.JSONObject;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
|
||||
import com.budwk.app.bpm.models.BpmProcessTask;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
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.ProposalUndertake;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -17,6 +21,7 @@ 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;
|
||||
@@ -47,53 +52,45 @@ public class ProposalQueryUnitReplyController {
|
||||
@At
|
||||
@SaCheckPermission("proposal.query.unitReply")
|
||||
public Result data(String sessionId, String undertakeUnitId) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
info.id,
|
||||
inst.id AS instId
|
||||
FROM
|
||||
proposal_info info
|
||||
INNER JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
WHERE info.sessionId = @sessionId
|
||||
""");
|
||||
sql.setParam("sessionId", sessionId);
|
||||
List<NutMap> list = proposalCommonService.listMap(sql);
|
||||
List<String> instIds = list.stream().map(v -> v.getString("instId")).toList();
|
||||
List<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();
|
||||
|
||||
//查询提案委员会分配的承办单位
|
||||
List<BpmProcessTask> caseUnitTasks = dao.query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(BpmProcessTask::getTaskStatus, "=", BpmProcessTaskStatusEnum.COMPLETE.name())
|
||||
.and(BpmProcessTask::getProcessTaskNodeCode, "=", 70)
|
||||
.and(BpmProcessTask::getDelFlag, "=", 0)
|
||||
);
|
||||
List<JSONObject> caseUnitTaskExtVariables = caseUnitTasks.stream().map(BpmProcessTask::getExtVariable).toList();
|
||||
// 立案任务记录
|
||||
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"));
|
||||
|
||||
//所有承办单位
|
||||
Set<String> underTakeIds = new HashSet<>();
|
||||
// 主办任务记录
|
||||
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, "=", "85cf23da-2dd5-4007-a1e9-bd9bfddc68f0"));
|
||||
|
||||
// 协办任务记录
|
||||
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<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();
|
||||
|
||||
if (StrUtil.isNotBlank(undertakeUnitId)) {
|
||||
underTakeIds.add(undertakeUnitId);
|
||||
} else {
|
||||
for (JSONObject caseUnitTaskExtVariable : caseUnitTaskExtVariables) {
|
||||
String hostUnitId = caseUnitTaskExtVariable.getStr("hostUnitId");
|
||||
List<String> helpUnitIds = caseUnitTaskExtVariable.getBeanList("helpUnitIds", String.class);
|
||||
underTakeIds.addAll(helpUnitIds);
|
||||
underTakeIds.add(hostUnitId);
|
||||
}
|
||||
}
|
||||
|
||||
List<ProposalUndertake> undertakes = dao.query(ProposalUndertake.class, Cnd.where(ProposalUndertake::getId, "in", underTakeIds));
|
||||
Map<String, ProposalUndertake> undertakeMap = undertakes.stream().collect(Collectors.toMap(ProposalUndertake::getId, v -> v));
|
||||
|
||||
//查询承办单位任务
|
||||
List<BpmProcessTask> underTakeTasks = dao.query(BpmProcessTask.class, Cnd.where(BpmProcessTask::getProcessInstanceId, "in", instIds)
|
||||
.and(BpmProcessTask::getProcessTaskNodeCode, "=", 80)
|
||||
.and(BpmProcessTask::getDelFlag, "=", 0)
|
||||
);
|
||||
|
||||
ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW());
|
||||
Boolean slaveNeedReply = ObjectUtil.defaultIfNull(proposalConfig.getSlaveUnitLeaderNeedApprove(), false);
|
||||
|
||||
List<NutMap> tableData = new ArrayList<>();
|
||||
|
||||
for (String underTakeId : underTakeIds) {
|
||||
@@ -102,11 +99,31 @@ public class ProposalQueryUnitReplyController {
|
||||
tableRow.put("name", undertakeMap.get(underTakeId).getName());
|
||||
|
||||
//找出承办提案总数
|
||||
long sum = caseUnitTasks.stream().filter(v -> v.getExtVariable().getStr("hostUnitId").equals(underTakeId) || v.getExtVariable().getBeanList("helpUnitIds", String.class).contains(underTakeId)).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
// long sum = caseTasks.stream().filter(v -> (Json.fromJson(NutMap.class, v.getVariable())).getString("tf_hostUnitId").equals(underTakeId) || (Json.fromJson(NutMap.class, v.getVariable())).getAsList("helpUnitIds", String.class).contains(underTakeId)).map(ProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
|
||||
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 = underTakeTasks.stream().filter(v -> v.getCreateVariable().getStr("underTakeId").equals(underTakeId) && v.getCreateVariable().getBool("isMaster", false)).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
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 = 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 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;
|
||||
|
||||
@@ -115,25 +132,25 @@ public class ProposalQueryUnitReplyController {
|
||||
tableRow.put("hostReplySum", hostReplySum);
|
||||
tableRow.put("hostNoReplySum", hostNoReplySum);
|
||||
|
||||
if (slaveNeedReply) {
|
||||
//协办提案数量
|
||||
long helpSum = underTakeTasks.stream().filter(v -> v.getCreateVariable().getStr("underTakeId").equals(underTakeId) && !v.getCreateVariable().getBool("isMaster", false)).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
//协办已答复的数量
|
||||
long helpReplySum = underTakeTasks.stream().filter(v -> v.getCreateVariable().getStr("underTakeId").equals(underTakeId) && !v.getCreateVariable().getBool("isMaster", false) && v.getTaskStatus().equals(BpmProcessTaskStatusEnum.COMPLETE.name())).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
//协办未答复的数量
|
||||
long helpNoReplySum = helpSum - helpReplySum;
|
||||
tableRow.put("helpSum", helpSum);
|
||||
tableRow.put("helpReplySum", helpReplySum);
|
||||
tableRow.put("helpNoReplySum", helpNoReplySum);
|
||||
} else {
|
||||
//不需要协办答复 计算出提案总数即可
|
||||
int helpSum = caseUnitTasks.stream()
|
||||
.filter(v -> v.getExtVariable().getBeanList("helpUnitIds", String.class).contains(underTakeId))
|
||||
.map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
tableRow.put("helpSum", helpSum);
|
||||
}
|
||||
// if (slaveNeedReply) {
|
||||
// //协办提案数量
|
||||
// long helpSum = underTakeTasks.stream().filter(v -> v.getCreateVariable().getStr("underTakeId").equals(underTakeId) && !v.getCreateVariable().getBool("isMaster", false)).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
// //协办已答复的数量
|
||||
// long helpReplySum = underTakeTasks.stream().filter(v -> v.getCreateVariable().getStr("underTakeId").equals(underTakeId) && !v.getCreateVariable().getBool("isMaster", false) && v.getTaskStatus().equals(BpmProcessTaskStatusEnum.COMPLETE.name())).map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
// //协办未答复的数量
|
||||
// long helpNoReplySum = helpSum - helpReplySum;
|
||||
// tableRow.put("helpSum", helpSum);
|
||||
// tableRow.put("helpReplySum", helpReplySum);
|
||||
// tableRow.put("helpNoReplySum", helpNoReplySum);
|
||||
// } else {
|
||||
// //不需要协办答复 计算出提案总数即可
|
||||
// int helpSum = caseUnitTasks.stream()
|
||||
// .filter(v -> v.getExtVariable().getBeanList("helpUnitIds", String.class).contains(underTakeId))
|
||||
// .map(BpmProcessTask::getProcessInstanceId).collect(Collectors.toSet()).size();
|
||||
// tableRow.put("helpSum", helpSum);
|
||||
// }
|
||||
tableData.add(tableRow);
|
||||
}
|
||||
return Result.success().addData(Map.of("tableData", tableData, "slaveNeedReply", slaveNeedReply));
|
||||
return Result.success().addData(Map.of("tableData", tableData, "slaveNeedReply", false));
|
||||
}
|
||||
}
|
||||
|
||||
+12
-14
@@ -6,11 +6,13 @@ 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;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
@@ -35,9 +37,9 @@ public class ProposalSeniorDeleteController {
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
private BpmService bpmService;
|
||||
private FlowEngine flowEngine;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/zhgh/democratic/proposal/senior/delete/index.html")
|
||||
@@ -55,26 +57,20 @@ public class ProposalSeniorDeleteController {
|
||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus
|
||||
tcd.`name` AS delegationName
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
|
||||
cnd.groupBy("info.id");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
Pagination pagination = proposalCommonService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
@@ -85,10 +81,12 @@ public class ProposalSeniorDeleteController {
|
||||
@SLog(tag = "提案管理系统-高级管理-万能删除提案", msg = "删除提案")
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result delete(String id) {
|
||||
dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", id));
|
||||
dao.clear(ProposalSeconded.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", id));
|
||||
dao.clear(ProposalInfo.class, Cnd.where(ProposalInfo::getId, "=", id));
|
||||
bpmService.deleteInstance(id);
|
||||
// dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", id));
|
||||
// dao.clear(ProposalSeconded.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", id));
|
||||
// dao.clear(ProposalInfo.class, Cnd.where(ProposalInfo::getId, "=", id));
|
||||
// bpmService.deleteInstance(id);
|
||||
dao.clear(ProposalInfo.class, Cnd.where("id", "=", id));
|
||||
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
+1
-7
@@ -51,19 +51,13 @@ public class ProposalSeniorTypeController {
|
||||
COUNT(p.consolidationIds) > 0 AS isConsolidation,
|
||||
type.name AS typeName,
|
||||
tcs.fullName AS sessionName,
|
||||
tcd.`name` AS delegationName,
|
||||
inst.processInstanceNodeId,
|
||||
inst.processInstanceNodeCode,
|
||||
inst.processInstanceNodeName,
|
||||
inst.processInstanceTaskIds,
|
||||
inst.processInstanceStatus
|
||||
tcd.`name` AS delegationName
|
||||
FROM
|
||||
proposal_info info
|
||||
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
|
||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
|
||||
$condition
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
|
||||
+138
-41
@@ -8,17 +8,18 @@ import com.budwk.app.base.annotation.SLog;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.param.PageForm;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.service.BaseService;
|
||||
import com.budwk.app.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;
|
||||
import com.budwk.app.flow.service.ProcessTaskService;
|
||||
import com.budwk.app.sys.services.SysMsgService;
|
||||
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.param.ProposalSearchParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
|
||||
@@ -34,6 +35,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
@@ -51,12 +53,8 @@ public class ProposalMineController {
|
||||
@Inject
|
||||
private Dao dao;
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
@Inject
|
||||
private ProposalCommonService proposalCommonService;
|
||||
@Inject
|
||||
private SysMsgService sysMsgService;
|
||||
@Inject
|
||||
private FlowEngine flowEngine;
|
||||
@Inject
|
||||
private ProcessTaskService processTaskService;
|
||||
@@ -138,38 +136,111 @@ public class ProposalMineController {
|
||||
@ApiOperation("查询可邀请的附议人")
|
||||
public Result listSeconder(@Valid PageForm pageForm, @Valid String proposalId, @Valid String sessionId,
|
||||
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<ProcessTaskActor> taskActors = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "in", taskList.stream().map(ProcessTask::getId).toList()));
|
||||
|
||||
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());
|
||||
|
||||
if (isInvite) {
|
||||
// 查询已经邀请的附议人
|
||||
cnd.and("t1.loginName", "in", taskActors.stream().map(ProcessTaskActor::getActorAccount).toList());
|
||||
} 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());
|
||||
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);
|
||||
cnd.andEX("t1.loginName", "not in", taskActors.stream().map(ProcessTaskActor::getActorAccount).toList());
|
||||
}
|
||||
return Result.success();
|
||||
|
||||
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);
|
||||
|
||||
|
||||
// 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
|
||||
@@ -177,10 +248,32 @@ public class ProposalMineController {
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
@SLog(tag = "提案", msg = "邀请附议人")
|
||||
public Result inviteSeconder(@Param("seconders") String[] seconders, @Valid String proposalId) {
|
||||
//插入附议人数据
|
||||
// 查询已经邀请的附议人
|
||||
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())
|
||||
);
|
||||
|
||||
ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW());
|
||||
|
||||
if (taskList.size() + seconders.length < proposalConfig.getSeconderNum()) {
|
||||
return Result.error("至少邀请" + proposalConfig.getSeconderNum() + "个附议人");
|
||||
}
|
||||
|
||||
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT
|
||||
t1.id seconderId,
|
||||
t1.id,
|
||||
t1.userId,
|
||||
t1.loginName,
|
||||
t1.userName,
|
||||
t1.sex,
|
||||
@@ -196,9 +289,7 @@ public class ProposalMineController {
|
||||
sql.setCondition(Cnd.where("t1.loginName", "in", seconders).groupBy("t1.loginName"));
|
||||
List<NutMap> list = proposalCommonService.listMap(sql);
|
||||
// 附议人ID
|
||||
List<String> userIds = list.stream().map(item -> item.getString("seconderId")).toList();
|
||||
// 获取流程实例
|
||||
ProcessInstance processInstance = flowEngine.processInstanceService().fetch(Cnd.where(ProcessInstance::getBusinessNo, "=", proposalId));
|
||||
List<String> userIds = list.stream().map(item -> item.getString("userId")).toList();
|
||||
// 获取正在执行的任务(邀请附议人||提案附议)
|
||||
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(processInstance.getId(), null);
|
||||
|
||||
@@ -211,11 +302,17 @@ public class ProposalMineController {
|
||||
args.set(FlowConst.NEXT_NODE_OPERATOR, userIds);
|
||||
args.set(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", list);
|
||||
flowCommonService.executeTask(args);
|
||||
// flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args);
|
||||
}
|
||||
} else {
|
||||
// 加签
|
||||
processTaskService.addCandidateActor(doingTaskList.get(0).getId(), userIds);
|
||||
|
||||
NutMap variable = Json.fromJson(NutMap.class, inviteTask.getVariable());
|
||||
List<NutMap> tfSeconders = variable.getAsList(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", NutMap.class);
|
||||
tfSeconders.addAll(list);
|
||||
variable.put(FlowConst.TASK_FORM_DATA_PREFIX + "seconder", tfSeconders);
|
||||
inviteTask.setVariable(Json.toJson(variable));
|
||||
dao.update(inviteTask, "variable");
|
||||
}
|
||||
|
||||
return Result.success();
|
||||
|
||||
+5
-1
@@ -86,6 +86,7 @@ public class ProposalSecondedController {
|
||||
t.finishTime,
|
||||
t.taskParentId,
|
||||
t.variable taskVariable,
|
||||
ta.actorName taskActorName,
|
||||
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
|
||||
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
|
||||
FROM
|
||||
@@ -102,7 +103,10 @@ public class ProposalSecondedController {
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "=", "74458b33-ad6e-46c4-b8d9-1aa897142b25");
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
|
||||
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()));
|
||||
|
||||
+24
-3
@@ -1,9 +1,12 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
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.ProcessTaskService;
|
||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalUnderTakeReplyService;
|
||||
@@ -16,6 +19,7 @@ import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
@@ -65,13 +69,16 @@ public class ProposalUnderTakeReplyController {
|
||||
t.taskParentId,
|
||||
t.variable taskVariable,
|
||||
IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName,
|
||||
IF(rt.id IS NOT NULL, 1, 0) AS canRevoke
|
||||
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
|
||||
FROM
|
||||
wf_process_task t
|
||||
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
|
||||
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
||||
LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10
|
||||
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10
|
||||
LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id
|
||||
LEFT JOIN proposal_info info ON info.id = ins.businessNo
|
||||
LEFT JOIN proposal_type type on type.id = info.typeId
|
||||
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
|
||||
@@ -80,7 +87,10 @@ public class ProposalUnderTakeReplyController {
|
||||
""");
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "in", List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "c9a1586e-272b-41b8-b438-0be9f9e3781d"));
|
||||
// cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
|
||||
if (!AuthUtil.hasRole(RoleConstant.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()));
|
||||
@@ -92,6 +102,17 @@ public class ProposalUnderTakeReplyController {
|
||||
cnd.desc("t.createdAt");
|
||||
sql.setCondition(cnd);
|
||||
Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
|
||||
List<NutMap> list = pagination.getList();
|
||||
for (NutMap row : list) {
|
||||
if (row.getInt("taskIsMaster") == 0) {
|
||||
boolean b = List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "c9a1586e-272b-41b8-b438-0be9f9e3781d", "04ecf80c-a9d0-4986-8aac-231758d6a7af").stream()
|
||||
.anyMatch(a -> row.getString("curTaskKey").contains(a));
|
||||
row.setv("canRevoke",b);
|
||||
}
|
||||
}
|
||||
pagination.setList(list);
|
||||
|
||||
return Result.success(pagination);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -110,10 +110,10 @@ public class ProposalInfoPageVO extends BpmTaskApprovalVo {
|
||||
private boolean isConsolidation;
|
||||
|
||||
@ApiModelProperty("主办承办单位")
|
||||
private String masterUnderTakeName;
|
||||
private String masterUnitName;
|
||||
|
||||
@ApiModelProperty("协办承办单位")
|
||||
private String[] slaveUnderTakeNames;
|
||||
private String[] slaveUnitNames;
|
||||
|
||||
@ApiModelProperty("承办单位答复是否转办")
|
||||
private boolean underTakeReplyIsTransfer;
|
||||
|
||||
-24
@@ -1,24 +0,0 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.interceptor;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowInterceptor;
|
||||
import com.budwk.app.flow.engine.core.Execution;
|
||||
import com.budwk.app.flow.engine.core.ServiceContext;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import com.budwk.app.zhgh.democratic.proposal.service.ProposalWriteService;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.json.Json;
|
||||
|
||||
/**
|
||||
* 提案申请拦截器
|
||||
*/
|
||||
public class ProposalApplyInterceptor implements FlowInterceptor {
|
||||
@Override
|
||||
public void intercept(Execution execution) {
|
||||
|
||||
}
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.interceptor;
|
||||
|
||||
import com.budwk.app.flow.engine.FlowInterceptor;
|
||||
import com.budwk.app.flow.engine.core.Execution;
|
||||
import com.budwk.app.flow.engine.core.ServiceContext;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.entity.ProcessTaskActor;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 提案委员会立案后置拦截器
|
||||
*/
|
||||
public class ProposalUnitNameInterceptor implements FlowInterceptor {
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public void intercept(Execution execution) {
|
||||
Dao dao = ServiceContext.find(Dao.class);
|
||||
|
||||
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("isMaster", task.getTaskName().equals("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0"));
|
||||
|
||||
task.setVariable(Json.toJson(variable));
|
||||
}
|
||||
|
||||
// 更新立案结果
|
||||
ProcessInstance processInstance = execution.getProcessInstance();
|
||||
String businessNo = processInstance.getBusinessNo();
|
||||
dao.update(ProposalInfo.class, Chain.make("caseFilingResult", execution.getArgs().getStr("")), Cnd.where(ProposalInfo::getId, "=", businessNo));
|
||||
|
||||
dao.update(processTaskList, "variable");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user