From 49f376987bce23e51db4ae8fb6b49fb7cedfc7de Mon Sep 17 00:00:00 2001 From: yinq Date: Tue, 16 Dec 2025 18:05:28 +0800 Subject: [PATCH] =?UTF-8?q?1.0.48=20=E5=90=88=E5=90=8C=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=A0=87=E5=87=86=E7=89=A9=E6=96=99=E6=97=B6?= =?UTF-8?q?=E5=85=B3=E8=81=94=E9=94=80=E5=94=AE=E7=89=A9=E6=96=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=B8=AD=E8=87=AA=E5=8A=A8=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ErpContractInfoServiceImpl.java | 112 +++++++++++++----- 1 file changed, 81 insertions(+), 31 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java index afb4ee7c..9471b1ec 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java @@ -17,9 +17,12 @@ import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; import org.dromara.common.tenant.helper.TenantHelper; +import org.dromara.oa.base.domain.vo.BaseRelationMaterialVo; import org.dromara.oa.erp.domain.ErpContractMaterial; import org.dromara.oa.erp.domain.vo.ErpContractMaterialVo; import org.dromara.oa.erp.mapper.ErpContractMaterialMapper; +import org.dromara.oa.base.domain.bo.BaseRelationMaterialBo; +import org.dromara.oa.base.service.IBaseRelationMaterialService; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.event.ProcessEvent; @@ -50,6 +53,8 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { private final ErpContractMaterialMapper contractMaterialMapper; + private final IBaseRelationMaterialService baseRelationMaterialService; + @DubboReference(timeout = 30000) private RemoteWorkflowService remoteWorkflowService; @@ -63,9 +68,9 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { public ErpContractInfoVo queryById(Long contractId) { ErpContractInfoVo contractInfoVo = baseMapper.selectVoById(contractId); MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpContractMaterial.class) - .selectAll(ErpContractMaterial.class) - .eq(contractId != null, ErpContractMaterial::getContractId, contractId) - .eq("t.del_flag", "0");; + .selectAll(ErpContractMaterial.class) + .eq(contractId != null, ErpContractMaterial::getContractId, contractId) + .eq("t.del_flag", "0"); List contractMaterialList = contractMaterialMapper.selectCustomErpContractMaterialVoList(lqw); contractInfoVo.setContractMaterialList(contractMaterialList); return contractInfoVo; @@ -100,30 +105,30 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { private MPJLambdaWrapper buildQueryWrapper(ErpContractInfoBo bo) { Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpContractInfo.class) - .selectAll(ErpContractInfo.class) - .eq(StringUtils.isNotBlank(bo.getContractFlag()), ErpContractInfo::getContractFlag, bo.getContractFlag()) - .eq(StringUtils.isNotBlank(bo.getContractCode()), ErpContractInfo::getContractCode, bo.getContractCode()) - .eq(StringUtils.isNotBlank(bo.getCustomerContractCode()), ErpContractInfo::getCustomerContractCode, bo.getCustomerContractCode()) - .like(StringUtils.isNotBlank(bo.getContractName()), ErpContractInfo::getContractName, bo.getContractName()) - .eq(StringUtils.isNotBlank(bo.getContractCategory()), ErpContractInfo::getContractCategory, bo.getContractCategory()) - .eq(StringUtils.isNotBlank(bo.getContractType()), ErpContractInfo::getContractType, bo.getContractType()) - .eq(StringUtils.isNotBlank(bo.getBusinessDirection()), ErpContractInfo::getBusinessDirection, bo.getBusinessDirection()) - .eq(bo.getContractDeptId() != null, ErpContractInfo::getContractDeptId, bo.getContractDeptId()) - .eq(bo.getContractDate() != null, ErpContractInfo::getContractDate, bo.getContractDate()) - .eq(bo.getTotalPrice() != null, ErpContractInfo::getTotalPrice, bo.getTotalPrice()) - .eq(StringUtils.isNotBlank(bo.getContractStatus()), ErpContractInfo::getContractStatus, bo.getContractStatus()) - .eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpContractInfo::getFlowStatus, bo.getFlowStatus()) - .eq(bo.getTemplateId() != null, ErpContractInfo::getTemplateId, bo.getTemplateId()) - .eq(StringUtils.isNotBlank(bo.getOssId()), ErpContractInfo::getOssId, bo.getOssId()) - .eq(StringUtils.isNotBlank(bo.getPaymentMethod()), ErpContractInfo::getPaymentMethod, bo.getPaymentMethod()) - .eq(bo.getSignatureAppendix() != null, ErpContractInfo::getSignatureAppendix, bo.getSignatureAppendix()) - .eq(bo.getTaxRate() != null, ErpContractInfo::getTaxRate, bo.getTaxRate()) - .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractInfo::getActiveFlag, bo.getActiveFlag()) - .eq(bo.getContractManagerId() != null, ErpContractInfo::getContractManagerId, bo.getContractManagerId()) - .eq(StringUtils.isNotBlank(bo.getCapitalizedAmount()), ErpContractInfo::getCapitalizedAmount, bo.getCapitalizedAmount()) - .eq(StringUtils.isNotBlank(bo.getContractTemplateFlag()), ErpContractInfo::getContractTemplateFlag, bo.getContractTemplateFlag()) - .eq("t.del_flag", "0") - .orderByDesc(ErpContractInfo::getCreateTime); + .selectAll(ErpContractInfo.class) + .eq(StringUtils.isNotBlank(bo.getContractFlag()), ErpContractInfo::getContractFlag, bo.getContractFlag()) + .eq(StringUtils.isNotBlank(bo.getContractCode()), ErpContractInfo::getContractCode, bo.getContractCode()) + .eq(StringUtils.isNotBlank(bo.getCustomerContractCode()), ErpContractInfo::getCustomerContractCode, bo.getCustomerContractCode()) + .like(StringUtils.isNotBlank(bo.getContractName()), ErpContractInfo::getContractName, bo.getContractName()) + .eq(StringUtils.isNotBlank(bo.getContractCategory()), ErpContractInfo::getContractCategory, bo.getContractCategory()) + .eq(StringUtils.isNotBlank(bo.getContractType()), ErpContractInfo::getContractType, bo.getContractType()) + .eq(StringUtils.isNotBlank(bo.getBusinessDirection()), ErpContractInfo::getBusinessDirection, bo.getBusinessDirection()) + .eq(bo.getContractDeptId() != null, ErpContractInfo::getContractDeptId, bo.getContractDeptId()) + .eq(bo.getContractDate() != null, ErpContractInfo::getContractDate, bo.getContractDate()) + .eq(bo.getTotalPrice() != null, ErpContractInfo::getTotalPrice, bo.getTotalPrice()) + .eq(StringUtils.isNotBlank(bo.getContractStatus()), ErpContractInfo::getContractStatus, bo.getContractStatus()) + .eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpContractInfo::getFlowStatus, bo.getFlowStatus()) + .eq(bo.getTemplateId() != null, ErpContractInfo::getTemplateId, bo.getTemplateId()) + .eq(StringUtils.isNotBlank(bo.getOssId()), ErpContractInfo::getOssId, bo.getOssId()) + .eq(StringUtils.isNotBlank(bo.getPaymentMethod()), ErpContractInfo::getPaymentMethod, bo.getPaymentMethod()) + .eq(bo.getSignatureAppendix() != null, ErpContractInfo::getSignatureAppendix, bo.getSignatureAppendix()) + .eq(bo.getTaxRate() != null, ErpContractInfo::getTaxRate, bo.getTaxRate()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractInfo::getActiveFlag, bo.getActiveFlag()) + .eq(bo.getContractManagerId() != null, ErpContractInfo::getContractManagerId, bo.getContractManagerId()) + .eq(StringUtils.isNotBlank(bo.getCapitalizedAmount()), ErpContractInfo::getCapitalizedAmount, bo.getCapitalizedAmount()) + .eq(StringUtils.isNotBlank(bo.getContractTemplateFlag()), ErpContractInfo::getContractTemplateFlag, bo.getContractTemplateFlag()) + .eq("t.del_flag", "0") + .orderByDesc(ErpContractInfo::getCreateTime); return lqw; } @@ -142,8 +147,12 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { boolean flag = baseMapper.insert(add) > 0; if (flag && contractMaterialList != null && !contractMaterialList.isEmpty()) { bo.setContractId(add.getContractId()); + // 获取合同客户ID(优先使用甲方,如果为空则使用乙方) + Long customerId = add.getOneCustomerId(); for (ErpContractMaterial erpContractMaterial : contractMaterialList) { erpContractMaterial.setContractId(add.getContractId()); + // 处理关联物料信息 + processRelationMaterial(erpContractMaterial, customerId); contractMaterialMapper.insert(erpContractMaterial); } } @@ -166,22 +175,63 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { lqwRecord.eq(ErpContractMaterial::getContractId, bo.getContractId()); List contractMaterialOldList = contractMaterialMapper.selectList(lqwRecord); if (contractMaterialList != null && !contractMaterialList.isEmpty()) { + // 获取合同客户ID(优先使用甲方,如果为空则使用乙方) + Long customerId = update.getOneCustomerId(); for (ErpContractMaterial contractMaterial : contractMaterialList) { + // 处理关联物料信息 + processRelationMaterial(contractMaterial, customerId); contractMaterialMapper.insertOrUpdate(contractMaterial); } Set existingContractMaterialIds = contractMaterialList.stream() - .map(ErpContractMaterial::getContractMaterialId) - .collect(Collectors.toSet()); + .map(ErpContractMaterial::getContractMaterialId) + .collect(Collectors.toSet()); List filterContractMaterialIds = contractMaterialOldList.stream() - .filter(material -> !existingContractMaterialIds.contains(material.getContractMaterialId())) - .toList(); + .filter(material -> !existingContractMaterialIds.contains(material.getContractMaterialId())) + .toList(); for (ErpContractMaterial filterContractMaterialId : filterContractMaterialIds) { contractMaterialMapper.deleteById(filterContractMaterialId.getContractMaterialId()); } + } else if (contractMaterialList != null && contractMaterialList.isEmpty()) { + for (ErpContractMaterial contractMaterial : contractMaterialOldList) { + contractMaterialMapper.deleteById(contractMaterial.getContractMaterialId()); + } } return baseMapper.updateById(update) > 0; } + /** + * 处理关联物料信息:查询是否存在,不存在则创建 + * + * @param erpContractMaterial 合同物料 + * @param customerId 客户ID + */ + private void processRelationMaterial(ErpContractMaterial erpContractMaterial, Long customerId) { + if (erpContractMaterial.getMaterialId() != null && customerId != null && erpContractMaterial.getMaterialFlag().equals("1")) { + Long relationMaterialId = erpContractMaterial.getRelationMaterialId(); + // 如果relationMaterialId为空,则查询是否存在关联物料信息 + if (relationMaterialId == null) { + BaseRelationMaterialBo queryBo = new BaseRelationMaterialBo(); + queryBo.setMaterialId(erpContractMaterial.getMaterialId()); + queryBo.setCustomerId(customerId); + queryBo.setSaleMaterialName(erpContractMaterial.getProductName()); + List existingRelationMaterials = baseRelationMaterialService.queryList(queryBo); + if (existingRelationMaterials == null || existingRelationMaterials.isEmpty()) { + // 不存在则创建关联物料信息 + BaseRelationMaterialBo relationMaterialBo = new BaseRelationMaterialBo(); + relationMaterialBo.setMaterialId(erpContractMaterial.getMaterialId()); + relationMaterialBo.setCustomerId(customerId); + relationMaterialBo.setSaleMaterialName(erpContractMaterial.getProductName()); + baseRelationMaterialService.insertByBo(relationMaterialBo); + relationMaterialId = relationMaterialBo.getRelationMaterialId(); + } else { + // 如果已存在,使用第一个的ID + relationMaterialId = existingRelationMaterials.get(0).getRelationMaterialId(); + } + erpContractMaterial.setRelationMaterialId(relationMaterialId); + } + } + } + /** * 保存前的数据校验 */