Merge pull request 'develop' (#190) from develop into master
Reviewed-on: http://git.xdadan.loc/tanex/emis-service/pulls/190
This commit is contained in:
commit
333fd03b4c
@ -17,14 +17,17 @@ import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* @ClassName EmisSettleInvoiceRecordMapper
|
||||
* @Description <p> 开票记录表 Mapper 接口 </p>
|
||||
* @Description
|
||||
* <p>
|
||||
* 开票记录表 Mapper 接口
|
||||
* </p>
|
||||
* @author linfso
|
||||
* @date 2024-07-21 13:31:26
|
||||
*/
|
||||
public interface EmisSettleInvoiceRecordMapper extends BaseMapper<EmisSettleInvoiceRecord>
|
||||
{
|
||||
public interface EmisSettleInvoiceRecordMapper extends BaseMapper<EmisSettleInvoiceRecord> {
|
||||
/**
|
||||
* 主键查询
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@ -43,14 +46,11 @@ public interface EmisSettleInvoiceRecordMapper extends BaseMapper<EmisSettleInvo
|
||||
* @param emisSettleInvoiceRecord
|
||||
* @return 集合
|
||||
*/
|
||||
public List<EmisSettleInvoiceRecord> selectEmisSettleInvoiceRecordList(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
|
||||
|
||||
public List<EmisSettleInvoiceRecord> selectEmisSettleInvoiceRecordList(
|
||||
EmisSettleInvoiceRecord emisSettleInvoiceRecord);
|
||||
|
||||
public List<EmisSettleInvoiceRecord> selectInvoiceRecordListBySettleBillNo(String settleBillNo);
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 检查是否重复
|
||||
*
|
||||
@ -59,7 +59,6 @@ public interface EmisSettleInvoiceRecordMapper extends BaseMapper<EmisSettleInvo
|
||||
*/
|
||||
public int checkUnique(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
|
||||
|
||||
|
||||
public int checkOpenBillRepeat(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
|
||||
|
||||
/**
|
||||
@ -70,8 +69,8 @@ public interface EmisSettleInvoiceRecordMapper extends BaseMapper<EmisSettleInvo
|
||||
*/
|
||||
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);
|
||||
|
||||
@ -103,5 +102,12 @@ public interface EmisSettleInvoiceRecordMapper extends BaseMapper<EmisSettleInvo
|
||||
|
||||
public int auditCenterPass(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
|
||||
|
||||
/**
|
||||
* 根据运单号列表查询开票记录
|
||||
*
|
||||
* @param billCodes 运单号列表
|
||||
* @return 开票记录列表
|
||||
*/
|
||||
public List<EmisSettleInvoiceRecord> selectInvoiceRecordListByBillCodes(@Param("billCodes") List<String> billCodes);
|
||||
|
||||
}
|
||||
|
||||
@ -19,10 +19,10 @@ import com.xdadan.erp.emis.domain.exception.EmisBizError;
|
||||
* @author linfso
|
||||
* @date 2024-07-21 13:31:26
|
||||
*/
|
||||
public interface IEmisSettleInvoiceRecordService
|
||||
{
|
||||
public interface IEmisSettleInvoiceRecordService {
|
||||
/**
|
||||
* 主键查询
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@ -34,8 +34,8 @@ public interface IEmisSettleInvoiceRecordService
|
||||
* @param emisSettleInvoiceRecord 开票记录表
|
||||
* @return 开票记录表集合
|
||||
*/
|
||||
public List<EmisSettleInvoiceRecord> selectEmisSettleInvoiceRecordList(EmisSettleInvoiceRecord emisSettleInvoiceRecord);
|
||||
|
||||
public List<EmisSettleInvoiceRecord> selectEmisSettleInvoiceRecordList(
|
||||
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;
|
||||
|
||||
|
||||
public int auditCenterPass(EmisSettleInvoiceRecord inputObj) throws EmisBizError;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 根据运单号列表查询开票记录
|
||||
*
|
||||
* @param billCodes 运单号列表
|
||||
* @return 开票记录列表
|
||||
*/
|
||||
public List<EmisSettleInvoiceRecord> selectInvoiceRecordListByBillCodes(List<String> billCodes);
|
||||
|
||||
}
|
||||
|
||||
@ -11,12 +11,10 @@
|
||||
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,10 +27,8 @@ 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;
|
||||
@ -47,8 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@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<EmisSettleInvoiceRecord> selectEmisSettleInvoiceRecordList(EmisSettleInvoiceRecord emisSettleInvoiceRecord)
|
||||
{
|
||||
public List<EmisSettleInvoiceRecord> selectEmisSettleInvoiceRecordList(
|
||||
EmisSettleInvoiceRecord emisSettleInvoiceRecord) {
|
||||
return emisSettleInvoiceRecordMapper.selectEmisSettleInvoiceRecordList(emisSettleInvoiceRecord);
|
||||
}
|
||||
|
||||
@ -99,8 +92,7 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
* @return 数量
|
||||
*/
|
||||
@Override
|
||||
public int checkUnique(EmisSettleInvoiceRecord emisSettleInvoiceRecord)
|
||||
{
|
||||
public int checkUnique(EmisSettleInvoiceRecord emisSettleInvoiceRecord) {
|
||||
return emisSettleInvoiceRecordMapper.checkUnique(emisSettleInvoiceRecord);
|
||||
}
|
||||
|
||||
@ -143,18 +135,18 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
|
||||
// 多个账单合并开票
|
||||
emisSettleInvoiceRecord.setSettleBillNo(
|
||||
WaybillHelper.formatQueryValue(emisSettleInvoiceRecord.getSettleBillNo())
|
||||
);
|
||||
WaybillHelper.formatQueryValue(emisSettleInvoiceRecord.getSettleBillNo()));
|
||||
|
||||
List<EmisSettleInvoiceRel> listRelCheck = emisSettleInvoiceRecord.getInvoiceRelList();
|
||||
if (!CollectionUtils.isEmpty(listRelCheck)) {
|
||||
// bug 1151:业务开票申请:业务提交开票申请时,需要判断当前账单中是否存在运单号出现在业务出账确认和月结现金出账确认未确认或不出账状态,
|
||||
// 如果存在则不允许提交申请 并且弹窗提示(具体单号+出账未确认/确认不出账)
|
||||
for (EmisSettleInvoiceRel invoiceRel:listRelCheck
|
||||
) {
|
||||
EmisSettleSubBill subBill = emisSettleSubBillMapper.selectSettleSubBillBySubBillNo(invoiceRel.getBillNo());
|
||||
for (EmisSettleInvoiceRel invoiceRel : listRelCheck) {
|
||||
EmisSettleSubBill subBill = emisSettleSubBillMapper
|
||||
.selectSettleSubBillBySubBillNo(invoiceRel.getBillNo());
|
||||
if (!"1".equals(subBill.getBlConfirmSite())) {
|
||||
throw new EmisBizError(EmisBizErrorType.FAIL,"运单号:"+subBill.getBillNo()+" 业务出账未确认/确认不出账,不允许开票");
|
||||
throw new EmisBizError(EmisBizErrorType.FAIL,
|
||||
"运单号:" + subBill.getBillNo() + " 业务出账未确认/确认不出账,不允许开票");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -162,8 +154,7 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
// 记录开票运单号
|
||||
List<EmisSettleInvoiceRel> listRel = emisSettleInvoiceRecord.getInvoiceRelList();
|
||||
if (!CollectionUtils.isEmpty(listRel)) {
|
||||
for (EmisSettleInvoiceRel invoiceRel:listRel
|
||||
) {
|
||||
for (EmisSettleInvoiceRel invoiceRel : listRel) {
|
||||
|
||||
invoiceRel.setId(null);
|
||||
invoiceRel.setApplySeqNo(applySeqNo);
|
||||
@ -204,7 +195,6 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
// 插入开票记录
|
||||
emisSettleInvoiceRecordMapper.insertEmisSettleInvoiceRecord(emisSettleInvoiceRecord);
|
||||
|
||||
|
||||
// 重算账单已开票金额
|
||||
for (int i = 0; i < settBillNoArr.length; i++) {
|
||||
String billNo = settBillNoArr[i];
|
||||
@ -212,15 +202,16 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
}
|
||||
|
||||
String empName = getCurrentUser().getEmpName();
|
||||
String title=empName+"提交了开票申请,开票抬头:"+emisSettleInvoiceRecord.getCompanyName()+",开票金额:"+emisSettleInvoiceRecord.getApplyMoney()+",请及时开票!";
|
||||
String title = empName + "提交了开票申请,开票抬头:" + emisSettleInvoiceRecord.getCompanyName() + ",开票金额:"
|
||||
+ emisSettleInvoiceRecord.getApplyMoney() + ",请及时开票!";
|
||||
|
||||
// 财务说不需要提醒
|
||||
// sendNoticeToEmpUser("88888042,88888047,88888034", title, "", "/ruyERj/CenterInvoiceRecordDeal");
|
||||
// sendNoticeToEmpUser("88888042,88888047,88888034", title, "",
|
||||
// "/ruyERj/CenterInvoiceRecordDeal");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 修改开票记录表
|
||||
*
|
||||
@ -228,8 +219,7 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateEmisSettleInvoiceRecord(EmisSettleInvoiceRecord emisSettleInvoiceRecord)
|
||||
{
|
||||
public int updateEmisSettleInvoiceRecord(EmisSettleInvoiceRecord emisSettleInvoiceRecord) {
|
||||
return emisSettleInvoiceRecordMapper.updateEmisSettleInvoiceRecord(emisSettleInvoiceRecord);
|
||||
}
|
||||
|
||||
@ -240,8 +230,7 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteEmisSettleInvoiceRecordByIds(Long[] ids)
|
||||
{
|
||||
public int deleteEmisSettleInvoiceRecordByIds(Long[] ids) {
|
||||
return emisSettleInvoiceRecordMapper.deleteEmisSettleInvoiceRecordByIds(ids);
|
||||
}
|
||||
|
||||
@ -252,15 +241,14 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteEmisSettleInvoiceRecordById(Long id)
|
||||
{
|
||||
public int deleteEmisSettleInvoiceRecordById(Long id) {
|
||||
// 如果已开票不允许删除
|
||||
return emisSettleInvoiceRecordMapper.deleteEmisSettleInvoiceRecordById(id);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 中心驳回
|
||||
*
|
||||
* @param inputObj
|
||||
* @return
|
||||
* @throws EmisBizError
|
||||
@ -268,7 +256,8 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
@Override
|
||||
public int auditCenterNoPass(EmisSettleInvoiceRecord inputObj) throws EmisBizError {
|
||||
|
||||
EmisSettleInvoiceRecord emisSettleInvoiceRecord = emisSettleInvoiceRecordMapper.selectEmisSettleInvoiceRecordById(inputObj.getId());
|
||||
EmisSettleInvoiceRecord emisSettleInvoiceRecord = emisSettleInvoiceRecordMapper
|
||||
.selectEmisSettleInvoiceRecordById(inputObj.getId());
|
||||
if ("2".equals(emisSettleInvoiceRecord.getBlAudit())) {
|
||||
throw new EmisBizError(EmisBizErrorType.FAIL, "已驳回!");
|
||||
}
|
||||
@ -284,7 +273,8 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
|
||||
emisSettleInvoiceRecordMapper.auditCenterNoPass(emisSettleInvoiceRecord);
|
||||
|
||||
String title="开票被驳回,原因【"+inputObj.getAuditNote()+"】审核人:"+getCurrentUser().getEmpName()+",开票抬头:"+emisSettleInvoiceRecord.getCompanyName()+",开票金额:"+emisSettleInvoiceRecord.getApplyMoney();
|
||||
String title = "开票被驳回,原因【" + inputObj.getAuditNote() + "】审核人:" + getCurrentUser().getEmpName() + ",开票抬头:"
|
||||
+ emisSettleInvoiceRecord.getCompanyName() + ",开票金额:" + emisSettleInvoiceRecord.getApplyMoney();
|
||||
sendNoticeToEmpUser(emisSettleInvoiceRecord.getApplyManCode(), title, "", "/ruyERj/SiteInvoiceRecordApply");
|
||||
|
||||
// 重新计算开票状态
|
||||
@ -297,9 +287,9 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 审核通过
|
||||
*
|
||||
* @param inputObj
|
||||
* @return
|
||||
* @throws EmisBizError
|
||||
@ -307,7 +297,8 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
@Override
|
||||
public int auditCenterPass(EmisSettleInvoiceRecord inputObj) throws EmisBizError {
|
||||
|
||||
EmisSettleInvoiceRecord emisSettleInvoiceRecord = emisSettleInvoiceRecordMapper.selectEmisSettleInvoiceRecordById(inputObj.getId());
|
||||
EmisSettleInvoiceRecord emisSettleInvoiceRecord = emisSettleInvoiceRecordMapper
|
||||
.selectEmisSettleInvoiceRecordById(inputObj.getId());
|
||||
if ("1".equals(emisSettleInvoiceRecord.getBlAudit())) {
|
||||
throw new EmisBizError(EmisBizErrorType.FAIL, "已审核!");
|
||||
}
|
||||
@ -332,7 +323,6 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
BigDecimal totalMoney = BigDecimal.ZERO;
|
||||
BigDecimal recMoney = BigDecimal.ZERO;
|
||||
@ -346,7 +336,18 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
||||
System.out.println("==>{}" + totalMoney.compareTo(recMoney));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 根据运单号列表查询开票记录
|
||||
*
|
||||
* @param billCodes 运单号列表
|
||||
* @return 开票记录列表
|
||||
*/
|
||||
@Override
|
||||
public List<EmisSettleInvoiceRecord> selectInvoiceRecordListByBillCodes(List<String> billCodes) {
|
||||
if (CollectionUtils.isEmpty(billCodes)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return emisSettleInvoiceRecordMapper.selectInvoiceRecordListByBillCodes(billCodes);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -69,6 +69,9 @@ public class EmisWriteoffApplyServiceImpl extends EmisBaseService implements IEm
|
||||
@Autowired
|
||||
private IEmisCreditSalesmenService emisCreditSalesmenService;
|
||||
|
||||
@Autowired
|
||||
private IEmisSettleInvoiceRecordService emisSettleInvoiceRecordService;
|
||||
|
||||
/**
|
||||
* 查询销账申请
|
||||
*
|
||||
@ -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);
|
||||
@ -685,7 +694,8 @@ public class EmisWriteoffApplyServiceImpl extends EmisBaseService implements IEm
|
||||
// 验证:申请金额 + 已收金额 <= 运单金额
|
||||
// BigDecimal totalAmount = applyAmount.add(receivedAmount);
|
||||
// if (totalAmount.compareTo(waybillAmount) > 0) {
|
||||
// throw new EmisBizError("申请金额+已收金额(" + totalAmount + ")超过运单应收金额(" + waybillAmount + ")");
|
||||
// throw new EmisBizError("申请金额+已收金额(" + totalAmount + ")超过运单应收金额(" +
|
||||
// waybillAmount + ")");
|
||||
// }
|
||||
|
||||
// 直接使用明细中的子账单信息,无需额外查询
|
||||
@ -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<EmisWriteoffApplyDetail> detailList,
|
||||
boolean isPass) {
|
||||
try {
|
||||
if (CollectionUtils.isEmpty(detailList)) {
|
||||
log.warn("申请明细为空,无法更新开票记录付款状态,申请ID: {}", apply.getId());
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("开始更新开票记录付款状态,申请ID: {}, 是否通过: {}", apply.getId(), isPass);
|
||||
|
||||
// 提取所有运单号
|
||||
List<String> 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<EmisSettleInvoiceRecord> invoiceRecords = emisSettleInvoiceRecordService
|
||||
.selectInvoiceRecordListByBillCodes(billCodes);
|
||||
|
||||
if (CollectionUtils.isEmpty(invoiceRecords)) {
|
||||
log.warn("未找到对应的开票记录,运单号: {}, 申请ID: {}", billCodes, apply.getId());
|
||||
return;
|
||||
}
|
||||
|
||||
// 按 id 分组处理开票记录
|
||||
Map<Long, List<EmisSettleInvoiceRecord>> invoiceGroups = invoiceRecords.stream()
|
||||
.filter(record -> record.getId() != null)
|
||||
.collect(java.util.stream.Collectors.groupingBy(EmisSettleInvoiceRecord::getId));
|
||||
|
||||
for (Map.Entry<Long, List<EmisSettleInvoiceRecord>> entry : invoiceGroups.entrySet()) {
|
||||
Long recordId = entry.getKey();
|
||||
List<EmisSettleInvoiceRecord> 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);
|
||||
// 不抛出异常,避免影响主流程
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -228,6 +228,23 @@
|
||||
where a.apply_seq_no = #{applySeqNo}
|
||||
</select>
|
||||
|
||||
<select id="selectInvoiceRecordListByBillCodes" parameterType="java.util.List" resultMap="EmisSettleInvoiceRecordResult">
|
||||
select distinct a.id, a.apply_seq_no, a.apply_date, a.apply_man_code, a.apply_site_code, a.customer_code, a.customer_name, a.settle_bill_no, a.settle_bill_name, a.apply_money, a.invoice_type, a.openbill_scope, a.company_name, a.company_tax_no, a.company_tel, a.company_address, a.invioce_remark, a.bank_name, a.bank_acc_no, a.contact, a.phone, a.real_tax_type, a.orig_open_money, a.add_tax_rate, a.add_open_money, a.open_money_max, a.open_money, ch.invoice_no, a.reced_money, a.payment_status, a.invoice_status, a.invoice_status_desc, a.recieve_address, a.email, a.file_path, a.remark, a.bl_audit, a.audit_date, a.audit_man_code, a.audit_site_code, a.audit_note, a.op_man_code, a.op_date, a.op_site_code, a.open_ch_id, a.open_ch_status, a.open_ch_status_desc, a.open_com_code, a.del_flag, a.create_by, a.create_time, a.update_by, a.update_time, a.create_site, a.update_site
|
||||
from emis_settle_invoice_record a
|
||||
left join emis_settle_invoice_ch_record ch on a.apply_seq_no = ch.apply_seq_no and ch.del_flag = '0'
|
||||
where a.del_flag = '0'
|
||||
and exists (
|
||||
select 1 from emis_settle_invoice_rel rel
|
||||
where rel.del_flag = '0'
|
||||
and rel.apply_seq_no = a.apply_seq_no
|
||||
and rel.bill_no in
|
||||
<foreach item="billCode" collection="billCodes" open="(" separator="," close=")">
|
||||
#{billCode}
|
||||
</foreach>
|
||||
)
|
||||
order by a.invoice_no, a.apply_seq_no
|
||||
</select>
|
||||
|
||||
<!-- 检查是否有重复太抬头开票,未审核 -->
|
||||
<select id="checkOpenBillRepeat" parameterType="EmisSettleInvoiceRecord" resultType="int">
|
||||
select count(1) from emis_settle_invoice_record
|
||||
@ -451,6 +468,8 @@
|
||||
<if test="openMoneyMax != null">open_money_max = #{openMoneyMax},</if>
|
||||
<if test="openMoney != null">open_money = #{openMoney},</if>
|
||||
<if test="invoiceNo != null and invoiceNo != ''">invoice_no = #{invoiceNo},</if>
|
||||
<if test="recedMoney != null">reced_money = #{recedMoney},</if>
|
||||
<if test="paymentStatus != null and paymentStatus != ''">payment_status = #{paymentStatus},</if>
|
||||
<if test="invoiceStatus != null and invoiceStatus != ''">invoice_status = #{invoiceStatus},</if>
|
||||
<if test="invoiceStatusDesc != null and invoiceStatusDesc != ''">invoice_status_desc = #{invoiceStatusDesc},</if>
|
||||
<if test="recieveAddress != null and recieveAddress != ''">recieve_address = #{recieveAddress},</if>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user