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 72308e4..b107991 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProcessController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProcessController.java @@ -64,6 +64,7 @@ import cn.palmte.work.model.process.BudgetPurchaseDetail; import cn.palmte.work.model.process.ProcessAttachment; import cn.palmte.work.model.process.ProcurementContract; import cn.palmte.work.model.process.ProjectProcess; +import cn.palmte.work.model.process.ProjectProcessDetail; import cn.palmte.work.model.process.ProjectProcessRepository; import cn.palmte.work.model.process.SaleContract; import cn.palmte.work.model.process.SealTypeArray; @@ -170,6 +171,8 @@ public class ProcessController { @GetMapping("/detail/{id}") public String detail(@PathVariable int id, Model model) { + model.addAttribute("processId", id); + ProjectProcess process = repository.findOne(id); model.addAttribute("process", process); @@ -320,48 +323,41 @@ public class ProcessController { */ @ResponseBody @GetMapping("/{id}") - public ProjectReturnValue get(@PathVariable int id) { + public ProjectProcessDetail get(@PathVariable int id) { + ProjectProcessDetail detail = new ProjectProcessDetail(); + detail.setProcessId(id); + ProjectProcess process = processService.getById(id); + detail.setProcess(process); + Project project = projectRepository.findById(process.getProjectId()); + detail.setProject(project); BigDecimal repaidAmount = getRepaidAmount(id); - Object contract; + detail.setRepaidAmount(repaidAmount); + Object contract = null; + List supplierMaterials = Collections.emptyList(); List procurementDetails = Collections.emptyList(); List incomeDetails = Collections.emptyList(); - switch (process.getProcessType()) { - case sale_contract: { - contract = processService.findSaleContract(id); - incomeDetails = projectBudgetService.getBudgetIncomeDetail(project); - break; - } - case procurement_contract: { - contract = processService.findProcurementContract(id); - supplierMaterials = processService.getSupplierMaterials(id); - procurementDetails = processService.getProcurementDetails(project.getId(), id); - break; - } - default: - throw new UnsupportedOperationException("还不支持"); + if (process.getProcessType() == ProcessType.sale_contract) { + contract = processService.findSaleContract(id); + incomeDetails = projectBudgetService.getBudgetIncomeDetail(project); + } + else if (process.getProcessType() == ProcessType.procurement_contract) { + contract = processService.findProcurementContract(id); + supplierMaterials = processService.getSupplierMaterials(id); + procurementDetails = processService.getProcurementDetails(project.getId(), id); } - return ProjectReturnValue.builder() - .process(process) - .contract(contract) - .isPrepaid(isPrepaid(project)) - .projectId(project.getId()) - .incomeDetails(incomeDetails) - .projectName(project.getName()) - .repaidAmount(repaidAmount + "元") - .budgetGrossMargin(project.getGrossProfitMargin()) - .projectNo(project.getProjectNo()) - .supplierMaterials(supplierMaterials) - .procurementDetails(procurementDetails) - .contractAmount(project.getContractAmount()) - .applyPersonName(process.getApplyPersonName()) - .terminalCustomer(project.getTerminalCustomer()) - .projectType(Enumerable.of(ProjectType.class, project.getType()).getDescription()) - .cooperationType(Enumerable.of(CooperationType.class, project.getCooperateType()).getDescription()) - .build(); + detail.setContract(contract); + detail.setIncomeDetails(incomeDetails); + detail.setSupplierMaterials(supplierMaterials); + detail.setProcurementDetails(procurementDetails); + detail.setProjectType(Enumerable.of(ProjectType.class, project.getType())); + detail.setCooperationType(Enumerable.of(CooperationType.class, project.getCooperateType())); + List attachments = JSONArray.parseArray(process.getAttachmentUri(), ProcessAttachment.class); + detail.setAttachments(attachments); + return detail; } // 合同流程 @@ -441,13 +437,7 @@ public class ProcessController { purchaseAmount.setAmountLeft(amountLeft); } - // 复制 - if (purchaseAmount.getId() != null) { - entityManager.merge(purchaseAmount); - } - else { - entityManager.persist(purchaseAmount); - } + entityManager.persist(purchaseAmount); Integer amountId = purchaseAmount.getId(); // ID 自动生成或者使用之前已经有的 // 保存成本对应的 明细 diff --git a/src/main/java/cn/palmte/work/model/process/ProjectProcessDetail.java b/src/main/java/cn/palmte/work/model/process/ProjectProcessDetail.java new file mode 100644 index 0000000..f85c53e --- /dev/null +++ b/src/main/java/cn/palmte/work/model/process/ProjectProcessDetail.java @@ -0,0 +1,38 @@ +package cn.palmte.work.model.process; + +import java.math.BigDecimal; +import java.util.List; + +import cn.palmte.work.model.Project; +import cn.palmte.work.model.ProjectBudgetIncomeDetail; +import cn.palmte.work.model.enums.CooperationType; +import cn.palmte.work.model.enums.ProjectType; +import lombok.Data; + +/** + * @author Harry Yang + * @since 2.0 2022/12/30 00:11 + */ +@Data +public class ProjectProcessDetail { + + private Integer processId; + + private Project project; + private ProjectProcess process; + private ProjectType projectType; + private CooperationType cooperationType; + + private List attachments; + + private String isPrepaid; + private BigDecimal repaidAmount; + + private Object contract; + + public List incomeDetails; + + public List supplierMaterials; + public List procurementDetails; + +} diff --git a/src/main/resources/sql/2.0.sql b/src/main/resources/sql/2.0.sql index df76b96..ca73503 100644 --- a/src/main/resources/sql/2.0.sql +++ b/src/main/resources/sql/2.0.sql @@ -83,6 +83,9 @@ create table procurement_contract_budget_purchase_amount UNIQUE key (process_id, budget_cost_id) ) comment '采购合同流程预算采购明细的数量记录'; +alter table procurement_contract_budget_purchase_amount + add amount decimal(11, 2) comment '总共要采购数量' after id; + create table procurement_contract_budget_purchase_detail ( id int auto_increment primary key comment 'ID', diff --git a/src/main/resources/templates/admin/business/process-detail.ftl b/src/main/resources/templates/admin/business/process-detail.ftl index 82d0359..bc6eb40 100644 --- a/src/main/resources/templates/admin/business/process-detail.ftl +++ b/src/main/resources/templates/admin/business/process-detail.ftl @@ -27,9 +27,14 @@ .el-tag--small { margin-right: 5px; } + + [v-cloak] { + display: none; + } + -
+
业务应用 / @@ -40,23 +45,23 @@
- ${process.projectNo} - ${process.projectTitle} - ${process.applyDate} + {{process.projectNo}} + {{process.projectTitle}} + {{process.applyDate}} ${projectType} ${cooperationType} - ${process.applyDept} - ${process.applyPersonName} - ${process.applyDeptLeaderName} - ${contract.applyPersonPhone} + {{process.applyDept}} + {{process.applyPersonName}} + {{process.applyDeptLeaderName}} + {{contract?.applyPersonPhone}} - ${process.contractNo} - ${process.contractName} - ${project.contractAmount} + {{process.contractNo}} + {{process.contractName}} + {{project.contractAmount}} - ${contract.clientName} - ${project.terminalCustomer} + {{contract.clientName}} + {{project.terminalCustomer}} <#list process.sealTypes.list as item> @@ -64,155 +69,112 @@ - ${process.taxRate}% - ${isPrepaid} + {{process.taxRate}}% + {{isPrepaid}} ${repaidAmount}元 - ${project.grossProfitMargin} + {{project.grossProfitMargin}} - ${contract.paymentTerms} - ${process.remark} + {{contract.paymentTerms}} + {{process.remark}} - <#list attachments as attachment> - - - ${attachment.name} - - - + + + {{attachment.name}} + + - <#-- - + <#-- 项目预算收入明细表 --> +
+ -
+ + + + + + + + + + + + + + - - ${process.projectNo} - + - - - ${process.projectTitle} - - +
- - ${process.applyDate} - + <#-- 供应商比选材料 --> - - ${projectType} - +
+ + + - - ${cooperationType} - + + + + + + + + + -
+ -
+
- - ${process.applyDept} - + <#-- 采购详情 --> +
+ - - ${process.applyPersonName} - + + + + + - - ${process.applyDeptLeaderName} - + + + + + + + + + + + + + - - ${contract.applyPersonPhone} - + + + + + + + -
+ -
+
- - ${process.contractNo} - - - - ${process.contractName} - - - - ${project.contractAmount} - - -
- -
- - ${contract.clientName} - - - - ${project.terminalCustomer} - -
- -
- - <#list process.sealTypes.sealTypes as item> - ${item.description} - - -
- -
- - - ${process.taxRate}% - - - - ${isPrepaid} - - - - ${repaidAmount}元 - - - - ${project.grossProfitMargin} - - -
- -
- -
${contract.paymentTerms}
-
-
- -
- -
${process.remark}
-
-
- -
- - <#list attachments as attachment> - - ${attachment.name} - - - -
- -
---> - 返回上一级 + 返回上一级
@@ -245,19 +207,79 @@ } const data = () => { - return {} + return { + process: {}, + project: {}, + supplierMaterials: [] + } } const methods = { backLastPage() { window.history.back(); - } + }, + loadProject(id) { + const loading = this.$loading({ + lock: true, + text: '正在加载项目', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + + fetch("${base}/process/" + id) + .then(res => res.json()) + .then(data => { + const { + attachments, processId, isPrepaid, repaidAmount, + incomeDetails, process, projectType, cooperationType, + contract, supplierMaterials, procurementDetails, project + } = data + // 转换数据 + // @formatter:off + const computeType = (type) => { + switch (type) { + case 1: return '设备' + case 2: return '工程' + case 3: return '服务' + default: return '未知' + } + } + // @formatter:on + + this.incomeDetails = incomeDetails.map(detail => ({ + ...detail, type: computeType(detail.type) + })) + + this.process = process + this.project = project + this.isPrepaid = isPrepaid + this.repaidAmount = repaidAmount + this.contract = contract + this.processId = processId + this.projectType = projectType + this.cooperationType = cooperationType + this.supplierMaterials = supplierMaterials + this.procurementDetails = procurementDetails + + this.attachments = attachments + }) + .catch(err => { + this.$message.error("项目加载失败"); + }) + .finally(() => loading.close()) + }, + } new Vue({ el: '#app', data, methods, + + mounted() { + const processId = ${processId} + this.loadProject(processId) + }, })