From 9c2c852a7d6a15bf2f56a3717962bf34c8f978c6 Mon Sep 17 00:00:00 2001 From: youjianchi <13260889671@163.com> Date: Wed, 14 Feb 2024 12:13:20 +0800 Subject: [PATCH] =?UTF-8?q?[update]:=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E4=BD=9C=E5=BA=9F=E3=80=81=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../general/service/IProcessService.java | 2 +- .../service/impl/ProcessServiceImpl.java | 3 +- .../erp/controller/ErpMaterialController.java | 38 ++++-- .../com/ruoyi/erp/domain/ErpMaterial.java | 52 ++++++++- .../com/ruoyi/erp/domain/ErpMaterialVo.java | 10 ++ .../erp/service/IErpMaterialService.java | 4 +- .../service/impl/ErpMaterialServiceImpl.java | 110 ++++++++++++++---- .../src/main/resources/application-druid.yml | 23 +++- .../mapper/erp/ErpMaterialMapper.xml | 40 +++++-- .../templates/erp/material/material.html | 54 +++++++-- ruoyi-common/pom.xml | 11 ++ 11 files changed, 291 insertions(+), 56 deletions(-) diff --git a/ruoyi-activiti/src/main/java/com/ruoyi/process/general/service/IProcessService.java b/ruoyi-activiti/src/main/java/com/ruoyi/process/general/service/IProcessService.java index e286cf16..e43c260b 100644 --- a/ruoyi-activiti/src/main/java/com/ruoyi/process/general/service/IProcessService.java +++ b/ruoyi-activiti/src/main/java/com/ruoyi/process/general/service/IProcessService.java @@ -35,7 +35,7 @@ public interface IProcessService { */ ProcessInstance submitApply(String applyUserId, String businessKey, String itemName, String itemConent, String key, Map variables); - void complete(String taskId, String instanceId, String itemName, String itemContent, String module, Map variables, HttpServletRequest request); + boolean complete(String taskId, String instanceId, String itemName, String itemContent, String module, Map variables, HttpServletRequest request); /** * 判断流程是否结束 diff --git a/ruoyi-activiti/src/main/java/com/ruoyi/process/general/service/impl/ProcessServiceImpl.java b/ruoyi-activiti/src/main/java/com/ruoyi/process/general/service/impl/ProcessServiceImpl.java index 27352506..b74043c6 100644 --- a/ruoyi-activiti/src/main/java/com/ruoyi/process/general/service/impl/ProcessServiceImpl.java +++ b/ruoyi-activiti/src/main/java/com/ruoyi/process/general/service/impl/ProcessServiceImpl.java @@ -119,7 +119,7 @@ public class ProcessServiceImpl implements IProcessService { } @Override - public void complete(String taskId, String instanceId, String itemName, String itemContent, String module, Map variables, HttpServletRequest request) { + public boolean complete(String taskId, String instanceId, String itemName, String itemContent, String module, Map variables, HttpServletRequest request) { Enumeration parameterNames = request.getParameterNames(); String comment = null; // 批注 boolean agree = true; @@ -185,6 +185,7 @@ public class ProcessServiceImpl implements IProcessService { } catch (Exception e) { logger.error("error on complete task {}, variables={}", new Object[]{taskId, variables, e}); } + return agree; } @Override diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpMaterialController.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpMaterialController.java index fd27448d..8d907ae6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpMaterialController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpMaterialController.java @@ -130,7 +130,9 @@ public class ErpMaterialController extends BaseController @ResponseBody public AjaxResult addSave(ErpMaterial erpMaterial) { + // 使用状态-否 erpMaterial.setUseStatus("0"); + // 审核状态-待审核 erpMaterial.setAuditStatus("0"); erpMaterialService.submitApply(erpMaterial); return AjaxResult.success(); @@ -165,14 +167,34 @@ public class ErpMaterialController extends BaseController @ModelAttribute("preloadObj") ErpMaterialVo erpMaterialVo, HttpServletRequest request) { boolean saveEntityBoolean = BooleanUtils.toBoolean(saveEntity); String instanceId = erpMaterialVo.getInstanceId(); - processService.complete(taskId, instanceId, erpMaterialVo.getApplyTitle(), erpMaterialVo.getMaterialNo(), "material", new HashMap(), request); + String instanceType = erpMaterialVo.getInstanceType(); + boolean approvedFlag = processService.complete(taskId, instanceId, erpMaterialVo.getApplyTitle(), erpMaterialVo.getMaterialNo(), "material", new HashMap(), request); + if(!approvedFlag){ + // 审核状态-审核拒绝 + erpMaterialVo.setAuditStatus("2"); + } // 如果任务已结束更新业务表状态 boolean processIsFinish = processService.judgeProcessIsFinish(instanceId); if (processIsFinish) { - // 审核完成 + // 审核通过 erpMaterialVo.setAuditStatus("1"); - erpMaterialMapper.updateErpMaterial(erpMaterialVo); + // 提交 + if("submit".equals(instanceType)){ + // 使用状态-是 + erpMaterialVo.setUseStatus("1"); + } + // 作废 + else if("cancel".equals(instanceType)){ + // 使用状态-已作废 + erpMaterialVo.setUseStatus("2"); + } + // 恢复 + else if("restore".equals(instanceType)){ + // 使用状态-是 + erpMaterialVo.setUseStatus("1"); + } } + erpMaterialMapper.updateErpMaterial(erpMaterialVo); // 驳回申请后继续申请,可能修改表单 if (saveEntityBoolean) { erpMaterialService.updateErpMaterial(erpMaterialVo); @@ -229,24 +251,26 @@ public class ErpMaterialController extends BaseController /** * 作废物料信息 */ - @RequiresPermissions("erp:material:cancel") + // @RequiresPermissions("erp:material:cancel") @Log(title = "物料信息", businessType = BusinessType.CANCEL) @GetMapping( "/cancel/{id}") @ResponseBody public AjaxResult cancel(@PathVariable("id") Long id){ - return toAjax(erpMaterialService.cancelErpMaterialById(id)); + erpMaterialService.cancelErpMaterialById(id); + return AjaxResult.success(); } /** * 恢复物料信息 */ - @RequiresPermissions("erp:material:restore") + // @RequiresPermissions("erp:material:restore") @Log(title = "物料信息", businessType = BusinessType.RESTORE) @GetMapping( "/restore/{id}") @ResponseBody public AjaxResult restore(@PathVariable("id")Long id) { - return toAjax(erpMaterialService.restoreErpMaterialById(id)); + erpMaterialService.restoreErpMaterialById(id); + return AjaxResult.success(); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpMaterial.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpMaterial.java index f2ec6edf..62387c5d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpMaterial.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpMaterial.java @@ -34,11 +34,11 @@ public class ErpMaterial extends BaseEntity @Excel(name = "物料名称") private String materialName; - /** 审核状态 */ + /** 审核状态 0-待审核 1-审核通过 2-审核拒绝*/ @Excel(name = "审核状态") private String auditStatus; - /** 使用状态 */ + /** 使用状态 0-否 1-是 2-已作废*/ @Excel(name = "使用状态") private String useStatus; /** 关联bom */ @@ -79,6 +79,22 @@ public class ErpMaterial extends BaseEntity @Excel(name = "流程实例ID") private String instanceId; + /** 流程实例类型 */ + @Excel(name = "流程实例类型") + private String instanceType; + + /** 提交流程实例ID */ + @Excel(name = "提交流程实例ID") + private String submitInstanceId; + + /** 作废流程实例ID */ + @Excel(name = "作废流程实例ID") + private String cancelInstanceId; + + /** 恢复流程实例ID */ + @Excel(name = "恢复流程实例ID") + private String restoreInstanceId; + /** 申请人 */ @Excel(name = "申请标题") private String applyTitle; @@ -290,6 +306,38 @@ public class ErpMaterial extends BaseEntity this.instanceId = instanceId; } + public String getInstanceType() { + return instanceType; + } + + public void setInstanceType(String instanceType) { + this.instanceType = instanceType; + } + + public String getSubmitInstanceId() { + return submitInstanceId; + } + + public void setSubmitInstanceId(String submitInstanceId) { + this.submitInstanceId = submitInstanceId; + } + + public String getCancelInstanceId() { + return cancelInstanceId; + } + + public void setCancelInstanceId(String cancelInstanceId) { + this.cancelInstanceId = cancelInstanceId; + } + + public String getRestoreInstanceId() { + return restoreInstanceId; + } + + public void setRestoreInstanceId(String restoreInstanceId) { + this.restoreInstanceId = restoreInstanceId; + } + public String getApplyTitle() { return applyTitle; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpMaterialVo.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpMaterialVo.java index f8a068b4..bb3a0650 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpMaterialVo.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpMaterialVo.java @@ -22,6 +22,8 @@ public class ErpMaterialVo extends ErpMaterial { private String suspendState; /** 待办用户id */ private String todoUserId; + /** 流程实例类型名称 */ + private String instanceTypeName; public String getApplyUserName() { return applyUserName; @@ -78,4 +80,12 @@ public class ErpMaterialVo extends ErpMaterial { public void setTodoUserId(String todoUserId) { this.todoUserId = todoUserId; } + + public String getInstanceTypeName() { + return instanceTypeName; + } + + public void setInstanceTypeName(String instanceTypeName) { + this.instanceTypeName = instanceTypeName; + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/service/IErpMaterialService.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/service/IErpMaterialService.java index b2159830..ed9960d1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/service/IErpMaterialService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/service/IErpMaterialService.java @@ -67,14 +67,14 @@ public interface IErpMaterialService * @param id * @return */ - int cancelErpMaterialById(Long id); + ProcessInstance cancelErpMaterialById(Long id); /** * 恢复物料信息 * @param id * @return */ - int restoreErpMaterialById(Long id); + ProcessInstance restoreErpMaterialById(Long id); String checkMaterialNoUnique(String materialNo); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpMaterialServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpMaterialServiceImpl.java index a1e08396..ad8ec63a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpMaterialServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpMaterialServiceImpl.java @@ -24,8 +24,10 @@ import org.activiti.engine.TaskService; import org.activiti.engine.impl.persistence.entity.TaskEntityImpl; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.*; @@ -66,6 +68,7 @@ public class ErpMaterialServiceImpl implements IErpMaterialService @Autowired private ISysRoleService roleService; + /** * 查询物料信息 * @@ -238,13 +241,58 @@ public class ErpMaterialServiceImpl implements IErpMaterialService } @Override - public int cancelErpMaterialById(Long id) { - return erpMaterialMapper.cancelErpMaterialById(id); + @Transactional(rollbackFor = Exception.class) + public ProcessInstance cancelErpMaterialById(Long id) { + ErpMaterialVo erpMaterialVo = erpMaterialMapper.selectErpMaterialById(id); + // 审核状态-待审核 + erpMaterialVo.setAuditStatus("0"); + SysUser user = ShiroUtils.getSysUser(); + // 启动流程 + String applyTitle = user.getUserName()+"发起了物料信息作废审批-"+DateUtils.dateTimeNow(); + String instanceType = "cancel"; + ErpMaterial erpMaterial = new ErpMaterial(); + BeanUtils.copyProperties(erpMaterialVo,erpMaterial); + ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,erpMaterial, user); + String processInstanceId = processInstance.getProcessInstanceId(); + // 作废实例id + erpMaterial.setCancelInstanceId(processInstanceId); + // 存在提交完就流程结束的情况 + boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId); + if(processIsFinish){ + // 审核状态-审核通过 + erpMaterial.setAuditStatus("1"); + // 使用状态-已作废 + erpMaterial.setUseStatus("2"); + } + erpMaterialMapper.updateErpMaterial(erpMaterial); + return processInstance; } @Override - public int restoreErpMaterialById(Long id) { - return erpMaterialMapper.restoreErpMaterialById(id); + public ProcessInstance restoreErpMaterialById(Long id) { + ErpMaterialVo erpMaterialVo = erpMaterialMapper.selectErpMaterialById(id); + // 审核状态-待审核 + erpMaterialVo.setAuditStatus("0"); + SysUser user = ShiroUtils.getSysUser(); + // 启动流程 + String applyTitle = user.getUserName()+"发起了物料信息恢复审批-"+DateUtils.dateTimeNow(); + String instanceType = "restore"; + ErpMaterial erpMaterial = new ErpMaterial(); + BeanUtils.copyProperties(erpMaterialVo,erpMaterial); + ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,erpMaterial, user); + String processInstanceId = processInstance.getProcessInstanceId(); + // 恢复实例id + erpMaterial.setRestoreInstanceId(processInstanceId); + // 存在提交完就流程结束的情况 + boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId); + if(processIsFinish){ + // 审核状态-审核通过 + erpMaterial.setAuditStatus("1"); + // 使用状态-是 + erpMaterial.setUseStatus("1"); + } + erpMaterialMapper.updateErpMaterial(erpMaterial); + return processInstance; } @Override @@ -278,16 +326,49 @@ public class ErpMaterialServiceImpl implements IErpMaterialService * @return */ @Override + @Transactional(rollbackFor = Exception.class) public ProcessInstance submitApply(ErpMaterial erpMaterial) { - - String applyUser = ShiroUtils.getLoginName(); SysUser user = ShiroUtils.getSysUser(); erpMaterial.setApplyUser(user.getLoginName()); erpMaterial.setApplyTime(DateUtils.getNowDate()); insertErpMaterial(erpMaterial); - String businessKey = erpMaterial.getId().toString(); // 实体类 ID,作为流程的业务 key + // 启动流程 + String applyTitle = user.getUserName()+"发起了物料信息提交审批-"+DateUtils.dateTimeNow(); + String instanceType = "submit"; + ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,erpMaterial, user); + String processInstanceId = processInstance.getProcessInstanceId(); + // 提交实例id + erpMaterial.setSubmitInstanceId(processInstanceId); + // 存在提交完就流程结束的情况 + boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId); + if(processIsFinish){ + // 审核状态-审核通过 + erpMaterial.setAuditStatus("1"); + // 使用状态-是 + erpMaterial.setUseStatus("1"); + } + erpMaterialMapper.updateErpMaterial(erpMaterial); + + return processInstance; + } + + private ProcessInstance startProcessInstance(String applyTitle,String instanceType,ErpMaterial erpMaterial, SysUser user) { + Long materialId = erpMaterial.getId(); + String businessKey = materialId.toString(); // 实体类 ID,作为流程的业务 key String key = "material"; Map variables = new HashMap<>(); + // 构造authority传参 + buildAuthority(user, variables); + erpMaterial.setApplyTitle(applyTitle); + // 启动流程 + ProcessInstance processInstance = processService.submitApply(user.getLoginName(), businessKey, applyTitle, erpMaterial.getMaterialNo(), key, variables); + String processInstanceId = processInstance.getId(); + erpMaterial.setInstanceId(processInstanceId); // 建立双向关系 + erpMaterial.setInstanceType(instanceType); + return processInstance; + } + + private void buildAuthority(SysUser user, Map variables) { Set roleKeys = roleService.selectRoleKeys(user.getUserId()); // 角色不同审核人不同 if(roleKeys.contains("yfzjRole")){ @@ -299,20 +380,5 @@ public class ErpMaterialServiceImpl implements IErpMaterialService }else if(roleKeys.contains("gcwyRole")){ variables.put("authority",1); } - // 启动流程 - String applyTitle = user.getUserName()+"发起了物料信息审批-"+DateUtils.dateTimeNow(); - erpMaterial.setApplyTitle(applyTitle); - ProcessInstance processInstance = processService.submitApply(applyUser, businessKey, applyTitle, erpMaterial.getMaterialNo(), key, variables); - String processInstanceId = processInstance.getId(); - erpMaterial.setInstanceId(processInstanceId); // 建立双向关系 - // 存在提交完就流程结束的情况 - boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId); - if(processIsFinish){ - // 审核完成 - erpMaterial.setAuditStatus("1"); - } - - erpMaterialMapper.updateErpMaterial(erpMaterial); - return processInstance; } } diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 3b661a15..9d8d67ac 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -7,12 +7,25 @@ spring: port: 6379 password: Read-in2023 timeout: 6000ms # 连接超时时长(毫秒) - lettuce: +# lettuce: +# cluster: +# refresh: +# adptive: true +# pool: +# max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) +# max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) +# max-idle: 10 # 连接池中的最大空闲连接 +# min-idle: 5 # 连接池中的最小空闲连接 + jedis: pool: - max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) - max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) - max-idle: 10 # 连接池中的最大空闲连接 - min-idle: 5 # 连接池中的最小空闲连接 + # 最大空闲连接 + max-idle: 10 + # 最小空闲链接 + min-idle: 5 + # 最大连接数(负数表示没有限制) + max-active: 1000 + # 最大阻塞等待时间(负数表示没有限制) + max-wait: -1 datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver diff --git a/ruoyi-admin/src/main/resources/mapper/erp/ErpMaterialMapper.xml b/ruoyi-admin/src/main/resources/mapper/erp/ErpMaterialMapper.xml index cd15748a..02c4bccf 100644 --- a/ruoyi-admin/src/main/resources/mapper/erp/ErpMaterialMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/erp/ErpMaterialMapper.xml @@ -28,22 +28,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + - select id, del_flag, create_by, create_time, update_by, update_time, remark,bomNo, material_no, material_name, audit_status, use_status, hava_product_tem,product_item,itemName, material_type, process_method, unit, brand, `describe`, warehouse_dept,instance_id,apply_title,apply_user,apply_time from erp_material + select id, del_flag, create_by, create_time, update_by, update_time, remark,bomNo, material_no, material_name, audit_status, use_status, hava_product_tem,product_item,itemName, material_type, process_method, unit, brand, `describe`, warehouse_dept,instance_id,instance_type,submit_instance_id,cancel_instance_id,restore_instance_id,apply_title,apply_user,apply_time from erp_material