From 6cf9459452f65da174d0c5c670a888c7a6dfb0b8 Mon Sep 17 00:00:00 2001 From: Harry Yang Date: Fri, 30 Dec 2022 18:06:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=90=8C=E6=B5=81=E7=A8=8B=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ApplicationExceptionHandler.java | 1 + .../controller/backend/ProcessController.java | 106 ++++++++++++++---- .../process/BudgetPurchaseAmountModel.java | 2 + .../process/BudgetPurchaseDetailModel.java | 2 + .../work/model/process/ProjectProcess.java | 1 + .../model/process/form/ProcessUpdateForm.java | 19 +++- 6 files changed, 104 insertions(+), 27 deletions(-) diff --git a/src/main/java/cn/palmte/work/config/ApplicationExceptionHandler.java b/src/main/java/cn/palmte/work/config/ApplicationExceptionHandler.java index 8a2ce26..e99ce8d 100644 --- a/src/main/java/cn/palmte/work/config/ApplicationExceptionHandler.java +++ b/src/main/java/cn/palmte/work/config/ApplicationExceptionHandler.java @@ -147,6 +147,7 @@ public class ApplicationExceptionHandler { @ExceptionHandler(NullPointerException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public Json nullPointer(NullPointerException exception) { + log.error("An Exception occurred", exception); final StackTraceElement[] stackTrace = exception.getStackTrace(); if (ObjectUtils.isEmpty(stackTrace)) { return Json.failed("空指针", "暂无堆栈信息"); diff --git a/src/main/java/cn/palmte/work/controller/backend/ProcessController.java b/src/main/java/cn/palmte/work/controller/backend/ProcessController.java index 555cd98..3fd9814 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProcessController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProcessController.java @@ -477,43 +477,101 @@ public class ProcessController { @Transactional(rollbackFor = Exception.class) public void update(@RequestBody @Valid ProcessUpdateForm form) throws Exception { ProjectProcess entity = processService.getById(form.getId()); + Integer processId = entity.getId(); + ProcessType processType = entity.getProcessType(); entity.setTaxRate(form.getTaxRate()); entity.setContractNo(form.getContractNo()); entity.setContractName(form.getContractName()); + entity.setApplyDept(form.getApplyDept()); entity.setSealTypes(SealTypeArray.of(form.getSealTypes())); - entity.setApplyDept(String.join(",", form.getApplyDept())); entity.setAttachmentUri(JSON.toJSONString(form.getAttachments())); entityManager.merge(entity); - switch (entity.getProcessType()) { - case sale_contract: { - SaleContract contract = processService.findSaleContract(form.getId()); - contract.setClientName(form.getClientName()); - contract.setPaymentTerms(form.getPaymentTerms()); - contract.setApplyPersonPhone(form.getApplyPersonPhone()); - entityManager.merge(contract); - break; - } - case procurement_contract: { - ProcurementContract contract = processService.findProcurementContract(form.getId()); - contract.setProcurementMode(form.getProcurementMode()); - contract.setPaymentTerms(form.getPaymentTerms()); - contract.setSupplierName(form.getSupplierName()); - entityManager.merge(contract); + if (processType == ProcessType.sale_contract) { + SaleContract contract = processService.findSaleContract(form.getId()); + contract.setClientName(form.getClientName()); + contract.setPaymentTerms(form.getPaymentTerms()); + contract.setApplyPersonPhone(form.getApplyPersonPhone()); + entityManager.merge(contract); - // 保存BudgetPurchaseAmount的时候要检测 budgetCostId 该条记录不能重复 -// BudgetPurchaseAmount purchaseAmount = processService.getPurchaseAmount(amountForm.budgetCostId, processId); - - break; - } - default: - throw new UnsupportedOperationException("还不支持"); + processService.updateIncomeDetails(form.getIncomeDetails()); } + else if (processType == ProcessType.procurement_contract) { + ProcurementContract contract = processService.findProcurementContract(form.getId()); + contract.setProcurementMode(form.getProcurementMode()); + contract.setPaymentTerms(form.getPaymentTerms()); + contract.setSupplierName(form.getSupplierName()); + entityManager.merge(contract); - processService.updateIncomeDetails(form.getIncomeDetails()); + Integer contractId = contract.getId(); + + if (!CollectionUtils.isEmpty(form.supplierMaterials)) { + for (SupplierMaterial material : form.supplierMaterials) { + material.setProcessId(processId); + material.setContractId(contractId); + + entityManager.merge(material); + } + } + + if (!CollectionUtils.isEmpty(form.purchaseAmount)) { + for (BudgetPurchaseAmountModel amountForm : form.purchaseAmount) { + // 草稿模式也不允许为空 (基础数据) + Assert.notNull(amountForm.amount, "合同明细填写不完整"); + Assert.notNull(amountForm.budgetCostId, "合同明细填写不完整"); + + // 已经采购的数量 要么是数据库存在的值要么是0 ,数据库获取已经采购数目 + BigDecimal amountAlready = processService.getAmountAlready(amountForm.budgetCostId); + + // 新建 + BudgetPurchaseAmount purchaseAmount = new BudgetPurchaseAmount(); + purchaseAmount.setId(amountForm.id); + purchaseAmount.setProcessId(processId); + purchaseAmount.setContractId(contractId); + purchaseAmount.setAmount(amountForm.amount); + purchaseAmount.setBudgetCostId(amountForm.budgetCostId); + purchaseAmount.setAmountCurrent(amountForm.amountCurrent); + // 更新到数据库 + purchaseAmount.setAmountAlready(amountAlready); + + // TODO 提交模式才计算 剩余 + if (form.getStatus() == ProcessStatus.to_be_audit) { + // 当前的必须填写 + Assert.notNull(amountForm.amountCurrent, "合同明细填写不完整"); + + // 提交的时候 更新(计算)已经采购的数量 = 已经采购的数量 + 本次采购数量 + amountAlready = amountAlready.add(amountForm.amountCurrent); + purchaseAmount.setAmountAlready(amountAlready); // 更新数据库 + // amountForm.amount 和数据库的一致 剩余的未采购数量 = 总数 - 已经采购数量 + BigDecimal amountLeft = amountForm.amount.subtract(amountAlready); + purchaseAmount.setAmountLeft(amountLeft); + } + + entityManager.merge(purchaseAmount); + + Integer amountId = purchaseAmount.getId(); // ID 自动生成或者使用之前已经有的 + // 保存成本对应的 明细 + if (!CollectionUtils.isEmpty(amountForm.details)) { + for (BudgetPurchaseDetailModel detail : amountForm.details) { + BudgetPurchaseDetail purchaseDetail = new BudgetPurchaseDetail(); + // 关联主键 + purchaseDetail.setId(detail.id); + purchaseDetail.setAmountId(amountId); + purchaseDetail.setProcessId(processId); + purchaseDetail.setContractId(contractId); + purchaseDetail.setBudgetCostId(amountForm.budgetCostId); + + BeanUtils.copyProperties(detail, purchaseDetail, "details"); + entityManager.merge(purchaseDetail); + } + } + } + } + + } if (form.getStatus() == ProcessStatus.to_be_audit) { processService.startAuditProgress(entity); diff --git a/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmountModel.java b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmountModel.java index 08c4e32..1f7fc95 100644 --- a/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmountModel.java +++ b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmountModel.java @@ -18,6 +18,8 @@ import lombok.ToString; @EqualsAndHashCode public class BudgetPurchaseAmountModel { + public Integer id; + // 所有的 public BigDecimal amount; diff --git a/src/main/java/cn/palmte/work/model/process/BudgetPurchaseDetailModel.java b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseDetailModel.java index 995733d..ffa4b77 100644 --- a/src/main/java/cn/palmte/work/model/process/BudgetPurchaseDetailModel.java +++ b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseDetailModel.java @@ -13,6 +13,8 @@ import lombok.Data; @Data public class BudgetPurchaseDetailModel { + public Integer id; + // 供应商名称 private String supplierName; diff --git a/src/main/java/cn/palmte/work/model/process/ProjectProcess.java b/src/main/java/cn/palmte/work/model/process/ProjectProcess.java index 7290c72..ab3c84a 100644 --- a/src/main/java/cn/palmte/work/model/process/ProjectProcess.java +++ b/src/main/java/cn/palmte/work/model/process/ProjectProcess.java @@ -123,6 +123,7 @@ public class ProjectProcess implements Serializable { @PrePersist void prePersist() { this.createAt = LocalDateTime.now(); + this.lastUpdateAt = this.createAt; } static class SealTypeArraySerializer extends JsonSerializer { diff --git a/src/main/java/cn/palmte/work/model/process/form/ProcessUpdateForm.java b/src/main/java/cn/palmte/work/model/process/form/ProcessUpdateForm.java index 893ca33..e7e977f 100644 --- a/src/main/java/cn/palmte/work/model/process/form/ProcessUpdateForm.java +++ b/src/main/java/cn/palmte/work/model/process/form/ProcessUpdateForm.java @@ -8,6 +8,7 @@ import cn.palmte.work.model.enums.ProcessStatus; import cn.palmte.work.model.enums.ProcurementMode; import cn.palmte.work.model.process.BudgetPurchaseAmountModel; import cn.palmte.work.model.process.ProcessAttachment; +import cn.palmte.work.model.process.SupplierMaterial; import lombok.Data; /** @@ -22,7 +23,17 @@ public class ProcessUpdateForm { @NotNull private Integer id; - private String[] applyDept; + // 申请部门 部门1,部门2,部门3 (逗号分割) + private String applyDept; + + // 申请部门ID(逗号分割) + private String applyDeptId; + + // 申请部门领导ID + private Integer applyDeptLeaderId; + + // 申请部门领导 + private String applyDeptLeaderName; // 合同编号 private String contractNo; @@ -55,8 +66,10 @@ public class ProcessUpdateForm { private List attachments; - private List incomeDetails; + public List incomeDetails; + + public List supplierMaterials; // 采购详情 - private List purchaseAmount; + public List purchaseAmount; }