demand: TMS系统 - 客户账单管理 - 现金账单核销/月结账单核销 - 登记收款时:理赔金额有填写,保存成功后 账单对应的理赔金额和收款状态未更新 TMS系统 - 客户账单管理 - 现金账单核销/月结账单核销 - 收款/退款后同步更新账单对应发票的收款状态、已收金额。 TMS系统 - 客户账单管理 - 业务开票申请 - 生成发票时根据发票关联的账单自动计算生成发票的收款状态、已收金额。
committer: heyu
This commit is contained in:
parent
1f3bf7cfd9
commit
08f1f2e0c8
@ -73,6 +73,9 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
@Autowired
|
@Autowired
|
||||||
private EmisSettleSubBillMapper emisSettleSubBillMapper;
|
private EmisSettleSubBillMapper emisSettleSubBillMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EmisSettleInvoiceRecordMapper emisSettleInvoiceRecordMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private EmisSettleInvoiceRelMapper emisSettleInvoiceRelMapper;
|
private EmisSettleInvoiceRelMapper emisSettleInvoiceRelMapper;
|
||||||
|
|
||||||
@ -836,6 +839,7 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 重算账单收款状态
|
* 重算账单收款状态
|
||||||
|
*
|
||||||
* @param settleBillNo
|
* @param settleBillNo
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -844,18 +848,19 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
|
|
||||||
EmisSettleBill oldBill = getSettleBillBySettleBillNo(settleBillNo);
|
EmisSettleBill oldBill = getSettleBillBySettleBillNo(settleBillNo);
|
||||||
// 获取收款记录
|
// 获取收款记录
|
||||||
List<EmisSettlePayRecord> payRecordList=emisSettlePayRecordMapper.selectSettlePayRecordListBySettleBillNo(settleBillNo);
|
List<EmisSettlePayRecord> payRecordList = emisSettlePayRecordMapper
|
||||||
|
.selectSettlePayRecordListBySettleBillNo(settleBillNo);
|
||||||
|
|
||||||
// 计算已收款金额
|
// 计算已收款金额
|
||||||
BigDecimal totalHasPayMoney = BigDecimal.ZERO;
|
BigDecimal totalHasPayMoney = BigDecimal.ZERO;
|
||||||
|
|
||||||
// 抵扣金额
|
// 理赔金额
|
||||||
BigDecimal satisfyMoney = BigDecimal.ZERO;
|
BigDecimal satisfyMoney = BigDecimal.ZERO;
|
||||||
/* allowance_money */
|
/* 折让 */
|
||||||
BigDecimal allowanceMoney = BigDecimal.ZERO;
|
BigDecimal allowanceMoney = BigDecimal.ZERO;
|
||||||
/* deduction_money */
|
/* 折扣 */
|
||||||
BigDecimal deductionMoney = BigDecimal.ZERO;
|
BigDecimal deductionMoney = BigDecimal.ZERO;
|
||||||
/* other_money */
|
/* 其他 */
|
||||||
BigDecimal otherMoney = BigDecimal.ZERO;
|
BigDecimal otherMoney = BigDecimal.ZERO;
|
||||||
// refund_money
|
// refund_money
|
||||||
BigDecimal refundMoney = BigDecimal.ZERO;
|
BigDecimal refundMoney = BigDecimal.ZERO;
|
||||||
@ -865,8 +870,10 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
for (EmisSettlePayRecord item : payRecordList) {
|
for (EmisSettlePayRecord item : payRecordList) {
|
||||||
totalHasPayMoney = totalHasPayMoney.add(item.getPayMoney());
|
totalHasPayMoney = totalHasPayMoney.add(item.getPayMoney());
|
||||||
satisfyMoney = satisfyMoney.add(item.getSatisfyMoney() == null ? BigDecimal.ZERO : item.getSatisfyMoney());
|
satisfyMoney = satisfyMoney.add(item.getSatisfyMoney() == null ? BigDecimal.ZERO : item.getSatisfyMoney());
|
||||||
allowanceMoney = allowanceMoney.add(item.getAllowanceMoney() == null ? BigDecimal.ZERO : item.getAllowanceMoney());
|
allowanceMoney = allowanceMoney
|
||||||
deductionMoney = deductionMoney.add(item.getDeductionMoney() == null ? BigDecimal.ZERO : item.getDeductionMoney());
|
.add(item.getAllowanceMoney() == null ? BigDecimal.ZERO : item.getAllowanceMoney());
|
||||||
|
deductionMoney = deductionMoney
|
||||||
|
.add(item.getDeductionMoney() == null ? BigDecimal.ZERO : item.getDeductionMoney());
|
||||||
otherMoney = otherMoney.add(item.getOtherMoney() == null ? BigDecimal.ZERO : item.getOtherMoney());
|
otherMoney = otherMoney.add(item.getOtherMoney() == null ? BigDecimal.ZERO : item.getOtherMoney());
|
||||||
|
|
||||||
if ("2".equals(item.getRecType())) {
|
if ("2".equals(item.getRecType())) {
|
||||||
@ -924,8 +931,7 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
WaybillOperLogType.SITE_PAYMENT_STATUS_CHANGE,
|
WaybillOperLogType.SITE_PAYMENT_STATUS_CHANGE,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
"收款状态变更["+paymentStatusDesc+"]"
|
"收款状态变更[" + paymentStatusDesc + "]");
|
||||||
);
|
|
||||||
// 计算占用
|
// 计算占用
|
||||||
// try {
|
// try {
|
||||||
// EmisWaybill oldBillA = getWaybillByBillCode(subBill.getBillCode());
|
// EmisWaybill oldBillA = getWaybillByBillCode(subBill.getBillCode());
|
||||||
@ -967,8 +973,7 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
// 已收款
|
// 已收款
|
||||||
newBill.setPaymentStatus("1");
|
newBill.setPaymentStatus("1");
|
||||||
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
// 部分收款
|
// 部分收款
|
||||||
newBill.setPaymentStatus("2");
|
newBill.setPaymentStatus("2");
|
||||||
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
||||||
@ -1011,8 +1016,7 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
// 已收款
|
// 已收款
|
||||||
newBill.setPaymentStatus("1");
|
newBill.setPaymentStatus("1");
|
||||||
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
// 部分收款
|
// 部分收款
|
||||||
newBill.setPaymentStatus("2");
|
newBill.setPaymentStatus("2");
|
||||||
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
||||||
@ -1058,8 +1062,7 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
|
|
||||||
// 全部收款金额
|
// 全部收款金额
|
||||||
BigDecimal totalAllPayMoney = BigDecimal.ZERO;
|
BigDecimal totalAllPayMoney = BigDecimal.ZERO;
|
||||||
@ -1094,15 +1097,13 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
// 已收款
|
// 已收款
|
||||||
newBill.setPaymentStatus("1");
|
newBill.setPaymentStatus("1");
|
||||||
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
// 部分收款
|
// 部分收款
|
||||||
newBill.setPaymentStatus("2");
|
newBill.setPaymentStatus("2");
|
||||||
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
emisSettleBillMapper.updateEmisSettleBill(newBill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 未收款则更新运单状态未收款状态
|
// 未收款则更新运单状态未收款状态
|
||||||
List<EmisSettleSubBill> list = emisBaseService.selectSubBillListBySettleBillNo(settleBillNo);
|
List<EmisSettleSubBill> list = emisBaseService.selectSubBillListBySettleBillNo(settleBillNo);
|
||||||
if (!CollectionUtils.isEmpty(list)) {
|
if (!CollectionUtils.isEmpty(list)) {
|
||||||
@ -1143,8 +1144,82 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 更新发票收款状态
|
||||||
|
updateInvoicePaymentStatus(settleBillNo);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新发票收款状态(发票不考虑理赔金额等)
|
||||||
|
*
|
||||||
|
* @param settleBillNo 账单号
|
||||||
|
*/
|
||||||
|
private void updateInvoicePaymentStatus(String settleBillNo) {
|
||||||
|
try {
|
||||||
|
// 获取所有包含当前账单号的发票记录(发票可能对应多个账单号,用逗号分隔)
|
||||||
|
List<EmisSettleInvoiceRecord> invoiceRecordList = emisSettleInvoiceRecordMapper
|
||||||
|
.selectInvoiceRecordListBySettleBillNo(settleBillNo);
|
||||||
|
if (CollectionUtils.isEmpty(invoiceRecordList)) {
|
||||||
|
log.debug("updateInvoicePaymentStatus===>账单{}没有发票记录", settleBillNo);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 遍历每个发票记录,更新其收款状态
|
||||||
|
for (EmisSettleInvoiceRecord invoiceRecord : invoiceRecordList) {
|
||||||
|
String invoiceSettleBillNo = invoiceRecord.getSettleBillNo();
|
||||||
|
if (StringUtils.isEmpty(invoiceSettleBillNo)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析发票对应的所有账单号(可能用逗号分隔)
|
||||||
|
String[] billNoArray = invoiceSettleBillNo.split(",");
|
||||||
|
BigDecimal totalRecedMoney = BigDecimal.ZERO;
|
||||||
|
|
||||||
|
// 遍历发票对应的每个账单号,计算每个账单的实际收款金额并累加
|
||||||
|
for (String billNo : billNoArray) {
|
||||||
|
billNo = billNo.trim();
|
||||||
|
if (StringUtils.isEmpty(billNo)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 通过账单号查询emis_settle_bill获取reced_money作为已收金额
|
||||||
|
EmisSettleBill bill = selectEmisSettleBillBySettleBillNo(billNo);
|
||||||
|
BigDecimal billTotalHasPayMoney = (bill != null && bill.getRecedMoney() != null)
|
||||||
|
? bill.getRecedMoney()
|
||||||
|
: BigDecimal.ZERO;
|
||||||
|
totalRecedMoney = totalRecedMoney.add(billTotalHasPayMoney);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取发票申请金额
|
||||||
|
BigDecimal applyMoney = invoiceRecord.getApplyMoney() != null ? invoiceRecord.getApplyMoney()
|
||||||
|
: BigDecimal.ZERO;
|
||||||
|
|
||||||
|
// 计算收款状态
|
||||||
|
String paymentStatus;
|
||||||
|
if (totalRecedMoney.compareTo(BigDecimal.ZERO) == 0) {
|
||||||
|
paymentStatus = "0"; // 未付款
|
||||||
|
} else if (totalRecedMoney.compareTo(applyMoney) >= 0) {
|
||||||
|
paymentStatus = "1"; // 已付款
|
||||||
|
} else {
|
||||||
|
paymentStatus = "2"; // 部分付款
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新发票记录收款状态
|
||||||
|
EmisSettleInvoiceRecord updateInvoiceRecord = new EmisSettleInvoiceRecord();
|
||||||
|
updateInvoiceRecord.setId(invoiceRecord.getId());
|
||||||
|
updateInvoiceRecord.setPaymentStatus(paymentStatus);
|
||||||
|
updateInvoiceRecord.setRecedMoney(totalRecedMoney);
|
||||||
|
emisSettleInvoiceRecordMapper.updateEmisSettleInvoiceRecord(updateInvoiceRecord);
|
||||||
|
|
||||||
|
log.debug("updateInvoicePaymentStatus===>发票申请序号:{}, 收款状态:{}, 已收金额:{}, 申请金额:{}, 对应账单号:{}",
|
||||||
|
invoiceRecord.getApplySeqNo(), paymentStatus, totalRecedMoney, applyMoney, invoiceSettleBillNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("updateInvoicePaymentStatus===>更新发票收款状态失败,账单号: {}", settleBillNo, e);
|
||||||
|
// 不抛出异常,避免影响主流程
|
||||||
|
}
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public void exportSeaWayBill(HttpServletResponse response, EmisSettleBill emisSettleBill) {
|
public void exportSeaWayBill(HttpServletResponse response, EmisSettleBill emisSettleBill) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import com.xdadan.erp.emis.mapper.EmisSettleInvoiceRecordMapper;
|
import com.xdadan.erp.emis.mapper.EmisSettleInvoiceRecordMapper;
|
||||||
import com.xdadan.erp.emis.service.IEmisSettleInvoiceRecordService;
|
import com.xdadan.erp.emis.service.IEmisSettleInvoiceRecordService;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import com.xdadan.erp.emis.mapper.EmisSettlePayRecordMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开票记录表Service业务层处理
|
* 开票记录表Service业务层处理
|
||||||
@ -62,6 +63,9 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
|||||||
@Autowired
|
@Autowired
|
||||||
private EmisCustomerInvoiceInfoMapper emisCustomerInvoiceInfoMapper;
|
private EmisCustomerInvoiceInfoMapper emisCustomerInvoiceInfoMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EmisSettlePayRecordMapper emisSettlePayRecordMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询开票记录表
|
* 查询开票记录表
|
||||||
*
|
*
|
||||||
@ -192,6 +196,29 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen
|
|||||||
emisSettleInvoiceRecord.setApplyManCode(getCurrentUser().getEmpCode());
|
emisSettleInvoiceRecord.setApplyManCode(getCurrentUser().getEmpCode());
|
||||||
emisSettleInvoiceRecord.setApplySiteCode(getCurrentUser().getOwnerSiteCode());
|
emisSettleInvoiceRecord.setApplySiteCode(getCurrentUser().getOwnerSiteCode());
|
||||||
emisSettleInvoiceRecord.setApplyDate(new Date());
|
emisSettleInvoiceRecord.setApplyDate(new Date());
|
||||||
|
// 计算发票已收金额与收款状态
|
||||||
|
BigDecimal totalRecedMoney = BigDecimal.ZERO;
|
||||||
|
for (String billNoItem : settBillNoArr) {
|
||||||
|
String billNoTrim = billNoItem == null ? null : billNoItem.trim();
|
||||||
|
if (StringUtils.isEmpty(billNoTrim)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 通过账单号查询emis_settle_bill获取reced_money作为已收金额
|
||||||
|
EmisSettleBill bill = getSettleBillBySettleBillNo(billNoTrim);
|
||||||
|
BigDecimal billRecedMoney = (bill != null && bill.getRecedMoney() != null) ? bill.getRecedMoney()
|
||||||
|
: BigDecimal.ZERO;
|
||||||
|
totalRecedMoney = totalRecedMoney.add(billRecedMoney);
|
||||||
|
}
|
||||||
|
emisSettleInvoiceRecord.setRecedMoney(totalRecedMoney);
|
||||||
|
String paymentStatus;
|
||||||
|
if (totalRecedMoney.compareTo(BigDecimal.ZERO) == 0) {
|
||||||
|
paymentStatus = "0"; // 未付款
|
||||||
|
} else if (totalRecedMoney.compareTo(emisSettleInvoiceRecord.getApplyMoney()) >= 0) {
|
||||||
|
paymentStatus = "1"; // 已付款
|
||||||
|
} else {
|
||||||
|
paymentStatus = "2"; // 部分付款
|
||||||
|
}
|
||||||
|
emisSettleInvoiceRecord.setPaymentStatus(paymentStatus);
|
||||||
// 插入开票记录
|
// 插入开票记录
|
||||||
emisSettleInvoiceRecordMapper.insertEmisSettleInvoiceRecord(emisSettleInvoiceRecord);
|
emisSettleInvoiceRecordMapper.insertEmisSettleInvoiceRecord(emisSettleInvoiceRecord);
|
||||||
|
|
||||||
|
|||||||
@ -497,8 +497,8 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I
|
|||||||
for (EmisSettlePayInvoiceRel itemSettlePayInvoiceRel : emisSettlePayRecord.getPayInvoiceRelList()) {
|
for (EmisSettlePayInvoiceRel itemSettlePayInvoiceRel : emisSettlePayRecord.getPayInvoiceRelList()) {
|
||||||
itemSettlePayInvoiceRel.setPayId(payId);
|
itemSettlePayInvoiceRel.setPayId(payId);
|
||||||
emisSettlePayInvoiceRelMapper.insertEmisSettlePayInvoiceRel(itemSettlePayInvoiceRel);
|
emisSettlePayInvoiceRelMapper.insertEmisSettlePayInvoiceRel(itemSettlePayInvoiceRel);
|
||||||
// 更新收款状态
|
// // 更新收款状态
|
||||||
emisSettleInvoiceRecordMapper.updateHasPayByApplySeqNo(itemSettlePayInvoiceRel.getApplySeqNo());
|
// emisSettleInvoiceRecordMapper.updateHasPayByApplySeqNo(itemSettlePayInvoiceRel.getApplySeqNo());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -520,16 +520,16 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I
|
|||||||
// 插入数据
|
// 插入数据
|
||||||
emisSettlePayRecordMapper.insertEmisSettlePayRecord(emisSettlePayRecord);
|
emisSettlePayRecordMapper.insertEmisSettlePayRecord(emisSettlePayRecord);
|
||||||
|
|
||||||
// // 重新计算账单收款信息
|
// 重新计算账单收款信息
|
||||||
// for (int i = 0; i < settleBillNoArr.size(); i++) {
|
for (int i = 0; i < settleBillNoArr.size(); i++) {
|
||||||
// String settleBillNo = settleBillNoArr.get(i);
|
String settleBillNo = settleBillNoArr.get(i);
|
||||||
// if (!StringUtils.isEmpty(settleBillNo)) {
|
if (!StringUtils.isEmpty(settleBillNo)) {
|
||||||
// emisSettleBillService.reCalcSettleBillPayStatus(settleBillNo);
|
emisSettleBillService.reCalcSettleBillPayStatus(settleBillNo);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// 处理部分收款逻辑 - 更新各个维度的收款状态
|
// // 处理部分收款逻辑 - 更新各个维度的收款状态
|
||||||
updatePartialPaymentStatus(emisSettlePayRecord, settleBillNoArr);
|
// updatePartialPaymentStatus(emisSettlePayRecord, settleBillNoArr);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -374,6 +374,8 @@
|
|||||||
<if test="updateTime != null">update_time,</if>
|
<if test="updateTime != null">update_time,</if>
|
||||||
<if test="createSite != null and createSite != ''">create_site,</if>
|
<if test="createSite != null and createSite != ''">create_site,</if>
|
||||||
<if test="updateSite != null and updateSite != ''">update_site,</if>
|
<if test="updateSite != null and updateSite != ''">update_site,</if>
|
||||||
|
<if test="paymentStatus != null and paymentStatus != ''">payment_status,</if>
|
||||||
|
<if test="recedMoney != null">reced_money,</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
<if test="applySeqNo != null and applySeqNo != ''">#{applySeqNo},</if>
|
<if test="applySeqNo != null and applySeqNo != ''">#{applySeqNo},</if>
|
||||||
@ -428,6 +430,8 @@
|
|||||||
<if test="updateTime != null">#{updateTime},</if>
|
<if test="updateTime != null">#{updateTime},</if>
|
||||||
<if test="createSite != null and createSite != ''">#{createSite},</if>
|
<if test="createSite != null and createSite != ''">#{createSite},</if>
|
||||||
<if test="updateSite != null and updateSite != ''">#{updateSite},</if>
|
<if test="updateSite != null and updateSite != ''">#{updateSite},</if>
|
||||||
|
<if test="paymentStatus != null and paymentStatus != ''">#{paymentStatus},</if>
|
||||||
|
<if test="recedMoney != null">#{recedMoney},</if>
|
||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user