1.1.37 获取合同订单采购匹配信息(合同物料 vs 备件已采)

dev
yinq 2 months ago
parent 836cc85277
commit 18662f1e9a

@ -99,9 +99,9 @@ public class ErpContractOrderController extends BaseController {
}
/**
*
* vs
*
* @param projectId
* @param projectId erp_project_purchase.project_id erp_project_contracts
*/
@GetMapping("/purchaseMaterialList/{projectId}")
public R<List<ErpContractOrderPurchaseMaterialVo>> getPurchaseMaterialList(@NotNull(message = "主键不能为空")

@ -50,9 +50,9 @@ public interface IErpContractOrderService {
List<ErpProjectInfoVo> queryList(ErpProjectInfoBo bo);
/**
*
* vs
*
* @param projectId ID
* @param projectId erp_project_purchase.project_id
* @return
*/
List<ErpContractOrderPurchaseMaterialVo> queryPurchaseMaterialList(Long projectId);

@ -358,13 +358,17 @@ public class ErpFinInvoiceInfoServiceImpl extends AbstractWorkflowService<ErpFin
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateInvoiceAttachByBo(ErpFinInvoiceInfoBo bo) {
ErpFinInvoiceInfo update = MapstructUtils.convert(bo, ErpFinInvoiceInfo.class);
validEntityBeforeSave(update);
if (bo.getInvoiceId() == null) {
throw new ServiceException("开票ID不能为空");
}
// 接口仅传 invoiceId、ossIdMapStruct 转换后 projectId 等为空,不可走整单 validEntityBeforeSave会误报「请选择项目」
ErpFinInvoiceInfo existing = baseMapper.selectById(bo.getInvoiceId());
if (existing == null) {
throw new ServiceException("开票信息不存在");
}
UpdateWrapper<ErpFinInvoiceInfo> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("oss_id", bo.getOssId())
.eq("invoice_id", bo.getInvoiceId());
Boolean flag = baseMapper.update(updateWrapper) > 0;
return flag;
return baseMapper.update(null, updateWrapper) > 0;
}
}

@ -42,6 +42,12 @@
${ew.getCustomSqlSegment}
</select>
<!--
projectId 与前端台账 getContractOrderPurchaseMaterialList(bizProjectId) 一致:实施项目 project_id。
合同物料范围erp_project_contracts 或 erp_project_info 上挂的本项目合同。
已采数量 = 备件类relation_details_id=合同物料ID与项目采购编辑页 selectContractMaterialsByProjectId 一致按合同ID 关联)
+ 非备件预算类relation_details_id=预算材料费IDpp.relation_id=bmc.budget_id预算行与本项目、采购头 project_id 均为传入 projectId再按合同行 material_id / relation_material_id 与预算行对齐)。
-->
<select id="selectPurchaseMatchListByProjectId" resultMap="ErpContractOrderPurchaseMaterialResult">
select cm.contract_material_id,
cm.contract_id,
@ -51,18 +57,17 @@
cm.specification_description,
u.unit_name,
cm.amount as contract_amount,
pm.purchased_amount as purchased_amount,
(coalesce(pm_spare.purchased_amount, 0) + coalesce(pm_budget.purchased_amount, 0)) as purchased_amount,
case
when coalesce(pm.purchased_amount, 0) &gt;= cm.amount then 0
else cm.amount - coalesce(pm.purchased_amount, 0)
when (coalesce(pm_spare.purchased_amount, 0) + coalesce(pm_budget.purchased_amount, 0)) &gt;= cm.amount then 0
else cm.amount - (coalesce(pm_spare.purchased_amount, 0) + coalesce(pm_budget.purchased_amount, 0))
end as unpurchased_amount
from erp_contract_material cm
inner join erp_project_info pi on pi.project_id = #{projectId}
and pi.del_flag = '0'
left join base_material_info m on m.material_id = cm.material_id
left join base_relation_material r on r.relation_material_id = cm.relation_material_id
left join base_unit_info u on u.unit_id = cm.unit_id
left join (select ppm.relation_details_id,
pp.relation_id,
sum(coalesce(ppm.purchase_amount, 0)) as purchased_amount
from erp_project_purchase_material ppm
inner join erp_project_purchase pp on pp.project_purchase_id = ppm.project_purchase_id
@ -70,13 +75,53 @@
and pp.spare_flag = '1'
where ppm.del_flag = '0'
and ppm.spare_flag = '1'
and pp.relation_id = (select contract_id
from erp_project_info
where project_id = #{projectId}
and del_flag = '0')
group by ppm.relation_details_id) pm on pm.relation_details_id = cm.contract_material_id
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
where cm.del_flag = '0'
and cm.contract_id = pi.contract_id
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)
)
order by cm.contract_material_id asc
</select>

@ -91,7 +91,7 @@
select t.material_cost_id as relation_details_id,
0 as spare_flag,
null as purchase_plan_flag,
case when t.material_id is not null then 1 else 0 end as material_flag,
case when t.material_id is not null then '1' else '2' end as material_flag,
t.material_id,
t.relation_material_id,
t.material_code as material_code,

Loading…
Cancel
Save