From 24188870cacc3950ed12c4d96b3b3b64755f4f27 Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 30 Jan 2026 16:42:15 +0800 Subject: [PATCH] =?UTF-8?q?1.0.64=20=E5=90=88=E5=90=8C=E5=85=B3=E8=81=94?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=90=88=E5=90=8C=E4=BB=98=E6=AC=BE=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oa/erp/domain/bo/ErpContractInfoBo.java | 6 ++ .../oa/erp/domain/vo/ErpContractInfoVo.java | 6 ++ .../domain/vo/ErpContractPaymentMethodVo.java | 6 ++ .../impl/ErpContractInfoServiceImpl.java | 76 +++++++++++++++++-- .../oa/erp/ErpContractPaymentMethodMapper.xml | 26 ++++++- 5 files changed, 112 insertions(+), 8 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java index 9db0b6d1..7729b2fd 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java @@ -15,6 +15,7 @@ import java.util.*; import com.fasterxml.jackson.annotation.JsonFormat; import org.dromara.oa.erp.domain.ErpContractMaterial; +import org.dromara.oa.erp.domain.ErpContractPaymentMethod; import org.dromara.workflow.api.domain.RemoteFlowInstanceBizExt; /** @@ -199,6 +200,11 @@ public class ErpContractInfoBo extends BaseEntity { */ private List contractMaterialList; + /** + * 合同付款方式List + */ + private List contractPaymentMethodList; + /** * 甲方公司名称 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractInfoVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractInfoVo.java index fe1d0e1f..5ece335b 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractInfoVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractInfoVo.java @@ -11,6 +11,7 @@ import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.oa.erp.domain.ErpContractMaterial; +import org.dromara.oa.erp.domain.vo.ErpContractPaymentMethodVo; import java.io.Serial; import java.io.Serializable; @@ -242,6 +243,11 @@ public class ErpContractInfoVo implements Serializable { */ private List contractMaterialList; + /** + * 合同付款方式List + */ + private List contractPaymentMethodList; + /** * 甲方公司名称 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractPaymentMethodVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractPaymentMethodVo.java index 96e8101a..1d5d1dea 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractPaymentMethodVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractPaymentMethodVo.java @@ -83,6 +83,12 @@ public class ErpContractPaymentMethodVo implements Serializable { @ExcelProperty(value = "付款条款") private String paymentDescription; + /** + * 付款节点 + */ + @ExcelProperty(value = "付款节点") + private String paymentMethod; + /** * 备注 */ 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 973b1ea0..9aa02a19 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 @@ -20,8 +20,11 @@ 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.ErpContractPaymentMethod; import org.dromara.oa.erp.domain.vo.ErpContractMaterialVo; +import org.dromara.oa.erp.domain.vo.ErpContractPaymentMethodVo; import org.dromara.oa.erp.mapper.ErpContractMaterialMapper; +import org.dromara.oa.erp.mapper.ErpContractPaymentMethodMapper; import org.dromara.oa.base.domain.bo.BaseRelationMaterialBo; import org.dromara.oa.base.service.IBaseRelationMaterialService; import org.dromara.workflow.api.RemoteWorkflowService; @@ -54,6 +57,8 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { private final ErpContractMaterialMapper contractMaterialMapper; + private final ErpContractPaymentMethodMapper contractPaymentMethodMapper; + private final IBaseRelationMaterialService baseRelationMaterialService; @DubboReference(timeout = 30000) @@ -75,6 +80,13 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { List contractMaterialList = contractMaterialMapper .selectCustomErpContractMaterialVoList(lqw); contractInfoVo.setContractMaterialList(contractMaterialList); + // 查询合同付款方式列表 + MPJLambdaWrapper paymentLqw = JoinWrappers.lambda(ErpContractPaymentMethod.class) + .selectAll(ErpContractPaymentMethod.class) + .eq(contractId != null, ErpContractPaymentMethod::getContractId, contractId) + .eq(ErpContractPaymentMethod::getDelFlag, "0"); + List contractPaymentMethodList = contractPaymentMethodMapper.selectCustomErpContractPaymentMethodVoList(paymentLqw); + contractInfoVo.setContractPaymentMethodList(contractPaymentMethodList); return contractInfoVo; } @@ -169,6 +181,14 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { contractMaterialMapper.insert(erpContractMaterial); } } + // 保存合同付款方式 + List contractPaymentMethodList = bo.getContractPaymentMethodList(); + if (flag && contractPaymentMethodList != null && !contractPaymentMethodList.isEmpty()) { + for (ErpContractPaymentMethod pm : contractPaymentMethodList) { + pm.setContractId(add.getContractId()); + contractPaymentMethodMapper.insert(pm); + } + } return MapstructUtils.convert(add, ErpContractInfoVo.class); } @@ -183,15 +203,24 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { public Boolean updateByBo(ErpContractInfoBo bo) { ErpContractInfo update = MapstructUtils.convert(bo, ErpContractInfo.class); validEntityBeforeSave(update); + updateContractMaterialList(bo); + updateContractPaymentMethodList(bo); + return baseMapper.updateById(update) > 0; + } + + /** + * 更新合同物料列表 + * + * @param bo 合同信息 + */ + private void updateContractMaterialList(ErpContractInfoBo bo) { List contractMaterialList = bo.getContractMaterialList(); MPJLambdaWrapper lqwRecord = JoinWrappers.lambda(ErpContractMaterial.class); lqwRecord.eq(ErpContractMaterial::getContractId, bo.getContractId()); List contractMaterialOldList = contractMaterialMapper.selectList(lqwRecord); if (contractMaterialList != null && !contractMaterialList.isEmpty()) { - // 获取合同客户ID(优先使用甲方,如果为空则使用乙方) - Long customerId = update.getOneCustomerId(); + Long customerId = bo.getOneCustomerId(); for (ErpContractMaterial contractMaterial : contractMaterialList) { - // 处理关联物料信息 processRelationMaterial(contractMaterial, customerId); contractMaterialMapper.insertOrUpdate(contractMaterial); } @@ -204,12 +233,49 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { for (ErpContractMaterial filterContractMaterialId : filterContractMaterialIds) { contractMaterialMapper.deleteById(filterContractMaterialId.getContractMaterialId()); } - } else if (contractMaterialList != null && contractMaterialList.isEmpty()) { + } else if (contractMaterialList != null && !contractMaterialOldList.isEmpty()) { for (ErpContractMaterial contractMaterial : contractMaterialOldList) { contractMaterialMapper.deleteById(contractMaterial.getContractMaterialId()); } } - return baseMapper.updateById(update) > 0; + } + + /** + * 更新合同付款方式列表(增量:有则插入/更新,无则删除) + * + * @param bo 合同信息 + */ + private void updateContractPaymentMethodList(ErpContractInfoBo bo) { + List contractPaymentMethodList = bo.getContractPaymentMethodList(); + MPJLambdaWrapper paymentLqw = JoinWrappers.lambda(ErpContractPaymentMethod.class) + .selectAll(ErpContractPaymentMethod.class) + .eq(bo.getContractId() != null, ErpContractPaymentMethod::getContractId, bo.getContractId()) + .eq(ErpContractPaymentMethod::getDelFlag, "0"); + List oldPaymentList = contractPaymentMethodMapper.selectCustomErpContractPaymentMethodVoList(paymentLqw); + if (contractPaymentMethodList != null && !contractPaymentMethodList.isEmpty()) { + Set newPaymentMethodIds = new HashSet<>(); + for (ErpContractPaymentMethod pm : contractPaymentMethodList) { + pm.setContractId(bo.getContractId()); + if (pm.getPaymentMethodId() == null) { + contractPaymentMethodMapper.insert(pm); + } else { + contractPaymentMethodMapper.updateById(pm); + newPaymentMethodIds.add(pm.getPaymentMethodId()); + } + } + List toDelete = oldPaymentList.stream() + .map(ErpContractPaymentMethodVo::getPaymentMethodId) + .filter(id -> !newPaymentMethodIds.contains(id)) + .toList(); + if (!toDelete.isEmpty()) { + contractPaymentMethodMapper.deleteByIds(toDelete); + } + } else if (contractPaymentMethodList != null && !oldPaymentList.isEmpty()) { + List toDelete = oldPaymentList.stream() + .map(ErpContractPaymentMethodVo::getPaymentMethodId) + .toList(); + contractPaymentMethodMapper.deleteByIds(toDelete); + } } /** diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractPaymentMethodMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractPaymentMethodMapper.xml index 3abf3500..3627bc7d 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractPaymentMethodMapper.xml +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractPaymentMethodMapper.xml @@ -1,13 +1,33 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd">