diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractOrderController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractOrderController.java index fc708888..9ec164c5 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractOrderController.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractOrderController.java @@ -100,14 +100,14 @@ public class ErpContractOrderController extends BaseController { } /** - * 获取合同订单采购匹配信息(合同物料 vs 备件已采) + * 获取合同订单采购物料清单(按合同物料行展示,已采数量统计备件类采购) * - * @param projectId 与 erp_project_purchase.project_id 一致的项目主键(一般为实施项目),用于关联 erp_project_contracts 及汇总本项目采购 + * @param contractId 合同ID */ - @GetMapping("/purchaseMaterialList/{projectId}") - public R> getPurchaseMaterialList(@NotNull(message = "主键不能为空") - @PathVariable("projectId") Long projectId) { - return R.ok(erpContractOrderService.queryPurchaseMaterialList(projectId)); + @GetMapping("/purchaseMaterialList/{contractId}") + public R> getPurchaseMaterialList(@NotNull(message = "合同ID不能为空") + @PathVariable("contractId") Long contractId) { + return R.ok(erpContractOrderService.queryPurchaseMaterialList(contractId)); } /** diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractMaterialMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractMaterialMapper.java index a176daa3..eb13265b 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractMaterialMapper.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractMaterialMapper.java @@ -36,11 +36,11 @@ public interface ErpContractMaterialMapper extends BaseMapperPlus selectCustomErpContractMaterialVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); /** - * 根据合同订单ID查询采购匹配物料列表 + * 按合同物料行查询采购匹配列表 * - * @param projectId 合同订单ID + * @param contractId 合同ID * @return 采购匹配物料列表 */ - List selectPurchaseMatchListByProjectId(@Param("projectId") Long projectId); + List selectPurchaseMatchListByContractId(@Param("contractId") Long contractId); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractOrderService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractOrderService.java index a83c37cf..35fd50be 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractOrderService.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractOrderService.java @@ -53,10 +53,10 @@ public interface IErpContractOrderService { /** * 查询合同订单采购匹配信息(合同物料 vs 备件已采) * - * @param projectId 与 erp_project_purchase.project_id 一致的项目主键(一般为实施项目) - * @return 采购匹配信息 + * @param contractId 合同ID + * @return 按合同物料行展示的采购匹配信息 */ - List queryPurchaseMaterialList(Long projectId); + List queryPurchaseMaterialList(Long contractId); /** * 暂存合同订单(项目信息) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java index 81506890..a23eb66c 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java @@ -252,11 +252,11 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { } @Override - public List queryPurchaseMaterialList(Long projectId) { - if (projectId == null) { + public List queryPurchaseMaterialList(Long contractId) { + if (contractId == null) { return Collections.emptyList(); } - return contractMaterialMapper.selectPurchaseMatchListByProjectId(projectId); + return contractMaterialMapper.selectPurchaseMatchListByContractId(contractId); } /** @@ -896,15 +896,15 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { * 按采购匹配清单与在途采购单计算采购状态。 */ private String resolvePurchaseStatus(ErpProjectInfo contractOrder) { - Long bizProjectId = resolvePurchaseBizProjectId(contractOrder); - if (bizProjectId == null) { + Long contractId = contractOrder.getContractId(); + if (contractId == null) { return OrderPurchaseStatusConstant.NOT_PURCHASED; } - Long contractId = contractOrder.getContractId(); - if (hasPurchasingInProgress(bizProjectId, contractId)) { + Long bizProjectId = resolvePurchaseBizProjectId(contractOrder); + if (bizProjectId != null && hasPurchasingInProgress(bizProjectId, contractId)) { return OrderPurchaseStatusConstant.PURCHASING; } - List materials = queryPurchaseMaterialList(bizProjectId); + List materials = queryPurchaseMaterialList(contractId); if (CollUtil.isEmpty(materials)) { return OrderPurchaseStatusConstant.NOT_PURCHASED; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractMaterialMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractMaterialMapper.xml index aea70e49..4ff436bb 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractMaterialMapper.xml +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractMaterialMapper.xml @@ -5,8 +5,6 @@ - - - select cm.contract_material_id, cm.contract_id, m.material_code, @@ -57,10 +54,10 @@ cm.specification_description, u.unit_name, cm.amount as contract_amount, - (coalesce(pm_spare.purchased_amount, 0) + coalesce(pm_budget.purchased_amount, 0)) as purchased_amount, + coalesce(pm.purchased_amount, 0) as purchased_amount, case - when (coalesce(pm_spare.purchased_amount, 0) + coalesce(pm_budget.purchased_amount, 0)) >= cm.amount then 0 - else cm.amount - (coalesce(pm_spare.purchased_amount, 0) + coalesce(pm_budget.purchased_amount, 0)) + when coalesce(pm.purchased_amount, 0) >= cm.amount then 0 + else cm.amount - coalesce(pm.purchased_amount, 0) end as unpurchased_amount from erp_contract_material cm left join base_material_info m on m.material_id = cm.material_id @@ -75,53 +72,11 @@ and pp.spare_flag = '1' where ppm.del_flag = '0' and ppm.spare_flag = '1' - group by ppm.relation_details_id, pp.relation_id) pm_spare - on pm_spare.relation_details_id = cm.contract_material_id - and pm_spare.relation_id = cm.contract_id - left join (select cm_line.contract_material_id, - sum(coalesce(ppm.purchase_amount, 0)) as purchased_amount - from erp_contract_material cm_line - inner join erp_budget_material_cost bmc on bmc.project_id = #{projectId} - and bmc.del_flag = '0' - and ( - (cm_line.material_id is not null and bmc.material_id = cm_line.material_id) - or (cm_line.material_id is null and cm_line.relation_material_id is not null - and bmc.relation_material_id = cm_line.relation_material_id) - ) - inner join erp_project_purchase_material ppm on ppm.relation_details_id = bmc.material_cost_id - and ppm.del_flag = '0' - and ppm.spare_flag = '0' - inner join erp_project_purchase pp on pp.project_purchase_id = ppm.project_purchase_id - and pp.del_flag = '0' - and pp.spare_flag = '0' - and pp.project_id = #{projectId} - and pp.relation_id = bmc.budget_id - where cm_line.del_flag = '0' - and ( - exists (select 1 from erp_project_contracts pc2 - where pc2.project_id = #{projectId} - and pc2.contract_id = cm_line.contract_id - and pc2.del_flag = '0') - or exists (select 1 from erp_project_info pi2 - where pi2.project_id = #{projectId} - and pi2.del_flag = '0' - and pi2.contract_id is not null - and pi2.contract_id = cm_line.contract_id) - ) - group by cm_line.contract_material_id) pm_budget - on pm_budget.contract_material_id = cm.contract_material_id + group by ppm.relation_details_id, pp.relation_id) pm + on pm.relation_details_id = cm.contract_material_id + and pm.relation_id = cm.contract_id where cm.del_flag = '0' - and ( - exists (select 1 from erp_project_contracts pc - where pc.project_id = #{projectId} - and pc.contract_id = cm.contract_id - and pc.del_flag = '0') - or exists (select 1 from erp_project_info pi - where pi.project_id = #{projectId} - and pi.del_flag = '0' - and pi.contract_id is not null - and pi.contract_id = cm.contract_id) - ) + and cm.contract_id = #{contractId} order by cm.contract_material_id asc