Browse Source

2023年11月14日17:40:44

纪新园 2 years ago
parent
commit
17df64c62d
13 changed files with 993 additions and 75 deletions
  1. 8 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java
  2. 24 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FinAccBills.java
  3. 139 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/ListAccBillVO.java
  4. 204 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/vo/FinAccBillsVO.java
  5. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/entity/FinStlBillsItems.java
  6. 3 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsController.java
  7. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.java
  8. 145 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml
  9. 16 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java
  10. 10 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFinAccBillsService.java
  11. 0 2
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  12. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FinAccBillsServiceImpl.java
  13. 426 68
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

+ 8 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java

@@ -509,7 +509,7 @@ public class FeeCenter implements Serializable {
 	/**
 	 * 对账单 Id
 	 */
-	@ApiModelProperty(value = "对账单 Id")
+	@ApiModelProperty(value = "结算单 Id")
 	private Long stlBillId;
 	/**
 	 * 结算单编号
@@ -781,6 +781,12 @@ public class FeeCenter implements Serializable {
 	private Date approveTime;
 
 	/**
+	 * 审核时间
+	 */
+	@TableField(exist = false)
+	private List<String> approveTimeList;
+
+	/**
 	 * 审核状态 0 新建费用 1 已请核 2 审核中 3 驳回 4 通过
 	 */
 	@ApiModelProperty(value = "审核状态 0 新建费用 1 已请核 2 审核中 3 驳回 4 通过")
@@ -828,4 +834,5 @@ public class FeeCenter implements Serializable {
 	private String billKey;
 
 
+
 }

+ 24 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FinAccBills.java

@@ -103,6 +103,12 @@ public class FinAccBills implements Serializable {
 	 */
 	@ApiModelProperty(value = "账单日期")
 	private Date billDate;
+
+	/**
+	 * 账单日期
+	 */
+	@TableField(exist = false)
+	private List<String> billDateList;
 	/**
 	 * 账单类型,LOCAL 应收,LOCAL 应付,舱单 应收,舱单 应付
 	 */
@@ -548,5 +554,23 @@ public class FinAccBills implements Serializable {
 	@TableField(exist = false)
 	private String businessTypeCode;
 
+	/**
+	 * 三检单号
+	 */
+	@ApiModelProperty(value = "三检单号")
+	private String threeInspectionsNo;
+
+	/**
+	 * 审核日期
+	 */
+	@ApiModelProperty(value = "审核日期")
+	private Date approvedDate;
+
+	/**
+	 * 审核日期
+	 */
+	@TableField(exist = false)
+	private List<String> approvedDateList;
+
 
 }

+ 139 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/ListAccBillVO.java

@@ -0,0 +1,139 @@
+package org.springblade.los.finance.fee.entity;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/11/14
+ */
+@Data
+public class ListAccBillVO {
+
+	/**
+	 * 审核状态 0 新建费用 1 已请核 2 审核中 3 驳回 4 通过
+	 */
+	private String auditStatus;
+
+	/**
+	 * 对账单位
+	 */
+	private String corpCnName;
+
+	/**
+	 * 是否已签收(0 否 1是)
+	 */
+	private Integer isSignfor;
+
+	/**
+	 * 收付 D=收 C=付
+	 */
+	private String dc;
+
+	/**
+	 * 币别
+	 */
+	private String curCode;
+
+	/**
+	 * 业务来源
+	 */
+	private String srcType;
+
+	/**
+	 * 业务员
+	 */
+	private String srcCnName;
+
+	/**
+	 * 是否销账(0 未销账 3 部分销账 9 销账)
+	 */
+	private Integer isCleared;
+
+	/**
+	 * 单据编号  JOB NO
+	 */
+	private String billNo;
+
+	/**
+	 * 账单编号  ACCT NO
+	 */
+	private String accBillNo;
+
+	/**
+	 * MB/L NO
+	 */
+	private String mblno;
+	/**
+	 * HB/L NO
+	 */
+	private String hblno;
+
+	/**
+	 * 是否对账(0 未对账 1 已对账)
+	 */
+	private Integer isChecked;
+
+	/**
+	 * 财务日期
+	 */
+	private List<String> billDateList;
+
+	/**
+	 * 审核时间
+	 */
+	private List<String> approveTimeList;
+
+	/**
+	 * 查询金额
+	 */
+	private String queryAmount;
+
+	/**
+	 * 业务类型
+	 */
+	private String businessType;
+
+	/**
+	 * 发票状态 0 = 未开 9=已开 2 待开 3 不开
+	 */
+	private Integer invoiceStatus;
+
+	/**
+	 * 中文船名
+	 */
+	private String vesselCnName;
+
+	/**
+	 * 航次
+	 */
+	private String voyageNo;
+
+	/**
+	 * 三检单号
+	 */
+	private String threeInspectionsNo;
+
+	/**
+	 * 预收帐款
+	 */
+	private BigDecimal receivableAdvance;
+
+	/**
+	 * 发票号
+	 */
+	private String invoiceNo;
+
+	/**
+	 * 操作员
+	 */
+	private String createUserName;
+
+	/**
+	 * 订舱号 BKNO
+	 */
+	private String bookingNo;
+
+}

+ 204 - 2
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/vo/FinAccBillsVO.java

@@ -16,10 +16,14 @@
  */
 package org.springblade.los.finance.fee.vo;
 
-import org.springblade.los.finance.fee.entity.FinAccBills;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import io.swagger.annotations.ApiModel;
+import org.springblade.los.finance.fee.entity.FinAccBills;
+
+import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 业务-财务账单视图实体类
@@ -33,4 +37,202 @@ import io.swagger.annotations.ApiModel;
 public class FinAccBillsVO extends FinAccBills {
 	private static final long serialVersionUID = 1L;
 
+
+	/**
+	 * 业务类型
+	 */
+	private String businessType;
+	/**
+	 * 单据类型, DD=直单(默认) MM=主单 MH=主分单 HH=从分单
+	 */
+	private String billType;
+
+	/**
+	 * 费用中心id
+	 */
+	private String sourceId;
+
+	/**
+	 * 财务年
+	 */
+	private Integer accountYear;
+	/**
+	 * 财务月
+	 */
+	private Integer accountMonth;
+	/**
+	 * 财务日
+	 */
+	private Integer accountDay;
+	/**
+	 * 业务来源
+	 */
+	private String srcType;
+	/**
+	 * 来源 id
+	 */
+	private Long srcId;
+	/**
+	 * 来源中文
+	 */
+	private String srcCnName;
+	/**
+	 * 来源英文
+	 */
+	private String srcEnName;
+
+	/**
+	 * 航线 id
+	 */
+	private Long lineId;
+	/**
+	 * 航线中文名称
+	 */
+	private String lineCnName;
+	/**
+	 * 航线英文名称
+	 */
+	private String lineEnName;
+
+	/**
+	 *
+	 * 箱号
+	 */
+	private String cntrNo;
+
+	/**
+	 * 数量
+	 */
+	private BigDecimal quantity;
+	/**
+	 * 单位
+	 */
+	private String unitNo;
+	/**
+	 * 单价
+	 */
+	private BigDecimal price;
+
+	/**
+	 * 费用 Id
+	 */
+	private Long feeId;
+	/**
+	 * 费用编号
+	 */
+	private String feeCode;
+	/**
+	 * 费用中文名称
+	 */
+	private String feeCnName;
+	/**
+	 * 费用英文名称
+	 */
+	private String feeEnName;
+
+	/**
+	 * 汇率,外币转为本币的汇率
+	 */
+	private BigDecimal exrate;
+	/**
+	 * 是否含税(0 不含税 1 含税)
+	 */
+	private Integer isTax;
+	/**
+	 * 税种
+	 */
+	private String taxType;
+	/**
+	 * 税率 %,即 3% 的税率,值为 3.00
+	 */
+	private BigDecimal taxRate;
+	/**
+	 * 费率税率 %,即 3% 的税率,值为 3.00
+	 */
+	private BigDecimal surchargeRate;
+	/**
+	 * 折扣金额
+	 */
+	private BigDecimal amountDiscount;
+	/**
+	 * 去税金额
+	 */
+	private BigDecimal amountNet;
+	/**
+	 * 税额
+	 */
+	private BigDecimal amountTax;
+	/**
+	 * 金额,amount_tax + amount_net - amount_discount
+	 */
+	private BigDecimal amount;
+	/**
+	 * 本币税额
+	 */
+	private BigDecimal amountTaxLoc;
+	/**
+	 * 本币去税金额
+	 */
+	private BigDecimal amountNetLoc;
+	/**
+	 * 本币折扣金额
+	 */
+	private BigDecimal amountDiscountLoc;
+	/**
+	 * 本币金额,外币转为本币的金额
+	 */
+	private BigDecimal amountLoc;
+
+	/**
+	 * 原币累计已结算金额
+	 */
+	private BigDecimal stlTtlAmount;
+	/**
+	 * 原币未结算金额
+	 */
+	private BigDecimal unsettledAmount;
+
+	/**
+	 * 是否已签收(0 否 1是)
+	 */
+	private Integer isSignfor;
+
+	/**
+	 * 签收人 Id
+	 */
+	private Integer signforId;
+
+	/**
+	 * 签收人
+	 */
+	private String signforName;
+
+	/**
+	 * 签收日期
+	 */
+	private Date signforDate;
+
+	/**
+	 * 操作 Id
+	 */
+	private Long operatorId;
+	/**
+	 * 操作
+	 */
+	private String operatorName;
+
+	/**
+	 * 商品包装件数英文,
+	 */
+	private String quantityPackingDescr;
+	/**
+	 * 集装箱箱型箱数英文, 1*20GP,2*40HC
+	 */
+	private String quantityCntrTypesDescr;
+
+	/**
+	 * 账期设置
+	 */
+	private String accountPeriodType;
+
 }

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/entity/FinStlBillsItems.java

@@ -617,5 +617,11 @@ public class FinStlBillsItems implements Serializable {
 	@ApiModelProperty(value = "订舱号")
 	private String bookingNo;
 
+	/**
+	 * 三检单号
+	 */
+	@TableField(exist = false)
+	private BigDecimal threeInspectionsNo;
+
 
 }

+ 3 - 1
blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsController.java

@@ -155,9 +155,11 @@ public class BCorpsController extends BladeController {
 		lambdaQueryWrapper.eq(BCorps::getTenantId, AuthUtil.getTenantId())
 			.eq(BCorps::getIsDeleted, 0)
 			.in(corpIds.size() > 0, BCorps::getId, corpIds)
+			.and(ObjectUtils.isNotNull(bCorps.getCnName()), i -> i.like(BCorps::getCode, bCorps.getCnName()).or()
+				.like(BCorps::getCnName, bCorps.getCnName()).or()
+				.like(BCorps::getEnName, bCorps.getCnName()))
 			.like(ObjectUtils.isNotNull(bCorps.getCode()), BCorps::getCode, bCorps.getCode())
 			.eq(ObjectUtils.isNotNull(bCorps.getStatus()), BCorps::getStatus, bCorps.getStatus())
-			.like(ObjectUtils.isNotNull(bCorps.getCnName()), BCorps::getCnName, bCorps.getCnName())
 			.like(ObjectUtils.isNotNull(bCorps.getEnName()), BCorps::getEnName, bCorps.getEnName())
 			.like(ObjectUtils.isNotNull(bCorps.getUscc()), BCorps::getUscc, bCorps.getUscc());
 		if (AuthUtil.getUserRole().contains("admin") || AuthUtil.getUserRole().contains("secondaryAdmin")) {

+ 6 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.java

@@ -16,10 +16,15 @@
  */
 package org.springblade.los.business.sea.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.vo.BillsVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.los.finance.fee.entity.FinAccBills;
+import org.springblade.los.finance.fee.entity.ListAccBillVO;
+import org.springblade.los.finance.fee.vo.FinAccBillsVO;
+
 import java.util.List;
 
 /**
@@ -39,4 +44,5 @@ public interface BillsMapper extends BaseMapper<Bills> {
 	 */
 	List<BillsVO> selectBillsPage(IPage page, BillsVO bills);
 
+    List<FinAccBillsVO> listAccBill(@Param("acc") ListAccBillVO finAccBills);
 }

+ 145 - 1
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml

@@ -261,7 +261,151 @@
 
 
     <select id="selectBillsPage" resultMap="billsResultMap">
-        select * from los_sea_bills where is_deleted = 0
+        select *
+        from los_sea_bills
+        where is_deleted = 0
+    </select>
+    <select id="listAccBill" resultType="org.springblade.los.finance.fee.vo.FinAccBillsVO">
+        SELECT DISTINCT
+        acc.*,
+        fee.business_type as businessType,
+        fee.bill_type as billType,
+        fee.id as sourceId,
+        fee.account_year as accountYear,
+        fee.account_month as accountMonth,
+        fee.account_day as accountDay,
+        fee.src_type as srcType,
+        fee.src_id as srcId,
+        fee.src_cn_name as srcCnName,
+        fee.src_en_name as srcEnName,
+        fee.line_id as lineId,
+        fee.line_cn_name as lineCnName,
+        fee.line_en_name as lineEnName,
+        fee.cntr_no as cntrNo,
+        SUM(fee.quantity) as quantity,
+        fee.unit_no as unitNo,
+        SUM(fee.price) as price,
+        fee.fee_id as feeId,
+        fee.fee_code as feeCode,
+        fee.fee_cn_name as feeCnName,
+        fee.fee_en_name as feeEnName,
+        fee.exrate as exrate,
+        fee.is_tax as isTax,
+        fee.tax_type as taxType,
+        fee.tax_rate as taxRate,
+        fee.surcharge_rate as surchargeRate,
+        SUM(fee.amount_discount) as amountDiscount,
+        SUM(fee.amount_net) as amountNet,
+        SUM(fee.amount_tax) as amountTax,
+        SUM(fee.amount) as amount,
+        SUM(fee.amount_tax_loc) as amountTaxLoc,
+        SUM(fee.amount_net_loc) as amountNetLoc,
+        SUM(fee.amount_discount_loc) as amountDiscountLoc,
+        SUM(fee.amount_loc) as amountLoc,
+        SUM(fee.stl_ttl_amount) as stlTtlAmount,
+        IF(SUM(fee.unsettled_amount),SUM(fee.unsettled_amount),0.00) as unsettledAmount,
+        fee.is_signfor as isSignfor,
+        fee.signfor_id as signforId,
+        fee.signfor_name as signforName,
+        fee.signfor_date as signforDate,
+        bill.operator_id as operatorId,
+        bill.operator_name as operatorName,
+        bill.quantity_packing_descr as quantityPackingDescr,
+        bill.quantity_cntr_types_descr as quantityCntrTypesDescr,
+        corp.account_period_type as accountPeriodType
+        FROM
+        los_fee_center fee
+        JOIN los_sea_bills bill ON bill.id = fee.pid
+        LEFT JOIN los_b_corps corp ON corp.id = fee.corp_id
+        LEFT JOIN los_fin_acc_bills acc ON acc.id = fee.acc_bill_id
+        WHERE
+        acc.is_deleted = '0'
+        AND fee.is_deleted = '0'
+        and bill.is_deleted = '0'
+        <if test="acc.auditStatus != null and acc.auditStatus !=''">
+            and fee.audit_status = #{acc.auditStatus}
+        </if>
+        <if test="acc.corpCnName != null and acc.corpCnName != ''">
+            and fee.corp_id = #{acc.corpCnName}
+        </if>
+        <if test="acc.isSignfor != null">
+            and fee.is_signfor = #{acc.isSignfor}
+        </if>
+        <if test="acc.dc != null and acc.dc != ''">
+            and fee.dc = #{acc.dc}
+        </if>
+        <if test="acc.curCode != null and acc.curCode != ''">
+            and fee.cur_code = #{acc.curCode}
+        </if>
+        <if test="acc.srcType != null and acc.srcType != ''">
+            and fee.src_type = #{acc.srcType}
+        </if>
+        <if test="acc.srcCnName != null and acc.srcCnName != ''">
+            and fee.src_id = #{acc.srcCnName}
+        </if>
+        <if test="acc.isCleared != null">
+            and acc.is_cleared = #{acc.isCleared}
+        </if>
+        <if test="acc.billNo != null and acc.billNo != ''">
+            and fee.bill_no like concat('%', #{acc.billNo}, '%')
+        </if>
+        <if test="acc.accBillNo != null and acc.accBillNo != ''">
+            and fee.acc_bill_no like concat('%', #{acc.accBillNo}, '%')
+        </if>
+        <if test="acc.mblno != null and acc.mblno != ''">
+            and fee.mblno like concat('%', #{acc.mblno}, '%')
+        </if>
+        <if test="acc.hblno != null and acc.hblno != ''">
+            and fee.hblno like concat('%', #{acc.hblno}, '%')
+        </if>
+        <if test="acc.isChecked != null">
+            and acc.is_checked = #{acc.isChecked}
+        </if>
+        <if test="acc.billDateList != null and acc.billDateList != '' and acc.billDateList[0] != ''">
+            and acc.bill_date &gt;= #{acc.billDateList[0]}
+        </if>
+        <if test="acc.billDateList != null and acc.billDateList != '' and acc.billDateList[1] != ''">
+            and acc.bill_date &lt;= #{acc.billDateList[1]}
+        </if>
+        <if test="acc.approveTimeList != null and acc.approveTimeList != '' and acc.approveTimeList[0] != ''">
+            and fee.approve_time &gt;= #{acc.approveTimeList[0]}
+        </if>
+        <if test="acc.approveTimeList != null and acc.approveTimeList != '' and acc.approveTimeList[1] != ''">
+            and fee.approve_time &lt;= #{acc.approveTimeList[1]}
+        </if>
+        <if test="acc.queryAmount != null and acc.queryAmount != ''">
+            and (acc.amount_dr_loc = #{acc.queryAmount} or acc.amount_cr_loc = #{acc.queryAmount})
+        </if>
+        <if test="acc.businessType != null and acc.businessType != ''">
+            and fee.business_type = #{acc.businessType}
+        </if>
+        <if test="acc.invoiceStatus != null">
+            and fee.invoice_status = #{acc.invoiceStatus}
+        </if>
+        <if test="acc.vesselCnName != null and acc.vesselCnName != ''">
+            and ( acc.vessel_cn_name like concat('%', #{acc.vesselCnName}, '%') or acc.vessel_en_name like concat('%',
+            #{acc.vesselCnName}, '%') )
+        </if>
+        <if test="acc.voyageNo != null and acc.voyageNo != ''">
+            and acc.voyage_no like concat('%', #{acc.voyageNo}, '%')
+        </if>
+        <if test="acc.threeInspectionsNo != null and acc.threeInspectionsNo != ''">
+            and acc.three_inspections_no like concat('%', #{acc.threeInspectionsNo}, '%')
+        </if>
+        <if test="acc.receivableAdvance != null">
+            and (acc.amount_dr_loc = #{acc.receivableAdvance} or acc.amount_cr_loc = #{acc.receivableAdvance})
+        </if>
+        <if test="acc.invoiceNo != null and acc.invoiceNo != ''">
+            and fee.invoice_no like concat('%', #{acc.invoiceNo}, '%')
+        </if>
+        <if test="acc.createUserName != null and acc.createUserName != ''">
+            and acc.create_user = #{acc.createUserName}
+        </if>
+        <if test="acc.bookingNo != null and acc.bookingNo != ''">
+            and acc.booking_no like concat('%', #{acc.bookingNo}, '%')
+        </if>
+        GROUP BY acc.bill_no
+        ORDER BY acc.create_time
     </select>
 
 </mapper>

+ 16 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java

@@ -32,6 +32,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.finance.fee.entity.FinAccBills;
+import org.springblade.los.finance.fee.entity.ListAccBillVO;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.los.finance.fee.vo.FinAccBillsVO;
 import org.springframework.web.bind.annotation.*;
@@ -259,6 +260,10 @@ public class FinAccBillsController extends BladeController {
 			lambdaQueryWrapper.lt(FinAccBills::getBusinessDate, finAccBills.getBusinessDateList().get(0));
 			lambdaQueryWrapper.gt(FinAccBills::getBusinessDate, finAccBills.getBusinessDateList().get(1));
 		}
+		if (ObjectUtils.isNotNull(finAccBills.getApprovedDateList()) && finAccBills.getApprovedDateList().size() > 0) {
+			lambdaQueryWrapper.lt(FinAccBills::getApprovedDate, finAccBills.getApprovedDateList().get(0));
+			lambdaQueryWrapper.gt(FinAccBills::getApprovedDate, finAccBills.getApprovedDateList().get(1));
+		}
 		if (ObjectUtils.isNotNull(finAccBills.getBusinessDivideDateList()) && finAccBills.getBusinessDivideDateList().size() > 0) {
 			lambdaQueryWrapper.lt(FinAccBills::getBusinessDivideDate, finAccBills.getBusinessDivideDateList().get(0));
 			lambdaQueryWrapper.gt(FinAccBills::getBusinessDivideDate, finAccBills.getBusinessDivideDateList().get(1));
@@ -288,5 +293,16 @@ public class FinAccBillsController extends BladeController {
 		return R.data(pages);
 	}
 
+	/**
+	 * 财务账单
+	 */
+	@GetMapping("/listAccBillV1")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "类别", notes = "传入finAccBills")
+	public R<List<FinAccBillsVO>> listAccBillV1(ListAccBillVO listAccBillVO) {
+		List<FinAccBillsVO> list = finAccBillsService.listAccBill(listAccBillVO);
+		return R.data(list);
+	}
+
 
 }

+ 10 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFinAccBillsService.java

@@ -18,10 +18,13 @@ package org.springblade.los.finance.fee.service;
 
 import org.springblade.core.tool.api.R;
 import org.springblade.los.finance.fee.entity.FinAccBills;
+import org.springblade.los.finance.fee.entity.ListAccBillVO;
 import org.springblade.los.finance.fee.vo.FinAccBillsVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 业务-财务账单 服务类
  *
@@ -59,4 +62,11 @@ public interface IFinAccBillsService extends IService<FinAccBills> {
 	 * @return
 	 */
 	R revokeBill(FinAccBills finAccBills);
+
+	/**
+	 *
+	 * @param finAccBills
+	 * @return
+	 */
+    List<FinAccBillsVO> listAccBill(ListAccBillVO finAccBills);
 }

+ 0 - 2
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java

@@ -58,8 +58,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 
 	private final BillsMapper billsMapper;
 
-	private final FeesTemplateItemsMapper feesTemplateItemsMapper;
-
 	private final CurrencyMapper currencyMapper;
 
 	@Override

+ 6 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FinAccBillsServiceImpl.java

@@ -32,6 +32,7 @@ import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.mapper.BillsMapper;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.entity.FinAccBills;
+import org.springblade.los.finance.fee.entity.ListAccBillVO;
 import org.springblade.los.finance.fee.mapper.FinAccBillsMapper;
 import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
@@ -305,6 +306,11 @@ public class FinAccBillsServiceImpl extends ServiceImpl<FinAccBillsMapper, FinAc
 		return R.data("操作成功");
 	}
 
+	@Override
+	public List<FinAccBillsVO> listAccBill(ListAccBillVO finAccBills) {
+		return billsMapper.listAccBill(finAccBills);
+	}
+
 	private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
 		Set<Object> seen = ConcurrentHashMap.newKeySet();
 		return t -> seen.add(keyExtractor.apply(t));

+ 426 - 68
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

@@ -38,7 +38,9 @@ import org.springblade.los.check.entity.LosAuditPathsLevels;
 import org.springblade.los.check.service.IAuditPathsActsService;
 import org.springblade.los.check.service.IAuditPathsLevelsService;
 import org.springblade.los.check.service.IAuditProecessService;
+import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.entity.FinAccBills;
+import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.los.finance.stl.entity.FinStlBills;
 import org.springblade.los.finance.stl.entity.FinStlBillsItems;
@@ -92,6 +94,8 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 
 	private final IAuditProecessService auditProecessService;
 
+	private final IFeeCenterService feeCenterService;
+
 	@Override
 	public IPage<FinStlBillsVO> selectFinStlBillsPage(IPage<FinStlBillsVO> page, FinStlBillsVO finStlBills) {
 		return page.setRecords(baseMapper.selectFinStlBillsPage(page, finStlBills));
@@ -204,44 +208,185 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
 			List<Long> accIds = finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getAccBillId)
 				.filter(Objects::nonNull).collect(Collectors.toList());
-			if (accIds.size() > 0 && accIds.size() == finStlBills.getFinStlBillsItemsList().size()) {
-				List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+			List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+				.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+				.eq(FinAccBills::getIsDeleted, 0)
+				.in(FinAccBills::getId, accIds));
+			for (FinAccBills item : finAccBillsList) {
+				item.setIsChecked(1);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateTime(new Date());
+				item.setUpdateUserName(AuthUtil.getUserName());
+			}
+			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.in(FeeCenter::getAccBillId, accIds)
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0));
+			List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 1);
+			feeCenterService.saveOrUpdateBatch(feeCenterListNew);
+			List<Bills> billsList = new ArrayList<>();
+			List<Long> ids = finAccBillsList.stream().map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> idsD = finAccBillsList.stream().filter(e -> "D".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> idsC = finAccBillsList.stream().filter(e -> "C".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> divideIds = finAccBillsList.stream().map(FinAccBills::getBusinessBillDivideId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> divideIdsD = finAccBillsList.stream().filter(e -> "D".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillDivideId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> divideIdsC = finAccBillsList.stream().filter(e -> "C".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillDivideId).filter(Objects::nonNull).collect(Collectors.toList());
+			if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
+				billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.eq(Bills::getIsDeleted, 0)
+					.in(Bills::getId, ids));
+			}
+			if (ObjectUtils.isNotNull(divideIds) && divideIds.size() > 0) {
+				List<Bills> divideBillsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.eq(Bills::getIsDeleted, 0)
+					.in(Bills::getId, divideIds));
+				billsList.addAll(divideBillsList);
+			}
+			for (Bills item : billsList) {
+				item.setBillingStatus(item.getBillingStatus() + 1);
+				long countD = finAccBillsService.count(new LambdaQueryWrapper<FinAccBills>()
+					.eq(FinAccBills::getBusinessBillId, item.getId())
 					.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
 					.eq(FinAccBills::getIsDeleted, 0)
-					.in(FinAccBills::getId, accIds)
-					.eq(FinAccBills::getIsChecked, 0));
-				if (accIds.size() == finAccBillsList.size()) {
-					for (FinAccBills item : finAccBillsList) {
-						item.setIsChecked(1);
-						item.setUpdateUser(AuthUtil.getUserId());
-						item.setUpdateTime(new Date());
-						item.setUpdateUserName(AuthUtil.getUserName());
+					.eq(FinAccBills::getIsChecked, 0)
+					.eq(FinAccBills::getAccountDc, "D"));
+				long countC = finAccBillsService.count(new LambdaQueryWrapper<FinAccBills>()
+					.eq(FinAccBills::getBusinessBillId, item.getId())
+					.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+					.eq(FinAccBills::getIsDeleted, 0)
+					.eq(FinAccBills::getIsChecked, 0)
+					.eq(FinAccBills::getAccountDc, "C"));
+				if (item.getCheckDrStatus() != 9) {
+					Bills bills = reconciliation(item, countD, divideIdsD, countC, divideIdsC, idsD, idsC);
+					billsMapper.updateById(bills);
+				} else {
+					billsMapper.updateById(item);
+				}
+			}
+			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+		}
+		detail.setStatus(3);
+		baseMapper.updateById(detail);
+		return R.data(detail);
+	}
+
+	private List<FeeCenter> reconciliationFeeCenter(FinStlBills detail, List<FeeCenter> feeCenterList, int count) {
+		for (FeeCenter item : feeCenterList) {
+			if (count == 1) {
+				item.setCheckBillId(detail.getId());
+				item.setCheckBillNo(detail.getBillNo());
+				item.setCheckDate(detail.getBillDate());
+				if (item.getIsTax() == 1) {
+					if ("CNY".equals(item.getCurCode())) {
+						if ("D".equals(item.getDc())) {
+							item.setCheckAmount(item.getCheckAmount().add(detail.getAmountDr()));
+						} else {
+							item.setCheckAmount(item.getCheckAmount().add(detail.getAmountCr()));
+						}
+					} else {
+						if ("D".equals(item.getDc())) {
+							item.setCheckAmount(item.getCheckAmount().add(detail.getAmountDrUsd()));
+						} else {
+							item.setCheckAmount(item.getCheckAmount().add(detail.getAmountCrUsd()));
+						}
 					}
-					List<Bills> billsList = new ArrayList<>();
-					List<Long> ids = finAccBillsList.stream().map(FinAccBills::getBusinessBillId).collect(Collectors.toList());
-					if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
-						billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
-							.eq(Bills::getTenantId, AuthUtil.getTenantId())
-							.eq(Bills::getIsDeleted, 0)
-							.in(Bills::getId, ids));
+				} else {
+					if ("CNY".equals(item.getCurCode())) {
+						if ("D".equals(item.getDc())) {
+							item.setCheckAmount(item.getCheckAmount().add(detail.getAmountDrNet()));
+						} else {
+							item.setCheckAmount(item.getCheckAmount().add(detail.getAmountCrNet()));
+						}
+					} else {
+						if ("D".equals(item.getDc())) {
+							item.setCheckAmount(item.getCheckAmount().add(detail.getAmountDrUsdNet()));
+						} else {
+							item.setCheckAmount(item.getCheckAmount().add(detail.getAmountCrUsdNet()));
+						}
 					}
-					for (Bills item : billsList) {
-						item.setBillingStatus(item.getBillingStatus() + 1);
-						billsMapper.updateById(item);
+				}
+				item.setCheckStatus(1);
+				item.setCheckById(detail.getCreateUser());
+				item.setCheckByName(detail.getCreateUserName());
+			} else {
+				item.setCheckBillId(0L);
+				item.setCheckBillNo("");
+				item.setCheckDate(null);
+				if (item.getIsTax() == 1) {
+					if ("CNY".equals(item.getCurCode())) {
+						if ("D".equals(item.getDc())) {
+							item.setCheckAmount(item.getCheckAmount().subtract(detail.getAmountDr()));
+						} else {
+							item.setCheckAmount(item.getCheckAmount().subtract(detail.getAmountCr()));
+						}
+					} else {
+						if ("D".equals(item.getDc())) {
+							item.setCheckAmount(item.getCheckAmount().subtract(detail.getAmountDrUsd()));
+						} else {
+							item.setCheckAmount(item.getCheckAmount().subtract(detail.getAmountCrUsd()));
+						}
 					}
-					finAccBillsService.saveOrUpdateBatch(finAccBillsList);
 				} else {
-					throw new RuntimeException("未找到对应账单信息");
+					if ("CNY".equals(item.getCurCode())) {
+						if ("D".equals(item.getDc())) {
+							item.setCheckAmount(item.getCheckAmount().subtract(detail.getAmountDrNet()));
+						} else {
+							item.setCheckAmount(item.getCheckAmount().subtract(detail.getAmountCrNet()));
+						}
+					} else {
+						if ("D".equals(item.getDc())) {
+							item.setCheckAmount(item.getCheckAmount().subtract(detail.getAmountDrUsdNet()));
+						} else {
+							item.setCheckAmount(item.getCheckAmount().subtract(detail.getAmountCrUsdNet()));
+						}
+					}
 				}
+				item.setCheckStatus(0);
+				item.setCheckById(0L);
+				item.setCheckByName("");
+			}
+		}
+		return feeCenterList;
+	}
+
+	private Bills reconciliation(Bills item, long countD, List<Long> divideIdsD, long countC, List<Long> divideIdsC, List<Long> idsD, List<Long> idsC) {
+		if ("MH".equals(item.getBillType())) {
+			if (countD == divideIdsD.size()) {
+				item.setCheckDrStatus(9);
+				item.setCheckDrStatusDescr("已对账");
+			} else {
+				item.setCheckDrStatus(3);
+				item.setCheckDrStatusDescr("部分对账");
+			}
+			if (countC == divideIdsC.size()) {
+				item.setCheckCrStatus(9);
+				item.setCheckCrStatusDescr("已对账");
+			} else {
+				item.setCheckCrStatus(3);
+				item.setCheckCrStatusDescr("部分对账");
+			}
+		} else {
+			if (countD == idsD.size()) {
+				item.setCheckDrStatus(9);
+				item.setCheckDrStatusDescr("已对账");
 			} else {
-				throw new RuntimeException("未找到对应账单信息");
+				item.setCheckDrStatus(3);
+				item.setCheckDrStatusDescr("部分对账");
+			}
+			if (countC == idsC.size()) {
+				item.setCheckCrStatus(3);
+				item.setCheckCrStatusDescr("已对账");
+			} else {
+				item.setCheckCrStatus(3);
+				item.setCheckCrStatusDescr("部分对账");
 			}
 		}
-		detail.setStatus(3);
-		baseMapper.updateById(detail);
-		return R.data(detail);
+		return item;
 	}
 
+
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
@@ -261,47 +406,72 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			finStlBillsItemsService.saveOrUpdateBatch(finStlBills.getFinStlBillsItemsList());
 			List<Long> accIds = finStlBills.getFinStlBillsItemsList().stream().map(FinStlBillsItems::getAccBillId)
 				.filter(Objects::nonNull).collect(Collectors.toList());
-			if (accIds.size() > 0 && accIds.size() == finStlBills.getFinStlBillsItemsList().size()) {
-				List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+			List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+				.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+				.eq(FinAccBills::getIsDeleted, 0)
+				.in(FinAccBills::getId, accIds)
+				.eq(FinAccBills::getIsChecked, 1));
+			for (FinAccBills item : finAccBillsList) {
+				item.setIsChecked(0);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateTime(new Date());
+				item.setUpdateUserName(AuthUtil.getUserName());
+			}
+			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.in(FeeCenter::getAccBillId, accIds)
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.eq(FeeCenter::getIsDeleted, 0));
+			List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 2);
+			feeCenterService.saveOrUpdateBatch(feeCenterListNew);
+			finAccBillsService.saveOrUpdateBatch(finAccBillsList);
+			List<Bills> billsList = new ArrayList<>();
+			List<Long> ids = finAccBillsList.stream().map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> idsD = finAccBillsList.stream().filter(e -> "D".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> idsC = finAccBillsList.stream().filter(e -> "C".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> divideIds = finAccBillsList.stream().map(FinAccBills::getBusinessBillDivideId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> divideIdsD = finAccBillsList.stream().filter(e -> "D".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillDivideId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> divideIdsC = finAccBillsList.stream().filter(e -> "C".equals(e.getAccountDc())).map(FinAccBills::getBusinessBillDivideId).filter(Objects::nonNull).collect(Collectors.toList());
+			if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
+				billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.eq(Bills::getIsDeleted, 0)
+					.in(Bills::getId, ids));
+			}
+			if (ObjectUtils.isNotNull(divideIds) && divideIds.size() > 0) {
+				List<Bills> divideBillsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+					.eq(Bills::getTenantId, AuthUtil.getTenantId())
+					.eq(Bills::getIsDeleted, 0)
+					.in(Bills::getId, divideIds));
+				billsList.addAll(divideBillsList);
+			}
+			for (Bills item : billsList) {
+				if (item.getBillingStatus() == 0) {
+					throw new RuntimeException("撤销对账失败");
+				}
+				item.setBillingStatus(item.getBillingStatus() - 1);
+				long countD = finAccBillsService.count(new LambdaQueryWrapper<FinAccBills>()
+					.eq(FinAccBills::getBusinessBillId, item.getId())
 					.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
 					.eq(FinAccBills::getIsDeleted, 0)
-					.in(FinAccBills::getId, accIds)
-					.eq(FinAccBills::getIsChecked, 1));
-				if (accIds.size() == finAccBillsList.size()) {
-					for (FinAccBills item : finAccBillsList) {
-						item.setIsChecked(0);
-						item.setUpdateUser(AuthUtil.getUserId());
-						item.setUpdateTime(new Date());
-						item.setUpdateUserName(AuthUtil.getUserName());
-					}
-					finAccBillsService.saveOrUpdateBatch(finAccBillsList);
-					List<Bills> billsList = new ArrayList<>();
-					List<Long> ids = finAccBillsList.stream().map(FinAccBills::getBusinessBillId).collect(Collectors.toList());
-					if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
-						billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
-							.eq(Bills::getTenantId, AuthUtil.getTenantId())
-							.eq(Bills::getIsDeleted, 0)
-							.in(Bills::getId, ids));
-					}
-					for (Bills item : billsList) {
-						if (item.getBillingStatus() == 0) {
-							throw new RuntimeException("撤销对账失败");
-						}
-						item.setBillingStatus(item.getBillingStatus() - 1);
-						billsMapper.updateById(item);
-					}
-				} else {
-					throw new RuntimeException("未找到对应账单信息");
-				}
-			} else {
-				throw new RuntimeException("未找到对应账单信息");
+					.eq(FinAccBills::getIsChecked, 1)
+					.eq(FinAccBills::getAccountDc, "D"));
+				long countC = finAccBillsService.count(new LambdaQueryWrapper<FinAccBills>()
+					.eq(FinAccBills::getBusinessBillId, item.getId())
+					.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+					.eq(FinAccBills::getIsDeleted, 0)
+					.eq(FinAccBills::getIsChecked, 1)
+					.eq(FinAccBills::getAccountDc, "C"));
+				Bills bills = reconciliation(item, countD, divideIdsD, countC, divideIdsC, idsD, idsC);
+				billsMapper.updateById(bills);
 			}
+
 		}
 		detail.setStatus(0);
 		baseMapper.updateById(detail);
 		return R.data(detail);
 	}
 
+
 	@Override
 	public R deleteByIds(List<Long> toLongList) {
 		List<FinStlBills> finStlBills = baseMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
@@ -372,13 +542,47 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
 						if (bills != null) {
 							bills.setBillingStatus(bills.getBillingStatus() + 1);
-							billsMapper.updateById(bills);
+							BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+								.eq(FinAccBills::getBusinessBillId, item.getId())
+								.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+								.eq(FinAccBills::getIsDeleted, 0)
+								.eq(FinAccBills::getIsCleared, 9)
+								.eq(FinAccBills::getAccountDc, "D")).stream()
+								.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+								.reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+								.eq(FinAccBills::getBusinessBillId, item.getId())
+								.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+								.eq(FinAccBills::getIsDeleted, 0)
+								.eq(FinAccBills::getIsCleared, 9)
+								.eq(FinAccBills::getAccountDc, "C")).stream()
+								.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+								.reduce(BigDecimal.ZERO, BigDecimal::add);
+							Bills billsDetail = settlement(bills, countD, countC);
+							billsMapper.updateById(billsDetail);
 						}
 					} else {
 						Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
 						if (bills != null) {
 							bills.setBillingStatus(bills.getBillingStatus() + 1);
-							billsMapper.updateById(bills);
+							BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+								.eq(FinAccBills::getBusinessBillId, item.getId())
+								.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+								.eq(FinAccBills::getIsDeleted, 0)
+								.eq(FinAccBills::getIsCleared, 9)
+								.eq(FinAccBills::getAccountDc, "D")).stream()
+								.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+								.reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+								.eq(FinAccBills::getBusinessBillId, item.getId())
+								.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+								.eq(FinAccBills::getIsDeleted, 0)
+								.eq(FinAccBills::getIsCleared, 9)
+								.eq(FinAccBills::getAccountDc, "C")).stream()
+								.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+								.reduce(BigDecimal.ZERO, BigDecimal::add);
+							Bills billsDetail = settlement(bills, countD, countC);
+							billsMapper.updateById(billsDetail);
 						}
 					}
 				}
@@ -491,13 +695,47 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 							Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
 							if (bills != null) {
 								bills.setBillingStatus(bills.getBillingStatus() + 1);
-								billsMapper.updateById(bills);
+								BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+									.eq(FinAccBills::getBusinessBillId, item.getId())
+									.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+									.eq(FinAccBills::getIsDeleted, 0)
+									.eq(FinAccBills::getIsCleared, 9)
+									.eq(FinAccBills::getAccountDc, "D")).stream()
+									.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+									.reduce(BigDecimal.ZERO, BigDecimal::add);
+								BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+									.eq(FinAccBills::getBusinessBillId, item.getId())
+									.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+									.eq(FinAccBills::getIsDeleted, 0)
+									.eq(FinAccBills::getIsCleared, 9)
+									.eq(FinAccBills::getAccountDc, "C")).stream()
+									.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+									.reduce(BigDecimal.ZERO, BigDecimal::add);
+								Bills billsDetail = settlement(bills, countD, countC);
+								billsMapper.updateById(billsDetail);
 							}
 						} else {
 							Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
 							if (bills != null) {
 								bills.setBillingStatus(bills.getBillingStatus() + 1);
-								billsMapper.updateById(bills);
+								BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+									.eq(FinAccBills::getBusinessBillId, item.getId())
+									.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+									.eq(FinAccBills::getIsDeleted, 0)
+									.eq(FinAccBills::getIsCleared, 9)
+									.eq(FinAccBills::getAccountDc, "D")).stream()
+									.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+									.reduce(BigDecimal.ZERO, BigDecimal::add);
+								BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+									.eq(FinAccBills::getBusinessBillId, item.getId())
+									.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+									.eq(FinAccBills::getIsDeleted, 0)
+									.eq(FinAccBills::getIsCleared, 9)
+									.eq(FinAccBills::getAccountDc, "C")).stream()
+									.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+									.reduce(BigDecimal.ZERO, BigDecimal::add);
+								Bills billsDetail = settlement(bills, countD, countC);
+								billsMapper.updateById(billsDetail);
 							}
 						}
 					}
@@ -511,6 +749,24 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 		return R.data(detail);
 	}
 
+	private Bills settlement(Bills item, BigDecimal countD, BigDecimal countC) {
+		if (item.getAmountDrLoc().compareTo(countD) == 0) {
+			item.setStlDrStatus(9);
+			item.setStlDrStatusDescr("结清");
+		} else {
+			item.setStlDrStatus(3);
+			item.setStlDrStatusDescr("部分");
+		}
+		if (item.getAmountCrLoc().compareTo(countC) == 0) {
+			item.setStlCrStatus(9);
+			item.setStlCrStatusDescr("结清");
+		} else {
+			item.setStlCrStatus(3);
+			item.setStlCrStatusDescr("部分");
+		}
+		return item;
+	}
+
 	@Override
 	public R revokeSettlement(FinStlBills finStlBills) {
 		if (finStlBills.getId() == null) {
@@ -565,13 +821,47 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 						Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
 						if (bills != null) {
 							bills.setBillingStatus(bills.getBillingStatus() - 1);
-							billsMapper.updateById(bills);
+							BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+								.eq(FinAccBills::getBusinessBillId, item.getId())
+								.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+								.eq(FinAccBills::getIsDeleted, 0)
+								.eq(FinAccBills::getIsCleared, 9)
+								.eq(FinAccBills::getAccountDc, "D")).stream()
+								.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+								.reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+								.eq(FinAccBills::getBusinessBillId, item.getId())
+								.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+								.eq(FinAccBills::getIsDeleted, 0)
+								.eq(FinAccBills::getIsCleared, 9)
+								.eq(FinAccBills::getAccountDc, "C")).stream()
+								.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+								.reduce(BigDecimal.ZERO, BigDecimal::add);
+							Bills billsDetail = settlement(bills, countD, countC);
+							billsMapper.updateById(billsDetail);
 						}
 					} else {
 						Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
 						if (bills != null) {
 							bills.setBillingStatus(bills.getBillingStatus() - 1);
-							billsMapper.updateById(bills);
+							BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+								.eq(FinAccBills::getBusinessBillId, item.getId())
+								.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+								.eq(FinAccBills::getIsDeleted, 0)
+								.eq(FinAccBills::getIsCleared, 9)
+								.eq(FinAccBills::getAccountDc, "D")).stream()
+								.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+								.reduce(BigDecimal.ZERO, BigDecimal::add);
+							BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+								.eq(FinAccBills::getBusinessBillId, item.getId())
+								.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+								.eq(FinAccBills::getIsDeleted, 0)
+								.eq(FinAccBills::getIsCleared, 9)
+								.eq(FinAccBills::getAccountDc, "C")).stream()
+								.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+								.reduce(BigDecimal.ZERO, BigDecimal::add);
+							Bills billsDetail = settlement(bills, countD, countC);
+							billsMapper.updateById(billsDetail);
 						}
 					}
 				}
@@ -636,13 +926,47 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 							Bills bills = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
 							if (bills != null) {
 								bills.setBillingStatus(bills.getBillingStatus() - 1);
-								billsMapper.updateById(bills);
+								BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+									.eq(FinAccBills::getBusinessBillId, item.getId())
+									.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+									.eq(FinAccBills::getIsDeleted, 0)
+									.eq(FinAccBills::getIsCleared, 9)
+									.eq(FinAccBills::getAccountDc, "D")).stream()
+									.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+									.reduce(BigDecimal.ZERO, BigDecimal::add);
+								BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+									.eq(FinAccBills::getBusinessBillId, item.getId())
+									.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+									.eq(FinAccBills::getIsDeleted, 0)
+									.eq(FinAccBills::getIsCleared, 9)
+									.eq(FinAccBills::getAccountDc, "C")).stream()
+									.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+									.reduce(BigDecimal.ZERO, BigDecimal::add);
+								Bills billsDetail = settlement(bills, countD, countC);
+								billsMapper.updateById(billsDetail);
 							}
 						} else {
 							Bills bills = billsMapper.selectById(finAccBills.getBusinessBillId());
 							if (bills != null) {
 								bills.setBillingStatus(bills.getBillingStatus() - 1);
-								billsMapper.updateById(bills);
+								BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+									.eq(FinAccBills::getBusinessBillId, item.getId())
+									.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+									.eq(FinAccBills::getIsDeleted, 0)
+									.eq(FinAccBills::getIsCleared, 9)
+									.eq(FinAccBills::getAccountDc, "D")).stream()
+									.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+									.reduce(BigDecimal.ZERO, BigDecimal::add);
+								BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+									.eq(FinAccBills::getBusinessBillId, item.getId())
+									.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+									.eq(FinAccBills::getIsDeleted, 0)
+									.eq(FinAccBills::getIsCleared, 9)
+									.eq(FinAccBills::getAccountDc, "C")).stream()
+									.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+									.reduce(BigDecimal.ZERO, BigDecimal::add);
+								Bills billsDetail = settlement(bills, countD, countC);
+								billsMapper.updateById(billsDetail);
 							}
 						}
 					}
@@ -706,13 +1030,47 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				Bills detail = billsMapper.selectById(finAccBills.getBusinessBillDivideId());
 				if (detail != null) {
 					detail.setBillingStatus(detail.getBillingStatus() + 1);
-					billsMapper.updateById(detail);
+					BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+						.eq(FinAccBills::getBusinessBillId, item.getId())
+						.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+						.eq(FinAccBills::getIsDeleted, 0)
+						.eq(FinAccBills::getIsCleared, 9)
+						.eq(FinAccBills::getAccountDc, "D")).stream()
+						.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+						.reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+						.eq(FinAccBills::getBusinessBillId, item.getId())
+						.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+						.eq(FinAccBills::getIsDeleted, 0)
+						.eq(FinAccBills::getIsCleared, 9)
+						.eq(FinAccBills::getAccountDc, "C")).stream()
+						.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+						.reduce(BigDecimal.ZERO, BigDecimal::add);
+					Bills billsDetail = settlement(detail, countD, countC);
+					billsMapper.updateById(billsDetail);
 				}
 			} else {
 				Bills detail = billsMapper.selectById(finAccBills.getBusinessBillId());
 				if (detail != null) {
 					detail.setBillingStatus(detail.getBillingStatus() + 1);
-					billsMapper.updateById(detail);
+					BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+						.eq(FinAccBills::getBusinessBillId, item.getId())
+						.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+						.eq(FinAccBills::getIsDeleted, 0)
+						.eq(FinAccBills::getIsCleared, 9)
+						.eq(FinAccBills::getAccountDc, "D")).stream()
+						.map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+						.reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+						.eq(FinAccBills::getBusinessBillId, item.getId())
+						.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+						.eq(FinAccBills::getIsDeleted, 0)
+						.eq(FinAccBills::getIsCleared, 9)
+						.eq(FinAccBills::getAccountDc, "C")).stream()
+						.map(FinAccBills::getStlAmountCrLoc).filter(Objects::nonNull)
+						.reduce(BigDecimal.ZERO, BigDecimal::add);
+					Bills billsDetail = settlement(detail, countD, countC);
+					billsMapper.updateById(billsDetail);
 				}
 			}
 		}