add : 流程图开发

This commit is contained in:
ls
2025-11-05 16:13:46 +08:00
parent a76cd7a32f
commit 712aefd8d3
12 changed files with 738 additions and 161 deletions

View File

@@ -33,6 +33,18 @@ public class FlwInstanceController {
return R.ok();
}
/**
* 发起流程
*/
@RequestMapping("/startFlowInstance1")
public R startFlowInstance1(@RequestParam Map<String, Object> params){
instanceService.startFlowInstance1(params);
return R.ok();
}
/**
* 我的待办
*/
@@ -69,12 +81,49 @@ public class FlwInstanceController {
*/
@PostMapping("/completeFlow")
public R completeFlow(@RequestBody Map<String, Object> params){
R r = instanceService.completeTaskById(params);
return r;
}
/**
* 任务节点1审批通过工单完结
*/
@PostMapping("/completeFlow1")
public R completeFlow1(@RequestBody Map<String, Object> params){
R r = instanceService.completeTaskById1(params);
return r;
}
/**
* 任务节点1无法解决进入下一个节点
*/
@PostMapping("/deleteFlow1")
public R deleteFlow1(@RequestBody Map<String, Object> params){
R r = instanceService.deleteFlow1(params);
return r;
}
/**
* 终结流程
*/
@PostMapping("/deleteFlow")
public R deleteFlow(@RequestBody Map<String, Object> params){
R r = instanceService.deleteFlow(params);
return r;
}
@RequestMapping("/claimTask/{id}")
public R claimTask(@PathVariable("id") String id){
if(StringUtils.isBlank(id)){

View File

@@ -9,10 +9,14 @@ import java.util.Map;
public interface FlwInstanceService {
void startFlowInstance(Map<String, Object> params);
void startFlowInstance1(Map<String, Object> params);
R getTodoTaskList(Map<String, Object> params);
R completeTaskById(Map<String, Object> id);
R completeTaskById1(Map<String, Object> id);
void unclaimTask(String id);
void claimTask(String id);
@@ -26,4 +30,8 @@ public interface FlwInstanceService {
R getMyCompleteTaskList(Map<String, Object> params);
List<FlwHiTaskEntity> getCompleteHiTaskInstance(String id);
R deleteFlow(Map<String, Object> params);
R deleteFlow1(Map<String, Object> params);
}

View File

@@ -25,6 +25,7 @@ import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.UserTask;
import org.flowable.common.engine.api.FlowableException;
import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;
@@ -88,7 +89,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI
public void startFlowInstance(Map<String, Object> params) {
SysUserEntity loginUser = ShiroUtils.getUserEntity();
// 获取需要发起的流程信息
String ticketsId = (String) params.get("ticketsId");
// String ticketsId = (String) params.get("ticketsId");
Long userId = Long.valueOf((String) params.get("user1"));
Map<String, Object> variable = new HashMap<>();
// 结合传递过来的数据动态的绑定流程变量
@@ -98,27 +99,43 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI
// 记录流程的发起人
identityService.setAuthenticatedUserId(ShiroUtils.getUserId().toString());
// 启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(defId, variable);
try {
ProcessInstance processInstance = runtimeService.startProcessInstanceById(defId, variable);
}catch (FlowableException e){
e.printStackTrace();
}
SysUserEntity user = sysUserService.getById(userId);
//更新工单审批id
TicketsEntity ticketsEntity = new TicketsEntity();
ticketsEntity.setTicketsId(Long.valueOf(ticketsId));
ticketsEntity.setStatus(TicketsStatusEnums.CHECKED.getCode());
ticketsEntity.setProcessInstance(processInstance.getProcessInstanceId());
ticketsEntity.setDeptPeople(user.getNickname());
ticketsEntity.setAssignUserId(userId);
ticketsService.updateById(ticketsEntity);
// TicketsEntity ticketsEntity = new TicketsEntity();
// ticketsEntity.setTicketsId(Long.valueOf(ticketsId));
// ticketsEntity.setStatus(TicketsStatusEnums.CHECKED.getCode());
// ticketsEntity.setProcessInstance(processInstance.getProcessInstanceId());
// ticketsEntity.setDeptPeople(user.getNickname());
// ticketsEntity.setAssignUserId(userId);
// ticketsService.updateById(ticketsEntity);
if (StrUtil.isEmpty(user.getWexinId())){
throw new RRException("企业id为空企业微信消息无法推送");
}
String accessToken = getAccessToken();
sendWeChatMessage(user.getWexinId(),"工单已推送,请登入售后管理系统处理",accessToken,ticketsId);
// sendWeChatMessage(user.getWexinId(),"工单已推送,请登入售后管理系统处理",accessToken,ticketsId);
}
@Override
public void startFlowInstance1(Map<String, Object> params) {
// 启动流程
try {
Map<String, Object> startVars = new HashMap<>();
runtimeService.startProcessInstanceById(defId, startVars); }
catch (FlowableException e){
e.printStackTrace();
}
}
/**
* 获取access_token
*/
@@ -331,7 +348,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI
@Override
public R completeTaskById(Map<String, Object> params) {
String processInstance = (String) params.get("processInstance");
Integer ticketsId = (Integer) params.get("ticketsId");
// Integer ticketsId = (Integer) params.get("ticketsId");
if(StringUtils.isBlank(processInstance)){
return R.error("流程Id不能为空");
}
@@ -341,15 +358,74 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI
taskService.complete(tasks.get(0).getId());
}
//更新工单审批id
TicketsEntity ticketsEntity = new TicketsEntity();
ticketsEntity.setTicketsId(Long.valueOf(ticketsId));
ticketsEntity.setStatus(TicketsStatusEnums.CANCEL.getCode());
ticketsEntity.setUpdateTime(new Date());
ticketsService.updateById(ticketsEntity);
// TicketsEntity ticketsEntity = new TicketsEntity();
// ticketsEntity.setTicketsId(Long.valueOf(ticketsId));
// ticketsEntity.setStatus(TicketsStatusEnums.CANCEL.getCode());
// ticketsEntity.setUpdateTime(new Date());
// ticketsService.updateById(ticketsEntity);
return R.ok("操作成功");
}
@Override
public R completeTaskById1(Map<String, Object> params) {
String processInstance = (String) params.get("processInstance");
if(StringUtils.isBlank(processInstance)){
return R.error("流程Id不能为空");
}
Task secondTask = taskService.createTaskQuery()
.processInstanceId(processInstance)
.singleResult();
Map<String, Object> secondApprovalVars = new HashMap<>();
secondApprovalVars.put("approvalResult", true);
taskService.complete(secondTask.getId(), secondApprovalVars);
return R.ok("操作成功");
}
@Override
public R deleteFlow1(Map<String, Object> params) {
String processInstance = (String) params.get("processInstance");
if(StringUtils.isBlank(processInstance)){
return R.error("流程Id不能为空");
}
Task secondTask = taskService.createTaskQuery()
.processInstanceId(processInstance)
.singleResult();
Map<String, Object> secondApprovalVars = new HashMap<>();
secondApprovalVars.put("approvalResult", false);
secondApprovalVars.put("user1", 2);
taskService.complete(secondTask.getId(), secondApprovalVars);
return R.ok("操作成功");
}
@Override
public R deleteFlow(Map<String, Object> params) {
String processInstance = (String) params.get("processInstance");
// Integer ticketsId = (Integer) params.get("ticketsId");
if(StringUtils.isBlank(processInstance)){
return R.error("流程Id不能为空");
}
//查询活跃任务
TaskQuery taskQuery = taskService.createTaskQuery().active().processInstanceId(processInstance);
List<Task> tasks = taskQuery.list();
if (tasks.isEmpty()){
return R.error("没有可终结的任务");
}
runtimeService.deleteProcessInstance(processInstance, "测试终结流程");
//更新工单审批id
// TicketsEntity ticketsEntity = new TicketsEntity();
// ticketsEntity.setTicketsId(Long.valueOf(ticketsId));
// ticketsEntity.setStatus(TicketsStatusEnums.CANCEL.getCode());
// ticketsEntity.setUpdateTime(new Date());
// ticketsService.updateById(ticketsEntity);
return R.ok("操作成功");
}
@Override
public void unclaimTask(String id) {
taskService.unclaim(id);

View File

@@ -88,7 +88,6 @@ public class FileController {
if(StringUtils.isBlank(procId)|| "null".equals(procId) || "undefined".equals(procId)){
return ;
}
byte[] bytes = instanceService.diagram(procId);
response.setContentType("image/png");
ServletOutputStream outputStream = response.getOutputStream();

View File

@@ -75,11 +75,7 @@ public class TicketsController {
@RequestMapping("/save")
//@RequiresPermissions("tickets:tickets:save")
public R save(@RequestBody TicketsEntity tickets){
SysUserEntity loginUser = ShiroUtils.getUserEntity();
tickets.setCreateTime(new Date());
tickets.setCreateUser(loginUser.getNickname());
ticketsService.save(tickets);
ticketsService.saveTicket(tickets);
return R.ok();
}

View File

@@ -1,5 +1,6 @@
package com.boge.modules.tickets.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.util.Date;
@@ -28,7 +29,7 @@ public class TicketsDTO {
/**
* 合同编号
*/
private String contractNumber;
private String contractCode;
/**
* 客户id
*/
@@ -51,9 +52,9 @@ public class TicketsDTO {
*/
private String deptPhone;
/**
* 创建者ID
* 创建者
*/
private Long createUserId;
private String createUser;
/**
* 创建时间
*/
@@ -65,12 +66,14 @@ public class TicketsDTO {
/**
* 工单状态
*/
private Integer status;
/**
* 工单关闭时间
*/
private Date updateTime;
/**
* 审批流id
*/

View File

@@ -1,5 +1,6 @@
package com.boge.modules.tickets.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -79,6 +80,8 @@ public class TicketsEntity implements Serializable {
*/
private Date updateTime;
/**
* 审批流id
*/

View File

@@ -21,5 +21,7 @@ public interface TicketsService extends IService<TicketsEntity> {
TicketsDTO getTicketsById(String ticketsId);
PageUtils queryPageByType(Map<String, Object> params);
void saveTicket(TicketsEntity tickets);
}

View File

@@ -12,11 +12,17 @@ import com.boge.modules.sys.entity.SysUserEntity;
import com.boge.modules.sys.service.SysUserRoleService;
import com.boge.modules.sys.service.impl.SysUserServiceImpl;
import com.boge.modules.tickets.dto.TicketsDTO;
import org.flowable.common.engine.api.FlowableException;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.boge.modules.tickets.enums.TicketsTypeEnums;
import com.boge.modules.tickets.enums.TicketsStatusEnums;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -45,18 +51,25 @@ public class TicketsServiceImpl extends ServiceImpl<TicketsDao, TicketsEntity> i
@Autowired
private SysUserRoleService sysUserRoleService;
@Autowired
protected RuntimeService runtimeService;
@Value("${ProcessInstance.defId}")
private String defId;
@Override
public PageUtils queryPage(Map<String, Object> params) {
SysUserEntity loginUser = ShiroUtils.getUserEntity();
QueryWrapper<TicketsEntity> ticketsEntityQueryWrapper = new QueryWrapper<>();
if (ObjectUtil.isNotEmpty(loginUser)){
if (ObjectUtil.isNotEmpty(loginUser)) {
List<Long> longs = sysUserRoleService.queryRoleIdList(loginUser.getUserId());
//判断是否是超级管理员
if (longs.contains(2L)){
ticketsEntityQueryWrapper.orderBy(true, false,"create_time");
}else {
if (longs.contains(2L)) {
ticketsEntityQueryWrapper.orderBy(true, false, "create_time");
} else {
ticketsEntityQueryWrapper.eq("assign_user_id", loginUser.getUserId())
.orderBy(true, false,"create_time");;
.orderBy(true, false, "create_time");
;
}
}
@@ -71,18 +84,18 @@ public class TicketsServiceImpl extends ServiceImpl<TicketsDao, TicketsEntity> i
public PageUtils queryPageByType(Map<String, Object> params) {
SysUserEntity loginUser = ShiroUtils.getUserEntity();
QueryWrapper<TicketsEntity> ticketsEntityQueryWrapper = new QueryWrapper<>();
if (ObjectUtil.isNotEmpty(loginUser)){
if (ObjectUtil.isNotEmpty(loginUser)) {
//判断是否是超级管理员
ticketsEntityQueryWrapper.orderBy(true, false,"create_time");
if (TicketsTypeEnums.ASSIGN.getCode().equals(params.get("type"))){
ticketsEntityQueryWrapper.orderBy(true, false, "create_time");
if (TicketsTypeEnums.ASSIGN.getCode().equals(params.get("type"))) {
ticketsEntityQueryWrapper.eq("create_user", loginUser.getUsername());
}
if (TicketsTypeEnums.TO_BE_DONE.getCode().equals(params.get("type"))){
ticketsEntityQueryWrapper.eq("assign_user_id", loginUser.getUserId()).eq("status",TicketsStatusEnums.CHECKED.getCode());
if (TicketsTypeEnums.TO_BE_DONE.getCode().equals(params.get("type"))) {
ticketsEntityQueryWrapper.eq("assign_user_id", loginUser.getUserId()).eq("status", TicketsStatusEnums.CHECKED.getCode());
}
if (TicketsTypeEnums.FINISH.getCode().equals(params.get("type"))){
ticketsEntityQueryWrapper.eq("assign_user_id", loginUser.getUserId()).eq("status",TicketsStatusEnums.CANCEL.getCode());
if (TicketsTypeEnums.FINISH.getCode().equals(params.get("type"))) {
ticketsEntityQueryWrapper.eq("assign_user_id", loginUser.getUserId()).eq("status", TicketsStatusEnums.CANCEL.getCode());
}
@@ -95,6 +108,22 @@ public class TicketsServiceImpl extends ServiceImpl<TicketsDao, TicketsEntity> i
return new PageUtils(page);
}
@Override
public void saveTicket(TicketsEntity tickets) {
// 启动流程
try {
Map<String, Object> startVars = new HashMap<>();
ProcessInstance processInstance = runtimeService.startProcessInstanceById(defId, startVars);
SysUserEntity loginUser = ShiroUtils.getUserEntity();
tickets.setCreateTime(new Date());
tickets.setCreateUser(loginUser.getNickname());
tickets.setProcessInstance(processInstance.getProcessInstanceId());
ticketsDao.insert(tickets);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public TicketsDTO getTicketsById(String ticketsId) {
TicketsDTO tickets = ticketsDao.getTicketsDTOById(ticketsId);

View File

@@ -8,12 +8,11 @@
<result property="ticketsId" column="tickets_id"/>
<result property="carType" column="car_type"/>
<result property="errorType" column="error_type"/>
<result property="contractId" column="contract_number"/>
<result property="clientId" column="client_id"/>
<result property="description" column="description"/>
<result property="deptPeople" column="dept_people"/>
<result property="deptPhone" column="dept_phone"/>
<result property="createUserId" column="create_user_id"/>
<result property="createUser" column="create_user"/>
<result property="createTime" column="create_time"/>
<result property="isCheck" column="is_check"/>
<result property="status" column="status"/>
@@ -23,8 +22,6 @@
select * from sys_tickets as a
left join sys_client as b on a.client_id = b.client_id
left join sys_car as c on a.car_type = c.car_id
left join sys_contract as d on a.contract_id = d.contract_id
where a.tickets_id = #{ticketsId}
</select>