Commit f34cb0dc by 赵剑炜

修改审核流

parent d8c3eea1
...@@ -16,7 +16,7 @@ public class SuspendOrActivateDefinitionReq { ...@@ -16,7 +16,7 @@ public class SuspendOrActivateDefinitionReq {
/** /**
* 表单 * 表单
*/ */
private String TemplateId; private String formId;
/** /**
* 备注信息 * 备注信息
*/ */
......
...@@ -91,8 +91,8 @@ public class CounterSignListener implements ExecutionListener { ...@@ -91,8 +91,8 @@ public class CounterSignListener implements ExecutionListener {
roleList = roleList.substring(0, roleList.length() - 1); roleList = roleList.substring(0, roleList.length() - 1);
roleList+=")";//至此拼接完成 roleList+=")";//至此拼接完成
LoginUser StartUser= LoginContext.getContext().getLoginUser();
List<UserListDTO> userList=orgUserMapper.QueryUserByRoleId(roleList); List<UserListDTO> userList=orgUserMapper.QueryUserByRoleId(roleList, StartUser.getUserId().toString());
for (UserListDTO userId :userList) for (UserListDTO userId :userList)
{ {
assigneeList.add(userId.getUserID()); assigneeList.add(userId.getUserID());
...@@ -108,7 +108,7 @@ public class CounterSignListener implements ExecutionListener { ...@@ -108,7 +108,7 @@ public class CounterSignListener implements ExecutionListener {
// List<UserListDTO> userList=orgUserMapper.QueryUserByRoleIdAndOrg(role); // List<UserListDTO> userList=orgUserMapper.QueryUserByRoleIdAndOrg(role);
List<String> Roles=group.getApproverIds(); List<String> Roles=group.getApproverIds();
List<String> Orgs=group.getOrgIds(); List<String> Orgs=group.getOrgIds();
if (Roles.size()>0&&Orgs.size()>0)//角色不为空,组织机构不为空 if (Roles!=null&&Orgs!=null)//角色不为空,组织机构不为空
{ {
//开始拼接传入的多角色 //开始拼接传入的多角色
String roleList="("; String roleList="(";
...@@ -136,6 +136,10 @@ public class CounterSignListener implements ExecutionListener { ...@@ -136,6 +136,10 @@ public class CounterSignListener implements ExecutionListener {
assigneeList.add(userId.getUserID()); assigneeList.add(userId.getUserID());
} }
} }
else
{
throw new WorkFlowException("审核流配置不正确,无指定的组织机构!");
}
} }
else if (Type.equals("1"))//上级审批 else if (Type.equals("1"))//上级审批
......
...@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO; import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.service.Bussiness.impl.WorkProcessServiceImpl; import com.junmp.junmpProcess.service.Bussiness.impl.WorkProcessServiceImpl;
import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.jyzb.api.bean.dto.OrderDetailDto; import com.junmp.jyzb.api.bean.dto.OrderDetailDto;
import com.junmp.jyzb.api.bean.dto.OrderDto; import com.junmp.jyzb.api.bean.dto.OrderDto;
import com.junmp.jyzb.api.bean.dto.OrderMainDto; import com.junmp.jyzb.api.bean.dto.OrderMainDto;
...@@ -78,8 +79,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain ...@@ -78,8 +79,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
@Resource @Resource
private OrderLogService orderLogService; private OrderLogService orderLogService;
@Resource @Resource
private WorkProcessServiceImpl WorkProcessService; private IFlowInstanceService FlowInstanceService;
@Resource @Resource
private OfficeExcelApi officeExcelApi; private OfficeExcelApi officeExcelApi;
...@@ -125,7 +125,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain ...@@ -125,7 +125,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
startProcessInstanceDTO.setOrderId(id); startProcessInstanceDTO.setOrderId(id);
startProcessInstanceDTO.setOrderType("workOrder"); startProcessInstanceDTO.setOrderType("workOrder");
startProcessInstanceDTO.setUserId(req.getUserId()); startProcessInstanceDTO.setUserId(req.getUserId());
String ProcessInstanceId= WorkProcessService.start(startProcessInstanceDTO); String ProcessInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
order.setProcessId(ProcessInstanceId); order.setProcessId(ProcessInstanceId);
} }
orderDetailService.saveBatch(detailList); orderDetailService.saveBatch(detailList);
......
...@@ -244,6 +244,14 @@ ...@@ -244,6 +244,14 @@
<groupId>com.junmp.jyzb</groupId> <groupId>com.junmp.jyzb</groupId>
<artifactId>jyzb-api</artifactId> <artifactId>jyzb-api</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>system-biz-user</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>system-biz-user</artifactId>
</dependency>
</dependencies> </dependencies>
......
package com.junmp.junmpProcess.controller; package com.junmp.junmpProcess.controller;
import com.junmp.junmpProcess.common.utils.HttpStatus;
import com.junmp.junmpProcess.common.utils.ResponseResult;
import com.junmp.junmpProcess.common.utils.ReturnMsg;
import com.junmp.junmpProcess.dto.HandleDataDTO; import com.junmp.junmpProcess.dto.HandleDataDTO;
import com.junmp.junmpProcess.entity.ProcessTemplates;
import com.junmp.junmpProcess.service.Bussiness.WorkProcessService; import com.junmp.junmpProcess.service.Bussiness.WorkProcessService;
import com.junmp.junmpProcess.service.IFlowDefinitionService; import com.junmp.junmpProcess.service.IFlowDefinitionService;
import com.junmp.junmpProcess.service.ISysFormService; import com.junmp.junmpProcess.service.ISysFormService;
import com.junmp.junmpProcess.service.Repository.ProcessTemplateService;
import com.junmp.jyzb.api.bean.query.ProcessReq.SuspendOrActivateDefinitionReq; import com.junmp.jyzb.api.bean.query.ProcessReq.SuspendOrActivateDefinitionReq;
import com.junmp.v2.common.bean.response.ApiRes; import com.junmp.v2.common.bean.response.ApiRes;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -24,7 +29,8 @@ import java.util.Map; ...@@ -24,7 +29,8 @@ import java.util.Map;
public class FlowDefinitionController { public class FlowDefinitionController {
@Autowired @Autowired
private IFlowDefinitionService FlowDefinitionService; private IFlowDefinitionService FlowDefinitionService;
@Autowired
private ProcessTemplateService processTemplateService;
@ApiOperation("停启用流程") @ApiOperation("停启用流程")
@PostMapping("StopProcessInstanceById") @PostMapping("StopProcessInstanceById")
public ApiRes<Boolean> stopProcessInstanceById(@RequestBody SuspendOrActivateDefinitionReq req) { public ApiRes<Boolean> stopProcessInstanceById(@RequestBody SuspendOrActivateDefinitionReq req) {
...@@ -36,4 +42,18 @@ public class FlowDefinitionController { ...@@ -36,4 +42,18 @@ public class FlowDefinitionController {
String temp= templateId.get("formId").toString(); String temp= templateId.get("formId").toString();
return FlowDefinitionService.getLatestDefinitionId(temp); return FlowDefinitionService.getLatestDefinitionId(temp);
} }
/**
* 查询表单模板数据
*
* @param formId 模板id
* @return 模板详情数据
*/
@ApiOperation("根据ID获取表单信息")
@PostMapping(value = "getFormTemplateById")
public ResponseResult getFormTemplateById(@RequestBody Map<String,Object> formId) {
String temp= formId.get("formId").toString();
ProcessTemplates processTemplates = processTemplateService.getById(temp);
processTemplates.setFormId(processTemplates.getTemplateId());
return new ResponseResult(HttpStatus.SUCCESS, ReturnMsg.PASS,processTemplates);
}
} }
package com.junmp.junmpProcess.controller; package com.junmp.junmpProcess.controller;
import com.junmp.junmpProcess.dto.HandleDataDTO;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.junmpProcess.vo.TaskDetailVO;
import com.junmp.v2.common.bean.response.ApiRes;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/FlowInstance") @RequestMapping("/FlowInstance")
@Api(tags = "流程实例") @Api(tags = "流程实例")
public class FlowInstanceController { public class FlowInstanceController {
@Autowired
private IFlowInstanceService flowInstanceService;
@ApiOperation(value = "根据流程定义id启动流程实例")
@PostMapping("/startBy/{procDefId}")
public ApiRes startById(@RequestBody StartProcessInstanceDTO startProcessInstanceDTO) {
return ApiRes.success(flowInstanceService.startProcessInstanceById(startProcessInstanceDTO));
}
@ApiOperation(value = "激活或挂起流程实例")
@PostMapping(value = "/updateState")
public ApiRes updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam Integer state,
@ApiParam(value = "流程实例ID", required = true) @RequestParam String instanceId) {
flowInstanceService.updateState(state,instanceId);
return ApiRes.success();
}
@ApiOperation(value = "删除流程实例")
@DeleteMapping(value = "/delete/{instanceIds}")
public ApiRes delete(@ApiParam(value = "流程实例ID", required = true) @PathVariable String[] instanceIds,
@ApiParam(value = "删除原因") @RequestParam(required = false) String deleteReason) {
for (String instanceId : instanceIds) {
flowInstanceService.delete(instanceId,deleteReason);
}
return ApiRes.success();
}
} }
package com.junmp.junmpProcess.controller; package com.junmp.junmpProcess.controller;
import com.junmp.junmpProcess.common.utils.ResponseResult;
import com.junmp.junmpProcess.dto.ApplyDTO;
import com.junmp.junmpProcess.dto.HandleDataDTO;
import com.junmp.junmpProcess.dto.TaskDTO;
import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.junmpProcess.service.IFlowTaskService;
import com.junmp.junmpProcess.vo.HistoryProcessInstanceVO;
import com.junmp.junmpProcess.vo.TaskDetailVO;
import com.junmp.junmpProcess.vo.TaskVO;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/FlowTask") @RequestMapping("/FlowTask")
@Api(tags = "流程任务") @Api(tags = "流程任务")
public class FlowTaskController { public class FlowTaskController {
@Autowired
private IFlowTaskService FlowTaskService;
@ApiOperation("同意按钮")
@PostMapping("agree")
public ResponseResult agree(@RequestBody HandleDataDTO handleDataDTO){
return FlowTaskService.agree(handleDataDTO);
}
@ApiOperation("拒绝按钮")
@PostMapping("refuse")
public ResponseResult refuse(@RequestBody HandleDataDTO handleDataDTO){
return FlowTaskService.refuse(handleDataDTO);
}
@ApiOperation("撤销按钮")
@PostMapping("revoke")
public ResponseResult revoke(@RequestBody HandleDataDTO handleDataDTO){
return FlowTaskService.revoke(handleDataDTO);
}
@ApiOperation("查看我的待办")
@PostMapping("toDoList")
public ApiRes<PageResult<TaskVO>> toDoList(@RequestBody TaskDTO taskDTO){
return ApiRes.success(FlowTaskService.toDoList(taskDTO));
}
@ApiOperation("查看我的已办")
@PostMapping("doneList")
public ApiRes<PageResult<TaskVO>> doneList(@RequestBody TaskDTO taskDTO){
return ApiRes.success(FlowTaskService.doneList(taskDTO));
}
@ApiOperation("查看我发起的流程")
@PostMapping("applyList")
public ApiRes<PageResult<HistoryProcessInstanceVO>> applyList(@RequestBody ApplyDTO ApplyDTO) {
return ApiRes.success(FlowTaskService.applyList(ApplyDTO));
}
@ApiOperation("通过流程实例查看审批记录")
@PostMapping("record")
public ApiRes<List<TaskDetailVO>> record(@RequestBody HandleDataDTO handleDataDTO) {
return FlowTaskService.record(handleDataDTO.getProcessInstanceId());
}
} }
...@@ -12,7 +12,7 @@ public interface OrgUserMapper { ...@@ -12,7 +12,7 @@ public interface OrgUserMapper {
* *
* @return * @return
*/ */
public List<UserListDTO> QueryUserByRoleId(String roleId); public List<UserListDTO> QueryUserByRoleId(String roleId,String userId);
/** /**
* @Author: Zhaojw * @Author: Zhaojw
......
package com.junmp.junmpProcess.service.Bussiness;
/**
* @author : willian fu
* @version : 1.0
*/
public interface OrgUserAndDeptService {
/**
* 查询组织架构树
*
* @param deptId 部门id
* @return 组织架构树数据
*/
Object getOrgTreeData(Integer deptId, String type);
/**
* 模糊搜索用户
*
* @param userName 用户名/拼音/首字母
* @return 匹配到的用户
*/
Object getOrgTreeUser(String userName);
}
package com.junmp.junmpProcess.service.Bussiness.impl;
import cn.hutool.core.lang.Validator;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.junmp.junmpProcess.service.Bussiness.OrgUserAndDeptService;
import com.junmp.junmpProcess.service.Repository.DepartmentsService;
import com.junmp.junmpProcess.service.Repository.UserService;
import com.junmp.junmpProcess.common.R;
import com.junmp.junmpProcess.entity.Departments;
import com.junmp.junmpProcess.entity.Users;
import com.junmp.junmpProcess.vo.OrgTreeVo;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.*;
/**
* @author : willian fu
* @version : 1.0
*/
@Service
public class OrgUserAndDeptServiceImpl implements OrgUserAndDeptService {
@Resource
private DepartmentsService departmentsService;
@Resource
private UserService userService;
/**
* 查询组织架构树
*
* @param deptId 部门id
* @return 组织架构树数据
*/
@Override
public Object getOrgTreeData(Integer deptId, String type) {
LambdaQueryWrapper<Users> lambdaQueryWrapper = new LambdaQueryWrapper<>();
if (!ObjectUtils.isEmpty(deptId)) {
LambdaQueryWrapper<Departments> departmentsLambdaQueryWrapper = new LambdaQueryWrapper<>();
departmentsLambdaQueryWrapper.eq(Departments::getParentId, deptId);
lambdaQueryWrapper.like(Users::getDepartmentIds, "%" + deptId + "%")
.or()
.like(Users::getDepartmentIds, "%" + deptId + ",%")
.like(Users::getDepartmentIds, "%," + deptId + "%");
List<OrgTreeVo> orgTreeVos = new LinkedList<>();
departmentsService.list(departmentsLambdaQueryWrapper).forEach(dept -> {
orgTreeVos.add(OrgTreeVo.builder()
.id(dept.getDeptId())
.name(dept.getDeptName())
.selected(false)
.type("dept")
.build());
});
userService.list(lambdaQueryWrapper).forEach(user -> {
orgTreeVos.add(OrgTreeVo.builder()
.id(user.getUserId())
.name(user.getUserName())
.avatar(user.getAvatar())
.sex(user.getSex())
.type("user")
.selected(false)
.build());
});
return R.ok(orgTreeVos);
}
List<Users> users = userService.list();
List<Departments> departments = departmentsService.list();
//将人员按部门归类分组
Map<Long, List<Users>> deptUsers = new HashMap<>();
users.forEach(user -> {
for (String did : user.getDepartmentIds().split(",")) {
List<Users> usersList = deptUsers.get(Long.parseLong(did));
if (null == usersList) {
List<Users> list = new ArrayList<>();
list.add(user);
} else {
usersList.add(user);
}
}
});
//将部门及员工进行转换嵌套树形结构
departments.forEach(dept -> {
});
return R.ok(Collections.EMPTY_LIST);
}
/**
* 模糊搜索用户
*
* @param userName 用户名/拼音/首字母
* @return 匹配到的用户
*/
@Override
public Object getOrgTreeUser(String userName) {
LambdaQueryWrapper<Users> lambdaQueryWrapper = new LambdaQueryWrapper<>();
if (Validator.isChinese(userName)) {
lambdaQueryWrapper.like(Users::getUserName, "%" + userName + "%");
} else {
lambdaQueryWrapper.like(Users::getPingyin, "%" + userName + "%");
}
List<OrgTreeVo> list = new LinkedList<>();
userService.list(lambdaQueryWrapper).forEach(user -> {
list.add(OrgTreeVo.builder().type("user")
.sex(user.getSex())
.avatar(user.getAvatar())
.name(user.getUserName())
.id(user.getUserId())
.selected(false).build());
});
return R.ok(list);
}
}
...@@ -39,9 +39,12 @@ import com.junmp.v2.auth.api.bean.login.LoginUser; ...@@ -39,9 +39,12 @@ import com.junmp.v2.auth.api.bean.login.LoginUser;
import com.junmp.v2.auth.api.context.LoginContext; import com.junmp.v2.auth.api.context.LoginContext;
import com.junmp.v2.common.bean.request.BaseRequest; import com.junmp.v2.common.bean.request.BaseRequest;
import com.junmp.v2.common.bean.response.ApiRes; import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory; import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory; import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult; import com.junmp.v2.db.api.page.PageResult;
import com.junmp.v2.sys.user.entity.SysUser;
import com.junmp.v2.sys.user.service.SysUserService;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
import org.flowable.bpmn.BpmnAutoLayout; import org.flowable.bpmn.BpmnAutoLayout;
...@@ -98,6 +101,8 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper, ...@@ -98,6 +101,8 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper,
@Resource @Resource
private OrgUserMapper orgUserMapper; private OrgUserMapper orgUserMapper;
@Resource @Resource
private SysUserService sysUserService;
@Resource
private RuntimeService runtimeService; private RuntimeService runtimeService;
@Resource @Resource
private HistoryService historyService; private HistoryService historyService;
...@@ -652,9 +657,6 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper, ...@@ -652,9 +657,6 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper,
{ {
StartUser= LoginContext.getContext().getLoginUser(); StartUser= LoginContext.getContext().getLoginUser();
} }
// StartUser.setUserId(Long.valueOf("1694954953210986498"));
// StartUser= LoginContext.getContext().getLoginUser();
JSONObject formData = processInstanceDto.getFormData(); JSONObject formData = processInstanceDto.getFormData();
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString()); Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
...@@ -885,14 +887,15 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper, ...@@ -885,14 +887,15 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper,
*/ */
@Override @Override
public PageResult<TaskVO> toDoList(TaskDTO taskDTO) { public PageResult<TaskVO> toDoList(TaskDTO taskDTO) {
LoginUser StartUser=new LoginUser(); SysUser StartUser=new SysUser();
if (taskDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试 if (taskDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{ {
StartUser.setUserId(taskDTO.getCurrentUserInfo().getUserId()); StartUser = sysUserService.getById(taskDTO.getCurrentUserInfo().getUserId());
} }
else else
{ {
StartUser= LoginContext.getContext().getLoginUser(); StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
} }
List<Task> tasks = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString()) List<Task> tasks = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString())
...@@ -911,9 +914,8 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper, ...@@ -911,9 +914,8 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper,
taskVO.setTaskId(task.getId()); taskVO.setTaskId(task.getId());
taskVO.setProcessInstanceId(task.getProcessInstanceId()); taskVO.setProcessInstanceId(task.getProcessInstanceId());
taskVO.setProcessDefinitionName(bpmnModel.getMainProcess().getName()); taskVO.setProcessDefinitionName(bpmnModel.getMainProcess().getName());
UserInfo user=new UserInfo(); SysUser staruser= sysUserService.getById(startUserId);
user.setId(startUserId); taskVO.setStartUser(this.SetUser(staruser));
taskVO.setStartUser(user);
taskVO.setOrderId(MapUtil.getStr(processVariables, ORDER_ID)); taskVO.setOrderId(MapUtil.getStr(processVariables, ORDER_ID));
taskVO.setOrderType(MapUtil.getStr(processVariables, ORDER_TYPE)); taskVO.setOrderType(MapUtil.getStr(processVariables, ORDER_TYPE));
taskVO.setStartTime(processInstance.getStartTime()); taskVO.setStartTime(processInstance.getStartTime());
...@@ -1681,7 +1683,22 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper, ...@@ -1681,7 +1683,22 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper,
} }
} }
/**
* @Author: Zhaojw
* @Description: 为用户赋值
* @DateTime: 2023/9/27 16:00
* @Params:
* @Return
*/
private UserInfo SetUser(SysUser sysUser)
{
UserInfo userInfo=new UserInfo();
userInfo.setUserId(sysUser.getUserId());
userInfo.setId(sysUser.getUserId().toString());
userInfo.setName(sysUser.getRealName());
userInfo.setSex(sysUser.getSex());
return userInfo;
}
private String getCurrentName(String processInstanceId, Boolean flag, String processDefinitionId) { private String getCurrentName(String processInstanceId, Boolean flag, String processDefinitionId) {
if (flag) { if (flag) {
return "流程已结束"; return "流程已结束";
......
package com.junmp.junmpProcess.service; package com.junmp.junmpProcess.service;
import com.junmp.junmpProcess.common.utils.ResponseResult;
import com.junmp.junmpProcess.dto.ApplyDTO;
import com.junmp.junmpProcess.dto.HandleDataDTO;
import com.junmp.junmpProcess.dto.TaskDTO;
import com.junmp.junmpProcess.vo.HistoryProcessInstanceVO;
import com.junmp.junmpProcess.vo.TaskDetailVO;
import com.junmp.junmpProcess.vo.TaskVO;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
public interface IFlowTaskService { public interface IFlowTaskService {
/**
* 同意
*
* @return
*/
ResponseResult agree(HandleDataDTO handleDataDTO);
/**
* 拒绝
*
* @return
*/
ResponseResult refuse(HandleDataDTO handleDataDTO);
/**
* 撤销
*
* @return
*/
ResponseResult revoke(HandleDataDTO handleDataDTO);
/**
* 查看我的待办
*
* @return
*/
PageResult<TaskVO> toDoList(TaskDTO taskDTO);
/**
* 查看我的已办
*
* @return
*/
PageResult<TaskVO> doneList(@RequestBody TaskDTO taskDTO);
/**
* 查看我发起的流程
*
* @return
*/
PageResult<HistoryProcessInstanceVO> applyList(ApplyDTO applyDTO);
/**
* 通过流程定义id启动流程
*
* @return
*/
ApiRes<List<TaskDetailVO>> record(String processInstanceId);
} }
package com.junmp.junmpProcess.service.Repository;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.junmpProcess.entity.Departments;
/**
* @author : willian fu
* @version : 1.0
*/
public interface DepartmentsService extends IService<Departments> {
}
package com.junmp.junmpProcess.service.Repository;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.junmpProcess.entity.FormGroups;
/**
* @author : willian fu
* @version : 1.0
*/
public interface FormGroupService extends IService<FormGroups> {
}
package com.junmp.junmpProcess.service.Repository;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.junmpProcess.entity.TemplateGroup;
/**
* @author : willian fu
* @version : 1.0
*/
public interface TemplateGroupService extends IService<TemplateGroup> {
}
package com.junmp.junmpProcess.service.Repository;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.junmpProcess.entity.Users;
/**
* @author : willian fu
* @version : 1.0
*/
public interface UserService extends IService<Users> {
}
package com.junmp.junmpProcess.service.Repository;
/**
* @author : willian fu
* @version : 1.0
*/
public interface WorkspaceProcessService {
/**
* 获取用户可见表单
*
* @return
*/
Object getFormGroups(String name);
}
package com.junmp.junmpProcess.service.Repository.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.junmpProcess.service.Repository.DepartmentsService;
import com.junmp.junmpProcess.entity.Departments;
import com.junmp.junmpProcess.mapper.DepartmentsMapper;
import org.springframework.stereotype.Service;
/**
* @author : willian fu
* @version : 1.0
*/
@Service
class DepartmentsServiceImpl extends ServiceImpl<DepartmentsMapper, Departments> implements
DepartmentsService {
}
//package com.junmp.junmpProcess.service.Repository.impl;
//
//
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.junmp.junmpProcess.service.Repository.FormGroupService;
//import com.junmp.junmpProcess.entity.FormGroups;
//import com.junmp.junmpProcess.mapper.FormGroupsMapper;
//import org.springframework.stereotype.Service;
//
///**
// * @author : willian fu
// * @version : 1.0
// */
//@Service
//public class FormGroupServiceImpl extends ServiceImpl<FormGroupsMapper, FormGroups> implements
// FormGroupService {
//
//
//}
package com.junmp.junmpProcess.service.Repository.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.junmpProcess.entity.TemplateGroup;
import com.junmp.junmpProcess.mapper.TemplateGroupMapper;
import com.junmp.junmpProcess.service.Repository.TemplateGroupService;
import org.springframework.stereotype.Service;
/**
* @author : willian fu
* @version : 1.0
*/
@Service
public class TemplateGroupServiceImpl extends ServiceImpl<TemplateGroupMapper, TemplateGroup> implements
TemplateGroupService {
}
package com.junmp.junmpProcess.service.Repository.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.junmpProcess.service.Repository.UserService;
import com.junmp.junmpProcess.entity.Users;
import com.junmp.junmpProcess.mapper.UsersMapper;
import org.springframework.stereotype.Service;
/**
* @author : willian fu
* @version : 1.0
*/
@Service
public class UserServiceImpl extends ServiceImpl<UsersMapper, Users> implements UserService {
}
package com.junmp.junmpProcess.service.Repository.impl;
import com.junmp.junmpProcess.service.Repository.WorkspaceProcessService;
//import com.junmp.junmpProcess.service.Bussiness.SettingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* @author : willian fu
* @version : 1.0
*/
@Service
public class WorkspaceProcessServiceImpl implements WorkspaceProcessService {
// @Autowired
// private SettingService settingService;
/**
* 获取用户可见表单
*
* @return
*/
@Override
public Object getFormGroups(String name) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
// String token = CookieUtil.getCookieValue(servletRequestAttributes.getRequest(), "token");
return null;
}
}
...@@ -27,7 +27,7 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl ...@@ -27,7 +27,7 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl
@Override @Override
public Boolean updateState(SuspendOrActivateDefinitionReq req) { public Boolean updateState(SuspendOrActivateDefinitionReq req) {
ProcessTemplates processTemplates = processTemplateService.getById(req.getTemplateId()); ProcessTemplates processTemplates = processTemplateService.getById(req.getFormId());
if (req.getIsStop() == true){ if (req.getIsStop() == true){
repositoryService.suspendProcessDefinitionById(req.getProcessDefinitionId(), true, null); repositoryService.suspendProcessDefinitionById(req.getProcessDefinitionId(), true, null);
processTemplates.setIsStop(true); processTemplates.setIsStop(true);
......
...@@ -9,6 +9,8 @@ import com.junmp.junmpProcess.service.IFlowInstanceService; ...@@ -9,6 +9,8 @@ import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.v2.auth.api.bean.login.LoginUser; import com.junmp.v2.auth.api.bean.login.LoginUser;
import com.junmp.v2.auth.api.context.LoginContext; import com.junmp.v2.auth.api.context.LoginContext;
import com.junmp.v2.common.bean.response.ApiRes; import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.sys.user.entity.SysUser;
import com.junmp.v2.sys.user.service.SysUserService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.common.engine.api.FlowableObjectNotFoundException;
import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.identity.Authentication;
...@@ -20,6 +22,7 @@ import org.flowable.task.api.Task; ...@@ -20,6 +22,7 @@ import org.flowable.task.api.Task;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -31,7 +34,8 @@ import static com.junmp.junmpProcess.common.CommonConstants.BUSINESS_STATUS_1; ...@@ -31,7 +34,8 @@ import static com.junmp.junmpProcess.common.CommonConstants.BUSINESS_STATUS_1;
@Service @Service
@Slf4j @Slf4j
public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlowInstanceService { public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlowInstanceService {
@Resource
private SysUserService sysUserService;
@Override @Override
public void updateState(Integer state, String instanceId) { public void updateState(Integer state, String instanceId) {
// 激活 // 激活
...@@ -84,14 +88,14 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow ...@@ -84,14 +88,14 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
@Override @Override
public String startProcessInstanceById(StartProcessInstanceDTO processInstanceDto) { public String startProcessInstanceById(StartProcessInstanceDTO processInstanceDto) {
LoginUser StartUser=new LoginUser(); SysUser StartUser=new SysUser();
if (processInstanceDto.getUserId()!=null)//优先拿接口中的信息,方便调试 if (processInstanceDto.getUserId()!=null)//优先拿接口中的信息,方便调试
{ {
StartUser.setUserId(Long.valueOf(processInstanceDto.getUserId()) ); StartUser = sysUserService.getById(processInstanceDto.getUserId());
} }
else else
{ {
StartUser= LoginContext.getContext().getLoginUser(); StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
} }
JSONObject formData = processInstanceDto.getFormData(); JSONObject formData = processInstanceDto.getFormData();
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString()); Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
...@@ -101,7 +105,7 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow ...@@ -101,7 +105,7 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
processVariables.put(ORDER_TYPE,processInstanceDto.getOrderType()); processVariables.put(ORDER_TYPE,processInstanceDto.getOrderType());
processVariables.put(START_USER_INFO,JSONObject.toJSONString(StartUser)); processVariables.put(START_USER_INFO,JSONObject.toJSONString(StartUser));
processVariables.put(PROCESS_STATUS,BUSINESS_STATUS_1); processVariables.put(PROCESS_STATUS,BUSINESS_STATUS_1);
ArrayList<LoginUser> userInfos = CollUtil.newArrayList(StartUser);
if (formData!=null) if (formData!=null)
{ {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() { Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
......
package com.junmp.junmpProcess.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.PageUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.junmp.junmpProcess.common.utils.HttpStatus;
import com.junmp.junmpProcess.common.utils.ResponseResult;
import com.junmp.junmpProcess.common.utils.ReturnMsg;
import com.junmp.junmpProcess.dto.*;
import com.junmp.junmpProcess.dto.json.UserInfo;
import com.junmp.junmpProcess.factory.FlowServiceFactory;
import com.junmp.junmpProcess.mapper.OrgUserMapper;
import com.junmp.junmpProcess.service.IFlowTaskService;
import com.junmp.junmpProcess.vo.AttachmentVO;
import com.junmp.junmpProcess.vo.HistoryProcessInstanceVO;
import com.junmp.junmpProcess.vo.TaskDetailVO;
import com.junmp.junmpProcess.vo.TaskVO;
import com.junmp.v2.auth.api.bean.login.LoginUser;
import com.junmp.v2.auth.api.context.LoginContext;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import com.junmp.v2.sys.user.entity.SysUser;
import com.junmp.v2.sys.user.service.SysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.runtime.ActivityInstance;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.task.Attachment;
import org.flowable.engine.task.Comment;
import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
import static com.junmp.junmpProcess.common.CommonConstants.*;
@Service
@Slf4j
public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTaskService {
@Resource
private OrgUserMapper orgUserMapper;
@Resource
private SysUserService sysUserService;
@Override
public ResponseResult agree(HandleDataDTO handleDataDTO) {
SysUser StartUser=new SysUser();
if (handleDataDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser = sysUserService.getById(handleDataDTO.getCurrentUserInfo().getUserId());
}
else
{
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
String processInstanceId=handleDataDTO.getProcessInstanceId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (task!=null)//task为空则说明当前任务可能已结束
{
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
runtimeService.setVariables(task.getProcessInstanceId(), map);//设置进入当前流程
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
// if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
// taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
// }
taskService.complete(task.getId());
HistoricTaskInstance historicTask = historyService
.createHistoricTaskInstanceQuery()
.taskId(taskId)
.singleResult();
if (historicTask.getEndTime()!=null)//EndTime为空,说明任务已结束,需要往消息队列中进行消息传递
{
HistoricProcessInstance historicProcessInstance= historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId)
.includeProcessVariables().singleResult();//拿到历史中的表单信息
Map<String, Object> processVariables = historicProcessInstance.getProcessVariables();
JSONObject jsonObject = (JSONObject) processVariables.get(FORM_VAR);
}
return new ResponseResult(HttpStatus.SUCCESS, ReturnMsg.PASS,ReturnMsg.PASS);
}
else {
return new ResponseResult(HttpStatus.PROCESS_WAS_END,ReturnMsg.PROCESS_WAS_END,"");
}
}
@Override
public ResponseResult refuse(HandleDataDTO handleDataDTO) {
SysUser StartUser=new SysUser();
if (handleDataDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser = sysUserService.getById(handleDataDTO.getCurrentUserInfo().getUserId());
}
else
{
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Map<String, Object> map = new HashMap<>();
if (formData != null && formData.size() > 0) {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR, formData);
}
map.put(PROCESS_STATUS, BUSINESS_STATUS_3);
runtimeService.setVariables(task.getProcessInstanceId(), map);
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
}
runtimeService.deleteProcessInstance(task.getProcessInstanceId(), "拒绝");
return new ResponseResult(HttpStatus.SUCCESS, ReturnMsg.PASS,ReturnMsg.PASS);
}
@Override
public ResponseResult revoke(HandleDataDTO handleDataDTO) {
SysUser StartUser=new SysUser();
if (handleDataDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser = sysUserService.getById(handleDataDTO.getCurrentUserInfo().getUserId());
}
else
{
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
Authentication.setAuthenticatedUserId(StartUser.getUserId().toString());
List<AttachmentDTO> attachments = handleDataDTO.getAttachments();
String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId();
HistoricTaskInstance task = historyService.createHistoricTaskInstanceQuery().taskId(taskId).singleResult();
Map<String,Object> map=new HashMap<>();
if(formData!=null &&formData.size()>0){
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
});
map.putAll(formValue);
map.put(FORM_VAR,formData);
}
map.put(PROCESS_STATUS,BUSINESS_STATUS_2);
runtimeService.setVariables(task.getProcessInstanceId(),map);
if(StringUtils.isNotBlank(comments)){
taskService.addComment(task.getId(),task.getProcessInstanceId(),"opinion",comments);
}
if(attachments!=null && attachments.size()>0){
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option",taskId,task.getProcessInstanceId(),attachment.getName(),attachment.getName(),attachment.getUrl());
}
}
if(StringUtils.isNotBlank(handleDataDTO.getSignInfo())){
taskService.addComment(task.getId(),task.getProcessInstanceId(),"sign",handleDataDTO.getSignInfo());
}
runtimeService.deleteProcessInstance(task.getProcessInstanceId(),"撤销");
return new ResponseResult(HttpStatus.SUCCESS,ReturnMsg.PASS,"");
}
@Override
public PageResult<TaskVO> toDoList(TaskDTO taskDTO) {
SysUser StartUser=new SysUser();
if (taskDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser = sysUserService.getById(taskDTO.getCurrentUserInfo().getUserId());
}
else
{
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
List<Task> tasks = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString())
.includeProcessVariables()
.orderByTaskCreateTime().desc()
.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
long count = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString()).count();
List<TaskVO> taskVOS= new ArrayList<>();
Page<TaskVO> page =new Page<>();
for (Task task : tasks) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
String startUserId = processInstance.getStartUserId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
Map<String, Object> processVariables = task.getProcessVariables();
TaskVO taskVO=new TaskVO();
taskVO.setTaskId(task.getId());
taskVO.setProcessInstanceId(task.getProcessInstanceId());
taskVO.setProcessDefinitionName(bpmnModel.getMainProcess().getName());
SysUser staruser= sysUserService.getById(startUserId);
taskVO.setStartUser(this.SetUser(staruser));
taskVO.setOrderId(MapUtil.getStr(processVariables, ORDER_ID));
taskVO.setOrderType(MapUtil.getStr(processVariables, ORDER_TYPE));
taskVO.setStartTime(processInstance.getStartTime());
taskVO.setCurrentActivityName(getCurrentName(processInstance.getId(),false,processInstance.getProcessDefinitionId()));
taskVO.setBusinessStatus(MapUtil.getStr(processVariables,PROCESS_STATUS));
taskVO.setTaskCreatedTime(task.getCreateTime());
DelegationState delegationState = task.getDelegationState();
if(delegationState!=null){
taskVO.setDelegationState(delegationState);
}
taskVOS.add(taskVO);
}
page.setRecords(taskVOS);
return PageResultFactory.createPageResult(page);
}
@Override
public PageResult<TaskVO> doneList(TaskDTO taskDTO) {
SysUser StartUser=new SysUser();
if (taskDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser = sysUserService.getById(taskDTO.getCurrentUserInfo().getUserId());
}
else
{
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
List<HistoricTaskInstance> tasks = historyService.createHistoricTaskInstanceQuery()
.taskAssignee(StartUser.getUserId().toString())
.finished()
.includeProcessVariables()
.orderByTaskCreateTime().desc()
.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
long count = historyService.createHistoricTaskInstanceQuery()
.taskAssignee(StartUser.getUserId().toString()).count();
List<TaskVO> taskVOS = new ArrayList<>();
Page<TaskVO> page = new Page<>();
for (HistoricTaskInstance task : tasks) {
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
Boolean flag = historicProcessInstance.getEndTime() == null ? false : true;
BpmnModel bpmnModel = null;
try {
bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
} catch (Exception e) {
// 处理获取BpmnModel异常的情况
e.printStackTrace(); // 可以将异常信息打印到日志中
// 可以在这里设置默认的BpmnModel或采取其他处理措施
}
Map<String, Object> processVariables = task.getProcessVariables();
TaskVO taskVO = new TaskVO();
taskVO.setTaskId(task.getId());
taskVO.setProcessInstanceId(task.getProcessInstanceId());
if (bpmnModel!=null)
{
taskVO.setProcessDefinitionName(bpmnModel.getMainProcess().getName());
}
taskVO.setStartUser(JSONObject.parseObject(MapUtil.getStr(processVariables, START_USER_INFO), new TypeReference<UserInfo>() {
}));
taskVO.setOrderId(MapUtil.getStr(processVariables, ORDER_ID));
taskVO.setOrderType(MapUtil.getStr(processVariables, ORDER_TYPE));
taskVO.setStartTime(historicProcessInstance.getStartTime());
taskVO.setCurrentActivityName(getCurrentName(task.getProcessInstanceId(), flag, task.getProcessDefinitionId()));
taskVO.setBusinessStatus(MapUtil.getStr(processVariables, PROCESS_STATUS));
taskVO.setEndTime(task.getEndTime());
long totalTimes = task.getEndTime() == null ?
(Calendar.getInstance().getTimeInMillis() - task.getStartTime().getTime()) :
(task.getEndTime().getTime() - task.getStartTime().getTime());
long dayCount = totalTimes / (1000 * 60 * 60 * 24);//计算天
long restTimes = totalTimes % (1000 * 60 * 60 * 24);//剩下的时间用于计于小时
long hourCount = restTimes / (1000 * 60 * 60);//小时
restTimes = restTimes % (1000 * 60 * 60);
long minuteCount = restTimes / (1000 * 60);
String spendTimes = dayCount + "天" + hourCount + "小时" + minuteCount + "分";
taskVO.setDuration(spendTimes);
taskVOS.add(taskVO);
}
page.setRecords(taskVOS);
page.setCurrent(taskDTO.getPageNo());
page.setSize(taskDTO.getPageSize());
page.setTotal(count);
return PageResultFactory.createPageResult(page);
}
@Override
public PageResult<HistoryProcessInstanceVO> applyList(ApplyDTO applyDTO) {
SysUser StartUser=new SysUser();
if (applyDTO.getCurrentUserInfo().getUserId()!=null)//优先拿接口中的信息,方便调试
{
StartUser = sysUserService.getById(applyDTO.getCurrentUserInfo().getUserId());
}
else
{
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
PageResult<HistoryProcessInstanceVO> pageResult=new PageResult<HistoryProcessInstanceVO>();
List<HistoricProcessInstance> historicProcessInstances =
historyService.createHistoricProcessInstanceQuery()
.includeProcessVariables()
.startedBy(StartUser.getUserId().toString())
.orderByProcessInstanceStartTime().desc()
.listPage((applyDTO.getPageNo() - 1) * applyDTO.getPageSize(), applyDTO.getPageSize());
long count = historyService.createHistoricProcessInstanceQuery()
.startedBy(StartUser.getUserId().toString()).count();
List<HistoryProcessInstanceVO> historyProcessInstanceVOS = new ArrayList<>();
Page<HistoryProcessInstanceVO> page = new Page<>();
for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
Map<String, Object> processVariables = historicProcessInstance.getProcessVariables();
HistoryProcessInstanceVO historyProcessInstanceVO = new HistoryProcessInstanceVO();
historyProcessInstanceVO.setProcessInstanceId(historicProcessInstance.getId());
BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId());
String Name= bpmnModel.getMainProcess().getName();
historyProcessInstanceVO.setOrderID(MapUtil.getStr(processVariables, ORDER_ID));
historyProcessInstanceVO.setOrderType(MapUtil.getStr(processVariables, ORDER_TYPE));
historyProcessInstanceVO.setProcessDefinitionName(historicProcessInstance.getProcessDefinitionName());
historyProcessInstanceVO.setStartUser(JSONObject.parseObject(MapUtil.getStr(processVariables, START_USER_INFO), new TypeReference<UserInfo>() {
}));
historyProcessInstanceVO.setStartTime(historicProcessInstance.getStartTime());
historyProcessInstanceVO.setEndTime(historicProcessInstance.getEndTime());
Boolean flag = historicProcessInstance.getEndTime() == null ? false : true;
historyProcessInstanceVO.setCurrentActivityName(getCurrentName(historicProcessInstance.getId(), flag, historicProcessInstance.getProcessDefinitionId()));
historyProcessInstanceVO.setBusinessStatus(MapUtil.getStr(processVariables, PROCESS_STATUS));
long totalTimes = historicProcessInstance.getEndTime() == null ?
(Calendar.getInstance().getTimeInMillis() - historicProcessInstance.getStartTime().getTime()) :
(historicProcessInstance.getEndTime().getTime() - historicProcessInstance.getStartTime().getTime());
long dayCount = totalTimes / (1000 * 60 * 60 * 24);//计算天
long restTimes = totalTimes % (1000 * 60 * 60 * 24);//剩下的时间用于计于小时
long hourCount = restTimes / (1000 * 60 * 60);//小时
restTimes = restTimes % (1000 * 60 * 60);
long minuteCount = restTimes / (1000 * 60);
String spendTimes = dayCount + "天" + hourCount + "小时" + minuteCount + "分";
historyProcessInstanceVO.setDuration(spendTimes);
historyProcessInstanceVOS.add(historyProcessInstanceVO);
}
pageResult.setRecords(historyProcessInstanceVOS);
pageResult.setTotalRows(Long.valueOf(applyDTO.getPageNo()));
pageResult.setTotalPage(PageUtil.totalPage((int) count, Convert.toInt(pageResult.getPageSize())));
pageResult.setPageSize(Long.valueOf(applyDTO.getPageSize()));
pageResult.setPageNo(Long.valueOf(applyDTO.getPageNo()));
return pageResult;
}
@Override
public ApiRes<List<TaskDetailVO>> record(String processInstanceId) {
List<Comment> processInstanceComments = taskService.getProcessInstanceComments(processInstanceId);
Map<String, List<Comment>> commentsMap = processInstanceComments.stream()
.collect(Collectors.groupingBy(Comment::getTaskId));
List<Attachment> processInstanceAttachments = taskService.getProcessInstanceAttachments(processInstanceId);
Map<String, List<Attachment>> attachmentMap = processInstanceAttachments.stream()
.collect(Collectors.groupingBy(Attachment::getTaskId));
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list();
List<TaskDetailVO> taskDetailVOS= new ArrayList<>();
for (HistoricActivityInstance historicActivityInstance : list) {
if("startEvent".equals(historicActivityInstance.getActivityType())){
TaskDetailVO taskDetailVO= new TaskDetailVO();
taskDetailVO.setTaskId(historicActivityInstance.getTaskId());
taskDetailVO.setActivityId(historicActivityInstance.getActivityId());
taskDetailVO.setName("流程开始");
taskDetailVO.setCreateTime(historicActivityInstance.getStartTime());
taskDetailVO.setEndTime(historicActivityInstance.getEndTime());
// List<Comment> comments = commentsMap.get(historicActivityInstance.getTaskId());
// taskDetailVO.setComment(comments.get(0).getFullMessage());
if (historicActivityInstance.getAssignee()!=null)
{
List<UserListDTO> userList= orgUserMapper.QueryUserWithParentOrg(historicActivityInstance.getAssignee());
taskDetailVO.setUserId(userList.get(0).getUserID());
taskDetailVO.setUserName(userList.get(0).getRealName());
}
taskDetailVOS.add(taskDetailVO);
// taskDetailVO.setSignImage();
// taskDetailVO.setAttachmentVOList();
// taskDetailVO.setOptionVOList();
// taskDetailVO.setCommentVOList();
}
else if("endEvent".equals(historicActivityInstance.getActivityType())){
TaskDetailVO taskDetailVO= new TaskDetailVO();
taskDetailVO.setTaskId(historicActivityInstance.getTaskId());
taskDetailVO.setActivityId(historicActivityInstance.getActivityId());
taskDetailVO.setName("流程结束");
taskDetailVO.setCreateTime(historicActivityInstance.getStartTime());
taskDetailVO.setEndTime(historicActivityInstance.getEndTime());
// List<Comment> comments = commentsMap.get(historicActivityInstance.getTaskId());
// taskDetailVO.setComment(comments.get(0).getFullMessage());
taskDetailVOS.add(taskDetailVO);
}
else if("userTask".equals(historicActivityInstance.getActivityType())){
List<Comment> comments = commentsMap.get(historicActivityInstance.getTaskId());
if(CollUtil.isNotEmpty(comments)){
for (Comment comment : comments) {
if("opinion".equals(comment.getType())){
TaskDetailVO taskDetailVO= new TaskDetailVO();
taskDetailVO.setTaskId(historicActivityInstance.getTaskId());
if (historicActivityInstance.getAssignee()!=null)
{
SysUser user= sysUserService.getById(historicActivityInstance.getAssignee());
List<UserListDTO> userList= orgUserMapper.QueryUserWithParentOrg(historicActivityInstance.getAssignee());
taskDetailVO.setUserId(userList.get(0).getUserID());
taskDetailVO.setUserName(userList.get(0).getRealName());}
taskDetailVO.setActivityId(historicActivityInstance.getActivityId());
taskDetailVO.setName(historicActivityInstance.getActivityName());
taskDetailVO.setCreateTime(historicActivityInstance.getStartTime());
taskDetailVO.setEndTime(historicActivityInstance.getEndTime());
// taskDetailVO.setComment(comment.getFullMessage());
List<Attachment> attachments = attachmentMap.get(historicActivityInstance.getTaskId());
List<AttachmentVO> attachmentVOList = new ArrayList<>();
if (attachments!=null)
{
for (Attachment attachment : attachments) {
AttachmentVO attachmentVO = new AttachmentVO();
attachmentVO.setId(attachment.getId());
attachmentVO.setName(attachment.getName());
attachmentVO.setUrl(attachment.getUrl());
attachmentVOList.add(attachmentVO);
}
}
for (Comment comment1 : comments) {
if("sign".equals(comment1.getType())){
taskDetailVO.setSignImage(comment1.getFullMessage());
}
}
taskDetailVO.setComment(comments.get(0).getFullMessage());
taskDetailVO.setAttachmentVOList(attachmentVOList);
taskDetailVOS.add(taskDetailVO);
}
}
}
}
}
return ApiRes.success(taskDetailVOS);
}
/**
* @Author: Zhaojw
* @Description: 为用户赋值
* @DateTime: 2023/9/27 16:00
* @Params:
* @Return
*/
private UserInfo SetUser(SysUser sysUser)
{
UserInfo userInfo=new UserInfo();
userInfo.setUserId(sysUser.getUserId());
userInfo.setId(sysUser.getUserId().toString());
userInfo.setName(sysUser.getRealName());
userInfo.setSex(sysUser.getSex());
return userInfo;
}
private String getCurrentName(String processInstanceId, Boolean flag, String processDefinitionId) {
if (flag) {
return "流程已结束";
}
List<ActivityInstance> list = runtimeService.createActivityInstanceQuery().processInstanceId(processInstanceId).activityType("userTask").unfinished().orderByActivityInstanceStartTime().desc().list();
if(CollUtil.isEmpty(list)){
return "";
}
else{
String activityId = list.get(0).getActivityId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
FlowElement flowElement = bpmnModel.getMainProcess().getFlowElement(activityId);
return flowElement.getName();
}
// Execution execution = runtimeService.createExecutionQuery().executionId(processInstanceId).singleResult();
// String activityId = execution.getActivityId();
// if (StringUtils.isBlank(activityId)) {
// return "";
// } else {
// BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
// FlowElement flowElement = bpmnModel.getMainProcess().getFlowElement(activityId);
// return flowElement.getName();
// }
}
}
...@@ -9,9 +9,21 @@ ...@@ -9,9 +9,21 @@
</resultMap> </resultMap>
<select id="QueryUserByRoleId" resultMap="UserListDTO"> <select id="QueryUserByRoleId" resultMap="UserListDTO">
SELECT su.user_id,su.real_name FROM `sys_role` sr join sys_user_role sur on sr.role_id=sur.role_id JOIN sys_user su on sur.user_id=su.user_id SELECT su.user_id, su.real_name
where sr.role_id in ${roleId} FROM sys_user su
GROUP BY su.user_id,su.real_name JOIN sys_user_role sur ON su.user_id = sur.user_id
JOIN sys_role sr ON sur.role_id = sr.role_id
WHERE sr.role_id in ${roleId} -- 角色ID
AND su.user_id IN (
SELECT suo.user_id
FROM sys_user_org suo
WHERE suo.org_id IN (
SELECT org_id
FROM sys_user_org
WHERE user_id = ${userId} -- 传入的用户ID
)
)
GROUP BY su.user_id, su.real_name;
</select> </select>
<select id="QueryUserByRoleIdAndOrg" resultMap="UserListDTO"> <select id="QueryUserByRoleIdAndOrg" resultMap="UserListDTO">
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论