From e979e7a03c81d8753ba42335f2fee526d2a44f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=99=93=E8=BF=AA?= <2596750866@qq.com> Date: Wed, 25 Dec 2024 19:40:06 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E5=9F=BA=E7=A1=80=E8=B5=84=E6=96=99?= =?UTF-8?q?=20=E5=91=98=E5=B7=A5=E9=80=80=E6=96=99=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=8F=91=E8=B5=B7=E6=8F=90=E4=BA=A4=E5=AE=A1=E6=89=B9=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E3=80=81=E5=AE=A1=E6=89=B9=E9=80=9A=E8=BF=87=E5=90=8E?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=AF=A6=E6=83=85=E5=B9=B6=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=93=81=E8=B4=A8=E5=8D=95=E3=80=81=E6=9B=B4=E6=96=B0=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E6=8B=92=E7=BB=9D=E3=80=81=E6=A0=B9=E6=8D=AE=E9=80=80?= =?UTF-8?q?=E6=96=99=E5=8D=95=E8=AF=A6=E6=83=85=E7=94=9F=E6=88=90=E5=93=81?= =?UTF-8?q?=E8=B4=A8=E5=8D=95=E8=AF=A6=E6=83=85service=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=9B=20=E4=BF=AE=E6=94=B9=E6=9F=A5=E8=AF=A2=E5=91=98?= =?UTF-8?q?=E5=B7=A5=E9=80=80=E6=96=99=E5=88=97=E8=A1=A8service=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=88=86=E9=A1=B5=E5=92=8C?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E7=9B=B8=E5=85=B3=E5=AD=97=E6=AE=B5=EF=BC=9B?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96=E5=85=B3=E8=81=94?= =?UTF-8?q?=E9=A2=86=E6=96=99=E5=8D=95=E4=BF=A1=E6=81=AFcontroller?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=91=98=E5=B7=A5?= =?UTF-8?q?=E9=A2=86=E6=96=99=E7=B1=BB=E5=9E=8B=E5=A4=84=E7=90=86=EF=BC=9B?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E5=8A=A0=E8=BD=BD=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E3=80=81=E8=87=AA=E5=8A=A8=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=AD=97=E6=AE=B5=E3=80=81=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E4=BB=BB=E5=8A=A1controller=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BaseReturnOrderController.java | 133 ++++++- .../system/mapper/BaseReturnOrderMapper.java | 5 +- .../service/IBaseReturnOrderService.java | 18 +- .../impl/BaseReturnOrderServiceImpl.java | 349 +++++++++++++++++- .../mapper/system/BaseReturnOrderMapper.xml | 2 +- 5 files changed, 484 insertions(+), 23 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseReturnOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseReturnOrderController.java index 87ea65a4..8e38b726 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseReturnOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseReturnOrderController.java @@ -1,11 +1,21 @@ package com.ruoyi.system.controller; +import java.util.HashMap; import java.util.List; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.process.general.service.IProcessService; +import com.ruoyi.system.domain.BaseEmpRequisiteOrder; import com.ruoyi.system.domain.BaseReturnOrderDetail; import com.ruoyi.system.domain.OutsourceRequisition; -import com.ruoyi.system.service.IBaseReturnOrderDetailService; -import com.ruoyi.system.service.IOutsourceRequisitionService; +import com.ruoyi.system.domain.Vo.BaseReturnOrderVO; +import com.ruoyi.system.domain.Vo.MakeReturnOrderVO; +import com.ruoyi.system.service.*; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.runtime.ProcessInstance; +import org.activiti.engine.task.Task; +import org.apache.commons.lang3.BooleanUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -14,12 +24,14 @@ import org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.domain.BaseReturnOrder; -import com.ruoyi.system.service.IBaseReturnOrderService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + /** * 员工退料Controller * @@ -41,6 +53,21 @@ public class BaseReturnOrderController extends BaseController @Autowired private IOutsourceRequisitionService requisitionService; + @Autowired + private IBaseEmpRequisiteOrderService empRequisiteOrderService; + + @Autowired + private TaskService taskService; + + @Autowired + private RuntimeService runtimeService; + + @Autowired + private IProcessService processService; + + @Autowired + private ISysUserService sysUserService; + @RequiresPermissions("system:baseReturnOrder:view") @GetMapping() public String baseReturnOrder() @@ -54,10 +81,10 @@ public class BaseReturnOrderController extends BaseController @RequiresPermissions("system:baseReturnOrder:list") @PostMapping("/list") @ResponseBody - public TableDataInfo list(BaseReturnOrder baseReturnOrder) + public TableDataInfo list(BaseReturnOrderVO baseReturnOrderVO) { startPage(); - List list = baseReturnOrderService.selectBaseReturnOrderList(baseReturnOrder); + List list = baseReturnOrderService.selectBaseReturnOrderList(baseReturnOrderVO); return getDataTable(list); } @@ -68,10 +95,10 @@ public class BaseReturnOrderController extends BaseController @Log(title = "员工退料", businessType = BusinessType.EXPORT) @PostMapping("/export") @ResponseBody - public AjaxResult export(BaseReturnOrder baseReturnOrder) + public AjaxResult export(BaseReturnOrderVO baseReturnOrder) { - List list = baseReturnOrderService.selectBaseReturnOrderList(baseReturnOrder); - ExcelUtil util = new ExcelUtil(BaseReturnOrder.class); + List list = baseReturnOrderService.selectBaseReturnOrderList(baseReturnOrder); + ExcelUtil util = new ExcelUtil(BaseReturnOrderVO.class); return util.exportExcel(list, "员工退料数据"); } @@ -93,7 +120,9 @@ public class BaseReturnOrderController extends BaseController @ResponseBody public AjaxResult addSave(@RequestBody BaseReturnOrder baseReturnOrder) { - return toAjax(baseReturnOrderService.insertBaseReturnOrder(baseReturnOrder)); + baseReturnOrder.setAuditStatus("0"); + baseReturnOrderService.submitApply(baseReturnOrder); + return AjaxResult.success(); } /** @@ -155,13 +184,19 @@ public class BaseReturnOrderController extends BaseController } /** - * 修改员工退料 + * 获取关联领料单信息 */ @GetMapping("/getMaterialList") public String getMaterialList(@RequestParam("pickNo") String pickNo, ModelMap mmap) { - OutsourceRequisition requisition = requisitionService.selectOutsourceRequisitionByNo(pickNo); - String pickUser = requisition.getApplyUser(); + String pickUser = ""; + if(pickNo.startsWith("WWLL")){ + OutsourceRequisition requisition = requisitionService.selectOutsourceRequisitionByNo(pickNo); + pickUser = requisition.getApplyUser(); + }else if(pickNo.startsWith("YGLL")){ + BaseEmpRequisiteOrder empRequisiteOrder = empRequisiteOrderService.selectBaseEmpRequisiteOrderByCode(pickNo); + pickUser = empRequisiteOrder.getApplyUser(); + } mmap.put("pickUser", pickUser); mmap.put("pickNo", pickNo); return prefix + "/materialSelect"; @@ -189,4 +224,78 @@ public class BaseReturnOrderController extends BaseController return prefix + "/detail"; } + /** + * 加载审批弹窗 + * @param taskId + * @param mmap + * @return + */ + @GetMapping("/showVerifyDialog/{taskId}") + public String showVerifyDialog(@PathVariable("taskId") String taskId, ModelMap mmap) { + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + String processInstanceId = task.getProcessInstanceId(); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + BaseReturnOrderVO baseReturnOrderVO = baseReturnOrderService.selectBaseReturnOrderById(new Long(processInstance.getBusinessKey())); + SysUser user = sysUserService.selectUserByLoginName(baseReturnOrderVO.getApplyUser()); + baseReturnOrderVO.setApplyUserName(user.getUserName()); + mmap.put("formData", baseReturnOrderVO); + mmap.put("taskId", taskId); + String verifyName = task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1); + return prefix + "/task" + verifyName; + } + /** + * 自动绑定页面字段 + */ + @ModelAttribute("preloadObj") + public BaseReturnOrderVO getObj(@RequestParam(value = "id", required = false) Long id, HttpSession session) { + if (id != null) { + return baseReturnOrderService.selectBaseReturnOrderById(id); + } + return new BaseReturnOrderVO(); + } + /** + * 完成任务 + * + * @return + */ + @RequestMapping(value = "/complete/{taskId}", method = {RequestMethod.POST, RequestMethod.GET}) + @ResponseBody + public AjaxResult complete(@PathVariable("taskId") String taskId, @RequestParam(value = "saveEntity", required = false) String saveEntity, + @ModelAttribute("preloadObj") BaseReturnOrderVO baseReturnOrderVO, HttpServletRequest request) { + boolean saveEntityBoolean = BooleanUtils.toBoolean(saveEntity); + //获取实例id + String instanceId = baseReturnOrderVO.getInstanceId(); + //获取实例类型 + String instanceType = baseReturnOrderVO.getInstanceType(); + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + String verifyName = task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1); + + boolean approvedFlag = processService.complete(taskId, instanceId, baseReturnOrderVO.getApplyTitle(), baseReturnOrderVO.getBaseReturnOrderCode(), + "baseReturnOrder", new HashMap(), request); + if(!approvedFlag){ + // 审核状态-审核拒绝 + baseReturnOrderVO.setAuditStatus("2"); + } + // 如果任务已结束更新业务表状态 + boolean processIsFinish = processService.judgeProcessIsFinish(instanceId); + if (processIsFinish) { + if(!approvedFlag){ + baseReturnOrderVO.setAuditStatus("2"); + baseReturnOrderService.updateUnApproved(baseReturnOrderVO); + }else{ + // 审核通过 + baseReturnOrderVO.setAuditStatus("1"); + // 提交 + if("submit".equals(instanceType)){ + // 使用状态-是 + baseReturnOrderVO.setUseStatus("1"); + } + baseReturnOrderService.updateApprovedInfo(baseReturnOrderVO); + } + } + baseReturnOrderService.updateBaseReturnOrder(baseReturnOrderVO); + // 驳回申请后继续申请,可能修改表单 + return success("任务已完成"); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseReturnOrderMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseReturnOrderMapper.java index feffcaed..cbe1a60b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseReturnOrderMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseReturnOrderMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.system.mapper; import java.util.List; import com.ruoyi.system.domain.BaseReturnOrder; +import com.ruoyi.system.domain.Vo.BaseReturnOrderVO; /** * 员工退料Mapper接口 @@ -17,7 +18,7 @@ public interface BaseReturnOrderMapper * @param id 员工退料ID * @return 员工退料 */ - public BaseReturnOrder selectBaseReturnOrderById(Long id); + public BaseReturnOrderVO selectBaseReturnOrderById(Long id); /** * 查询员工退料列表 @@ -25,7 +26,7 @@ public interface BaseReturnOrderMapper * @param baseReturnOrder 员工退料 * @return 员工退料集合 */ - public List selectBaseReturnOrderList(BaseReturnOrder baseReturnOrder); + public List selectBaseReturnOrderList(BaseReturnOrderVO baseReturnOrder); /** * 新增员工退料 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IBaseReturnOrderService.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IBaseReturnOrderService.java index e80cdbfc..eb3ffee5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/IBaseReturnOrderService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/IBaseReturnOrderService.java @@ -2,6 +2,9 @@ package com.ruoyi.system.service; import java.util.List; import com.ruoyi.system.domain.BaseReturnOrder; +import com.ruoyi.system.domain.MakeReturnOrder; +import com.ruoyi.system.domain.Vo.BaseReturnOrderVO; +import org.activiti.engine.runtime.ProcessInstance; /** * 员工退料Service接口 @@ -17,15 +20,15 @@ public interface IBaseReturnOrderService * @param id 员工退料ID * @return 员工退料 */ - public BaseReturnOrder selectBaseReturnOrderById(Long id); + public BaseReturnOrderVO selectBaseReturnOrderById(Long id); /** * 查询员工退料列表 * - * @param baseReturnOrder 员工退料 + * @param baseReturnOrderVO 员工退料 * @return 员工退料集合 */ - public List selectBaseReturnOrderList(BaseReturnOrder baseReturnOrder); + public List selectBaseReturnOrderList(BaseReturnOrderVO baseReturnOrderVO); /** * 新增员工退料 @@ -72,4 +75,13 @@ public interface IBaseReturnOrderService * @return */ int restoreBaseReturnOrderById(Long id); + + /*发起提交审批流程*/ + ProcessInstance submitApply(BaseReturnOrder baseReturnOrder); + + /*审批通过后更新详情并生成品质单*/ + int updateApprovedInfo(BaseReturnOrderVO baseReturnOrderVO); + + /*更新审批拒绝*/ + int updateUnApproved(BaseReturnOrderVO baseReturnOrderVO); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseReturnOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseReturnOrderServiceImpl.java index 3d3f07bc..322c5a5f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseReturnOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseReturnOrderServiceImpl.java @@ -1,21 +1,41 @@ package com.ruoyi.system.service.impl; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; +import com.github.pagehelper.Page; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.page.PageDomain; +import com.ruoyi.common.core.page.TableSupport; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.process.general.service.IProcessService; +import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper; +import com.ruoyi.quality.domain.QualityOrder; +import com.ruoyi.quality.domain.QualityOrderDetail; +import com.ruoyi.quality.mapper.QualityOrderDetailMapper; +import com.ruoyi.quality.mapper.QualityOrderMapper; import com.ruoyi.system.domain.BaseReturnOrderDetail; -import com.ruoyi.system.domain.MakeReturnOrderDetail; +import com.ruoyi.system.domain.Vo.BaseReturnOrderVO; import com.ruoyi.system.mapper.BaseReturnOrderDetailMapper; +import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.system.service.ISysRoleService; +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.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.system.mapper.BaseReturnOrderMapper; import com.ruoyi.system.domain.BaseReturnOrder; import com.ruoyi.system.service.IBaseReturnOrderService; import com.ruoyi.common.core.text.Convert; +import org.springframework.transaction.annotation.Transactional; /** * 员工退料Service业务层处理 @@ -35,6 +55,27 @@ public class BaseReturnOrderServiceImpl implements IBaseReturnOrderService @Autowired private BaseReturnOrderDetailMapper returnOrderDetailMapper; + @Autowired + private SysUserMapper userMapper; + + @Autowired + private IProcessService processService; + + @Autowired + private ISysRoleService roleService; + + @Autowired + private TaskService taskService; + + @Autowired + private BizTodoItemMapper todoItemMapper; + + @Autowired + private QualityOrderMapper qualityOrderMapper; + + @Autowired + private QualityOrderDetailMapper orderDetailMapper; + /** * 查询员工退料 * @@ -42,7 +83,7 @@ public class BaseReturnOrderServiceImpl implements IBaseReturnOrderService * @return 员工退料 */ @Override - public BaseReturnOrder selectBaseReturnOrderById(Long id) + public BaseReturnOrderVO selectBaseReturnOrderById(Long id) { return baseReturnOrderMapper.selectBaseReturnOrderById(id); } @@ -50,13 +91,70 @@ public class BaseReturnOrderServiceImpl implements IBaseReturnOrderService /** * 查询员工退料列表 * - * @param baseReturnOrder 员工退料 + * @param baseReturnOrderVO 员工退料 * @return 员工退料 */ @Override - public List selectBaseReturnOrderList(BaseReturnOrder baseReturnOrder) + public List selectBaseReturnOrderList(BaseReturnOrderVO baseReturnOrderVO) { - return baseReturnOrderMapper.selectBaseReturnOrderList(baseReturnOrder); + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + + // PageHelper 仅对第一个 List 分页 + Page list = (Page) baseReturnOrderMapper.selectBaseReturnOrderList(baseReturnOrderVO); + Page returnList = new Page<>(); + for (BaseReturnOrderVO returnVo: list) { + SysUser sysUser = userMapper.selectUserByLoginName(returnVo.getCreateBy()); + if (sysUser != null) { + returnVo.setCreateUserName(sysUser.getUserName()); + } + SysUser sysUser2 = userMapper.selectUserByLoginName(returnVo.getApplyUser()); + if (sysUser2 != null) { + returnVo.setApplyUserName(sysUser2.getUserName()); + } + String instanceId = returnVo.getInstanceId(); + // 当前环节 + if (StringUtils.isNotBlank(instanceId)) { + List taskList = taskService.createTaskQuery() + .processInstanceId(instanceId) +// .singleResult(); + .list(); // 例如请假会签,会同时拥有多个任务 + if (!org.springframework.util.CollectionUtils.isEmpty(taskList)) { + TaskEntityImpl task = (TaskEntityImpl) taskList.get(0); + String taskId = task.getId(); + returnVo.setTaskId(taskId); + // 设置待办用户 + List todoUserList = todoItemMapper.selectUndealTodoUserList(taskId); + if(!org.springframework.util.CollectionUtils.isEmpty(taskList)){ + returnVo.setTodoUserId(String.join(",",todoUserList)); + } + if (task.getSuspensionState() == 2) { + returnVo.setTaskName("已挂起"); + returnVo.setSuspendState("2"); + } else { + returnVo.setTaskName(task.getName()); + returnVo.setSuspendState("1"); + } + } else { + // 已办结或者已撤销 + returnVo.setTaskName("已结束"); + } + } else { + returnVo.setTaskName("未启动"); + } + returnVo.setTaskStatus(returnVo.getTaskName()); + if(returnVo.getAuditStatus().equals("1")){ + returnVo.setTaskStatus("审核通过"); + }else if(returnVo.getAuditStatus().equals("2")){ + returnVo.setTaskStatus("审核拒绝"); + } + returnList.add(returnVo); + } + returnList.setTotal(org.springframework.util.CollectionUtils.isEmpty(list) ? 0 : list.getTotal()); + returnList.setPageNum(pageNum); + returnList.setPageSize(pageSize); + return returnList; } /** @@ -171,4 +269,245 @@ public class BaseReturnOrderServiceImpl implements IBaseReturnOrderService { return baseReturnOrderMapper.restoreBaseReturnOrderById(id); } + + /*发起提交审批流程*/ + @Override + public ProcessInstance submitApply(BaseReturnOrder baseReturnOrder) { + SysUser user = ShiroUtils.getSysUser(); + baseReturnOrder.setApplyUser(user.getLoginName()); + baseReturnOrder.setApplyTime(DateUtils.getNowDate()); + // 保存 + insertBaseReturnOrder(baseReturnOrder); + // 启动流程 + String applyTitle = user.getUserName()+"发起了员工退料单提交审批-"+DateUtils.dateTimeNow(); + String instanceType = "submit"; + ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,baseReturnOrder, user); + String processInstanceId = processInstance.getProcessInstanceId(); + // 提交实例id + baseReturnOrder.setSubmitInstanceId(processInstanceId); + // 存在提交完就流程结束的情况 + boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId); + if(processIsFinish){ + // 审核状态-审核通过 + baseReturnOrder.setAuditStatus("1"); + + BaseReturnOrderVO baseReturnOrderVO = baseReturnOrderMapper.selectBaseReturnOrderById(baseReturnOrder.getId()); + updateApprovedInfo(baseReturnOrderVO); + } + baseReturnOrderMapper.updateBaseReturnOrder(baseReturnOrder); + return processInstance; + } + + /** + * 创建审核流程 + */ + private ProcessInstance startProcessInstance(String applyTitle, String instanceType, BaseReturnOrder baseReturnOrder, SysUser user) { + Long pickId = baseReturnOrder.getId(); + String businessKey = pickId.toString(); // 实体类 ID,作为流程的业务 key + String key = "baseReturnOrder"; + Map variables = new HashMap<>(); + // 构造authority传参 + buildAuthority(user, variables); + baseReturnOrder.setApplyTitle(applyTitle); + // 启动流程 + ProcessInstance processInstance = processService.submitApply(user.getLoginName(), businessKey, applyTitle, baseReturnOrder.getBaseReturnOrderCode(), key, variables); + String processInstanceId = processInstance.getId(); + baseReturnOrder.setInstanceId(processInstanceId); // 建立双向关系 + baseReturnOrder.setInstanceType(instanceType); + return processInstance; + } + + /** + * 发起人节点判断 + * */ + private void buildAuthority(SysUser user, Map variables) { + Set roleKeys = roleService.selectRoleKeys(user.getUserId()); + + variables.put("authority",1); + variables.put("zgExist",false); + variables.put("jlExist",true); + variables.put("yfzjExist",false); + variables.put("fzjlExist",false); + //判断领料人的角色,进入相应的逻辑,设置节点审批人变量 + if(roleKeys.contains("ywyRole")){ + // 业务员/业务助理--->业务部经理 + variables.put("bmjlRole","ywjlRole"); + }else if(roleKeys.contains("jggcsRole")){ + //结构工程师--->工程经理--->研发总监 + variables.put("bmjlRole","gcjlRole"); + variables.put("yfzjExist",true); + }else if(roleKeys.contains("dqgcsRole")){ + //电气工程师--->电气主管--->研发总监 + variables.put("bmzgRole","dqzgRole"); + variables.put("jlExist",false); + variables.put("yfzjExist",true); + }else if(roleKeys.contains("rjgcsRole")||roleKeys.contains("csgcsRole")||roleKeys.contains("gcwyRole") + ||roleKeys.contains("dqzgRole")||roleKeys.contains("gcjlRole")){ + //软件工程师/测试工程师/工程文员--->研发总监 + //电气主管 ---> 研发总监 + //工程经理 ---> 研发总监 + variables.put("jlExist",false); + variables.put("yfzjExist",true); + } else if(roleKeys.contains("cgyRole")){ + // 采购员--->副总经理 + variables.put("jlExist",false); + variables.put("fzjlExist",true); + }else if (roleKeys.contains("scyRole")){ + // 生产员--->生产经理 + variables.put("bmjlRole","scjlRole"); + }else if(roleKeys.contains("pzwyRole")||roleKeys.contains("iqczyRole")||roleKeys.contains("ipqczyRole")||roleKeys.contains("fqczyRole")){ + // IQC/IPQC/FQC/品质文员--->品质经理 + variables.put("bmjlRole","pzjlRole"); + }else if (roleKeys.contains("shgcsRole")){ + // 售后工程师--->售后主管--->售后经理 + variables.put("bmjlRole","shjlRole"); + variables.put("bmzgRole","shzgRole"); + variables.put("zgExist",true); + }else if (roleKeys.contains("shzgRole")){ + // 售后主管--->售后经理 + variables.put("bmjlRole","shjlRole"); + } else if(roleKeys.contains("cgyyRole")){ + // 仓库文员--->仓库主管 + variables.put("bmzgRole","ckzgRole"); + variables.put("zgExist",true); + variables.put("jlExist",false); + }else if(roleKeys.contains("hrzyRole")){ + // 人事助理/专员--->人事经理 + variables.put("bmjlRole","hrjlRole"); + }else if (roleKeys.contains("cwzyRole")){ + // 会计--->财务主管 + variables.put("bmzgRole","cwzgRole"); + variables.put("zgExist",true); + variables.put("jlExist",false); + }else if (roleKeys.contains("wwyRole")){ + // 委外员--->委外主管--->委外经理 + variables.put("bmzgRole","wwzgRole"); + variables.put("bmjlRole","wwjlRole"); + variables.put("zgExist",true); + }else if (roleKeys.contains("wwzgRole")){ + // 委外主管--->委外经理 + variables.put("bmjlRole","wwjlRole"); + } + if(roleKeys.contains("admin")||roleKeys.contains("ywjlRole")||roleKeys.contains("yfzjRole") + ||roleKeys.contains("fzjlRole")||roleKeys.contains("scjlRole")||roleKeys.contains("pzjlRole") + ||roleKeys.contains("shjlRole")||roleKeys.contains("ckzgRole")||roleKeys.contains("hrjlRole") + ||roleKeys.contains("cwzgRole")||roleKeys.contains("zjlRole")||roleKeys.contains("zozjRole") + ||roleKeys.contains("wwjlRole")){ + // 角色包含业务经理、研发总监、生产经理、品质经理、售后经理、仓库主管、人事经理、财务主管、副总经理、总经理、总经总助、admin + variables.put("authority",2); + } + } + + /*审批通过后更新详情并生成品质单*/ + @Transactional(rollbackFor = Exception.class) + @Override + public int updateApprovedInfo(BaseReturnOrderVO baseReturnOrderVO){ + String returnOrderCode = baseReturnOrderVO.getBaseReturnOrderCode(); + String pickNo = baseReturnOrderVO.getPickNo(); + String loginName = ShiroUtils.getLoginName(); + BaseReturnOrderDetail temp = new BaseReturnOrderDetail(); + temp.setBaseReturnOrderCode(returnOrderCode); + List returnOrderDetails = returnOrderDetailMapper.selectBaseReturnOrderDetailList(temp); + if(StringUtils.isEmpty(returnOrderDetails)){ + throw new BusinessException("退料单详情为空,更新失败"); + } + int result = 0; + for (BaseReturnOrderDetail detail: returnOrderDetails) { + detail.setAuditStatus("1");//审核通过 + detail.setUpdateBy(loginName); + detail.setUpdateTime(DateUtils.getNowDate()); + int updateResult = returnOrderDetailMapper.updateBaseReturnOrderDetail(detail); + if(updateResult <= 0){ + throw new BusinessException("退料单详情更新失败"); + } + String qualityOrderCode = redisCache.generateBillNo("PZ"); + + int orderDetailResult = generateQualityOrderDetail(qualityOrderCode,detail); + if(orderDetailResult<=0){ + throw new BusinessException("新增品质单详情失败!"); + } + QualityOrder qualityOrder = createQualityOrder(qualityOrderCode, detail.getBaseReturnOrderCode(), loginName); + if(pickNo.startsWith("WWLL")){ + qualityOrder.setQualityStorageStatus("9");//入库类型:委外退料 + qualityOrder.setQualityOrderType("7");//委外退料单 + }else if(pickNo.startsWith("YGLL")){ + qualityOrder.setQualityStorageStatus("6");//入库类型:员工退料 + qualityOrder.setQualityOrderType("4");//员工退料单 + } + qualityOrder.setMaterialNo(detail.getMaterialNo()); + qualityOrder.setMaterialName(detail.getMaterialName()); + qualityOrder.setThisArrivedNum(detail.getReturnNum());//检验数 + result += qualityOrderMapper.insertQualityOrder(qualityOrder); + } + return result; + } + + private QualityOrder createQualityOrder(String code,String returnOrderCode, String loginName) { + QualityOrder qualityOrder = new QualityOrder(); + qualityOrder.setQualityOrderCode(code); + qualityOrder.setRelatedOrderCode(returnOrderCode); + qualityOrder.setQualityStatus("0"); + qualityOrder.setDeliveryInspectionTime(DateUtils.getNowDate()); + qualityOrder.setQualityQualifiedNum(0); + qualityOrder.setQualityUnqualifiedNum(0); + qualityOrder.setPendingReviewNum(0); + qualityOrder.setCreateTime(DateUtils.getNowDate()); + qualityOrder.setCreateBy(loginName); + return qualityOrder; + } + + //根据退料单详情生成品质单详情 + private int generateQualityOrderDetail(String qualityOrderCode, BaseReturnOrderDetail returnOrderDetail){ + String pickNo = returnOrderDetail.getPickNo(); + QualityOrderDetail qualityOrderDetail = new QualityOrderDetail(); + qualityOrderDetail.setQualityOrderCode(qualityOrderCode); + qualityOrderDetail.setMaterialNo(returnOrderDetail.getMaterialNo()); + qualityOrderDetail.setMaterialName(returnOrderDetail.getMaterialName()); + qualityOrderDetail.setMaterialBrand(returnOrderDetail.getBrand()); + qualityOrderDetail.setMaterialUnit(returnOrderDetail.getUnit()); + qualityOrderDetail.setMaterialPhotourl(returnOrderDetail.getPhotoUrl()); + qualityOrderDetail.setMaterialDescribe(returnOrderDetail.getDescribe()); + qualityOrderDetail.setMaterialModel(returnOrderDetail.getMaterialModel()); + qualityOrderDetail.setMaterialProcessMethod(returnOrderDetail.getProcessMethod()); + qualityOrderDetail.setCheckNum(returnOrderDetail.getReturnNum()); + qualityOrderDetail.setQualityStatus("0"); + if(pickNo.startsWith("WWLL")){ + qualityOrderDetail.setQualityStorageStatus("9");//入库类型:委外退料 + qualityOrderDetail.setQualityOrderType("7");//委外退料单 + }else if(pickNo.startsWith("YGLL")){ + qualityOrderDetail.setQualityStorageStatus("6");//入库类型:员工退料 + qualityOrderDetail.setQualityOrderType("4");//员工退料单 + } + qualityOrderDetail.setRelatedOrderCode(returnOrderDetail.getBaseReturnOrderCode()); + qualityOrderDetail.setDeliveryInspectionTime(DateUtils.getNowDate()); + qualityOrderDetail.setCreateBy(ShiroUtils.getLoginName()); + qualityOrderDetail.setCreateTime(DateUtils.getNowDate()); + return orderDetailMapper.insertQualityOrderDetail(qualityOrderDetail); + } + + /*更新审批拒绝*/ + @Override + public int updateUnApproved(BaseReturnOrderVO baseReturnOrderVO){ + String returnOrderCode = baseReturnOrderVO.getBaseReturnOrderCode(); + String loginName = ShiroUtils.getLoginName(); + BaseReturnOrderDetail temp = new BaseReturnOrderDetail(); + temp.setBaseReturnOrderCode(returnOrderCode); + List returnOrderDetails = returnOrderDetailMapper.selectBaseReturnOrderDetailList(temp); + if(StringUtils.isEmpty(returnOrderDetails)){ + throw new BusinessException("退料单详情为空,更新失败"); + } + for (BaseReturnOrderDetail detail: returnOrderDetails) { + detail.setAuditStatus("2");//审核拒绝 + detail.setUpdateBy(loginName); + detail.setUpdateTime(DateUtils.getNowDate()); + int updateResult = returnOrderDetailMapper.updateBaseReturnOrderDetail(detail); + if(updateResult <= 0){ + throw new BusinessException("退料单详情更新失败"); + } + } + baseReturnOrderVO.setAuditStatus("2"); + baseReturnOrderVO.setUpdateBy(loginName); + baseReturnOrderVO.setUpdateTime(DateUtils.getNowDate()); + return baseReturnOrderMapper.updateBaseReturnOrder(baseReturnOrderVO); + } } diff --git a/ruoyi-admin/src/main/resources/mapper/system/BaseReturnOrderMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/BaseReturnOrderMapper.xml index 6c898cab..db5c7486 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/BaseReturnOrderMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/BaseReturnOrderMapper.xml @@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - +