1.0.64 合同关联更新合同付款方式

dev
yinq 4 days ago
parent 8da8c3c363
commit 24188870ca

@ -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<ErpContractMaterial> contractMaterialList;
/**
* List
*/
private List<ErpContractPaymentMethod> contractPaymentMethodList;
/**
*
*/

@ -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<ErpContractMaterialVo> contractMaterialList;
/**
* List
*/
private List<ErpContractPaymentMethodVo> contractPaymentMethodList;
/**
*
*/

@ -83,6 +83,12 @@ public class ErpContractPaymentMethodVo implements Serializable {
@ExcelProperty(value = "付款条款")
private String paymentDescription;
/**
*
*/
@ExcelProperty(value = "付款节点")
private String paymentMethod;
/**
*
*/

@ -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<ErpContractMaterialVo> contractMaterialList = contractMaterialMapper
.selectCustomErpContractMaterialVoList(lqw);
contractInfoVo.setContractMaterialList(contractMaterialList);
// 查询合同付款方式列表
MPJLambdaWrapper<ErpContractPaymentMethod> paymentLqw = JoinWrappers.lambda(ErpContractPaymentMethod.class)
.selectAll(ErpContractPaymentMethod.class)
.eq(contractId != null, ErpContractPaymentMethod::getContractId, contractId)
.eq(ErpContractPaymentMethod::getDelFlag, "0");
List<ErpContractPaymentMethodVo> contractPaymentMethodList = contractPaymentMethodMapper.selectCustomErpContractPaymentMethodVoList(paymentLqw);
contractInfoVo.setContractPaymentMethodList(contractPaymentMethodList);
return contractInfoVo;
}
@ -169,6 +181,14 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
contractMaterialMapper.insert(erpContractMaterial);
}
}
// 保存合同付款方式
List<ErpContractPaymentMethod> 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<ErpContractMaterial> contractMaterialList = bo.getContractMaterialList();
MPJLambdaWrapper<ErpContractMaterial> lqwRecord = JoinWrappers.lambda(ErpContractMaterial.class);
lqwRecord.eq(ErpContractMaterial::getContractId, bo.getContractId());
List<ErpContractMaterial> 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<ErpContractPaymentMethod> contractPaymentMethodList = bo.getContractPaymentMethodList();
MPJLambdaWrapper<ErpContractPaymentMethod> paymentLqw = JoinWrappers.lambda(ErpContractPaymentMethod.class)
.selectAll(ErpContractPaymentMethod.class)
.eq(bo.getContractId() != null, ErpContractPaymentMethod::getContractId, bo.getContractId())
.eq(ErpContractPaymentMethod::getDelFlag, "0");
List<ErpContractPaymentMethodVo> oldPaymentList = contractPaymentMethodMapper.selectCustomErpContractPaymentMethodVoList(paymentLqw);
if (contractPaymentMethodList != null && !contractPaymentMethodList.isEmpty()) {
Set<Long> 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<Long> 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<Long> toDelete = oldPaymentList.stream()
.map(ErpContractPaymentMethodVo::getPaymentMethodId)
.toList();
contractPaymentMethodMapper.deleteByIds(toDelete);
}
}
/**

@ -1,13 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpContractPaymentMethodMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpContractPaymentMethodVo" id="ErpContractPaymentMethodResult">
</resultMap>
<select id="selectCustomErpContractPaymentMethodVoList" resultMap="ErpContractPaymentMethodResult">
select payment_method_id, tenant_id, contract_id, sort_order, payment_stage_id, payment_deadline, payment_percentage, invoice_percentage, payment_amount, payment_description, remark, active_flag, del_flag, create_dept, create_by, create_time, update_by, update_time from erp_contract_payment_method t
select t.payment_method_id,
t.tenant_id,
t.contract_id,
t.sort_order,
t.payment_stage_id,
t.payment_deadline,
t.payment_percentage,
t.invoice_percentage,
t.payment_amount,
t.payment_description,
t.remark,
t.active_flag,
t.del_flag,
t.create_dept,
t.create_by,
t.create_time,
t.update_by,
t.update_time,
bps.payment_method
from erp_contract_payment_method t
left join base_payment_stage bps on t.payment_stage_id = bps.payment_stage_id
${ew.getCustomSqlSegment}
</select>

Loading…
Cancel
Save