From c95979aa2e82884972b84d93b6ad4e0f4f51ca02 Mon Sep 17 00:00:00 2001 From: zhangsiqi <2825463979@qq.com> Date: Mon, 22 Jul 2024 23:03:39 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=E9=87=87=E8=B4=AD=E8=B5=84=E6=96=99:=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=87=E8=B4=AD=E7=BB=8F=E7=90=86=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E9=A1=B5=E9=9D=A2=EF=BC=8C=E9=87=87=E8=B4=AD=E4=B8=BB?= =?UTF-8?q?=E7=AE=A1=E5=AE=A1=E6=A0=B8=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=8D=8F?= =?UTF-8?q?=E8=B0=83=E6=B7=BB=E5=8A=A0=E8=B0=83=E6=95=B4=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E6=96=B0=E5=A2=9E=E4=BE=9B=E5=BA=94?= =?UTF-8?q?=E5=95=86=E8=B5=84=E6=96=99serviceImpl=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=B1=82=E6=96=B0=E5=A2=9E=E8=B0=83=E6=95=B4=E6=96=B9=E6=B3=95?= =?UTF-8?q?updatePurchaseQuoteById=EF=BC=8C=E8=B0=83=E6=95=B4=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E6=8A=A5=E4=BB=B7=E6=9F=A5=E8=AF=A2=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E7=9B=B8=E5=85=B3=E6=9F=A5=E8=AF=A2=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E9=87=87=E8=B4=AD=E6=8A=A5=E4=BB=B7=E5=90=84?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E8=8A=82=E7=82=B9=E5=B7=B2=E5=9C=A8=E6=9C=AC?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=EF=BC=8C=E9=80=9A=E8=BF=87=E5=8F=AF=E8=A1=8C?= =?UTF-8?q?=E3=80=82=E4=BF=AE=E6=94=B9=E9=87=87=E8=B4=AD=E6=8A=A5=E4=BB=B7?= =?UTF-8?q?=E7=89=A9=E6=96=99=E5=AD=90=E8=A1=A8=E4=BF=A1=E6=81=AF=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9Edel=5Fflag=E5=AD=97=E6=AE=B5=EF=BC=8C0?= =?UTF-8?q?=E4=B8=BA=E6=AD=A3=E5=B8=B8=201=E4=B8=BA=E5=88=A0=E9=99=A4?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=A0=B9=E6=8D=AE=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=8A=A5=E4=BB=B7=E5=8D=95=E4=BF=AE=E6=94=B9del=5Fflag=20?= =?UTF-8?q?=E4=B8=BA=E5=88=A0=E9=99=A4=E7=9A=84=E6=96=B9=E6=B3=95,?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=89=B9=E9=87=8F=E6=A0=B9=E6=8D=AE=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E6=8A=A5=E4=BB=B7=E5=8D=95=E5=8F=B7=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E6=8A=A5=E4=BB=B7=E7=89=A9=E6=96=99=E4=B8=BA=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=A0=87=E5=BF=97=E7=9A=84=E6=96=B9=E6=B3=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseQuoteChildController.java | 16 +- .../controller/PurchaseQuoteController.java | 142 ++++++-- .../ruoyi/purchase/domain/PurchaseQuote.java | 112 +++++- .../purchase/domain/Vo/PurchaseQuoteVo.java | 114 ++++++ .../purchase/mapper/PurchaseQuoteMapper.java | 43 ++- .../service/IPurchaseQuoteChildService.java | 4 +- .../service/IPurchaseQuoteService.java | 22 +- .../impl/PurchaseQuoteChildServiceImpl.java | 2 +- .../impl/PurchaseQuoteServiceImpl.java | 225 ++++++++++-- .../mapper/purchase/PurchaseQuoteMapper.xml | 95 ++++- .../mapper/system/SysSupplierMapper.xml | 3 +- .../templates/purchase/purchaseQuote/add.html | 54 ++- .../purchase/purchaseQuote/edit.html | 3 +- .../purchase/purchaseQuote/purchaseQuote.html | 69 +++- .../purchaseQuote/taskCgjlVerify.html | 329 +++++++++++++++++ .../purchaseQuote/taskCgzgVerify.html | 335 ++++++++++++++++++ .../purchaseQuote/taskModifyApply.html | 318 +++++++++++++++++ 17 files changed, 1768 insertions(+), 118 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/Vo/PurchaseQuoteVo.java create mode 100644 ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/taskCgjlVerify.html create mode 100644 ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/taskCgzgVerify.html create mode 100644 ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/taskModifyApply.html diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteChildController.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteChildController.java index 294c9e0d..19bd1903 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteChildController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteChildController.java @@ -35,7 +35,7 @@ public class PurchaseQuoteChildController extends BaseController @Autowired private IPurchaseQuoteChildService purchaseQuoteChildService; - @RequiresPermissions("purchase:purchaseQuoteChild:view") +// @RequiresPermissions("purchase:purchaseQuoteChild:view") @GetMapping() public String purchaseQuoteChild() { @@ -45,7 +45,7 @@ public class PurchaseQuoteChildController extends BaseController /** * 查询采购报价单物料信息列表 */ - @RequiresPermissions("purchase:purchaseQuoteChild:list") +// @RequiresPermissions("purchase:purchaseQuoteChild:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(PurchaseQuoteChild purchaseQuoteChild) @@ -58,7 +58,7 @@ public class PurchaseQuoteChildController extends BaseController /** * 导出采购报价单物料信息列表 */ - @RequiresPermissions("purchase:purchaseQuoteChild:export") +// @RequiresPermissions("purchase:purchaseQuoteChild:export") @Log(title = "采购报价单物料信息", businessType = BusinessType.EXPORT) @PostMapping("/export") @ResponseBody @@ -81,7 +81,7 @@ public class PurchaseQuoteChildController extends BaseController /** * 新增保存采购报价单物料信息 */ - @RequiresPermissions("purchase:purchaseQuoteChild:add") +// @RequiresPermissions("purchase:purchaseQuoteChild:add") @Log(title = "采购报价单物料信息", businessType = BusinessType.INSERT) @PostMapping("/add") @ResponseBody @@ -104,7 +104,7 @@ public class PurchaseQuoteChildController extends BaseController /** * 修改保存采购报价单物料信息 */ - @RequiresPermissions("purchase:purchaseQuoteChild:edit") +// @RequiresPermissions("purchase:purchaseQuoteChild:edit") @Log(title = "采购报价单物料信息", businessType = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody @@ -116,7 +116,7 @@ public class PurchaseQuoteChildController extends BaseController /** * 删除采购报价单物料信息 */ - @RequiresPermissions("purchase:purchaseQuoteChild:remove") +// @RequiresPermissions("purchase:purchaseQuoteChild:remove") @Log(title = "采购报价单物料信息", businessType = BusinessType.DELETE) @PostMapping( "/remove") @ResponseBody @@ -128,7 +128,7 @@ public class PurchaseQuoteChildController extends BaseController /** * 作废采购报价单物料信息 */ - @RequiresPermissions("purchase:purchaseQuoteChild:cancel") +// @RequiresPermissions("purchase:purchaseQuoteChild:cancel") @Log(title = "采购报价单物料信息", businessType = BusinessType.CANCEL) @GetMapping( "/cancel/{id}") @ResponseBody @@ -139,7 +139,7 @@ public class PurchaseQuoteChildController extends BaseController /** * 恢复采购报价单物料信息 */ - @RequiresPermissions("purchase:purchaseQuoteChild:restore") +// @RequiresPermissions("purchase:purchaseQuoteChild:restore") @Log(title = "采购报价单物料信息", businessType = BusinessType.RESTORE) @GetMapping( "/restore/{id}") @ResponseBody diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java index 835c74a6..0b2a9757 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseQuoteController.java @@ -1,8 +1,24 @@ package com.ruoyi.purchase.controller; +import java.util.HashMap; import java.util.List; +import com.alibaba.fastjson.JSON; import com.ruoyi.ck.utils.Result; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.process.general.service.IProcessService; +import com.ruoyi.purchase.domain.PurchaseQuoteChild; +import com.ruoyi.purchase.domain.Vo.PurchaseQuoteVo; +import com.ruoyi.system.domain.SysSalesOrderChild; +import com.ruoyi.system.service.ISysRoleService; +import com.ruoyi.system.service.ISysUserService; +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; @@ -17,6 +33,9 @@ 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 * @@ -31,6 +50,20 @@ public class PurchaseQuoteController extends BaseController @Autowired private IPurchaseQuoteService purchaseQuoteService; + @Autowired + private ISysRoleService roleService; + + @Autowired + private TaskService taskService; + + @Autowired + private RuntimeService runtimeService; + + @Autowired + private IProcessService processService; + + @Autowired + private ISysUserService sysUserService; @RequiresPermissions("purchase:purchaseQuote:view") @GetMapping() @@ -48,7 +81,7 @@ public class PurchaseQuoteController extends BaseController public TableDataInfo list(PurchaseQuote purchaseQuote) { startPage(); - List list = purchaseQuoteService.selectPurchaseQuoteList(purchaseQuote); + List list = purchaseQuoteService.selectPurchaseQuoteList(purchaseQuote); return getDataTable(list); } @@ -61,8 +94,8 @@ public class PurchaseQuoteController extends BaseController @ResponseBody public AjaxResult export(PurchaseQuote purchaseQuote) { - List list = purchaseQuoteService.selectPurchaseQuoteList(purchaseQuote); - ExcelUtil util = new ExcelUtil(PurchaseQuote.class); + List list = purchaseQuoteService.selectPurchaseQuoteList(purchaseQuote); + ExcelUtil util = new ExcelUtil(PurchaseQuoteVo.class); return util.exportExcel(list, "采购报价单数据"); } @@ -84,9 +117,9 @@ public class PurchaseQuoteController extends BaseController @ResponseBody public AjaxResult addSave(@RequestBody PurchaseQuote purchaseQuote) { - purchaseQuote.setAuditStatus("1"); - purchaseQuote.setUseStatus("1"); - purchaseQuoteService.insertPurchaseQuote(purchaseQuote); + purchaseQuote.setAuditStatus("0"); + purchaseQuote.setUseStatus("0"); + purchaseQuoteService.submitApply(purchaseQuote); return AjaxResult.success(); } @@ -108,11 +141,11 @@ public class PurchaseQuoteController extends BaseController @Log(title = "采购报价单", businessType = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody - public AjaxResult editSave(@RequestBody PurchaseQuote purchaseQuote) + public AjaxResult editSave(@RequestBody PurchaseQuoteVo purchaseQuote) { - purchaseQuote.setAuditStatus("1"); - purchaseQuote.setUseStatus("1"); - purchaseQuoteService.updatePurchaseQuote(purchaseQuote); + purchaseQuote.setAuditStatus("0"); + purchaseQuote.setUseStatus("0"); + purchaseQuoteService.submitApply(purchaseQuote); return AjaxResult.success(); } @@ -128,28 +161,89 @@ public class PurchaseQuoteController extends BaseController return toAjax(purchaseQuoteService.deletePurchaseQuoteByIds(ids)); } + /** - * 作废采购报价单 + * 加载审批弹窗 + * @param taskId + * @param mmap + * @return */ - @RequiresPermissions("purchase:purchaseQuote:cancel") - @Log(title = "采购报价单", businessType = BusinessType.CANCEL) - @GetMapping( "/cancel/{id}") - @ResponseBody - public AjaxResult cancel(@PathVariable("id") Long id){ - return toAjax(purchaseQuoteService.cancelPurchaseQuoteById(id)); + @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(); + PurchaseQuoteVo purchaseQuoteVo = purchaseQuoteService.selectPurchaseQuoteById(new Long(processInstance.getBusinessKey())); + purchaseQuoteVo.setTaskId(taskId); + mmap.put("formData", purchaseQuoteVo); + mmap.put("taskId", taskId); + String verifyName = task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1); + return prefix + "/task" + verifyName; } /** - * 恢复采购报价单 + * 完成任务 + * + * @return */ - @RequiresPermissions("purchase:purchaseQuote:restore") - @Log(title = "采购报价单", businessType = BusinessType.RESTORE) - @GetMapping( "/restore/{id}") + @RequestMapping(value = "/complete/{taskId}", method = {RequestMethod.POST, RequestMethod.GET}) @ResponseBody - public AjaxResult restore(@PathVariable("id")Long id) - { - return toAjax(purchaseQuoteService.restorePurchaseQuoteById(id)); + public AjaxResult complete(@PathVariable("taskId") String taskId, @RequestParam(value = "saveEntity", required = false) String saveEntity, + @ModelAttribute("preloadObj") PurchaseQuoteVo purchaseQuoteVo, + @RequestParam(value ="purchaseQuoteChildLists",required = false) String purchaseQuoteChildLists, HttpServletRequest request) { + if (!StringUtils.isEmpty(purchaseQuoteChildLists)) { + purchaseQuoteVo.setPurchaseQuoteChildList(JSON.parseArray(purchaseQuoteChildLists, PurchaseQuoteChild.class)); + } + boolean saveEntityBoolean = BooleanUtils.toBoolean(saveEntity); + String instanceId = purchaseQuoteVo.getInstanceId(); + String instanceType = purchaseQuoteVo.getInstanceType(); + boolean approvedFlag = processService.complete(taskId, instanceId, purchaseQuoteVo.getApplyTitle(), + purchaseQuoteVo.getPurchaseQuoteCode(), "purchaseQuote", new HashMap(), request); + SysUser sysUser = ShiroUtils.getSysUser(); + if(!approvedFlag){ + // 审核状态-审核拒绝 + purchaseQuoteVo.setAuditStatus("2"); + } + // 如果任务已结束更新业务表状态 + boolean processIsFinish = processService.judgeProcessIsFinish(instanceId); + if (processIsFinish) { + // 审核通过 + purchaseQuoteVo.setAuditStatus("1"); + // 提交 + if("submit".equals(instanceType)){ + // 使用状态-是 + purchaseQuoteVo.setUseStatus("1"); + } + // 作废 + else if("cancel".equals(instanceType)){ + // 使用状态-已作废 + purchaseQuoteVo.setUseStatus("2"); + } + // 恢复 + else if("restore".equals(instanceType)){ + // 使用状态-是 + purchaseQuoteVo.setUseStatus("1"); + } + purchaseQuoteVo.setUseStatus("1"); + } + purchaseQuoteService.updatePurchaseQuote(purchaseQuoteVo); + // 驳回申请后继续申请,可能修改表单 + if (saveEntityBoolean) { + purchaseQuoteService.updatePurchaseQuoteById(purchaseQuoteVo); + return success("重新申请"); + } + return success("任务已完成"); } + @ModelAttribute("/preloadObj") + public PurchaseQuoteVo getObj(@RequestParam(value = "id", required = false) Long id, HttpSession session) { + if (id != null) { + return purchaseQuoteService.selectPurchaseQuoteById(id); + } + return new PurchaseQuoteVo(); + } + /** + * 作废采购报价单 + */ @PostMapping( "/getId") @ResponseBody diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuote.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuote.java index 12b682af..6ca8b56c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuote.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseQuote.java @@ -1,5 +1,6 @@ package com.ruoyi.purchase.domain; +import java.util.Date; import java.util.List; import org.apache.commons.lang3.builder.ToStringBuilder; @@ -81,9 +82,53 @@ public class PurchaseQuote extends BaseEntity private String removeFileIdStr; - private List purchaseQuoteChildList; + /** 流程实例ID */ + private String instanceId; + + /** 流程实例类型 */ + private String instanceType; + + /** 提交流程实例ID */ + private String submitInstanceId; + + /** 作废流程实例ID */ + private String cancelInstanceId; + + /** 恢复流程实例ID */ + private String restoreInstanceId; + + /** 申请人 */ + private String applyTitle; + + /** 申请人 */ + private String applyUser; + + /** 申请时间 */ + private Date applyTime; + + private String delFlag; + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + private String keyword; + public String getKeyword() { + return keyword; + } + + public void setKeyword(String keyword) { + this.keyword = keyword; + } + + private List purchaseQuoteChildList; + public List getPurchaseQuoteChildList() { return purchaseQuoteChildList; } @@ -251,6 +296,71 @@ public class PurchaseQuote extends BaseEntity return useStatus; } + + public String getInstanceId() { + return instanceId; + } + + public void setInstanceId(String instanceId) { + 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; + } + + public void setApplyTitle(String applyTitle) { + this.applyTitle = applyTitle; + } + + public String getApplyUser() { + return applyUser; + } + + public void setApplyUser(String applyUser) { + this.applyUser = applyUser; + } + + public Date getApplyTime() { + return applyTime; + } + + public void setApplyTime(Date applyTime) { + this.applyTime = applyTime; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/Vo/PurchaseQuoteVo.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/Vo/PurchaseQuoteVo.java new file mode 100644 index 00000000..3468c5cd --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/Vo/PurchaseQuoteVo.java @@ -0,0 +1,114 @@ +package com.ruoyi.purchase.domain.Vo; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.purchase.domain.PurchaseQuote; + +import java.util.Date; + +/** + * + * @author Lenovo + * @Description BOM信息Vo + */ + +public class PurchaseQuoteVo extends PurchaseQuote { + private static final long serialVersionUID = 1L; + /** 申请人姓名 */ + private String applyUserName; + /** 任务ID */ + private String taskId; + /** 任务名称 */ + private String taskName; + /** 办理时间 */ + private Date doneTime; + /** 创建人 */ + private String createUserName; + /** 流程实例状态 1 激活 2 挂起 */ + private String suspendState; + /** 待办用户id */ + private String todoUserId; + /** 流程实例类型名称 */ + private String instanceTypeName; + + + + public String getApplyUserName() { + return applyUserName; + } + + public void setApplyUserName(String applyUserName) { + this.applyUserName = applyUserName; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public Date getDoneTime() { + return doneTime; + } + + public void setDoneTime(Date doneTime) { + this.doneTime = doneTime; + } + + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + + public String getSuspendState() { + return suspendState; + } + + public void setSuspendState(String suspendState) { + this.suspendState = suspendState; + } + + public String getTodoUserId() { + return todoUserId; + } + + public void setTodoUserId(String todoUserId) { + this.todoUserId = todoUserId; + } + + public String getInstanceTypeName() { + return instanceTypeName; + } + + public void setInstanceTypeName(String instanceTypeName) { + this.instanceTypeName = instanceTypeName; + } + + + @Override + public String toString() { + return "PurchaseQuoteVo{" + + "applyUserName='" + applyUserName + '\'' + + ", taskId='" + taskId + '\'' + + ", taskName='" + taskName + '\'' + + ", doneTime=" + doneTime + + ", createUserName='" + createUserName + '\'' + + ", suspendState='" + suspendState + '\'' + + ", todoUserId='" + todoUserId + '\'' + + ", instanceTypeName='" + instanceTypeName + '\'' + + "} " + super.toString(); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteMapper.java index dd4ff214..a9ef9f5a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseQuoteMapper.java @@ -1,6 +1,7 @@ package com.ruoyi.purchase.mapper; -import java.util.List; +import com.github.pagehelper.Page; +import com.ruoyi.purchase.domain.Vo.PurchaseQuoteVo; import com.ruoyi.purchase.domain.PurchaseQuote; /** @@ -13,19 +14,19 @@ public interface PurchaseQuoteMapper { /** * 查询采购报价单 - * + * * @param purchaseQuoteId 采购报价单ID * @return 采购报价单 */ - public PurchaseQuote selectPurchaseQuoteById(Long purchaseQuoteId); + public PurchaseQuoteVo selectPurchaseQuoteById(Long purchaseQuoteId); /** * 查询采购报价单列表 - * + * * @param purchaseQuote 采购报价单 * @return 采购报价单集合 */ - public List selectPurchaseQuoteList(PurchaseQuote purchaseQuote); + public Page selectPurchaseQuoteList(PurchaseQuote purchaseQuote); /** * 新增采购报价单 @@ -74,4 +75,36 @@ public interface PurchaseQuoteMapper * @return 结果 */ public int restorePurchaseQuoteById(Long purchaseQuoteId); + + /** + * 根据采购报价单编号删除采购报价单 + * @param purchaseQuoteCode + * @return + */ + public Integer deletePurchaseQuoteByQuoteCode(String purchaseQuoteCode); + + /** + * 根据采购报价单编号批量删除采购报价单 + * @param purchaseQuoteCode + * @return + */ + + public Integer deletePurchaseQuoteByQuoteCodes(String[] purchaseQuoteCode); + + /** + * 根据采购报价单编号作废采购报价单 + * @param purchaseQuoteCode + * @return + */ + + public Integer cancelPurchaseQuoteByQuoteCode(String purchaseQuoteCode); + + /** + * 根据采购报价单编号批量作废采购报价单 + * @param purchaseQuoteCodes + * @return + */ + + public Integer cancelPurchaseQuoteByQuoteCodes(String[] purchaseQuoteCodes); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java index f32b96a4..51f5a5bf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteChildService.java @@ -1,8 +1,8 @@ package com.ruoyi.purchase.service; import java.util.List; + import com.ruoyi.purchase.domain.PurchaseQuoteChild; -import org.springframework.transaction.annotation.Transactional; /** * 采购报价单物料信息Service接口 @@ -14,7 +14,7 @@ public interface IPurchaseQuoteChildService { /** * 查询采购报价单物料信息 - * + * * @param purchaseQuoteChildId 采购报价单物料信息ID * @return 采购报价单物料信息 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java index 412d65e3..8ff867d1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseQuoteService.java @@ -1,7 +1,9 @@ package com.ruoyi.purchase.service; -import java.util.List; +import com.github.pagehelper.Page; +import com.ruoyi.purchase.domain.Vo.PurchaseQuoteVo; import com.ruoyi.purchase.domain.PurchaseQuote; +import org.activiti.engine.runtime.ProcessInstance; import org.springframework.transaction.annotation.Transactional; /** @@ -14,19 +16,19 @@ public interface IPurchaseQuoteService { /** * 查询采购报价单 - * + * * @param purchaseQuoteId 采购报价单ID * @return 采购报价单 */ - public PurchaseQuote selectPurchaseQuoteById(Long purchaseQuoteId); + public PurchaseQuoteVo selectPurchaseQuoteById(Long purchaseQuoteId); /** * 查询采购报价单列表 - * + * * @param purchaseQuote 采购报价单 * @return 采购报价单集合 */ - public List selectPurchaseQuoteList(PurchaseQuote purchaseQuote); + public Page selectPurchaseQuoteList(PurchaseQuote purchaseQuote); /** * 新增采购报价单 @@ -62,19 +64,25 @@ public interface IPurchaseQuoteService */ public int deletePurchaseQuoteById(Long purchaseQuoteId); + @Transactional(rollbackFor = Exception.class) + ProcessInstance updatePurchaseQuoteById(PurchaseQuoteVo purchaseQuoteVo); + /** * 作废采购报价单 * @param purchaseQuoteId 采购报价单ID * @return */ - int cancelPurchaseQuoteById(Long purchaseQuoteId); + ProcessInstance cancelPurchaseQuoteById(Long purchaseQuoteId); + + @Transactional(rollbackFor = Exception.class) + ProcessInstance submitApply(PurchaseQuote purchaseQuote); /** * 恢复采购报价单 * @param purchaseQuoteId 采购报价单ID * @return */ - int restorePurchaseQuoteById(Long purchaseQuoteId); + ProcessInstance restorePurchaseQuoteById(Long purchaseQuoteId); /** * 生成采购报价单单号 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteChildServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteChildServiceImpl.java index 1f4b544d..7f9f3bec 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteChildServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteChildServiceImpl.java @@ -24,7 +24,7 @@ public class PurchaseQuoteChildServiceImpl implements IPurchaseQuoteChildService /** * 查询采购报价单物料信息 - * + * * @param purchaseQuoteChildId 采购报价单物料信息ID * @return 采购报价单物料信息 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java index 1e34c359..97b81da3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseQuoteServiceImpl.java @@ -1,13 +1,17 @@ package com.ruoyi.purchase.service.impl; -import java.util.Arrays; -import java.util.List; +import java.util.*; +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.service.ICommonService; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.purchase.domain.Vo.PurchaseQuoteVo; import com.ruoyi.process.general.service.IProcessService; import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper; import com.ruoyi.system.domain.SysAttach; @@ -18,6 +22,10 @@ import com.ruoyi.system.service.ISysAttachService; import com.ruoyi.purchase.service.IPurchaseQuoteChildService; 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.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.purchase.mapper.PurchaseQuoteMapper; @@ -25,6 +33,7 @@ import com.ruoyi.purchase.domain.PurchaseQuote; import com.ruoyi.purchase.service.IPurchaseQuoteService; import com.ruoyi.common.core.text.Convert; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; /** * 采购报价单Service业务层处理 @@ -68,26 +77,76 @@ public class PurchaseQuoteServiceImpl implements IPurchaseQuoteService private IPurchaseQuoteChildService purchaseQuoteChildService; /** * 查询采购报价单 - * + * * @param purchaseQuoteId 采购报价单ID * @return 采购报价单 */ @Override - public PurchaseQuote selectPurchaseQuoteById(Long purchaseQuoteId) + public PurchaseQuoteVo selectPurchaseQuoteById(Long purchaseQuoteId) { return purchaseQuoteMapper.selectPurchaseQuoteById(purchaseQuoteId); } /** * 查询采购报价单列表 - * + * * @param purchaseQuote 采购报价单 * @return 采购报价单 */ @Override - public List selectPurchaseQuoteList(PurchaseQuote purchaseQuote) + public Page selectPurchaseQuoteList(PurchaseQuote purchaseQuote) { - return purchaseQuoteMapper.selectPurchaseQuoteList(purchaseQuote); + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + Page list = purchaseQuoteMapper.selectPurchaseQuoteList(purchaseQuote); + Page returnList = new Page<>(); + //PageHelper 仅对第一List分页有效 + for(PurchaseQuoteVo purchaseQuoteVo : list){ + SysUser sysUser = userMapper.selectUserByLoginName(purchaseQuoteVo.getCreateBy()); + if (sysUser != null) { + purchaseQuoteVo.setCreateBy(sysUser.getUserName()); + } + SysUser sysUser2 = userMapper.selectUserByLoginName(purchaseQuoteVo.getApplyUser()); + if (sysUser2!=null){ + purchaseQuoteVo.setApplyUserName(sysUser2.getUserName()); + } + String instanceId = purchaseQuoteVo.getInstanceId(); + // 当前环节 + if (StringUtils.isNotBlank(instanceId)) { + List taskList = taskService.createTaskQuery() + .processInstanceId(instanceId) +// .singleResult(); + .list(); // 例如请假会签,会同时拥有多个任务 + if (!CollectionUtils.isEmpty(taskList)) { + TaskEntityImpl task = (TaskEntityImpl) taskList.get(0); + String taskId = task.getId(); + purchaseQuoteVo.setTaskId(taskId); + // 设置待办用户 + List todoUserList = todoItemMapper.selectUndealTodoUserList(taskId); + if(!CollectionUtils.isEmpty(taskList)){ + purchaseQuoteVo.setTodoUserId(String.join(",",todoUserList)); + } + if (task.getSuspensionState() == 2) { + purchaseQuoteVo.setTaskName("已挂起"); + purchaseQuoteVo.setSuspendState("2"); + } else { + purchaseQuoteVo.setTaskName(task.getName()); + purchaseQuoteVo.setSuspendState("1"); + } + } else { + // 已办结或者已撤销 + purchaseQuoteVo.setTaskName("已结束"); + } + } else { + purchaseQuoteVo.setTaskName("未启动"); + } + returnList.add(purchaseQuoteVo); + } + returnList.setTotal(CollectionUtils.isEmpty(list) ? 0 : list.getTotal()); + returnList.setPageNum(pageNum); + returnList.setPageSize(pageSize); + return returnList; } /** @@ -217,31 +276,151 @@ public class PurchaseQuoteServiceImpl implements IPurchaseQuoteService { return purchaseQuoteMapper.deletePurchaseQuoteById(purchaseQuoteId); } + @Override + @Transactional(rollbackFor = Exception.class) + public ProcessInstance updatePurchaseQuoteById(PurchaseQuoteVo purchaseQuoteVo) { + // 审核状态-待审核 + purchaseQuoteVo.setAuditStatus("0"); + SysUser user = ShiroUtils.getSysUser(); + // 启动流程 + String applyTitle = user.getUserName()+"发起了客户信息重新申请审批-"+ DateUtils.dateTimeNow(); + String instanceType = "submit"; + PurchaseQuote purchaseQuote = new PurchaseQuote(); + BeanUtils.copyProperties(purchaseQuoteVo,purchaseQuote); + ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,purchaseQuote, user); + String processInstanceId = processInstance.getProcessInstanceId(); + // 作废实例id + purchaseQuote.setCancelInstanceId(processInstanceId); + // 存在提交完就流程结束的情况 + boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId); + if(processIsFinish){ + // 审核状态- + purchaseQuote.setAuditStatus("1"); + // 使用状态- + purchaseQuote.setUseStatus("1"); + } + purchaseQuoteMapper.updatePurchaseQuote(purchaseQuote); + return processInstance; + } + @Override + @Transactional(rollbackFor = Exception.class) + public ProcessInstance cancelPurchaseQuoteById(Long id) { + PurchaseQuoteVo purchaseQuoteVo = (PurchaseQuoteVo) purchaseQuoteMapper.selectPurchaseQuoteById(id); + // 审核状态-待审核 + purchaseQuoteVo.setAuditStatus("0"); + SysUser user = ShiroUtils.getSysUser(); + // 启动流程 + String applyTitle = user.getUserName()+"发起了客户信息作废审批-"+ DateUtils.dateTimeNow(); + String instanceType = "cancel"; + PurchaseQuote purchaseQuote = new PurchaseQuote(); + BeanUtils.copyProperties(purchaseQuoteVo,purchaseQuote); + ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,purchaseQuote, user); + String processInstanceId = processInstance.getProcessInstanceId(); + // 作废实例id + purchaseQuote.setCancelInstanceId(processInstanceId); + // 存在提交完就流程结束的情况 + boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId); + if(processIsFinish){ + // 审核状态-审核通过 + purchaseQuote.setAuditStatus("1"); + // 使用状态-已作废 + purchaseQuote.setUseStatus("2"); + } + purchaseQuoteMapper.updatePurchaseQuote(purchaseQuote); + return processInstance; + } - /** - * 作废采购报价单 - * - * @param purchaseQuoteId 采购报价单ID - * @return 结果 - */ @Override - public int cancelPurchaseQuoteById(Long purchaseQuoteId) - { - return purchaseQuoteMapper.cancelPurchaseQuoteById(purchaseQuoteId); + @Transactional(rollbackFor = Exception.class) + public ProcessInstance restorePurchaseQuoteById(Long id) { + PurchaseQuoteVo purchaseQuoteVo = (PurchaseQuoteVo) purchaseQuoteMapper.selectPurchaseQuoteById(id); + // 审核状态-待审核 + purchaseQuoteVo.setAuditStatus("0"); + SysUser user = ShiroUtils.getSysUser(); + // 启动流程 + String applyTitle = user.getUserName()+"发起了客户恢复审批-"+DateUtils.dateTimeNow(); + String instanceType = "restore"; + PurchaseQuote purchaseQuote = new PurchaseQuote(); + BeanUtils.copyProperties(purchaseQuoteVo,purchaseQuote); + ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,purchaseQuote, user); + String processInstanceId = processInstance.getProcessInstanceId(); + // 恢复实例id + purchaseQuote.setRestoreInstanceId(processInstanceId); + // 存在提交完就流程结束的情况 + boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId); + if(processIsFinish){ + // 审核状态-审核通过 + purchaseQuote.setAuditStatus("1"); + // 使用状态-是 + purchaseQuote.setUseStatus("1"); + } + purchaseQuoteMapper.updatePurchaseQuote(purchaseQuote); + return processInstance; } + /** - * 恢复采购报价单信息 - * - * @param purchaseQuoteId 采购报价单ID - * @return 结果 + * 提交申请 + * @param purchaseQuote + * @return */ @Override - public int restorePurchaseQuoteById(Long purchaseQuoteId) - { - return purchaseQuoteMapper.restorePurchaseQuoteById(purchaseQuoteId); + @Transactional(rollbackFor = Exception.class) + public ProcessInstance submitApply(PurchaseQuote purchaseQuote) { + SysUser user = ShiroUtils.getSysUser(); + purchaseQuote.setApplyUser(user.getLoginName()); + purchaseQuote.setApplyTime(DateUtils.getNowDate()); + insertPurchaseQuote(purchaseQuote); + // 启动流程 + String applyTitle = user.getUserName()+"发起了客户信息提交审批-"+DateUtils.dateTimeNow(); + String instanceType = "submit"; + ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,purchaseQuote, user); + String processInstanceId = processInstance.getProcessInstanceId(); + // 提交实例id + purchaseQuote.setSubmitInstanceId(processInstanceId); + // 存在提交完就流程结束的情况 + boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId); + if(processIsFinish){ + // 审核状态-审核通过 + purchaseQuote.setAuditStatus("1"); + // 使用状态-是 + purchaseQuote.setUseStatus("1"); + } + purchaseQuoteMapper.updatePurchaseQuote(purchaseQuote); + return processInstance; } + + private ProcessInstance startProcessInstance(String applyTitle, String instanceType, PurchaseQuote purchaseQuote, SysUser user) { + Long customerId = purchaseQuote.getPurchaseQuoteId(); + String businessKey = customerId.toString(); // 实体类 ID,作为流程的业务 key + String key = "purchaseQuote"; + Map variables = new HashMap<>(); + // 构造authority传参 + buildAuthority(user, variables); + purchaseQuote.setApplyTitle(applyTitle); + // 启动流程 + ProcessInstance processInstance = processService.submitApply(user.getLoginName(), businessKey, applyTitle, + purchaseQuote.getPurchaseQuoteCode(), key, variables); + String processInstanceId = processInstance.getId(); + purchaseQuote.setInstanceId(processInstanceId); // 建立双向关系 + purchaseQuote.setInstanceType(instanceType); + return processInstance; + } + + private void buildAuthority(SysUser user, Map variables) { + Set roleKeys = roleService.selectRoleKeys(user.getUserId()); + if(roleKeys.contains("cgyRole")){ + variables.put("authority",1); + } + // 角色不同审核人不同 + if(roleKeys.contains("admin")){ + variables.put("authority",2); + } + } + + + @Override public Object getId(){ return redisCache.generateBillNo("CGBJ"); diff --git a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteMapper.xml b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteMapper.xml index d67097c4..58d8d0eb 100644 --- a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseQuoteMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -23,21 +23,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + select purchase_quote_id, purchase_quote_code, purchaseBuyer, supplier_quote_code, supplier_name, tax_rate, material_amount, pricingDate, material_no,material_name, create_by, create_time, update_by, update_time, - audit_status, use_status, remark from purchase_quote + audit_status, use_status, remark,instance_type, instance_id, restore_instance_id, + cancel_instance_id, submit_instance_id, apply_title, apply_user, apply_time,del_flag from purchase_quote @@ -69,8 +94,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + +
+ +
+ +
+
+
+ +
+
+ + +
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ + 点击上传 +
只能上传jpg/png文件,第一张图片为主图
+
+ + + +
+ +
+
+ +
+
+ + % +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + +
+
+
+ 选择报价信息 +
+
+
+
+
+
+
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/taskModifyApply.html b/ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/taskModifyApply.html new file mode 100644 index 00000000..64b5a398 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchaseQuote/taskModifyApply.html @@ -0,0 +1,318 @@ + + + + + + + + + + +
+
+ + + + + + + + + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ + 点击上传 +
只能上传jpg/png文件,第一张图片为主图
+
+ + + +
+ +
+
+ +
+
+ + % +
+
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+ 选择报价信息 + + 添加物料 + +
+
+
+
+
+
+
+
+
+ + + + + + + + + \ No newline at end of file