diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceRecordMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceRecordMapper.java
index 282b8a36e..6fc6d5ac2 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceRecordMapper.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceRecordMapper.java
@@ -17,16 +17,19 @@ import org.apache.ibatis.annotations.Param;
/**
* @ClassName EmisSettleInvoiceRecordMapper
- * @Description
开票记录表 Mapper 接口
+ * @Description
+ *
+ * 开票记录表 Mapper 接口
+ *
* @author linfso
* @date 2024-07-21 13:31:26
*/
-public interface EmisSettleInvoiceRecordMapper extends BaseMapper
-{
+public interface EmisSettleInvoiceRecordMapper extends BaseMapper {
/**
* 主键查询
- * @param id
- * @return
+ *
+ * @param id
+ * @return
*/
public EmisSettleInvoiceRecord selectEmisSettleInvoiceRecordById(Long id);
@@ -40,46 +43,42 @@ public interface EmisSettleInvoiceRecordMapper extends BaseMapper selectEmisSettleInvoiceRecordList(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
-
+ public List selectEmisSettleInvoiceRecordList(
+ EmisSettleInvoiceRecord emisSettleInvoiceRecord);
public List selectInvoiceRecordListBySettleBillNo(String settleBillNo);
-
-
-
/**
* 检查是否重复
*
- * @param emisSettleInvoiceRecord
+ * @param emisSettleInvoiceRecord
* @return 数量
*/
public int checkUnique(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
-
public int checkOpenBillRepeat(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
/**
- * 新增
+ * 新增
*
* @param emisSettleInvoiceRecord
- * @return
+ * @return
*/
public int insertEmisSettleInvoiceRecord(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
- public int insertInvoiceRecordBillRel(@Param("applySeqNo") String applySeqNo,@Param("settleBillNo") String settleBillNo);
-
+ public int insertInvoiceRecordBillRel(@Param("applySeqNo") String applySeqNo,
+ @Param("settleBillNo") String settleBillNo);
public int updateHasPayByApplySeqNo(@Param("applySeqNo") String applySeqNo);
/**
* 修改
*
- * @param emisSettleInvoiceRecord
- * @return
+ * @param emisSettleInvoiceRecord
+ * @return
*/
public int updateEmisSettleInvoiceRecord(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
@@ -103,5 +102,12 @@ public interface EmisSettleInvoiceRecordMapper extends BaseMapper selectInvoiceRecordListByBillCodes(@Param("billCodes") List billCodes);
}
diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleInvoiceRecordService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleInvoiceRecordService.java
index ea67d1d33..49b1a2ba1 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleInvoiceRecordService.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleInvoiceRecordService.java
@@ -1,30 +1,30 @@
- /**
- * @Project: emis
- * @Title: EmisSettleInvoiceRecordService.java
- * @author linfso
- * @date 2024-07-21 13:31:26
- * @Copyright: ShangHai Duta 2022 All rights reserved.
- * @version v1.0
- * @Description: 开票记录表 服务类接口
- */
+/**
+* @Project: emis
+* @Title: EmisSettleInvoiceRecordService.java
+* @author linfso
+* @date 2024-07-21 13:31:26
+* @Copyright: ShangHai Duta 2022 All rights reserved.
+* @version v1.0
+* @Description: 开票记录表 服务类接口
+*/
package com.xdadan.erp.emis.service;
import java.util.List;
import com.xdadan.erp.emis.domain.EmisSettleInvoiceRecord;
import com.xdadan.erp.emis.domain.exception.EmisBizError;
- /**
+/**
* @ClassName EmisSettleInvoiceRecordService
* @Description 开票记录表
* @author linfso
* @date 2024-07-21 13:31:26
*/
-public interface IEmisSettleInvoiceRecordService
-{
- /**
+public interface IEmisSettleInvoiceRecordService {
+ /**
* 主键查询
+ *
* @param id
- * @return
+ * @return
*/
public EmisSettleInvoiceRecord selectEmisSettleInvoiceRecordById(Long id);
@@ -34,13 +34,13 @@ public interface IEmisSettleInvoiceRecordService
* @param emisSettleInvoiceRecord 开票记录表
* @return 开票记录表集合
*/
- public List selectEmisSettleInvoiceRecordList(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
-
+ public List selectEmisSettleInvoiceRecordList(
+ EmisSettleInvoiceRecord emisSettleInvoiceRecord);
/**
* 检查是否重复
*
- * @param emisSettleInvoiceRecord
+ * @param emisSettleInvoiceRecord
* @return 数量
*/
public int checkUnique(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
@@ -77,20 +77,23 @@ public interface IEmisSettleInvoiceRecordService
*/
public int deleteEmisSettleInvoiceRecordById(Long id);
+ /**
+ * 中心驳回
+ *
+ * @param inputObj
+ * @return
+ * @throws EmisBizError
+ */
+ public int auditCenterNoPass(EmisSettleInvoiceRecord inputObj) throws EmisBizError;
- /**
- * 中心驳回
- * @param inputObj
- * @return
- * @throws EmisBizError
- */
- public int auditCenterNoPass(EmisSettleInvoiceRecord inputObj) throws EmisBizError;
-
-
- public int auditCenterPass(EmisSettleInvoiceRecord inputObj) throws EmisBizError;
-
-
-
+ public int auditCenterPass(EmisSettleInvoiceRecord inputObj) throws EmisBizError;
+ /**
+ * 根据运单号列表查询开票记录
+ *
+ * @param billCodes 运单号列表
+ * @return 开票记录列表
+ */
+ public List selectInvoiceRecordListByBillCodes(List billCodes);
}
diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java
index e5c66fd9d..b754cadd3 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java
@@ -1,22 +1,20 @@
- /**
- * @Project: emis
- * @Title: EmisSettleInvoiceRecordServiceImpl.java
- * @author linfso
- * @date 2024-07-21 13:31:26
- * @Copyright: ShangHai Duta 2022 All rights reserved.
- * @version v1.0
- * @Description: 开票记录表 实体类
- */
+/**
+* @Project: emis
+* @Title: EmisSettleInvoiceRecordServiceImpl.java
+* @author linfso
+* @date 2024-07-21 13:31:26
+* @Copyright: ShangHai Duta 2022 All rights reserved.
+* @version v1.0
+* @Description: 开票记录表 实体类
+*/
package com.xdadan.erp.emis.service.impl;
import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-import java.util.Map;
-import lombok.Data;
-import com.xdadan.erp.common.core.domain.entity.SysUser;
import com.xdadan.erp.emis.domain.*;
import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType;
import com.xdadan.erp.emis.domain.exception.EmisBizError;
@@ -29,26 +27,23 @@ import com.xdadan.erp.emis.service.IEmisSettleBillService;
import com.xdadan.erp.emis.utils.WaybillHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
import com.xdadan.erp.emis.mapper.EmisSettleInvoiceRecordMapper;
import com.xdadan.erp.emis.service.IEmisSettleInvoiceRecordService;
import org.springframework.transaction.annotation.Transactional;
- /**
+/**
* 开票记录表Service业务层处理
*
* @author linfso
* @date 2024-07-21 13:31:26
*/
- @Slf4j
+@Slf4j
@Service
-public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implements IEmisSettleInvoiceRecordService
-{
+public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implements IEmisSettleInvoiceRecordService {
@Autowired
private EmisSettleInvoiceRecordMapper emisSettleInvoiceRecordMapper;
@@ -74,12 +69,10 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
* @return 开票记录表
*/
@Override
- public EmisSettleInvoiceRecord selectEmisSettleInvoiceRecordById(Long id)
- {
+ public EmisSettleInvoiceRecord selectEmisSettleInvoiceRecordById(Long id) {
return emisSettleInvoiceRecordMapper.selectEmisSettleInvoiceRecordById(id);
}
-
/**
* 查询开票记录表列表
*
@@ -87,8 +80,8 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
* @return 开票记录表
*/
@Override
- public List selectEmisSettleInvoiceRecordList(EmisSettleInvoiceRecord emisSettleInvoiceRecord)
- {
+ public List selectEmisSettleInvoiceRecordList(
+ EmisSettleInvoiceRecord emisSettleInvoiceRecord) {
return emisSettleInvoiceRecordMapper.selectEmisSettleInvoiceRecordList(emisSettleInvoiceRecord);
}
@@ -99,9 +92,8 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
* @return 数量
*/
@Override
- public int checkUnique(EmisSettleInvoiceRecord emisSettleInvoiceRecord)
- {
- return emisSettleInvoiceRecordMapper.checkUnique(emisSettleInvoiceRecord);
+ public int checkUnique(EmisSettleInvoiceRecord emisSettleInvoiceRecord) {
+ return emisSettleInvoiceRecordMapper.checkUnique(emisSettleInvoiceRecord);
}
/**
@@ -115,7 +107,7 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
public int insertEmisSettleInvoiceRecord(EmisSettleInvoiceRecord emisSettleInvoiceRecord) throws EmisBizError {
// id流水号
- String applySeqNo= WaybillHelper.genApplySeqNo();
+ String applySeqNo = WaybillHelper.genApplySeqNo();
// 检查开票抬头启用状态
if (StringUtils.isNotBlank(emisSettleInvoiceRecord.getCompanyName()) &&
@@ -136,34 +128,33 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
}
// 相同抬头,相同金额,有审批中或者已开票的不允许再申请
- int chkRst=emisSettleInvoiceRecordMapper.checkOpenBillRepeat(emisSettleInvoiceRecord);
- if(chkRst!=0){
- throw new EmisBizError(EmisBizErrorType.FAIL,"重复开票");
+ int chkRst = emisSettleInvoiceRecordMapper.checkOpenBillRepeat(emisSettleInvoiceRecord);
+ if (chkRst != 0) {
+ throw new EmisBizError(EmisBizErrorType.FAIL, "重复开票");
}
- //多个账单合并开票
+ // 多个账单合并开票
emisSettleInvoiceRecord.setSettleBillNo(
- WaybillHelper.formatQueryValue(emisSettleInvoiceRecord.getSettleBillNo())
- );
+ WaybillHelper.formatQueryValue(emisSettleInvoiceRecord.getSettleBillNo()));
- List listRelCheck=emisSettleInvoiceRecord.getInvoiceRelList();
- if(!CollectionUtils.isEmpty(listRelCheck)){
- //bug 1151:业务开票申请:业务提交开票申请时,需要判断当前账单中是否存在运单号出现在业务出账确认和月结现金出账确认未确认或不出账状态,
+ List listRelCheck = emisSettleInvoiceRecord.getInvoiceRelList();
+ if (!CollectionUtils.isEmpty(listRelCheck)) {
+ // bug 1151:业务开票申请:业务提交开票申请时,需要判断当前账单中是否存在运单号出现在业务出账确认和月结现金出账确认未确认或不出账状态,
// 如果存在则不允许提交申请 并且弹窗提示(具体单号+出账未确认/确认不出账)
- for (EmisSettleInvoiceRel invoiceRel:listRelCheck
- ) {
- EmisSettleSubBill subBill = emisSettleSubBillMapper.selectSettleSubBillBySubBillNo(invoiceRel.getBillNo());
- if(!"1".equals(subBill.getBlConfirmSite())){
- throw new EmisBizError(EmisBizErrorType.FAIL,"运单号:"+subBill.getBillNo()+" 业务出账未确认/确认不出账,不允许开票");
+ for (EmisSettleInvoiceRel invoiceRel : listRelCheck) {
+ EmisSettleSubBill subBill = emisSettleSubBillMapper
+ .selectSettleSubBillBySubBillNo(invoiceRel.getBillNo());
+ if (!"1".equals(subBill.getBlConfirmSite())) {
+ throw new EmisBizError(EmisBizErrorType.FAIL,
+ "运单号:" + subBill.getBillNo() + " 业务出账未确认/确认不出账,不允许开票");
}
}
}
// 记录开票运单号
- List listRel=emisSettleInvoiceRecord.getInvoiceRelList();
- if(!CollectionUtils.isEmpty(listRel)){
- for (EmisSettleInvoiceRel invoiceRel:listRel
- ) {
+ List listRel = emisSettleInvoiceRecord.getInvoiceRelList();
+ if (!CollectionUtils.isEmpty(listRel)) {
+ for (EmisSettleInvoiceRel invoiceRel : listRel) {
invoiceRel.setId(null);
invoiceRel.setApplySeqNo(applySeqNo);
@@ -171,28 +162,28 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
}
}
- BigDecimal totalFee =BigDecimal.ZERO;
+ BigDecimal totalFee = BigDecimal.ZERO;
// 总可开票金额
String[] settBillNoArr = emisSettleInvoiceRecord.getSettleBillNo().split(",");
- for(int i=0;i=0){
- throw new EmisBizError(EmisBizErrorType.FAIL,"开票金额必须大于0");
+ if (BigDecimal.ZERO.compareTo(emisSettleInvoiceRecord.getApplyMoney()) >= 0) {
+ throw new EmisBizError(EmisBizErrorType.FAIL, "开票金额必须大于0");
}
emisSettleInvoiceRecord.setOpenMoneyMax(totalFee);
@@ -204,23 +195,23 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
// 插入开票记录
emisSettleInvoiceRecordMapper.insertEmisSettleInvoiceRecord(emisSettleInvoiceRecord);
-
// 重算账单已开票金额
- for(int i=0;i{}"+totalMoney.toString());
+ System.out.println("==>{}" + totalMoney.toString());
- System.out.println("==>{}"+totalMoney.compareTo(recMoney));
+ System.out.println("==>{}" + totalMoney.compareTo(recMoney));
}
-
-
+ /**
+ * 根据运单号列表查询开票记录
+ *
+ * @param billCodes 运单号列表
+ * @return 开票记录列表
+ */
+ @Override
+ public List selectInvoiceRecordListByBillCodes(List billCodes) {
+ if (CollectionUtils.isEmpty(billCodes)) {
+ return new ArrayList<>();
+ }
+ return emisSettleInvoiceRecordMapper.selectInvoiceRecordListByBillCodes(billCodes);
+ }
}
diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWriteoffApplyServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWriteoffApplyServiceImpl.java
index 65024830c..0b94abbd7 100644
--- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWriteoffApplyServiceImpl.java
+++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWriteoffApplyServiceImpl.java
@@ -69,6 +69,9 @@ public class EmisWriteoffApplyServiceImpl extends EmisBaseService implements IEm
@Autowired
private IEmisCreditSalesmenService emisCreditSalesmenService;
+ @Autowired
+ private IEmisSettleInvoiceRecordService emisSettleInvoiceRecordService;
+
/**
* 查询销账申请
*
@@ -134,11 +137,11 @@ public class EmisWriteoffApplyServiceImpl extends EmisBaseService implements IEm
// 验证:申请金额 + 已收金额 <= 运单应收金额
BigDecimal totalAmount = detail.getApplyMoney().add(receivedAmount);
-// if (totalAmount.compareTo(detail.getEmisWaybill().getFreight()) > 0) {
-// throw new EmisBizError("运单号 " + detail.getBillCode() + " 的申请金额(" +
-// detail.getApplyMoney() + ") + 已收金额(" + receivedAmount + ") = " +
-// totalAmount + " 超过运单应收金额(" + detail.getEmisWaybill().getFreight() + ")");
-// }
+ // if (totalAmount.compareTo(detail.getEmisWaybill().getFreight()) > 0) {
+ // throw new EmisBizError("运单号 " + detail.getBillCode() + " 的申请金额(" +
+ // detail.getApplyMoney() + ") + 已收金额(" + receivedAmount + ") = " +
+ // totalAmount + " 超过运单应收金额(" + detail.getEmisWaybill().getFreight() + ")");
+ // }
}
// 验证总销账金额
@@ -349,6 +352,9 @@ public class EmisWriteoffApplyServiceImpl extends EmisBaseService implements IEm
// 重算并更新月结客户额度和现金客户额度
updateCreditLimits(existingApply, detailList);
+ // 更新相关开票记录的收款金额和付款状态
+ updateInvoiceRecordPaymentStatus(existingApply, detailList, true);
+
// 所有业务数据更新成功后,再更新审核状态
SysUser currentUser = SecurityUtils.getLoginUser().getUser();
emisWriteoffApply.setBlCenterConfirmed(WriteoffApplyStatus.CENTER_APPROVED.statusCode);
@@ -491,6 +497,9 @@ public class EmisWriteoffApplyServiceImpl extends EmisBaseService implements IEm
// 重算并更新月结客户额度和现金客户额度
updateCreditLimits(existingApply, detailList);
+ // 更新相关开票记录的收款金额和付款状态(回退)
+ updateInvoiceRecordPaymentStatus(existingApply, detailList, false);
+
// 所有业务数据回退成功后,再更新审核状态
SysUser currentUser = SecurityUtils.getLoginUser().getUser();
emisWriteoffApply.setBlHeadquartersConfirmed(WriteoffApplyStatus.HEADQUARTERS_REJECTED.statusCode);
@@ -683,10 +692,11 @@ public class EmisWriteoffApplyServiceImpl extends EmisBaseService implements IEm
: BigDecimal.ZERO; // 已收金额
// 验证:申请金额 + 已收金额 <= 运单金额
-// BigDecimal totalAmount = applyAmount.add(receivedAmount);
-// if (totalAmount.compareTo(waybillAmount) > 0) {
-// throw new EmisBizError("申请金额+已收金额(" + totalAmount + ")超过运单应收金额(" + waybillAmount + ")");
-// }
+ // BigDecimal totalAmount = applyAmount.add(receivedAmount);
+ // if (totalAmount.compareTo(waybillAmount) > 0) {
+ // throw new EmisBizError("申请金额+已收金额(" + totalAmount + ")超过运单应收金额(" +
+ // waybillAmount + ")");
+ // }
// 直接使用明细中的子账单信息,无需额外查询
if (detail.getEmisSettleSubBill() == null) {
@@ -1121,7 +1131,7 @@ public class EmisWriteoffApplyServiceImpl extends EmisBaseService implements IEm
*/
private void sendWriteoffApplyNotification(EmisWriteoffApply apply, String actionType, String rejectReason) {
try {
- if (apply == null || StringUtils.isEmpty(apply.getApplyManCode())) {
+ if (apply == null || StringUtil.isBlank(apply.getApplyManCode())) {
log.warn("销账申请或申请人代码为空,无法发送通知");
return;
}
@@ -1280,4 +1290,115 @@ public class EmisWriteoffApplyServiceImpl extends EmisBaseService implements IEm
// 不抛出异常,避免影响主流程
}
}
+
+ /**
+ * 更新开票记录的收款金额和付款状态
+ *
+ * @param apply 销账申请
+ * @param detailList 申请明细列表
+ * @param isPass 是否审核通过
+ */
+ private void updateInvoiceRecordPaymentStatus(EmisWriteoffApply apply, List detailList,
+ boolean isPass) {
+ try {
+ if (CollectionUtils.isEmpty(detailList)) {
+ log.warn("申请明细为空,无法更新开票记录付款状态,申请ID: {}", apply.getId());
+ return;
+ }
+
+ log.info("开始更新开票记录付款状态,申请ID: {}, 是否通过: {}", apply.getId(), isPass);
+
+ // 提取所有运单号
+ List billCodes = detailList.stream()
+ .filter(detail -> StringUtil.isNotBlank(detail.getBillCode()))
+ .map(EmisWriteoffApplyDetail::getBillCode)
+ .distinct()
+ .collect(java.util.stream.Collectors.toList());
+
+ if (CollectionUtils.isEmpty(billCodes)) {
+ log.warn("申请明细中没有有效的运单号,无法更新开票记录付款状态,申请ID: {}", apply.getId());
+ return;
+ }
+
+ // 根据运单号查询开票记录
+ List invoiceRecords = emisSettleInvoiceRecordService
+ .selectInvoiceRecordListByBillCodes(billCodes);
+
+ if (CollectionUtils.isEmpty(invoiceRecords)) {
+ log.warn("未找到对应的开票记录,运单号: {}, 申请ID: {}", billCodes, apply.getId());
+ return;
+ }
+
+ // 按 id 分组处理开票记录
+ Map> invoiceGroups = invoiceRecords.stream()
+ .filter(record -> record.getId() != null)
+ .collect(java.util.stream.Collectors.groupingBy(EmisSettleInvoiceRecord::getId));
+
+ for (Map.Entry> entry : invoiceGroups.entrySet()) {
+ Long recordId = entry.getKey();
+ List invoiceList = entry.getValue();
+
+ try {
+ // 计算该开票记录对应的总申请金额
+ BigDecimal totalApplyMoney = detailList.stream()
+ .filter(detail -> StringUtil.isNotBlank(detail.getBillCode()))
+ .map(detail -> detail.getApplyMoney() != null ? detail.getApplyMoney() : BigDecimal.ZERO)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 获取第一个开票记录作为参考(所有记录应该有相同的 apply_money 和 reced_money)
+ EmisSettleInvoiceRecord firstRecord = invoiceList.get(0);
+ BigDecimal applyMoney = firstRecord.getApplyMoney() != null ? firstRecord.getApplyMoney()
+ : BigDecimal.ZERO;
+ BigDecimal currentRecedMoney = firstRecord.getRecedMoney() != null ? firstRecord.getRecedMoney()
+ : BigDecimal.ZERO;
+
+ // 计算新的已收金额
+ BigDecimal newRecedMoney;
+ if (isPass) {
+ // 审核通过:增加申请金额
+ newRecedMoney = currentRecedMoney.add(totalApplyMoney);
+ } else {
+ // 审核驳回:减少申请金额
+ newRecedMoney = currentRecedMoney.subtract(totalApplyMoney);
+ if (newRecedMoney.compareTo(BigDecimal.ZERO) < 0) {
+ newRecedMoney = BigDecimal.ZERO;
+ }
+ }
+
+ // 计算付款状态
+ String paymentStatus;
+ if (newRecedMoney.compareTo(BigDecimal.ZERO) == 0) {
+ paymentStatus = "0"; // 未付款
+ } else if (newRecedMoney.compareTo(applyMoney) >= 0) {
+ paymentStatus = "1"; // 已付款
+ } else {
+ paymentStatus = "2"; // 部分付款
+ }
+
+ // 更新每个开票记录
+ int updateCount = 0;
+ for (EmisSettleInvoiceRecord invoiceRecord : invoiceList) {
+ invoiceRecord.setRecedMoney(newRecedMoney);
+ invoiceRecord.setPaymentStatus(paymentStatus);
+ int result = emisSettleInvoiceRecordService.updateEmisSettleInvoiceRecord(invoiceRecord);
+ if (result > 0) {
+ updateCount++;
+ }
+ }
+
+ log.info("开票记录付款状态更新成功,记录ID: {}, 更新记录数: {}, 新已收金额: {}, 付款状态: {}, 申请金额: {}, 开票金额: {}",
+ recordId, updateCount, newRecedMoney, paymentStatus, totalApplyMoney, applyMoney);
+
+ } catch (Exception e) {
+ log.error("更新开票记录付款状态失败,记录ID: {}", recordId, e);
+ // 继续处理其他记录,不抛出异常
+ }
+ }
+
+ log.info("开票记录付款状态更新完成,申请ID: {}", apply.getId());
+ } catch (Exception e) {
+ log.error("更新开票记录付款状态失败,申请ID: {}", apply.getId(), e);
+ // 不抛出异常,避免影响主流程
+ }
+ }
}
diff --git a/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml
index df489bbbf..90dc49859 100644
--- a/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml
+++ b/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml
@@ -228,6 +228,23 @@
where a.apply_seq_no = #{applySeqNo}
+
+