diff --git a/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmount.java b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmount.java index d61f826..4371b8a 100644 --- a/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmount.java +++ b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmount.java @@ -3,6 +3,7 @@ package cn.palmte.work.model.process; import org.hibernate.annotations.GenericGenerator; import java.io.Serializable; +import java.math.BigDecimal; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -31,13 +32,13 @@ public class BudgetPurchaseAmount implements Serializable { private Integer id; // 已采购数量 - private Integer amountAlready; + private BigDecimal amountAlready; // '本次采购数量' - private Integer amountCurrent; + private BigDecimal amountCurrent; // 未采购数量 - private Integer amountLeft; + private BigDecimal amountLeft; // 流程ID private Integer processId; diff --git a/src/main/java/cn/palmte/work/model/process/form/BudgetPurchaseAmountForm.java b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmountModel.java similarity index 76% rename from src/main/java/cn/palmte/work/model/process/form/BudgetPurchaseAmountForm.java rename to src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmountModel.java index 3529c9a..3a80b31 100644 --- a/src/main/java/cn/palmte/work/model/process/form/BudgetPurchaseAmountForm.java +++ b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseAmountModel.java @@ -1,4 +1,4 @@ -package cn.palmte.work.model.process.form; +package cn.palmte.work.model.process; import java.util.List; @@ -11,7 +11,7 @@ import lombok.Data; * @since 2.0 2022/12/28 15:00 */ @Data -public class BudgetPurchaseAmountForm { +public class BudgetPurchaseAmountModel { // 已采购数量 private Integer amountAlready; @@ -25,5 +25,5 @@ public class BudgetPurchaseAmountForm { // 项目的成本明细ID private Integer budgetCostId; - private List details; + private List details; } diff --git a/src/main/java/cn/palmte/work/model/process/form/BudgetPurchaseDetailForm.java b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseDetailModel.java similarity index 88% rename from src/main/java/cn/palmte/work/model/process/form/BudgetPurchaseDetailForm.java rename to src/main/java/cn/palmte/work/model/process/BudgetPurchaseDetailModel.java index d22856a..4acd604 100644 --- a/src/main/java/cn/palmte/work/model/process/form/BudgetPurchaseDetailForm.java +++ b/src/main/java/cn/palmte/work/model/process/BudgetPurchaseDetailModel.java @@ -1,4 +1,4 @@ -package cn.palmte.work.model.process.form; +package cn.palmte.work.model.process; import java.math.BigDecimal; @@ -11,7 +11,7 @@ import lombok.Data; * @since 2.0 2022/12/28 15:01 */ @Data -public class BudgetPurchaseDetailForm { +public class BudgetPurchaseDetailModel { // 供应商名称 private String supplierName; diff --git a/src/main/java/cn/palmte/work/model/process/ProcurementDetail.java b/src/main/java/cn/palmte/work/model/process/ProcurementDetail.java new file mode 100644 index 0000000..e03c4a7 --- /dev/null +++ b/src/main/java/cn/palmte/work/model/process/ProcurementDetail.java @@ -0,0 +1,53 @@ +package cn.palmte.work.model.process; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import lombok.Data; + +/** + * 预算采购明细 + * + * @author Harry Yang + * @since 2.0 2022/12/28 16:01 + */ +@Data +public class ProcurementDetail { + + private int type; + private String category; + + private String name; + + private String unit; + + private BigDecimal price; + + private BigDecimal taxRate; + + private String contractParty; + + private int isUnderwritten; + + private BigDecimal underwrittenAmount; + + private Date payTime; + + private BigDecimal totalTax; + private BigDecimal totalTaxInclude; + private BigDecimal totalTaxExclude; + + private BigDecimal payAmount; + private String payWay; + private String remark; + + // 要采购的总量 + private BigDecimal amount; + + // 已采购数量 + private BigDecimal amountAlready = BigDecimal.ZERO; + + private List purchaseDetails; + +} diff --git a/src/main/java/cn/palmte/work/model/process/form/ProcessCreationForm.java b/src/main/java/cn/palmte/work/model/process/form/ProcessCreationForm.java index e820241..1cd3a5e 100644 --- a/src/main/java/cn/palmte/work/model/process/form/ProcessCreationForm.java +++ b/src/main/java/cn/palmte/work/model/process/form/ProcessCreationForm.java @@ -5,6 +5,7 @@ import java.util.List; import cn.palmte.work.model.enums.ProcessStatus; import cn.palmte.work.model.enums.ProcessType; 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; @@ -88,6 +89,6 @@ public class ProcessCreationForm { private List supplierMaterials; // 采购详情 - private List purchaseAmount; + private List purchaseAmount; } 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 c7317d7..893ca33 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 @@ -6,6 +6,7 @@ import javax.validation.constraints.NotNull; 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 lombok.Data; @@ -57,5 +58,5 @@ public class ProcessUpdateForm { private List incomeDetails; // 采购详情 - private List purchaseAmount; + private List purchaseAmount; } diff --git a/src/main/java/cn/palmte/work/service/ProjectProcessService.java b/src/main/java/cn/palmte/work/service/ProjectProcessService.java index 6621b18..7f159c5 100644 --- a/src/main/java/cn/palmte/work/service/ProjectProcessService.java +++ b/src/main/java/cn/palmte/work/service/ProjectProcessService.java @@ -2,6 +2,7 @@ package cn.palmte.work.service; import cn.palmte.work.config.activiti.ActConstant; +import org.springframework.beans.BeanUtils; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @@ -18,6 +19,7 @@ import java.util.Objects; import java.util.stream.Collectors; import javax.persistence.EntityManager; +import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import cn.palmte.work.config.activiti.ActProjectTypeEnum; @@ -25,10 +27,17 @@ import cn.palmte.work.model.Admin; import cn.palmte.work.model.AdminRepository; import cn.palmte.work.model.Dept; import cn.palmte.work.model.DeptRepository; +import cn.palmte.work.model.ProcurementType; +import cn.palmte.work.model.ProcurementTypeRepository; import cn.palmte.work.model.Project; +import cn.palmte.work.model.ProjectBudgetCostDetail; import cn.palmte.work.model.ProjectRepository; import cn.palmte.work.model.enums.ProcessStatus; +import cn.palmte.work.model.process.BudgetPurchaseAmount; +import cn.palmte.work.model.process.BudgetPurchaseDetail; +import cn.palmte.work.model.process.BudgetPurchaseDetailModel; import cn.palmte.work.model.process.ProcurementContract; +import cn.palmte.work.model.process.ProcurementDetail; import cn.palmte.work.model.process.ProjectProcess; import cn.palmte.work.model.process.SaleContract; import cn.palmte.work.model.process.SupplierMaterial; @@ -52,6 +61,7 @@ public class ProjectProcessService { private final DeptRepository deptRepository; private final AdminRepository userRepository; + private final ProcurementTypeRepository procurementTypeRepository; @Data static class DeptReturnValue { @@ -190,6 +200,74 @@ public class ProjectProcessService { return query.getResultList(); } + /** + * 获取 采购清单 + * + * @param projectId 项目ID + */ + public List getProcurementDetails(int projectId) { + List ret = new ArrayList<>(); + + List costDetails = getCostDetails(projectId); + for (ProjectBudgetCostDetail costDetail : costDetails) { + ProcurementDetail detail = new ProcurementDetail(); + BeanUtils.copyProperties(costDetail, detail); + BudgetPurchaseAmount purchaseAmount = getPurchaseAmount(costDetail); + if (purchaseAmount != null) { + detail.setAmountAlready(purchaseAmount.getAmountAlready()); + Integer amountId = purchaseAmount.getId(); + List purchaseDetails = getBudgetPurchaseDetails(amountId); + detail.setPurchaseDetails(purchaseDetails); + } + // TODO 查询太频繁 + detail.setCategory(getCategory(costDetail)); + + ret.add(detail); + } + + return ret; + } + + private String getCategory(ProjectBudgetCostDetail costDetail) { + int category = costDetail.getCategory(); + TypedQuery query = entityManager.createQuery( + "from ProcurementType where id=:category and isDeleted=0 and enabled=1", ProcurementType.class); + query.setParameter("category", category); + try { + ProcurementType procurementType = query.getSingleResult(); + return procurementType.getName(); + } + catch (NoResultException e) { + return String.valueOf(category); + } + } + + private List getBudgetPurchaseDetails(int amountId) { + TypedQuery query = entityManager.createQuery( + "from BudgetPurchaseDetail where amountId=:amountId", BudgetPurchaseDetail.class); + query.setParameter("amountId", amountId); + return query.getResultList(); + } + + private List getCostDetails(int projectId) { + TypedQuery query = entityManager.createQuery( + "from ProjectBudgetCostDetail where projectId=:projectId", ProjectBudgetCostDetail.class); + query.setParameter("projectId", projectId); + return query.getResultList(); + } + + private BudgetPurchaseAmount getPurchaseAmount(ProjectBudgetCostDetail costDetail) { + TypedQuery amountQuery = entityManager.createQuery( + "from BudgetPurchaseAmount where budgetCostId=:budgetCostId", BudgetPurchaseAmount.class); + amountQuery.setParameter("budgetCostId", costDetail.getId()); + try { + return amountQuery.getSingleResult(); + } + catch (NoResultException e) { + return null; + } + } + public ProjectProcess getById(int id) { return entityManager.find(ProjectProcess.class, id); } diff --git a/src/main/resources/sql/2.0.sql b/src/main/resources/sql/2.0.sql index 12a1ee6..ee10fb5 100644 --- a/src/main/resources/sql/2.0.sql +++ b/src/main/resources/sql/2.0.sql @@ -72,9 +72,9 @@ create table procurement_contract_supplier_material create table procurement_contract_budget_purchase_amount ( id int auto_increment primary key comment 'ID', - amount_current int comment '本次采购数量', - amount_already int comment '已采购数量', - amount_left int comment '未采购数量', + amount_current decimal(11, 2) comment '本次采购数量', + amount_already decimal(11, 2) comment '已采购数量', + amount_left decimal(11, 2) comment '未采购数量', process_id int comment '流程ID', contract_id int comment '采购合同ID', diff --git a/src/main/resources/templates/admin/business/process-new.ftl b/src/main/resources/templates/admin/business/process-new.ftl index 02ef695..fe7f87c 100644 --- a/src/main/resources/templates/admin/business/process-new.ftl +++ b/src/main/resources/templates/admin/business/process-new.ftl @@ -91,7 +91,7 @@ <#--显示项目名称,但是值是 projectNo 定义显示的列表样式--> @@ -114,14 +114,15 @@ - + - +