demand: 合并收款相关逻辑
This commit is contained in:
parent
ae7684f61a
commit
9307f5f20e
@ -102,21 +102,21 @@ public class EmisSettlePayRecord extends BaseEntity
|
|||||||
private String refundRegisterSiteCode;
|
private String refundRegisterSiteCode;
|
||||||
/* 退款登记人 */
|
/* 退款登记人 */
|
||||||
private String refundRegisterManCode;
|
private String refundRegisterManCode;
|
||||||
/* 安全金额 */
|
/* 理赔金额 */
|
||||||
private BigDecimal satisfyMoney;
|
private BigDecimal satisfyMoney;
|
||||||
/* 安全原因 */
|
/* 理赔原因 */
|
||||||
private String satisfyReason;
|
private String satisfyReason;
|
||||||
/* allowance_money */
|
/* 折让金额 */
|
||||||
private BigDecimal allowanceMoney;
|
private BigDecimal allowanceMoney;
|
||||||
/* allowance_reason */
|
/* 折让原因 */
|
||||||
private String allowanceReason;
|
private String allowanceReason;
|
||||||
/* deduction_money */
|
/* 抵扣金额 */
|
||||||
private BigDecimal deductionMoney;
|
private BigDecimal deductionMoney;
|
||||||
/* deduction_reason */
|
/* 抵扣原因 */
|
||||||
private String deductionReason;
|
private String deductionReason;
|
||||||
/* other_money */
|
/* 其他金额 */
|
||||||
private BigDecimal otherMoney;
|
private BigDecimal otherMoney;
|
||||||
/* other_reason */
|
/* 其他原因 */
|
||||||
private String otherReason;
|
private String otherReason;
|
||||||
/* 交易时间 */
|
/* 交易时间 */
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||||
|
|||||||
@ -897,16 +897,81 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
// refund_money
|
// refund_money
|
||||||
BigDecimal refundMoney = BigDecimal.ZERO;
|
BigDecimal refundMoney = BigDecimal.ZERO;
|
||||||
|
|
||||||
|
// 理赔/折让/抵扣/其他原因聚合(可能一个回款记录关联多个账单号)
|
||||||
|
StringBuilder satisfyReasonSb = new StringBuilder();
|
||||||
|
StringBuilder allowanceReasonSb = new StringBuilder();
|
||||||
|
StringBuilder deductionReasonSb = new StringBuilder();
|
||||||
|
StringBuilder otherReasonSb = new StringBuilder();
|
||||||
|
|
||||||
log.debug("reCalcSettleBillPayStatus===>应收:{}", oldBill.getRecMoney());
|
log.debug("reCalcSettleBillPayStatus===>应收:{}", oldBill.getRecMoney());
|
||||||
|
|
||||||
for (EmisSettlePayRecord item : payRecordList) {
|
for (EmisSettlePayRecord item : payRecordList) {
|
||||||
|
// 一个收退款记录可能关联多个账单号,这里按账单号数量分摊理赔/折让/抵扣/其他金额
|
||||||
|
int length = 1;
|
||||||
|
String itemSettleBillNo = item.getSettleBillNo();
|
||||||
|
if (StringUtils.isNotBlank(itemSettleBillNo)) {
|
||||||
|
String[] billNoArr = itemSettleBillNo.split("[,,]");
|
||||||
|
int cnt = 0;
|
||||||
|
for (String no : billNoArr) {
|
||||||
|
if (StringUtils.isNotBlank(no)) {
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cnt > 0) {
|
||||||
|
length = cnt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
totalHasPayMoney = totalHasPayMoney.add(item.getPayMoney());
|
totalHasPayMoney = totalHasPayMoney.add(item.getPayMoney());
|
||||||
satisfyMoney = satisfyMoney.add(item.getSatisfyMoney() == null ? BigDecimal.ZERO : item.getSatisfyMoney());
|
BigDecimal curSatisfyMoney = item.getSatisfyMoney() == null ? BigDecimal.ZERO : item.getSatisfyMoney();
|
||||||
allowanceMoney = allowanceMoney
|
if (length > 1) {
|
||||||
.add(item.getAllowanceMoney() == null ? BigDecimal.ZERO : item.getAllowanceMoney());
|
curSatisfyMoney = curSatisfyMoney.divide(BigDecimal.valueOf(length), 2, BigDecimal.ROUND_HALF_UP);
|
||||||
deductionMoney = deductionMoney
|
}
|
||||||
.add(item.getDeductionMoney() == null ? BigDecimal.ZERO : item.getDeductionMoney());
|
satisfyMoney = satisfyMoney.add(curSatisfyMoney);
|
||||||
otherMoney = otherMoney.add(item.getOtherMoney() == null ? BigDecimal.ZERO : item.getOtherMoney());
|
|
||||||
|
BigDecimal curAllowanceMoney = item.getAllowanceMoney() == null ? BigDecimal.ZERO : item.getAllowanceMoney();
|
||||||
|
if (length > 1) {
|
||||||
|
curAllowanceMoney = curAllowanceMoney.divide(BigDecimal.valueOf(length), 2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
}
|
||||||
|
allowanceMoney = allowanceMoney.add(curAllowanceMoney);
|
||||||
|
|
||||||
|
BigDecimal curDeductionMoney = item.getDeductionMoney() == null ? BigDecimal.ZERO : item.getDeductionMoney();
|
||||||
|
if (length > 1) {
|
||||||
|
curDeductionMoney = curDeductionMoney.divide(BigDecimal.valueOf(length), 2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
}
|
||||||
|
deductionMoney = deductionMoney.add(curDeductionMoney);
|
||||||
|
|
||||||
|
BigDecimal curOtherMoney = item.getOtherMoney() == null ? BigDecimal.ZERO : item.getOtherMoney();
|
||||||
|
if (length > 1) {
|
||||||
|
curOtherMoney = curOtherMoney.divide(BigDecimal.valueOf(length), 2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
}
|
||||||
|
otherMoney = otherMoney.add(curOtherMoney);
|
||||||
|
|
||||||
|
// 原因字段从收退款明细聚合
|
||||||
|
if (StringUtils.isNotBlank(item.getSatisfyReason())) {
|
||||||
|
if (satisfyReasonSb.length() > 0) {
|
||||||
|
satisfyReasonSb.append(",");
|
||||||
|
}
|
||||||
|
satisfyReasonSb.append(item.getSatisfyReason());
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(item.getAllowanceReason())) {
|
||||||
|
if (allowanceReasonSb.length() > 0) {
|
||||||
|
allowanceReasonSb.append(",");
|
||||||
|
}
|
||||||
|
allowanceReasonSb.append(item.getAllowanceReason());
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(item.getDeductionReason())) {
|
||||||
|
if (deductionReasonSb.length() > 0) {
|
||||||
|
deductionReasonSb.append(",");
|
||||||
|
}
|
||||||
|
deductionReasonSb.append(item.getDeductionReason());
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(item.getOtherReason())) {
|
||||||
|
if (otherReasonSb.length() > 0) {
|
||||||
|
otherReasonSb.append(",");
|
||||||
|
}
|
||||||
|
otherReasonSb.append(item.getOtherReason());
|
||||||
|
}
|
||||||
|
|
||||||
if ("2".equals(item.getRecType())) {
|
if ("2".equals(item.getRecType())) {
|
||||||
refundMoney = refundMoney.add(item.getRefundMoney() == null ? BigDecimal.ZERO : item.getRefundMoney());
|
refundMoney = refundMoney.add(item.getRefundMoney() == null ? BigDecimal.ZERO : item.getRefundMoney());
|
||||||
@ -992,6 +1057,10 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
newBill.setOtherMoney(otherMoney);
|
newBill.setOtherMoney(otherMoney);
|
||||||
// 退款金额
|
// 退款金额
|
||||||
newBill.setRefundMoney(refundMoney);
|
newBill.setRefundMoney(refundMoney);
|
||||||
|
newBill.setSatisfyReason(satisfyReasonSb.length() > 0 ? satisfyReasonSb.toString() : null);
|
||||||
|
newBill.setAllowanceReason(allowanceReasonSb.length() > 0 ? allowanceReasonSb.toString() : null);
|
||||||
|
newBill.setDeductionReason(deductionReasonSb.length() > 0 ? deductionReasonSb.toString() : null);
|
||||||
|
newBill.setOtherReason(otherReasonSb.length() > 0 ? otherReasonSb.toString() : null);
|
||||||
|
|
||||||
// 更新账单收款状态 收款金额
|
// 更新账单收款状态 收款金额
|
||||||
log.debug("reCalcSettleBillPayStatus===>收款金额:{},应收:{}", totalMoney, oldBill.getRecMoney());
|
log.debug("reCalcSettleBillPayStatus===>收款金额:{},应收:{}", totalMoney, oldBill.getRecMoney());
|
||||||
@ -1036,6 +1105,10 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
newBill.setOtherMoney(otherMoney);
|
newBill.setOtherMoney(otherMoney);
|
||||||
// 退款金额
|
// 退款金额
|
||||||
newBill.setRefundMoney(refundMoney);
|
newBill.setRefundMoney(refundMoney);
|
||||||
|
newBill.setSatisfyReason(satisfyReasonSb.length() > 0 ? satisfyReasonSb.toString() : null);
|
||||||
|
newBill.setAllowanceReason(allowanceReasonSb.length() > 0 ? allowanceReasonSb.toString() : null);
|
||||||
|
newBill.setDeductionReason(deductionReasonSb.length() > 0 ? deductionReasonSb.toString() : null);
|
||||||
|
newBill.setOtherReason(otherReasonSb.length() > 0 ? otherReasonSb.toString() : null);
|
||||||
|
|
||||||
// 更新账单收款状态 收款金额
|
// 更新账单收款状态 收款金额
|
||||||
log.debug("reCalcSettleBillPayStatus===>收款金额:{},应收:{}", totalMoney, oldBill.getRecMoney());
|
log.debug("reCalcSettleBillPayStatus===>收款金额:{},应收:{}", totalMoney, oldBill.getRecMoney());
|
||||||
@ -1117,6 +1190,10 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS
|
|||||||
newBill.setOtherMoney(otherMoney);
|
newBill.setOtherMoney(otherMoney);
|
||||||
// 退款金额
|
// 退款金额
|
||||||
newBill.setRefundMoney(refundMoney);
|
newBill.setRefundMoney(refundMoney);
|
||||||
|
newBill.setSatisfyReason(satisfyReasonSb.length() > 0 ? satisfyReasonSb.toString() : null);
|
||||||
|
newBill.setAllowanceReason(allowanceReasonSb.length() > 0 ? allowanceReasonSb.toString() : null);
|
||||||
|
newBill.setDeductionReason(deductionReasonSb.length() > 0 ? deductionReasonSb.toString() : null);
|
||||||
|
newBill.setOtherReason(otherReasonSb.length() > 0 ? otherReasonSb.toString() : null);
|
||||||
|
|
||||||
// 更新账单收款状态 收款金额
|
// 更新账单收款状态 收款金额
|
||||||
log.debug("reCalcSettleBillPayStatus===>收款金额:{},应收:{}", totalMoney, oldBill.getRecMoney());
|
log.debug("reCalcSettleBillPayStatus===>收款金额:{},应收:{}", totalMoney, oldBill.getRecMoney());
|
||||||
|
|||||||
@ -34,8 +34,10 @@ import java.time.LocalDate;
|
|||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
@ -472,6 +474,9 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I
|
|||||||
List<String> settleBillNoArr = Arrays.stream(emisSettlePayRecord.getSettleBillNo().split(",")).distinct()
|
List<String> settleBillNoArr = Arrays.stream(emisSettlePayRecord.getSettleBillNo().split(",")).distinct()
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 现金结算多账单合并收款时,校验每条运单的 moneyUserId 必须一致
|
||||||
|
validateMoneyUserIdForMergeCashSettle(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)) {
|
||||||
@ -573,6 +578,33 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validateMoneyUserIdForMergeCashSettle(EmisSettlePayRecord emisSettlePayRecord) throws EmisBizError {
|
||||||
|
if (!"1".equals(emisSettlePayRecord.getSettleType())
|
||||||
|
|| StringUtils.isBlank(emisSettlePayRecord.getSettleBillNo())
|
||||||
|
|| !emisSettlePayRecord.getSettleBillNo().contains(",")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<EmisSettlePayRel> payRelList = emisSettlePayRecord.getPayRelList();
|
||||||
|
if (CollectionUtils.isEmpty(payRelList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<Long> moneyUserIdSet = new HashSet<>();
|
||||||
|
for (EmisSettlePayRel payRel : payRelList) {
|
||||||
|
Long moneyUserId = null;
|
||||||
|
if (payRel != null
|
||||||
|
&& payRel.getWaybillDetail() != null
|
||||||
|
&& payRel.getWaybillDetail().getWaybillOther() != null) {
|
||||||
|
moneyUserId = payRel.getWaybillDetail().getWaybillOther().getMoneyUserId();
|
||||||
|
}
|
||||||
|
moneyUserIdSet.add(moneyUserId);
|
||||||
|
if (moneyUserIdSet.size() > 1) {
|
||||||
|
throw new EmisBizError(EmisBizErrorType.FAIL, "不同现金客户不允许合并收款");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void checkParam(EmisSettlePayRecord emisSettlePayRecord) throws EmisBizError {
|
private static void checkParam(EmisSettlePayRecord emisSettlePayRecord) throws EmisBizError {
|
||||||
if (StringUtils.isEmpty(emisSettlePayRecord.getSettleBillNo())) {
|
if (StringUtils.isEmpty(emisSettlePayRecord.getSettleBillNo())) {
|
||||||
throw new EmisBizError(EmisBizErrorType.FAIL, "账单编号不能为空");
|
throw new EmisBizError(EmisBizErrorType.FAIL, "账单编号不能为空");
|
||||||
|
|||||||
@ -54,7 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
|
|
||||||
<association property="waybillDetail"
|
<association property="waybillDetail"
|
||||||
column="bill_code"
|
column="bill_code"
|
||||||
select="com.xdadan.erp.emis.mapper.EmisWaybillMapper.selectWaybillBaseInfoByBillCode"
|
select="com.xdadan.erp.emis.mapper.EmisWaybillMapper.selectEmisWaybillByBillCode"
|
||||||
fetchType="lazy"
|
fetchType="lazy"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user