工作流模块引入new表

This commit is contained in:
zer0Black
2023-04-19 15:15:02 +08:00
committed by mzaxd
parent 3ae4481ee8
commit f6340aa2f9
9 changed files with 327 additions and 173 deletions
@@ -1,15 +1,14 @@
package com.adc.da.wkflow.business_activiti.task;
import com.adc.da.sys.entity.UserEO;
import com.adc.da.sys.service.UserEOServiceImpl;
import com.adc.da.sys.service.iservice.IUserEoService;
import com.adc.da.wkflow.business_main.service.IBusProcessNewService;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tmsps.fk.common.util.ChkUtil;
import com.adc.da.wkflow.business_main.entity.*;
import com.adc.da.wkflow.business_main.service.IBusProcessEntrustService;
import com.adc.da.wkflow.business_main.service.IBusProcessNameService;
import com.adc.da.wkflow.business_main.service.IBusProcessNewService;
import com.adc.da.wkflow.business_main.service.IDatasService;
import com.adc.da.wkflow.util.activiti.ActivitiTools;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -37,19 +36,15 @@ public class TaskController {
@Autowired
private HistoryService historyService;
@Autowired
private JdbcTemplate jt;
@Autowired
IUserEoService userEoService;
@Autowired
private IBusProcessNameService iBusProcessNameService;
@Autowired
private IBusProcessNewService iBusProcessNewService;
@Autowired
private IBusProcessEntrustService iBusProcessEntrustService;
@Autowired
private IDatasService iDatasService;
@ApiOperation(value = "流程实例明细列表")
@ApiImplicitParam(name = "prcNum", value = "流程实例id")
@@ -74,25 +69,26 @@ public class TaskController {
List<HistoricTaskInstance> list2 = historicTaskInstanceQuery.list();
List<Map<String,Object>> list = ActivitiTools.turnHistoricTaskInstance(list2);
for (Map<String, Object> historicTaskInstance : list) {
// 获取办理的历史信息
if(ChkUtil.isNull(historicTaskInstance.get("assignee"))) {
String taskId = historicTaskInstance.get("id").toString();
QueryWrapper queryWrapper1 = new QueryWrapper();
queryWrapper1.eq("TASK_ID",taskId);
BusProcessNew one1 = iBusProcessNewService.getOne(queryWrapper1);
if(one1!=null){
ResponseMessage<UserVO> assignee = userEoService.getUserById(one1.getUserId());
if(assignee.getData()!=null){
historicTaskInstance.put("assignee", assignee.getData().getUname());
historicTaskInstance.put("assigneeId", assignee.getData().getUsid());
QueryWrapper processNewQueryWrapper = new QueryWrapper<BusProcessNew>();
processNewQueryWrapper.eq("TASK_ID",taskId);
BusProcessNew processNew = iBusProcessNewService.getOne(processNewQueryWrapper);
if(processNew!=null){
UserEO assignee = userEoService.getUserById(processNew.getUserId());
if(assignee != null){
historicTaskInstance.put("assignee", assignee.getUsname());
historicTaskInstance.put("assigneeId", assignee.getUsid());
}
}
}else{
ResponseMessage<UserVO> assignee = userEoService.getUserById(historicTaskInstance.get("assignee").toString());
UserEO assignee = userEoService.getUserById(historicTaskInstance.get("assignee").toString());
if(assignee.getData()!=null){
historicTaskInstance.put("assignee", assignee.getData().getUname());
historicTaskInstance.put("assigneeId", assignee.getData().getUsid());
if(assignee != null){
historicTaskInstance.put("assignee", assignee.getUsname());
historicTaskInstance.put("assigneeId", assignee.getUsid());
historicTaskInstance.put("orgName",assignee.getData().getOrgName());
QueryWrapper queryWrapper2 = new QueryWrapper();
queryWrapper2.eq("TASK_ID",historicTaskInstance.get("id"));
@@ -2,6 +2,7 @@ package com.adc.da.wkflow.business_activiti.task;
import com.adc.da.sys.service.iservice.IUserEoService;
import com.adc.da.sys.vo.UserVO;
import com.adc.da.util.exception.AdcDaBaseException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -14,12 +15,8 @@ import com.tmsps.fk.common.wrapper.WrapMapper;
import com.tmsps.fk.common.wrapper.Wrapper;
import com.adc.da.wkflow.business_activiti.dto.*;
import com.adc.da.wkflow.business_activiti.service.TaskTodoService;
import com.adc.da.wkflow.business_auth.AdmissionArgsService;
import com.adc.da.wkflow.business_auth.UserInfoService;
import com.adc.da.wkflow.business_main.entity.*;
import com.adc.da.wkflow.business_main.service.*;
import com.adc.da.wkflow.business_wkflow.form.dto.FormSubmitDto;
import com.adc.da.wkflow.business_wkflow.form.service.FormValsService;
import com.adc.da.wkflow.enums.SubmitStatusEnum;
import com.adc.da.wkflow.util.activiti.ActivitiTools;
import com.adc.da.wkflow.util.date.DateTools;
@@ -83,21 +80,8 @@ public class TodoTaskController extends BaseAction {
private IBusProcessEntrustService iBusProcessEntrustService;
@Autowired
IUserEoService userEoService;
private IUserEoService userEoService;
@Autowired
private INodeUserInfoService nodeUserInfoService;
@Autowired
private IDatasService datasService;
@Autowired
private UserInfoService userInfoService;
@Autowired
private AdmissionArgsService admissionArgsService;
@Autowired
private IFlowRelInfoService flowRelInfoService;
@ApiOperation(value = "我的待办任务列表")
@ApiImplicitParams({@ApiImplicitParam(name = "name", value = "名称"),
@@ -161,29 +145,15 @@ public class TodoTaskController extends BaseAction {
if (taskCommonQuery.getPrcType() != null && !taskCommonQuery.getPrcType().equals("")) {
queryWrapper.eq("PRC_TYPE", taskCommonQuery.getPrcType());
}
List<TaskAdvanceSearchVO> searchList = JSONObject.parseArray(taskCommonQuery.getAdvanceSearchVOStr(),TaskAdvanceSearchVO.class);
this.createAdvanceSearchCondition(searchList,queryWrapper);
queryWrapper.lambda().eq(BusProcessName::getSubmitStatus,SubmitStatusEnum.SUBMIT.getValue());
BusProcessName busProcessName = iBusProcessNameService.getOne(queryWrapper);
String taskIds = "";
for (Map<String, Object> map : entry.getValue()) {
taskIds += map.get("id").toString() + ",";
/*if(StringUtils.isNotEmpty(taskIds)){
taskIds += map.get("id").toString() + ",";
}else {
taskIds = map.get("id").toString();
}*/
}
if (busProcessName != null) {
/*if(StringUtils.isNotEmpty(taskIds)){
String[] taskArr = taskIds.split(",");
if(taskArr.length>1){
busProcessName.setTaskIds(taskIds);
}else {
busProcessName.setTaskId(taskIds);
}
}*/
if(StringUtils.isNotEmpty(taskIds)){
taskIds = taskIds.substring(0,taskIds.length()-1);
}
@@ -246,83 +216,6 @@ public class TodoTaskController extends BaseAction {
}
}
//发送邮件
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("PRC_ID", pId);
BusProcessName name = iBusProcessNameService.getOne(queryWrapper);
String type = name.getPrcType();
Integer typeInt = 99;
if (StringUtils.isNotEmpty(type)){
typeInt = Integer.valueOf(type);
}
switch (typeInt){
case 1:
type = "法规入库及评估流程";
break;
case 2:
type = "标准法规技术储备评估流程";
break;
case 3:
type = "项目评估流程";
break;
case 4:
type = "企标制修订流程";
break;
case 5:
type = "未符合项跟踪流程";
break;
case 6:
type = "企标制修订申请流程";
break;
case 7:
type = "企标废止流程";
break;
case 8:
type = "企标延期制修订申请流程";
break;
case 9:
type = "标准采购流程";
break;
case 10:
type = "工作组会前申请流程";
break;
case 11:
type = "企标制修订评估流程";
break;
case 12:
type = "企标勘误流程";
break;
case 13:
type = "行政管理要求评估流程";
break;
case 14:
type = "政策入库及评估流程";
break;
case 15:
type = "标准翻译申请流程";
break;
case 16:
type = "工作组会后管理流程";
break;
case 17:
type = "企标备案流程";
break;
case 18:
type = "标准法规清单发布/更新流程";
break;
case 19:
type = "企标复审流程";
break;
default:
break;
}
ResponseMessage<UserVO> userVOResponseMessage = userEoService.getUserById(userId);
UserVO userVO = userVOResponseMessage.getData();
String userName = "";
if (null != userVO) {
userName = userVO.getUname();
}
logger.info("task {} find " + taskId);
return WrapMapper.ok("改派成功");
}
@@ -333,58 +226,25 @@ public class TodoTaskController extends BaseAction {
@PostMapping("/completeTask")
public Wrapper<String> completeTaskByUserId(@RequestBody BusMes busMes) {
logger.info("!!!!!!!!!!!!!TaskId!!!!!!!!!!!!!!!"+busMes.getTaskId());
logger.info("!!!!!!!!!!!!!!TaskIds!!!!!!!!!!!!!!"+busMes.getTaskIds());
if (busMes.getTaskId() != null && !busMes.getTaskId().equals("")) {
if (busMes.getTaskId().indexOf(",") > -1) {
String[] taskIdArr = busMes.getTaskId().split(",");
// String taskIdsrc = busMes.getTaskId().substring(0, busMes.getTaskId().length() - 1);
String taskIdsrc = taskIdArr[0];
busMes.setTaskId(taskIdsrc);
}
logger.info("taskId--> " + busMes.getTaskId());
Task task = taskService.createTaskQuery().taskId(busMes.getTaskId()).singleResult();
if(task!=null){
if (ChkUtil.isNull(task.getAssignee())) {
taskService.claim(busMes.getTaskId(), busMes.getUserId());
}
// TODO 存储表单json到对应的 审批历史表中
FormSubmitDto formSubmitDto = new FormSubmitDto();
formSubmitDto.setForm(busMes.getJson());
formSubmitDto.setTask_id(busMes.getTaskId());
formValsService.saveFormVals(formSubmitDto, task.getTaskDefinitionKey());
taskService.complete(busMes.getTaskId());
}
return WrapMapper.ok(task.getProcessInstanceId());
} else {
String[] ids = busMes.getTaskIds().split(",");
Set<String> staffsSet = new HashSet<>(Arrays.asList(ids));
String prcid = "";
logger.info("!!!!!!!!!!!staffsSet!!!!!!!!!!!!!1"+staffsSet);
for (String taskId : staffsSet) {
logger.info("taskId--> " + taskId);
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if(task!=null){
prcid = task.getProcessInstanceId();
if (ChkUtil.isNull(task.getAssignee())) {
taskService.claim(taskId, busMes.getUserId());
}
FormSubmitDto formSubmitDto = new FormSubmitDto();
formSubmitDto.setForm(busMes.getJson());
formSubmitDto.setTask_id(taskId);
formValsService.saveFormVals(formSubmitDto, task.getTaskDefinitionKey());
//解决发起人报错但是有流程的问题
try {
taskService.complete(taskId);
} catch (ActivitiException e){
e.printStackTrace();
QueryWrapper<BusProcessNew> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("P_ID",prcid);
List<BusProcessNew> taskList = iBusProcessNewService.list( queryWrapper);
if(taskList==null||taskList.size()==0){
deleteProcessInstance(prcid);
}
throw new ActivitiException(e.getMessage());
}
}
}
return WrapMapper.ok(prcid);
throw new AdcDaBaseException("缺少任务id,无法完成任务");
}
}
@@ -0,0 +1,22 @@
package com.adc.da.wkflow.business_main.entity;
import lombok.Data;
@Data
public class BusMes {
private String userId;
private String taskId;
private String submitJson; // 提交的数据
private String prcType;
private String createUser;
private String createUserName;
private String dept;
}
@@ -0,0 +1,87 @@
package com.adc.da.wkflow.business_main.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author 冯晓东
* @since 2020-11-10
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("BUS_PROCESS_NEW")
@ApiModel(value="BusProcessNew对象", description="")
public class BusProcessNew implements Serializable {
private static final long serialVersionUID=1L;
@ApiModelProperty(value = "主键")
@TableId(value = "ID", type = IdType.UUID)
private String id;
@ApiModelProperty(value = "资源类型")
@TableField("MSG_TYPE")
private String msgType;
@ApiModelProperty(value = "标准id")
@TableField("STAND_ID")
private String standId;
@ApiModelProperty(value = "条款id")
@TableField("CLAUSE_ID")
private String clauseId;
@ApiModelProperty(value = "处理人")
@TableField("USER_ID")
private String userId;
@ApiModelProperty(value = "信息")
@TableField("MESG")
private String mesg;
@ApiModelProperty(value = "节点信息")
@TableField("TASK_INFO")
private String taskInfo;
@ApiModelProperty(value = "父级id")
@TableField("PARENT_ID")
private String parentId;
@ApiModelProperty(value = "任务id")
@TableField("TASK_ID")
private String taskId;
@ApiModelProperty(value = "流程实例id")
@TableField("P_ID")
private String pId;
@ApiModelProperty(value = "完成注记")
@TableField("FINISH_FLAG")
private String finishFlag;
@ApiModelProperty(value = "审批意见")
@TableField("COMMIT_FLAG")
private String commitFlag;
@ApiModelProperty(value = "审批意见")
@TableField("COMMIT_TEXT")
private String commitText;
@ApiModelProperty(value = "子流程ID")
@TableField("SUB_ID")
private String subId;
}
@@ -0,0 +1,29 @@
package com.adc.da.wkflow.business_main.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.adc.da.wkflow.business_main.entity.BusProcessNew;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 冯晓东
* @since 2020-11-10
*/
public interface BusProcessNewMapper extends BaseMapper<BusProcessNew> {
/**
* 根据taskIds查询未完成的任务数据
* @param taskIds
* @return
*/
List<BusProcessNew> findNoExecuteBusProcessNew(@Param("taskIds")List<String> taskIds);
List<BusProcessNew> findNoExecuteBusProcessNewForEnd(@Param("taskIds")List<String> taskIds);
// String queryTaskName(@Param("id")String id);
}
@@ -0,0 +1,32 @@
package com.adc.da.wkflow.business_main.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.adc.da.wkflow.business_main.entity.BusProcessNew;
import org.activiti.engine.task.Task;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author 冯晓东
* @since 2020-11-10
*/
public interface IBusProcessNewService extends IService<BusProcessNew> {
List<BusProcessNew> findtodotask(String userId, String pId);
List<Task> QueryTask(String userId, String pId);
/**
* 根据taskId集合查下任务
* @param taskIdList
* @return
*/
List<BusProcessNew> findTaskDetailByTaskIds(List<String> taskIdList);
List<BusProcessNew> findNoExecuteBusProcessNewForEnd(List<String> taskIdList);
}
@@ -0,0 +1,71 @@
package com.adc.da.wkflow.business_main.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.adc.da.wkflow.business_main.entity.BusProcessNew;
import com.adc.da.wkflow.business_main.mapper.BusProcessNewMapper;
import com.adc.da.wkflow.business_main.service.IBusProcessNewService;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
/**
* <p>
* 服务实现类
* </p>
*
* @author 冯晓东
* @since 2020-11-10
*/
@Service
public class BusProcessNewServiceImpl extends ServiceImpl<BusProcessNewMapper, BusProcessNew> implements IBusProcessNewService {
private TaskService taskService;
/*
* @Author yuzhong
* @Description
* @Date 2020/11/11
* 返回待办信息详情
*/
@Override
public List<BusProcessNew> findtodotask(String userId,String pId) {
QueryWrapper<BusProcessNew> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("FINISH_FLAG","0");
queryWrapper.eq("P_ID",pId);
queryWrapper.eq("USER_ID",userId);
List<BusProcessNew> taskList = this.list(queryWrapper);
return taskList;
}
/*
* @Author yuzhong
* @Description
* @Date 2020/11/11
* 返回待办任务列表
*/
public List<Task> QueryTask(String userId,String pId){
List<Task> list = taskService.createTaskQuery().processInstanceId(pId).taskCandidateUser(userId).list();
//list根据人员去重
list = list.stream().collect( Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(o -> o.getAssignee()))),
ArrayList::new));
return list;
}
@Override
public List<BusProcessNew> findTaskDetailByTaskIds(List<String> taskIdList) {
return baseMapper.findNoExecuteBusProcessNew(taskIdList);
}
@Override
public List<BusProcessNew> findNoExecuteBusProcessNewForEnd(List<String> taskIdList) {
return baseMapper.findNoExecuteBusProcessNewForEnd(taskIdList);
}
}
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.adc.da.wkflow.business_main.mapper.BusProcessNameMapper">
<select id="findBusProcessNameForEnd"
resultType="com.adc.da.wkflow.business_main.entity.BusProcessName">
SELECT
BUS_PROCESS_NAME.ID,
BUS_PROCESS_NAME.PRC_ID,
BUS_PROCESS_NAME.PRC_MES,
BUS_PROCESS_NAME.OVER_TIME,
BUS_PROCESS_NAME.PRC_NUM,
BUS_PROCESS_NAME.CREAT_TIME,
BUS_PROCESS_NAME.CREAT_USER,
BUS_PROCESS_NAME.PRC_TYPE,
BUS_PROCESS_NEW.USER_ID AS CREATE_USER_NAME,
BUS_PROCESS_NAME.MES,
BUS_PROCESS_NAME.END_TIME
FROM
BUS_PROCESS_NEW
LEFT JOIN BUS_PROCESS_NAME ON BUS_PROCESS_NAME.PRC_ID = BUS_PROCESS_NEW.P_ID
WHERE
BUS_PROCESS_NAME.END_TIME IS NULL
AND BUS_PROCESS_NAME.OVER_TIME > now( )
AND date_add( now( ), INTERVAL 3 DAY ) > BUS_PROCESS_NAME.OVER_TIME
</select>
</mapper>
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.adc.da.wkflow.business_main.mapper.BusProcessNewMapper">
<select id="findNoExecuteBusProcessNew"
resultType="com.adc.da.wkflow.business_main.entity.BusProcessNew">
select BUS_PROCESS_NEW.* from BUS_PROCESS_NEW
INNER JOIN ACT_HI_TASKINST on BUS_PROCESS_NEW.TASK_ID = ACT_HI_TASKINST.ID_
where BUS_PROCESS_NEW.TASK_ID in
<foreach collection="taskIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
and ACT_HI_TASKINST.END_TIME_ is null
</select>
<select id="findNoExecuteBusProcessNewForEnd"
resultType="com.adc.da.wkflow.business_main.entity.BusProcessNew">
select BUS_PROCESS_NEW.* from BUS_PROCESS_NEW
INNER JOIN ACT_HI_TASKINST on BUS_PROCESS_NEW.TASK_ID = ACT_HI_TASKINST.ID_
where BUS_PROCESS_NEW.TASK_ID in
<foreach collection="taskIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
-- and ACT_HI_TASKINST.END_TIME_ is NOT null
</select>
<select id="queryTaskName" resultType="java.lang.String">
SELECT NAME_ FROM ACT_HI_TASKINST WHERE ID_ = #{id}
</select>
</mapper>