From 0ac47aa3e43fa6982fadbf6b30ca331d9ab7bfd2 Mon Sep 17 00:00:00 2001 From: ls <1793460677@qq.com> Date: Mon, 27 Oct 2025 12:43:27 +0800 Subject: [PATCH 1/6] add : git test --- base-fast/src/main/resources/application.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/base-fast/src/main/resources/application.yml b/base-fast/src/main/resources/application.yml index 6cc6861..31537e4 100644 --- a/base-fast/src/main/resources/application.yml +++ b/base-fast/src/main/resources/application.yml @@ -4,6 +4,7 @@ server: uri-encoding: UTF-8 max-threads: 1000 min-spare-threads: 30 + port: 8070 connection-timeout: 5000ms servlet: From a76cd7a32f13510229d3508a88fcd7b329c91597 Mon Sep 17 00:00:00 2001 From: ls <1793460677@qq.com> Date: Mon, 3 Nov 2025 15:57:33 +0800 Subject: [PATCH 2/6] =?UTF-8?q?add:=20=E5=89=8D=E7=AB=AF=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base-vue/src/views/modules/tickets/detail.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base-vue/src/views/modules/tickets/detail.vue b/base-vue/src/views/modules/tickets/detail.vue index e31f41a..019d548 100644 --- a/base-vue/src/views/modules/tickets/detail.vue +++ b/base-vue/src/views/modules/tickets/detail.vue @@ -17,7 +17,7 @@ {{ ticketsData.clientName }} {{ ticketsData.deptPeople }} {{ ticketsData.deptPhone }} - {{ ticketsData.createUser }} + {{ ticketsData.createUser}} {{ ticketsData.createTime }} {{ ['否', '是'][Number(ticketsData.isCheck)] }} {{ statusOpt | findByValue(ticketsData.status) }} From 712aefd8d361b13ea986d11dcb8b351cfca37b5f Mon Sep 17 00:00:00 2001 From: ls <1793460677@qq.com> Date: Wed, 5 Nov 2025 16:13:46 +0800 Subject: [PATCH 3/6] =?UTF-8?q?add=20:=20=E6=B5=81=E7=A8=8B=E5=9B=BE?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/FlwInstanceController.java | 51 +- .../flow/service/FlwInstanceService.java | 8 + .../service/impl/FlwInstanceServiceImpl.java | 108 +++- .../sys/controller/FileController.java | 1 - .../tickets/controller/TicketsController.java | 6 +- .../boge/modules/tickets/dto/TicketsDTO.java | 9 +- .../modules/tickets/entity/TicketsEntity.java | 3 + .../tickets/service/TicketsService.java | 2 + .../service/impl/TicketsServiceImpl.java | 53 +- .../resources/mapper/tickets/TicketsDao.xml | 5 +- base-vue/src/views/modules/tickets/detail.vue | 603 +++++++++++++++--- .../src/views/modules/tickets/tickets.vue | 50 +- 12 files changed, 738 insertions(+), 161 deletions(-) diff --git a/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java b/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java index 1ee72eb..50c2557 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java +++ b/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java @@ -33,6 +33,18 @@ public class FlwInstanceController { return R.ok(); } + + /** + * 发起流程 + */ + @RequestMapping("/startFlowInstance1") + public R startFlowInstance1(@RequestParam Map params){ + + instanceService.startFlowInstance1(params); + return R.ok(); + } + + /** * 我的待办 */ @@ -69,12 +81,49 @@ public class FlwInstanceController { */ @PostMapping("/completeFlow") public R completeFlow(@RequestBody Map params){ - R r = instanceService.completeTaskById(params); + return r; + } + + + /** + * 任务节点1审批通过工单完结 + */ + @PostMapping("/completeFlow1") + public R completeFlow1(@RequestBody Map params){ + + R r = instanceService.completeTaskById1(params); return r; } + + + /** + * 任务节点1无法解决进入下一个节点 + */ + @PostMapping("/deleteFlow1") + public R deleteFlow1(@RequestBody Map params){ + + R r = instanceService.deleteFlow1(params); + + return r; + } + + + /** + * 终结流程 + */ + @PostMapping("/deleteFlow") + public R deleteFlow(@RequestBody Map params){ + + R r = instanceService.deleteFlow(params); + + return r; + } + + + @RequestMapping("/claimTask/{id}") public R claimTask(@PathVariable("id") String id){ if(StringUtils.isBlank(id)){ diff --git a/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java b/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java index 06e8f09..df7d875 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java +++ b/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java @@ -9,10 +9,14 @@ import java.util.Map; public interface FlwInstanceService { void startFlowInstance(Map params); + void startFlowInstance1(Map params); + R getTodoTaskList(Map params); R completeTaskById(Map id); + R completeTaskById1(Map id); + void unclaimTask(String id); void claimTask(String id); @@ -26,4 +30,8 @@ public interface FlwInstanceService { R getMyCompleteTaskList(Map params); List getCompleteHiTaskInstance(String id); + + R deleteFlow(Map params); + + R deleteFlow1(Map params); } diff --git a/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java b/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java index fe46c6e..ecf83c8 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java @@ -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 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 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 params) { + // 启动流程 + try { + Map 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 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 params) { + String processInstance = (String) params.get("processInstance"); + if(StringUtils.isBlank(processInstance)){ + return R.error("流程Id不能为空"); + } + Task secondTask = taskService.createTaskQuery() + .processInstanceId(processInstance) + .singleResult(); + Map secondApprovalVars = new HashMap<>(); + secondApprovalVars.put("approvalResult", true); + taskService.complete(secondTask.getId(), secondApprovalVars); + return R.ok("操作成功"); + } + + + @Override + public R deleteFlow1(Map params) { + String processInstance = (String) params.get("processInstance"); + if(StringUtils.isBlank(processInstance)){ + return R.error("流程Id不能为空"); + } + Task secondTask = taskService.createTaskQuery() + .processInstanceId(processInstance) + .singleResult(); + Map secondApprovalVars = new HashMap<>(); + secondApprovalVars.put("approvalResult", false); + secondApprovalVars.put("user1", 2); + taskService.complete(secondTask.getId(), secondApprovalVars); + return R.ok("操作成功"); + } + + + @Override + public R deleteFlow(Map 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 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); diff --git a/base-fast/src/main/java/com/boge/modules/sys/controller/FileController.java b/base-fast/src/main/java/com/boge/modules/sys/controller/FileController.java index 6d2afc7..ed2a3a9 100644 --- a/base-fast/src/main/java/com/boge/modules/sys/controller/FileController.java +++ b/base-fast/src/main/java/com/boge/modules/sys/controller/FileController.java @@ -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(); diff --git a/base-fast/src/main/java/com/boge/modules/tickets/controller/TicketsController.java b/base-fast/src/main/java/com/boge/modules/tickets/controller/TicketsController.java index 3c702db..16ba182 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/controller/TicketsController.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/controller/TicketsController.java @@ -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(); } diff --git a/base-fast/src/main/java/com/boge/modules/tickets/dto/TicketsDTO.java b/base-fast/src/main/java/com/boge/modules/tickets/dto/TicketsDTO.java index 57b6b5a..51d97c0 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/dto/TicketsDTO.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/dto/TicketsDTO.java @@ -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 */ diff --git a/base-fast/src/main/java/com/boge/modules/tickets/entity/TicketsEntity.java b/base-fast/src/main/java/com/boge/modules/tickets/entity/TicketsEntity.java index 1b7e2a9..36f8a6a 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/entity/TicketsEntity.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/entity/TicketsEntity.java @@ -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 */ diff --git a/base-fast/src/main/java/com/boge/modules/tickets/service/TicketsService.java b/base-fast/src/main/java/com/boge/modules/tickets/service/TicketsService.java index 88f4f56..3845e5d 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/service/TicketsService.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/service/TicketsService.java @@ -21,5 +21,7 @@ public interface TicketsService extends IService { TicketsDTO getTicketsById(String ticketsId); PageUtils queryPageByType(Map params); + + void saveTicket(TicketsEntity tickets); } diff --git a/base-fast/src/main/java/com/boge/modules/tickets/service/impl/TicketsServiceImpl.java b/base-fast/src/main/java/com/boge/modules/tickets/service/impl/TicketsServiceImpl.java index d819487..06594e3 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/service/impl/TicketsServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/service/impl/TicketsServiceImpl.java @@ -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 i @Autowired private SysUserRoleService sysUserRoleService; + @Autowired + protected RuntimeService runtimeService; + + @Value("${ProcessInstance.defId}") + private String defId; + @Override public PageUtils queryPage(Map params) { SysUserEntity loginUser = ShiroUtils.getUserEntity(); QueryWrapper ticketsEntityQueryWrapper = new QueryWrapper<>(); - if (ObjectUtil.isNotEmpty(loginUser)){ + if (ObjectUtil.isNotEmpty(loginUser)) { List 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 i public PageUtils queryPageByType(Map params) { SysUserEntity loginUser = ShiroUtils.getUserEntity(); QueryWrapper 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 i return new PageUtils(page); } + @Override + public void saveTicket(TicketsEntity tickets) { + // 启动流程 + try { + Map 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); diff --git a/base-fast/src/main/resources/mapper/tickets/TicketsDao.xml b/base-fast/src/main/resources/mapper/tickets/TicketsDao.xml index 83c1745..03efab7 100644 --- a/base-fast/src/main/resources/mapper/tickets/TicketsDao.xml +++ b/base-fast/src/main/resources/mapper/tickets/TicketsDao.xml @@ -8,12 +8,11 @@ - - + @@ -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} diff --git a/base-vue/src/views/modules/tickets/detail.vue b/base-vue/src/views/modules/tickets/detail.vue index 019d548..166898b 100644 --- a/base-vue/src/views/modules/tickets/detail.vue +++ b/base-vue/src/views/modules/tickets/detail.vue @@ -1,123 +1,516 @@ diff --git a/base-vue/src/views/modules/tickets/tickets.vue b/base-vue/src/views/modules/tickets/tickets.vue index 79c50e2..ca39ba9 100644 --- a/base-vue/src/views/modules/tickets/tickets.vue +++ b/base-vue/src/views/modules/tickets/tickets.vue @@ -148,7 +148,7 @@ @@ -162,6 +162,16 @@ :total="totalPage" layout="total, sizes, prev, pager, next, jumper"> + + + + 流程进度图 + {}) }, - startFlowHandle(id){ - this.flowForm = {} - this.flowForm.ticketsId = id + startFlowHandle(processInstance) { + // 传递流程实例ID作为参数(假设后端需要的参数名为procid) this.$http({ - url: this.$http.adornUrl('/flow/deploy/flowDef'), + url: this.$http.adornUrl('/file/fileController/downloadFlowActiveImg'), method: 'get', - params: this.$http.adornParams() - }).then(({data}) => { - if (data && data.code === 0) { - this.dynamiForm = [...data.data] - this.users = [...data.users] - this.roles = [...data.roles] - this.dialogFormVisible = true + params: this.$http.adornParams({ + procId: processInstance // 关键:传递流程实例ID + }), + responseType: 'blob' // 关键:声明响应类型为二进制blob + }).then((response) => { + // 成功获取二进制图片数据 + this.flowImgUrl = URL.createObjectURL(response.data); // 转换为可展示的URL + this.dialogVisible = true; // 显示弹框 + }).catch((error) => { + // 错误处理(可能返回JSON格式的错误信息) + console.error('获取流程图失败', error); + // 尝试解析错误信息(若后端返回JSON错误) + if (error.response && error.response.data) { + const errorData = error.response.data; + this.$message.error(errorData.msg || '获取流程图失败,请稍后重试'); + } else { + this.$message.error('获取流程图失败,请稍后重试'); } - }) + }); }, submitStartFlow(){ // 提交表单数据 From edc28808fa198493a3b537e82b394c9b6b353449 Mon Sep 17 00:00:00 2001 From: ls <1793460677@qq.com> Date: Sat, 8 Nov 2025 15:46:45 +0800 Subject: [PATCH 4/6] =?UTF-8?q?add=20:=20=E5=B7=A5=E5=8D=95=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=BA=A4=E4=BA=92=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/FlwInstanceController.java | 45 +--- .../flow/service/FlwInstanceService.java | 3 - .../service/impl/FlwDeployServiceImpl.java | 21 +- .../service/impl/FlwInstanceServiceImpl.java | 253 +++++++++--------- .../boge/modules/tickets/dao/TicketsDao.java | 2 + .../boge/modules/tickets/dto/TicketsDTO.java | 5 + .../modules/tickets/entity/TicketsEntity.java | 7 +- .../tickets/enums/TicketUserEnums.java | 25 ++ .../tickets/enums/TicketsStatusEnums.java | 2 +- .../service/impl/TicketsServiceImpl.java | 16 +- .../resources/mapper/tickets/TicketsDao.xml | 4 + base-vue/src/views/modules/tickets/detail.vue | 228 +++++++++++++--- .../src/views/modules/tickets/tickets.vue | 8 + 13 files changed, 382 insertions(+), 237 deletions(-) create mode 100644 base-fast/src/main/java/com/boge/modules/tickets/enums/TicketUserEnums.java diff --git a/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java b/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java index 50c2557..78d621b 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java +++ b/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java @@ -23,26 +23,7 @@ public class FlwInstanceController { @Lazy private FlwInstanceService instanceService; - /** - * 发起流程 - */ - @RequestMapping("/startFlowInstance") - public R startFlowInstance(@RequestParam Map params){ - instanceService.startFlowInstance(params); - return R.ok(); - } - - - /** - * 发起流程 - */ - @RequestMapping("/startFlowInstance1") - public R startFlowInstance1(@RequestParam Map params){ - - instanceService.startFlowInstance1(params); - return R.ok(); - } /** @@ -77,7 +58,7 @@ public class FlwInstanceController { } /** - * 审批通过 + * 提交审批 */ @PostMapping("/completeFlow") public R completeFlow(@RequestBody Map params){ @@ -86,30 +67,6 @@ public class FlwInstanceController { } - /** - * 任务节点1审批通过工单完结 - */ - @PostMapping("/completeFlow1") - public R completeFlow1(@RequestBody Map params){ - - R r = instanceService.completeTaskById1(params); - - return r; - } - - - - /** - * 任务节点1无法解决进入下一个节点 - */ - @PostMapping("/deleteFlow1") - public R deleteFlow1(@RequestBody Map params){ - - R r = instanceService.deleteFlow1(params); - - return r; - } - /** * 终结流程 diff --git a/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java b/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java index df7d875..72bc306 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java +++ b/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java @@ -9,13 +9,11 @@ import java.util.Map; public interface FlwInstanceService { void startFlowInstance(Map params); - void startFlowInstance1(Map params); R getTodoTaskList(Map params); R completeTaskById(Map id); - R completeTaskById1(Map id); void unclaimTask(String id); @@ -33,5 +31,4 @@ public interface FlwInstanceService { R deleteFlow(Map params); - R deleteFlow1(Map params); } diff --git a/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwDeployServiceImpl.java b/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwDeployServiceImpl.java index 3d2cce4..60c3161 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwDeployServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwDeployServiceImpl.java @@ -215,26 +215,7 @@ public class FlwDeployServiceImpl extends FlowServiceNoFactory implements FlwDep map.put("value", ""); map.put("key", findFlowDefUserOrGroup(assignee)); list.add(map); - } else if (candidateUsers != null && candidateUsers.size() > 0) { - // 指定的候选人 - String join = String.join(",", candidateUsers); - Map map = new HashMap<>(); - map.put("name", flowElement.getName()); - map.put("type", "candidateUsers"); - // ${user1} ${user2},${user3} ${group1} - map.put("value", ""); - map.put("key", findFlowDefUserOrGroup(join)); - list.add(map); - - } else if (candidateGroups != null && candidateGroups.size() > 0) { - String join = String.join(",", candidateGroups); - Map map = new HashMap<>(); - map.put("name", flowElement.getName()); - map.put("type", "candidateGroups"); - // ${user1} ${user2},${user3} ${group1} - map.put("value", ""); - map.put("key", findFlowDefUserOrGroup(join)); - list.add(map); + break; } } diff --git a/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java b/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java index ecf83c8..181097a 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java @@ -18,7 +18,9 @@ import com.boge.modules.sys.entity.SysUserEntity; import com.boge.modules.sys.service.SysRoleService; import com.boge.modules.sys.service.SysUserService; import com.boge.modules.sys.service.impl.SysUserServiceImpl; +import com.boge.modules.tickets.dao.TicketsDao; import com.boge.modules.tickets.entity.TicketsEntity; +import com.boge.modules.tickets.enums.TicketUserEnums; import com.boge.modules.tickets.enums.TicketsStatusEnums; import com.boge.modules.tickets.service.TicketsService; import org.flowable.bpmn.model.BpmnModel; @@ -69,7 +71,8 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI @Value("${ProcessInstance.defId}") private String defId; - + @Autowired + private TicketsDao ticketsDao; //发送消息的类型 private final static String MSGTYPE = "text"; //将消息发送给所有成员 @@ -84,7 +87,6 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI private final static String CREATE_SESSION_URL = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="; - @Override public void startFlowInstance(Map params) { SysUserEntity loginUser = ShiroUtils.getUserEntity(); @@ -101,7 +103,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI // 启动流程 try { ProcessInstance processInstance = runtimeService.startProcessInstanceById(defId, variable); - }catch (FlowableException e){ + } catch (FlowableException e) { e.printStackTrace(); } SysUserEntity user = sysUserService.getById(userId); @@ -114,8 +116,8 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI // ticketsEntity.setAssignUserId(userId); // ticketsService.updateById(ticketsEntity); - if (StrUtil.isEmpty(user.getWexinId())){ - throw new RRException("企业id为空,企业微信消息无法推送"); + if (StrUtil.isEmpty(user.getWexinId())) { + throw new RRException("企业id为空,企业微信消息无法推送"); } String accessToken = getAccessToken(); @@ -124,17 +126,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI } - @Override - public void startFlowInstance1(Map params) { - // 启动流程 - try { - Map startVars = new HashMap<>(); - runtimeService.startProcessInstanceById(defId, startVars); } - catch (FlowableException e){ - e.printStackTrace(); - } - } /** * 获取access_token @@ -179,7 +171,6 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI } - public static void sendWeChatMessage(String toUser, String content, String ACCESS_TOKEN, String ticketsId) { //请求串 String url = CREATE_SESSION_URL + ACCESS_TOKEN; @@ -190,7 +181,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI JSONObject contentJSon = new JSONObject(); contentJSon.put("title", "[协同提醒] - 工单审批待处理"); contentJSon.put("description", "点击查看详情"); - contentJSon.put("url", "http://localhost:8001/#/tickets-detail?id="+ticketsId); + contentJSon.put("url", "http://localhost:8001/#/tickets-detail?id=" + ticketsId); contentJSon.put("btntxt", "处理"); jsonObject.put("textcard", contentJSon); @@ -219,7 +210,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI JSONObject jsonObject1 = JSONObject.parseObject(result); int errcode = jsonObject1.getInteger("errcode"); if (Objects.equals(42001, errcode)) { - throw new RRException("发送企业微信 token 失效"); + throw new RRException("发送企业微信 token 失效"); } if (Objects.equals(0, errcode)) { System.out.println("消息发送成功"); @@ -242,33 +233,31 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI } - - private static void packageData(Map params, Set keys, Map variable) { - if(keys != null){ + if (keys != null) { for (String key : keys) { - if("id".equals(key) || "t".equals(key)){ + if ("id".equals(key) || "t".equals(key)) { continue; } String value = (String) params.get(key); - if(key.contains(",")){ + if (key.contains(",")) { String[] split = key.split(","); int i = 0; for (String s : split) { - if(value.contains(",")){ + if (value.contains(",")) { String[] split1 = value.split(","); - if(split1.length >= i){ - variable.put(s,split1[i]); - }else{ - variable.put(s,split1[0]); + if (split1.length >= i) { + variable.put(s, split1[i]); + } else { + variable.put(s, split1[0]); } - }else{ - variable.put(s,value); + } else { + variable.put(s, value); } i++; } - }else{ - variable.put(key,value); + } else { + variable.put(key, value); } } } @@ -276,9 +265,9 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI /** * 查询我的待办任务 - * 审批人 - * 候选人 - * 候选人组 + * 审批人 + * 候选人 + * 候选人组 * * @param params * @return @@ -286,8 +275,8 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI @Override public R getTodoTaskList(Map params) { // 获取到分页的信息 - Integer page = Integer.parseInt((String)params.getOrDefault(Constant.PAGE,1)); - Integer limit = Integer.parseInt((String) params.getOrDefault(Constant.LIMIT,5)); + Integer page = Integer.parseInt((String) params.getOrDefault(Constant.PAGE, 1)); + Integer limit = Integer.parseInt((String) params.getOrDefault(Constant.LIMIT, 5)); // 获取当前的登录用户 SysUserEntity loginUser = ShiroUtils.getUserEntity(); TaskQuery taskQuery = taskService.createTaskQuery() @@ -303,13 +292,13 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI List tasks = taskQuery.listPage((page - 1) * limit, page * limit); long count = taskQuery.count(); List list = new ArrayList<>(); - if(tasks != null && tasks.size() > 0){ + if (tasks != null && tasks.size() > 0) { for (Task task : tasks) { FlwTaskEntity entity = new FlwTaskEntity(); entity.setTaskId(task.getId()); entity.setCategory(task.getCategory()); entity.setAssigneeId(task.getAssignee()); - if(task.getAssignee() != null){ + if (task.getAssignee() != null) { SysUserEntity assigneeUser = userService.getById(task.getAssignee()); entity.setAssigneeName(assigneeUser.getNickname()); } @@ -327,91 +316,99 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI // 任务的发起人 HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(entity.getProcInsId()).singleResult(); - if(historicProcessInstance != null){ + if (historicProcessInstance != null) { String startUserId = historicProcessInstance.getStartUserId(); entity.setStartTime(historicProcessInstance.getStartTime()); entity.setStartUserId(startUserId); - if(StringUtils.isNotBlank(startUserId)){ + if (StringUtils.isNotBlank(startUserId)) { SysUserEntity startUser = userService.getById(startUserId); entity.setStartUserName(startUser.getNickname()); } } // 通过 BpmnModel 对象来检查当前的节点的 定义信息 - entity.setStatus(getUserTaskStatus(task.getProcessDefinitionId(),task.getTaskDefinitionKey())); + entity.setStatus(getUserTaskStatus(task.getProcessDefinitionId(), task.getTaskDefinitionKey())); list.add(entity); } } - PageUtils pageUtils = new PageUtils(list,(int)count,limit,page); - return R.ok("操作成功").put("page",pageUtils); + PageUtils pageUtils = new PageUtils(list, (int) count, limit, page); + return R.ok("操作成功").put("page", pageUtils); } @Override public R completeTaskById(Map params) { String processInstance = (String) params.get("processInstance"); -// Integer ticketsId = (Integer) params.get("ticketsId"); - if(StringUtils.isBlank(processInstance)){ + Integer ticketsId = (Integer) params.get("ticketsId"); + String result = (String) params.get("result"); + String opinion = (String) params.get("opinion"); + + if (StringUtils.isBlank(processInstance)) { return R.error("流程Id不能为空"); } - TaskQuery taskQuery = taskService.createTaskQuery().active().processInstanceId(processInstance); - List tasks = taskQuery.list(); - if (!tasks.isEmpty()){ - taskService.complete(tasks.get(0).getId()); + if (StringUtils.isBlank(processInstance)) { + return R.error("流程Id不能为空"); } + Task secondTask = taskService.createTaskQuery() + .processInstanceId(processInstance) + .singleResult(); + Map secondApprovalVars = new HashMap<>(); + TicketsEntity ticketsEntity = new TicketsEntity(); + // 完结流程 + if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("完结")) { + secondApprovalVars.put("approvalResult", true); + ticketsEntity.setStatus(TicketsStatusEnums.FINISH.getCode()); + ticketsEntity.setFinishTime(new Date()); + ticketsEntity.setAssignUserId(TicketUserEnums.SPECIALIST.getCode()); + taskService.complete(secondTask.getId(), secondApprovalVars); + } + // 继续流程 + if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("同意")) { + secondApprovalVars.put("approvalResult", false); + ticketsEntity.setAssignUserId(TicketUserEnums.MANAGER.getCode()); + taskService.complete(secondTask.getId(), secondApprovalVars); + } + + // 指派处理人 + if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("指派")) { + String userId = String.valueOf(params.get("userId")); + Map startVars = new HashMap<>(); + startVars.put("user1",userId); + ticketsEntity.setAssignUserId(Long.valueOf(userId)); + taskService.complete(secondTask.getId(), startVars); + } + + // 继续流程 + if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("提交")) { + ticketsEntity.setAssignUserId(TicketUserEnums.SPECIALIST.getCode()); + taskService.complete(secondTask.getId(), secondApprovalVars); + } + + String processName = ticketsDao.selectByProcessInstance(processInstance); + if (StringUtils.isNotBlank(processName)&& processName.contains("完结")){ + ticketsEntity.setStatus(TicketsStatusEnums.FINISH.getCode()); + } + //更新工单审批id -// TicketsEntity ticketsEntity = new TicketsEntity(); -// ticketsEntity.setTicketsId(Long.valueOf(ticketsId)); -// ticketsEntity.setStatus(TicketsStatusEnums.CANCEL.getCode()); -// ticketsEntity.setUpdateTime(new Date()); -// ticketsService.updateById(ticketsEntity); + ticketsEntity.setTicketsId(Long.valueOf(ticketsId)); + ticketsEntity.setUpdateTime(new Date()); + ticketsService.updateById(ticketsEntity); return R.ok("操作成功"); } - @Override - public R completeTaskById1(Map params) { - String processInstance = (String) params.get("processInstance"); - if(StringUtils.isBlank(processInstance)){ - return R.error("流程Id不能为空"); - } - Task secondTask = taskService.createTaskQuery() - .processInstanceId(processInstance) - .singleResult(); - Map secondApprovalVars = new HashMap<>(); - secondApprovalVars.put("approvalResult", true); - taskService.complete(secondTask.getId(), secondApprovalVars); - return R.ok("操作成功"); - } - - - @Override - public R deleteFlow1(Map params) { - String processInstance = (String) params.get("processInstance"); - if(StringUtils.isBlank(processInstance)){ - return R.error("流程Id不能为空"); - } - Task secondTask = taskService.createTaskQuery() - .processInstanceId(processInstance) - .singleResult(); - Map secondApprovalVars = new HashMap<>(); - secondApprovalVars.put("approvalResult", false); - secondApprovalVars.put("user1", 2); - taskService.complete(secondTask.getId(), secondApprovalVars); - return R.ok("操作成功"); - } @Override public R deleteFlow(Map params) { String processInstance = (String) params.get("processInstance"); // Integer ticketsId = (Integer) params.get("ticketsId"); - if(StringUtils.isBlank(processInstance)){ + if (StringUtils.isBlank(processInstance)) { return R.error("流程Id不能为空"); } //查询活跃任务 TaskQuery taskQuery = taskService.createTaskQuery().active().processInstanceId(processInstance); List tasks = taskQuery.list(); - if (tasks.isEmpty()){ + if (tasks.isEmpty()) { return R.error("没有可终结的任务"); } runtimeService.deleteProcessInstance(processInstance, "测试终结流程"); @@ -433,7 +430,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI @Override public void claimTask(String id) { - taskService.claim(id,ShiroUtils.getUserId().toString()); + taskService.claim(id, ShiroUtils.getUserId().toString()); } @Override @@ -475,7 +472,6 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI } - //获取流程图 BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); ProcessEngineConfiguration configuration = processEngine.getProcessEngineConfiguration(); @@ -488,7 +484,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI byte[] b = new byte[in.available()]; in.read(b); return b; - }catch (IOException e){ + } catch (IOException e) { } return null; @@ -498,8 +494,8 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI @Override public R getMyStartTaskList(Map params) { // 获取到分页的信息 - Integer page = Integer.parseInt((String)params.getOrDefault(Constant.PAGE,1)); - Integer limit = Integer.parseInt((String) params.getOrDefault(Constant.LIMIT,5)); + Integer page = Integer.parseInt((String) params.getOrDefault(Constant.PAGE, 1)); + Integer limit = Integer.parseInt((String) params.getOrDefault(Constant.LIMIT, 5)); // 获取当前的登录用户 SysUserEntity loginUser = ShiroUtils.getUserEntity(); // 我们需要根据当前登录用户查询所有发起的流程 @@ -512,7 +508,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI List tasks = historicProcessInstanceQuery.listPage((page - 1) * limit, page * limit); long count = historicProcessInstanceQuery.count(); List list = new ArrayList<>(); - if(tasks != null && tasks.size() > 0){ + if (tasks != null && tasks.size() > 0) { for (HistoricProcessInstance historicProcessInstance : tasks) { HistoricProcessInstanceEntityImpl impl = (HistoricProcessInstanceEntityImpl) historicProcessInstance; FlwMyFlowEntity entity = new FlwMyFlowEntity(); @@ -525,7 +521,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI entity.setFlowProceId(impl.getProcessInstanceId()); // 任务的发起人 - if(historicProcessInstance != null){ + if (historicProcessInstance != null) { String startUserId = historicProcessInstance.getStartUserId(); entity.setStartDate(historicProcessInstance.getStartTime()); entity.setEndDate(historicProcessInstance.getEndTime()); @@ -535,12 +531,13 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI list.add(entity); } } - PageUtils pageUtils = new PageUtils(list,(int)count,limit,page); - return R.ok("操作成功").put("page",pageUtils); + PageUtils pageUtils = new PageUtils(list, (int) count, limit, page); + return R.ok("操作成功").put("page", pageUtils); } /** * 根据流程实例ID获取对应的流转记录 + * * @param id * @return */ @@ -550,7 +547,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI .processInstanceId(id).orderByTaskCreateTime().asc().list(); List ress = new ArrayList<>(); - if(list != null){ + if (list != null) { for (HistoricTaskInstance entity : list) { FlwHiTaskEntity task = new FlwHiTaskEntity(); task.setId(entity.getId()); @@ -559,26 +556,26 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI task.setAssignee(entity.getAssignee()); task.setStartTime(entity.getCreateTime()); Long durationInMillis = entity.getDurationInMillis(); - if(durationInMillis != null){ + if (durationInMillis != null) { task.setDuration(durationInMillis); } - if(StringUtils.isNotBlank(entity.getAssignee())){ + if (StringUtils.isNotBlank(entity.getAssignee())) { // 需要查询到用户的名称 SysUserEntity userEntity = userService.getById(entity.getAssignee()); String username = userEntity.getUsername(); String nickname = userEntity.getNickname(); - if(StringUtils.isNotBlank(nickname)){ + if (StringUtils.isNotBlank(nickname)) { task.setAssigneeName(nickname); - }else{ + } else { task.setAssigneeName(username); } } // 查询当前的节点的状态 - if(entity.getEndTime() != null){ + if (entity.getEndTime() != null) { // 这个节点已经审批完成了 task.setStatus("finish"); - }else{ + } else { task.setStatus("wait"); } ress.add(task); @@ -591,16 +588,16 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI @Override public R getMyCompleteTaskList(Map params) { // 获取到分页的信息 - Integer page = Integer.parseInt((String)params.getOrDefault(Constant.PAGE,1)); - Integer limit = Integer.parseInt((String) params.getOrDefault(Constant.LIMIT,5)); + Integer page = Integer.parseInt((String) params.getOrDefault(Constant.PAGE, 1)); + Integer limit = Integer.parseInt((String) params.getOrDefault(Constant.LIMIT, 5)); // 获取当前的登录用户 SysUserEntity loginUser = ShiroUtils.getUserEntity(); // 我的已办 可以通过当前登录用户 匹配 act_hi_taskinst 中的审批人来找到对应的流程实例id List taskInstances = historyService.createHistoricTaskInstanceQuery() .taskAssignee(loginUser.getUserId().toString()).list(); - if(taskInstances == null || taskInstances.size() == 0){ - PageUtils pageUtils = new PageUtils(null,0,limit,page); - return R.ok("操作成功").put("page",pageUtils); + if (taskInstances == null || taskInstances.size() == 0) { + PageUtils pageUtils = new PageUtils(null, 0, limit, page); + return R.ok("操作成功").put("page", pageUtils); } Set processInsIds = taskInstances.stream().map(item -> { return item.getProcessInstanceId(); @@ -615,7 +612,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI List tasks = historicProcessInstanceQuery.listPage((page - 1) * limit, page * limit); long count = historicProcessInstanceQuery.count(); List list = new ArrayList<>(); - if(tasks != null && tasks.size() > 0){ + if (tasks != null && tasks.size() > 0) { for (HistoricProcessInstance historicProcessInstance : tasks) { HistoricProcessInstanceEntityImpl impl = (HistoricProcessInstanceEntityImpl) historicProcessInstance; FlwMyFlowEntity entity = new FlwMyFlowEntity(); @@ -628,10 +625,10 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI entity.setFlowProceId(impl.getProcessInstanceId()); // 任务的发起人 - if(historicProcessInstance != null){ + if (historicProcessInstance != null) { String startUserId = historicProcessInstance.getStartUserId(); SysUserEntity userEntity = userService.getById(startUserId); - if(userEntity != null){ + if (userEntity != null) { entity.setUserName(userEntity.getNickname()); } entity.setStartDate(historicProcessInstance.getStartTime()); @@ -642,8 +639,8 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI list.add(entity); } } - PageUtils pageUtils = new PageUtils(list,(int)count,limit,page); - return R.ok("操作成功").put("page",pageUtils); + PageUtils pageUtils = new PageUtils(list, (int) count, limit, page); + return R.ok("操作成功").put("page", pageUtils); } @Override @@ -653,7 +650,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI List ress = new ArrayList<>(); SysUserEntity loginUser = ShiroUtils.getUserEntity(); - if(list != null){ + if (list != null) { for (HistoricTaskInstance entity : list) { FlwHiTaskEntity task = new FlwHiTaskEntity(); task.setId(entity.getId()); @@ -662,30 +659,30 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI task.setAssignee(entity.getAssignee()); task.setStartTime(entity.getCreateTime()); Long durationInMillis = entity.getDurationInMillis(); - if(durationInMillis != null){ + if (durationInMillis != null) { task.setDuration(durationInMillis); } - if(StringUtils.isNotBlank(entity.getAssignee())){ + if (StringUtils.isNotBlank(entity.getAssignee())) { // 需要查询到用户的名称 SysUserEntity userEntity = userService.getById(entity.getAssignee()); String username = userEntity.getUsername(); String nickname = userEntity.getNickname(); - if(StringUtils.isNotBlank(nickname)){ + if (StringUtils.isNotBlank(nickname)) { task.setAssigneeName(nickname); - }else{ + } else { task.setAssigneeName(username); } } // 查询当前的节点的状态 - if(entity.getEndTime() != null){ + if (entity.getEndTime() != null) { // 这个节点已经审批完成了 task.setStatus("finish"); - }else{ + } else { task.setStatus("wait"); } - if(entity.getAssignee() != null && entity.getAssignee().equals(loginUser.getUserId().toString())){ + if (entity.getAssignee() != null && entity.getAssignee().equals(loginUser.getUserId().toString())) { task.setStatus("success"); } ress.add(task); @@ -695,21 +692,21 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI return ress; } - private Integer getUserTaskStatus(String processDef,String taskDefKey){ + private Integer getUserTaskStatus(String processDef, String taskDefKey) { BpmnModel bpmnModel = repositoryService.getBpmnModel(processDef); Process mainProcess = bpmnModel.getMainProcess(); Collection flowElements = mainProcess.getFlowElements(); Integer status = 0; - if(flowElements != null && flowElements.size() > 0){ + if (flowElements != null && flowElements.size() > 0) { for (FlowElement flowElement : flowElements) { - if(flowElement instanceof UserTask){ + if (flowElement instanceof UserTask) { UserTask userTask = (UserTask) flowElement; - if(userTask.getId().equals(taskDefKey)){ + if (userTask.getId().equals(taskDefKey)) { String assignee = userTask.getAssignee(); - if(StringUtils.isNotBlank(assignee)){ + if (StringUtils.isNotBlank(assignee)) { // 说明是制定的审批人 status = 0; - }else{ + } else { status = 1; } break; diff --git a/base-fast/src/main/java/com/boge/modules/tickets/dao/TicketsDao.java b/base-fast/src/main/java/com/boge/modules/tickets/dao/TicketsDao.java index 2761149..bd5cb12 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/dao/TicketsDao.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/dao/TicketsDao.java @@ -17,4 +17,6 @@ public interface TicketsDao extends BaseMapper { TicketsDTO getTicketsDTOById(String ticketsId); + + String selectByProcessInstance(String processInstance); } diff --git a/base-fast/src/main/java/com/boge/modules/tickets/dto/TicketsDTO.java b/base-fast/src/main/java/com/boge/modules/tickets/dto/TicketsDTO.java index 51d97c0..a84b73e 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/dto/TicketsDTO.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/dto/TicketsDTO.java @@ -78,4 +78,9 @@ public class TicketsDTO { * 审批流id */ private String processInstance; + + /** + * 审批结点 + */ + private String processInstanceUser; } diff --git a/base-fast/src/main/java/com/boge/modules/tickets/entity/TicketsEntity.java b/base-fast/src/main/java/com/boge/modules/tickets/entity/TicketsEntity.java index 36f8a6a..7d37175 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/entity/TicketsEntity.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/entity/TicketsEntity.java @@ -76,11 +76,14 @@ public class TicketsEntity implements Serializable { */ private Integer status; /** - * 工单关闭时间 + * 更新时间 */ private Date updateTime; - + /** + * 完结时间 + */ + private Date finishTime; /** * 审批流id diff --git a/base-fast/src/main/java/com/boge/modules/tickets/enums/TicketUserEnums.java b/base-fast/src/main/java/com/boge/modules/tickets/enums/TicketUserEnums.java new file mode 100644 index 0000000..e883047 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/tickets/enums/TicketUserEnums.java @@ -0,0 +1,25 @@ +package com.boge.modules.tickets.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum TicketUserEnums { + + + SPECIALIST(2L, "专员"), + MANAGER(3L, "经理"); + + private Long code; + private String msg; + + public static String getStatus(String code) { + for (TicketUserEnums value : values()) { + if (value.code.equals(code)) { + return value.msg; + } + } + return null; + } +} diff --git a/base-fast/src/main/java/com/boge/modules/tickets/enums/TicketsStatusEnums.java b/base-fast/src/main/java/com/boge/modules/tickets/enums/TicketsStatusEnums.java index dee5b08..947af40 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/enums/TicketsStatusEnums.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/enums/TicketsStatusEnums.java @@ -10,7 +10,7 @@ import lombok.Getter; UNCHECK(0, "未开始"), CHECKED(1, "已指派"), REJECT(2, "处理中"), - CANCEL(3, "已完成"); + FINISH(3, "已完成"); private Integer code; private String msg; diff --git a/base-fast/src/main/java/com/boge/modules/tickets/service/impl/TicketsServiceImpl.java b/base-fast/src/main/java/com/boge/modules/tickets/service/impl/TicketsServiceImpl.java index 06594e3..8a1292d 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/service/impl/TicketsServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/service/impl/TicketsServiceImpl.java @@ -12,7 +12,9 @@ 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 com.boge.modules.tickets.enums.TicketUserEnums; import org.flowable.common.engine.api.FlowableException; +import org.flowable.engine.IdentityService; import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.beans.factory.annotation.Autowired; @@ -54,6 +56,9 @@ public class TicketsServiceImpl extends ServiceImpl i @Autowired protected RuntimeService runtimeService; + @Autowired + protected IdentityService identityService; + @Value("${ProcessInstance.defId}") private String defId; @@ -91,11 +96,11 @@ public class TicketsServiceImpl extends ServiceImpl i 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()); + ticketsEntityQueryWrapper.eq("assign_user_id", loginUser.getUserId()).eq("status", TicketsStatusEnums.REJECT.getCode()); } if (TicketsTypeEnums.FINISH.getCode().equals(params.get("type"))) { - ticketsEntityQueryWrapper.eq("assign_user_id", loginUser.getUserId()).eq("status", TicketsStatusEnums.CANCEL.getCode()); + ticketsEntityQueryWrapper.eq("assign_user_id", loginUser.getUserId()).eq("status", TicketsStatusEnums.FINISH.getCode()); } @@ -112,11 +117,15 @@ public class TicketsServiceImpl extends ServiceImpl i public void saveTicket(TicketsEntity tickets) { // 启动流程 try { + // 记录流程的发起人 + identityService.setAuthenticatedUserId(ShiroUtils.getUserId().toString()); Map startVars = new HashMap<>(); ProcessInstance processInstance = runtimeService.startProcessInstanceById(defId, startVars); SysUserEntity loginUser = ShiroUtils.getUserEntity(); tickets.setCreateTime(new Date()); tickets.setCreateUser(loginUser.getNickname()); + tickets.setStatus(TicketsStatusEnums.REJECT.getCode()); + tickets.setAssignUserId(TicketUserEnums.SPECIALIST.getCode()); tickets.setProcessInstance(processInstance.getProcessInstanceId()); ticketsDao.insert(tickets); } catch (Exception e) { @@ -127,6 +136,9 @@ public class TicketsServiceImpl extends ServiceImpl i @Override public TicketsDTO getTicketsById(String ticketsId) { TicketsDTO tickets = ticketsDao.getTicketsDTOById(ticketsId); + + String processName = ticketsDao.selectByProcessInstance(tickets.getProcessInstance()); + tickets.setProcessInstanceUser(processName); return tickets; } diff --git a/base-fast/src/main/resources/mapper/tickets/TicketsDao.xml b/base-fast/src/main/resources/mapper/tickets/TicketsDao.xml index 03efab7..1e01262 100644 --- a/base-fast/src/main/resources/mapper/tickets/TicketsDao.xml +++ b/base-fast/src/main/resources/mapper/tickets/TicketsDao.xml @@ -24,6 +24,10 @@ left join sys_car as c on a.car_type = c.car_id where a.tickets_id = #{ticketsId} + diff --git a/base-vue/src/views/modules/tickets/detail.vue b/base-vue/src/views/modules/tickets/detail.vue index 166898b..30424cb 100644 --- a/base-vue/src/views/modules/tickets/detail.vue +++ b/base-vue/src/views/modules/tickets/detail.vue @@ -26,7 +26,9 @@ 工单ID - {{ ticketsData.ticketsId }} + + {{ ticketsData.ticketsId }} + 小车类型 {{ ticketsData.carName || '-' }} @@ -80,26 +82,25 @@
- - 上传附件 -
可上传任意格式文件,且不超过100M
+ + 上传附件 +
可上传任意格式文件,且不超过100M
-
+
-
+ + +
+ + 指派 + +
+
+ 指派:{{ assignedUsername }} +
+ + 同意 + 完结 + + +
意见隐藏
跟踪 - - 全部 - 指定人 - -
- 处理后归档 +
@@ -140,30 +155,86 @@ + + + + + + + + + + +
+ 暂无可选用户 +
+
+
+ + + +
+ +