|
|
@@ -18,6 +18,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.jzg.commons.constants.InvoiceTypeEnum;
|
|
|
import com.jzg.commons.constants.ProductsType;
|
|
|
+import com.jzg.commons.constants.SettlementIdentificationEnum;
|
|
|
import com.jzg.commons.constants.dict.InsOrderStatusEnum;
|
|
|
import com.jzg.commons.core.base.BaseController;
|
|
|
import com.jzg.commons.core.page.HttpResult;
|
|
|
@@ -864,12 +865,13 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
List<String> followIds = voList.stream().map(FollowCompanyFeeVO::getFollowId).distinct().toList();
|
|
|
List<String> settlementIds = voList.stream().map(FollowCompanyFeeVO::getSettlementId).distinct().toList();
|
|
|
|
|
|
- // 应收金额(取第一条)
|
|
|
- InsFeeFollowOrder firstFollow = followOrderMap.get(followIds.get(0));
|
|
|
+ // 应收金额(取第任意一条就行了)
|
|
|
+ InsFeeFollowOrder firstFollow = followOrderMap.getOrDefault(followIds.get(0), new InsFeeFollowOrder());
|
|
|
BigDecimal receivablePremium = Optional.ofNullable(firstFollow)
|
|
|
.map(InsFeeFollowOrder::getReceivablePremium)
|
|
|
.orElse(BigDecimal.ZERO);
|
|
|
- // 对账金额
|
|
|
+
|
|
|
+ // 对账金额,如果ins_fee_follow_order表没有数据,则去ins_fee_follow_order_reconciliation表查询,最后返回空值
|
|
|
BigDecimal reconciliationAmount = Optional.ofNullable(firstFollow)
|
|
|
.map(InsFeeFollowOrder::getReconciliationAmount)
|
|
|
.orElse(BigDecimal.ZERO);
|
|
|
@@ -893,7 +895,13 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
.map(InsPlyIncomeInvoiceSettlement::getActualReceivedAmount)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
vo.setTotalSettlementAmount(totalSettlementAmount);
|
|
|
- vo.setTotalUnSettlementAmount(totalInvoiced.subtract(totalSettlementAmount));
|
|
|
+ // 设置未结算总金额,获取所有ins_fee_follow_order数据,只有所以的都结算了,才能算已结算
|
|
|
+ List<InsFeeFollowOrder> insFeeFollowOrderList = followOrderMap.values().stream().filter(insFeeFollowOrder -> insFeeFollowOrder.getYear().toString().equals(year) && insFeeFollowOrder.getMonth().toString().equals(month) && insFeeFollowOrder.getPartnerCompanyId().equals(partnerCompanyId) && insFeeFollowOrder.getInvoiceType().equals(invoiceType)).toList();
|
|
|
+ if (insFeeFollowOrderList.size() == insFeeFollowOrderList.stream().filter(insFeeFollowOrder -> SettlementIdentificationEnum.SETTLED.getCode().equals(insFeeFollowOrder.getSettlementIdentification())).count()){
|
|
|
+ vo.setTotalUnSettlementAmount(BigDecimal.ZERO);
|
|
|
+ }else{
|
|
|
+ vo.setTotalUnSettlementAmount(totalInvoiced.subtract(totalSettlementAmount));
|
|
|
+ }
|
|
|
|
|
|
aggResult.add(vo);
|
|
|
}
|
|
|
@@ -1099,6 +1107,19 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
newVo.setTotalUnInvoiced(BigDecimal.ZERO);
|
|
|
newVo.setTotalSettlementAmount(BigDecimal.ZERO);
|
|
|
newVo.setTotalUnSettlementAmount(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ // 查询对账金额,如果有值就赋上值
|
|
|
+ LambdaQueryWrapper<InsFeeFollowOrderReconciliation> insFeeFollowOrderReconciliationLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ insFeeFollowOrderReconciliationLambdaQueryWrapper.eq(InsFeeFollowOrderReconciliation::getYear, signYear);
|
|
|
+ insFeeFollowOrderReconciliationLambdaQueryWrapper.eq(InsFeeFollowOrderReconciliation::getMonth, signMonth);
|
|
|
+ insFeeFollowOrderReconciliationLambdaQueryWrapper.eq(InsFeeFollowOrderReconciliation::getPartnerCompanyId, partnerCompanyId);
|
|
|
+ insFeeFollowOrderReconciliationLambdaQueryWrapper.eq(InsFeeFollowOrderReconciliation::getInvoiceType, invoiceType);
|
|
|
+ List<InsFeeFollowOrderReconciliation> insFeeFollowOrderReconciliations = insFeeFollowOrderReconciliationMapper.selectList(insFeeFollowOrderReconciliationLambdaQueryWrapper);
|
|
|
+ if (CollUtil.isNotEmpty(insFeeFollowOrderReconciliations)){
|
|
|
+ InsFeeFollowOrderReconciliation insFeeFollowOrderReconciliation = CollUtil.getFirst(insFeeFollowOrderReconciliations);
|
|
|
+ newVo.setTotalReconciliationAmount(insFeeFollowOrderReconciliation.getReconciliationAmount());
|
|
|
+ }
|
|
|
+
|
|
|
newVo.setCompanyName(getCompanyName(partnerCompanyId, companyMap));
|
|
|
resultList.add(newVo);
|
|
|
}
|
|
|
@@ -1690,9 +1711,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
return false;
|
|
|
}
|
|
|
long result;
|
|
|
- final String number = "1";
|
|
|
+ final String number = SettlementIdentificationEnum.SETTLED.getCode();
|
|
|
result = switch (invoiceType) {
|
|
|
- case number -> baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
|
|
|
+ case "1" -> baseMapper.update(new LambdaUpdateWrapper<InsPlyIncome>()
|
|
|
.in(InsPlyIncome::getId, incomeIds)
|
|
|
.set(InsPlyIncome::getSuperviseSettlement, number)
|
|
|
.set(InsPlyIncome::getSettlementTime,settlementTime)
|
|
|
@@ -1762,7 +1783,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
String systemCode, String companyId) {
|
|
|
log.info("更新结算状态: invoiceType=[{}], incomeIds=[{}], settlementTime=[{}], systemCode=[{}], companyId=[{}]",
|
|
|
invoiceType, JSONUtil.toJsonStr(incomeIds), settlementTime, systemCode, companyId);
|
|
|
- final String number = "1";
|
|
|
+ final String number = SettlementIdentificationEnum.SETTLED.getCode();
|
|
|
long result = 0;
|
|
|
// 针对 invoiceType 为 2 或 4 的特殊逻辑:按签约年月、系统编码、公司ID进行批量更新
|
|
|
if ("2".equals(invoiceType) || "4".equals(invoiceType)) {
|
|
|
@@ -2662,7 +2683,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
if (surplusPremium.compareTo(settlementVo.getActualReceivedAmount()) <= 0) {
|
|
|
log.info("序号为[{}]的发票已经结算完成",insPlyIncomeInvoice.getId());
|
|
|
// 更新发票状态
|
|
|
- insPlyIncomeInvoice.setStatus("1");
|
|
|
+ insPlyIncomeInvoice.setStatus(SettlementIdentificationEnum.SETTLED.getCode());
|
|
|
insPlyIncomeInvoiceMapper.updateById(insPlyIncomeInvoice);
|
|
|
// 将所有订单进行标记
|
|
|
List<String> incomeIds = new ArrayList<>();
|
|
|
@@ -4424,11 +4445,14 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
if (surplusPremium.compareTo(settlementVo.getActualReceivedAmount()) <= 0) {
|
|
|
log.info("序号为[{}]的发票已经结算完成",insPlyIncomeInvoice.getId());
|
|
|
// 更新发票状态
|
|
|
- insPlyIncomeInvoice.setStatus("1");
|
|
|
+ insPlyIncomeInvoice.setStatus(SettlementIdentificationEnum.SETTLED.getCode());
|
|
|
insPlyIncomeInvoiceMapper.updateById(insPlyIncomeInvoice);
|
|
|
// 判断是需要更新哪个字段
|
|
|
this.updateIncomeSettlementStatus(insPlyIncomeInvoice.getInvoiceType(), null, LocalDateTime.now(),
|
|
|
baseController.getSystemCode(), insPlyIncomeInvoice.getCompanyId());
|
|
|
+
|
|
|
+ // 更新 ins_fee_follow_order的结算状态
|
|
|
+ updateFollowSettlementIdentification(settlementVo.getInvoicingId());
|
|
|
}else{
|
|
|
log.info("invoiceId=[{}], 还剩[{}]钱没有结算",settlementVo.getInvoicingId(), surplusPremium.subtract(settlementVo.getActualReceivedAmount()));
|
|
|
}
|
|
|
@@ -6143,11 +6167,11 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
// 标记结算完成的时候,将未结算金额汇总 到最后一次结算的回款差额里面 lipf 2026年7月7日10:53:47
|
|
|
BigDecimal settlementAmount = insPlyIncomeInvoiceSettlements.stream().map(action-> BigDecimalUtil.add(action.getSettlementPaymentDifference(), action.getActualReceivedAmount()))
|
|
|
.reduce(BigDecimal.ZERO,BigDecimal::add);
|
|
|
- BigDecimal subtract = BigDecimalUtil.subtract(insPlyIncomeInvoice.getReceivableSupervisePremium(), settlementAmount);
|
|
|
+ BigDecimal subtract = BigDecimalUtil.subtract(settlementAmount, insPlyIncomeInvoice.getReceivableSupervisePremium());
|
|
|
if (CollUtil.isNotEmpty(insPlyIncomeInvoiceSettlements)){
|
|
|
if(subtract.compareTo(BigDecimal.ZERO) != 0){
|
|
|
InsPlyIncomeInvoiceSettlement insPlyIncomeInvoiceSettlement = insPlyIncomeInvoiceSettlements.get(0);
|
|
|
- insPlyIncomeInvoiceSettlement.setSettlementPaymentDifference(BigDecimalUtil.add(subtract,insPlyIncomeInvoiceSettlement.getSettlementPaymentDifference()));
|
|
|
+ insPlyIncomeInvoiceSettlement.setSettlementPaymentDifference(subtract);
|
|
|
insPlyIncomeInvoiceSettlement.setSettlementPaymentReason(settlementPaymentReason);
|
|
|
insPlyIncomeInvoiceSettlementMapper.updateById(insPlyIncomeInvoiceSettlement);
|
|
|
}
|
|
|
@@ -6160,6 +6184,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
insPlyIncomeInvoiceSettlement.setSettlementPaymentReason(settlementPaymentReason);
|
|
|
insPlyIncomeInvoiceSettlementMapper.insert(insPlyIncomeInvoiceSettlement);
|
|
|
}
|
|
|
+ // 更新 ins_fee_follow_order的结算状态
|
|
|
+ updateFollowSettlementIdentification(invoiceId);
|
|
|
+
|
|
|
return insPlyIncomeInvoiceMapper.update(null, new LambdaUpdateWrapper<InsPlyIncomeInvoice>()
|
|
|
.set(InsPlyIncomeInvoice::getStatus,"1")
|
|
|
.set(InsPlyIncomeInvoice::getUpdateBy,userName)
|
|
|
@@ -6167,6 +6194,33 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
|
|
|
.eq(InsPlyIncomeInvoice::getId, invoiceId));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据发票ID更新发票的结算完成标识
|
|
|
+ * <p>
|
|
|
+ * 该方法用于根据指定的发票ID更新发票的结算完成标识,包括以下处理逻辑:
|
|
|
+ * 1. 获取当前操作用户信息和租户代码
|
|
|
+ * 2. 查询指定发票ID的关联的应收订单列表
|
|
|
+ */
|
|
|
+ private void updateFollowSettlementIdentification(String invoiceId) {
|
|
|
+ // 更新 ins_fee_follow_order的结算状态
|
|
|
+ LambdaQueryWrapper<InsPlyFollowInvoiceLink> insPlyFollowInvoiceLinkLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ insPlyFollowInvoiceLinkLambdaQueryWrapper.eq(InsPlyFollowInvoiceLink::getInvoiceId, invoiceId);
|
|
|
+ List<InsPlyFollowInvoiceLink> insPlyFollowInvoiceLinks = insPlyFollowInvoiceLinkMapper.selectList(insPlyFollowInvoiceLinkLambdaQueryWrapper);
|
|
|
+ if (CollUtil.isNotEmpty(insPlyFollowInvoiceLinks)){
|
|
|
+ // 根据link表的follow_id查询follow表
|
|
|
+ LambdaQueryWrapper<InsFeeFollowOrder> insFeeFollowOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ insFeeFollowOrderLambdaQueryWrapper.in(InsFeeFollowOrder::getId, insPlyFollowInvoiceLinks.stream().map(InsPlyFollowInvoiceLink::getFollowId).toList());
|
|
|
+ List<InsFeeFollowOrder> insFeeFollowOrders = insFeeFollowOrderMapper.selectList(insFeeFollowOrderLambdaQueryWrapper);
|
|
|
+ if (CollUtil.isNotEmpty(insFeeFollowOrders)){
|
|
|
+ // 批量修改:是否结算完成
|
|
|
+ for (InsFeeFollowOrder insFeeFollowOrder : insFeeFollowOrders) {
|
|
|
+ insFeeFollowOrder.setSettlementIdentification(SettlementIdentificationEnum.SETTLED.getCode());
|
|
|
+ }
|
|
|
+ insFeeFollowOrderMapper.updateById(insFeeFollowOrders);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* yyyy-MM-dd 转当天起始 LocalDateTime
|
|
|
*/
|