feat:合同标的物新增导入 银行流水强制确认 简易合同新增 发票重开 合同标的物导入
28个文件已修改
2个文件已添加
905 ■■■■■ 已修改文件
platformx-boot/src/main/resources/application-dev.yml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatement.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractPaymentSchedule.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/StatementContractVo.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/SubjectMatterExcelVO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BankStatementController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractInvoiceController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractSubjectMatterController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BankStatementService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractInvoiceService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractSubjectMatterService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java 154 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractSubjectMatterServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/resources/mapper/ContractInvoiceMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/resources/mapper/ContractMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/resources/mapper/ContractOutBoundMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/resources/mapper/CurrentOverdueMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/resources/mapper/HistoryOverdueMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/resources/mapper/PaymentSlipMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/resources/template/jxc/product.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
platformx-boot/src/main/resources/application-dev.yml
@@ -7,7 +7,7 @@
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      url: jdbc:mysql://192.168.0.146:3306/platformxx_business_finance_biz?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
      url: jdbc:mysql://192.168.0.146:3306/platformxx_business_finance_biz1?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
@@ -53,10 +53,10 @@
#bip 配置
bip:
  flag: false
  url: https://bip01.res.jzeg.cn
  codes: 111111111111111111111111,222222222222222222
  appKey: 800b2805c5584f0abb8705acbe487dc5
  appSecret: 59ba72c62a6a27203d7e517787a738be89ba55cb
  url: https://bip-pre.res.jzeg.cn/iuap-api-gateway
  codes: 10860,10802,10801,10861,10668,1086004,1086005
  appKey: 95578dbdeabc41049b75e8af3dd66d19
  appSecret: f3a098d7848f87042b39d2cc1645b6c0ffa065cd
BWInvoice:
  flag: false
@@ -64,7 +64,9 @@
# 5家单位id
dept:
  smj: 2056555602756063234
  smj: 2089995177814495234
  smjsc: 2089996921978040321
  smjzt: 2089997578009128962
  sgb: 2056556196124250113
  jxc: 2056556317461270529
  tfgs: 2056556421857497090
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java
@@ -248,6 +248,12 @@
    @Schema(description = "付款方式")
    private String paymentMethod;
    @Schema(description = "简易合同附件URL")
    private String attachmentSimpleUrl;
    @Schema(description = "简易合同附件名称")
    private String attachmentSimpleName;
    private List<ContractPaymentScheduleAddDTO> contractPaymentSchedule;
    private List<ContractSubjectMatterAddDTO> contractSubjectMatter;
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatement.java
@@ -53,7 +53,7 @@
    private Date tranDate;
    @Schema(description = "交易金额")
    @Column(columnDefinition = "decimal(10,2) comment '交易金额'")
    @Column(columnDefinition = "decimal(14,2) comment '交易金额'")
    private BigDecimal tranAmount;
    @Schema(description = "数据ID")
@@ -73,7 +73,7 @@
    private Long contractId;
    @Schema(description = "合同确认金额")
    @Column(columnDefinition = "decimal(10,2) comment '合同确认金额'")
    @Column(columnDefinition = "decimal(14,2) default 0.0 comment '合同确认金额'")
    private BigDecimal confirmAmount;
    @Schema(description = "交易说明")
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java
@@ -55,7 +55,7 @@
    private String partyB;
    @Schema(description = "合同金额")
    @Column(columnDefinition = "decimal(10,2) comment '合同金额'")
    @Column(columnDefinition = "decimal(20,2) comment '合同金额'")
    private BigDecimal amount;
    @Schema(description = "币种(CNY/USD等)")
@@ -103,6 +103,14 @@
    @Schema(description = "到期日期")
    @Column(columnDefinition = "date comment '到期日期'")
    private Date expirationDate;
    @Schema(description = "简易合同附件URL")
    @Column(columnDefinition = "VARCHAR(500) comment '简易合同附件URL'")
    private String attachmentSimpleUrl;
    @Schema(description = "简易合同附件名称")
    @Column(columnDefinition = "VARCHAR(100) comment '简易合同附件名称'")
    private String attachmentSimpleName;
    @Schema(description = "合同附件URL")
    @Column(columnDefinition = "VARCHAR(500) comment '合同附件URL'")
@@ -152,7 +160,7 @@
    private String billingStatus;
    @Schema(description = "已开票金额")
    @Column(columnDefinition = "decimal(10,2) comment '已开票金额'")
    @Column(columnDefinition = "decimal(20,2) comment '已开票金额'")
    private BigDecimal billingAmout;
    @Schema(description = "下一阶段")
@@ -168,7 +176,7 @@
    private String salesModel;
    @Schema(description = "已付款金额")
    @Column(columnDefinition = "decimal(10,2) comment '已付款金额'")
    @Column(columnDefinition = "decimal(20,2) comment '已付款金额'")
    private BigDecimal paidAmount;
    @Schema(description = "合同分类")
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java
@@ -118,6 +118,14 @@
    @Column(columnDefinition = "varchar(64) comment '关联请求ID'")
    private String bwRequestId;
    @Schema(description = "关联请求参数")
    @Column(columnDefinition = "text comment '关联请求参数'")
    private String bwRequestParam;
    @Schema(description = "请求结果")
    @Column(columnDefinition = "char comment '请求结果 0/失败 1/成功'")
    private String bwRequestResult;
    @Schema(description = "预收开票标识")
    @Column(columnDefinition = "char default '0' comment '0/否 1/是'")
    private String advanceFlag;
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractPaymentSchedule.java
@@ -33,7 +33,7 @@
    // ==================== 关联信息 ====================
    @Schema(description = "关联合同ID")
    @Column(columnDefinition = "bigint not null comment '关联合同ID'")
    @Column(columnDefinition = "bigint comment '关联合同ID'")
    private Long contractId;
    @Schema(description = "合同名称")
@@ -77,11 +77,11 @@
    private BigDecimal paymentRatio;
    @Schema(description = "计划收款金额(根据合同总金额*比例自动计算)")
    @Column(columnDefinition = "decimal(10,2) comment '计划收款金额'")
    @Column(columnDefinition = "decimal(14,2) comment '计划收款金额'")
    private BigDecimal plannedAmount;
    @Schema(description = "实际收款金额")
    @Column(columnDefinition = "decimal(10,2) comment '实际收款金额'")
    @Column(columnDefinition = "decimal(14,2) comment '实际收款金额'")
    private BigDecimal actualAmount;
    // ==================== 时序控制 ====================
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
@@ -3,7 +3,6 @@
import com.by4cloud.platformx.business.entity.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.Column;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -241,6 +240,12 @@
    private BigDecimal advancePayment;
    @Schema(description = "简易合同附件URL")
    private String attachmentSimpleUrl;
    @Schema(description = "简易合同附件名称")
    private String attachmentSimpleName;
    private List<ContractPaymentSchedule> contractPaymentSchedule;
    private List<ContractSubjectMatter> contractSubjectMatter;
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/StatementContractVo.java
New file
@@ -0,0 +1,30 @@
package com.by4cloud.platformx.business.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.Column;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class StatementContractVo {
    private Long id;
    @Schema(description = "银行流水ID")
    private Long statetId;
    @Schema(description = "交易流水")
    private String bankSeqNo;
    @Schema(description = "合同ID")
    private Long contractId;
    @Schema(description = "合同确认金额")
    private BigDecimal confirmAmount;
    private String contractNo;
    private String partyA;
    private BigDecimal amount;
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/SubjectMatterExcelVO.java
New file
@@ -0,0 +1,37 @@
package com.by4cloud.platformx.business.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.by4cloud.platformx.common.excel.annotation.ExcelLine;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class SubjectMatterExcelVO {
    /**
     * 导入时候回显行号
     */
    @ExcelLine
    @ExcelIgnore
    private Long lineNum;
    @ExcelProperty("标的物名称")
    private String materialName;
    @NotBlank(message = "erp编码不能为空")
    @ExcelProperty("erp编码")
    private String materialCode;
    @NotNull(message = "单价不能为空")
    @ExcelProperty("单价")
    private BigDecimal unitPrice;
    @NotNull(message = "数量不能为空")
    @ExcelProperty("数量")
    private BigDecimal quantity;
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BankStatementController.java
@@ -120,4 +120,60 @@
    public List<BankStatement> export(BankStatement bankStatement,Long[] ids) {
        return bankStatementService.list(Wrappers.lambdaQuery(bankStatement).in(ArrayUtil.isNotEmpty(ids), BankStatement::getId, ids));
    }
    /**
     * 通过id查询银行流水历史确认
     * @param id id
     * @return R
     */
    @Operation(summary = "通过id查询银行流水历史确认" , description = "通过id查询银行流水历史确认" )
    @GetMapping("/history/{id}" )
    public R getHistoryById(@PathVariable("id" ) Long id) {
        return bankStatementService.getHistoryById(id);
    }
    /**
     * 通过id删除银行流水历史确认
     * @param id id
     * @return R
     */
    @Operation(summary = "通过id删除银行流水历史确认" , description = "通过id删除银行流水历史确认" )
    @GetMapping("/itemDel/{id}" )
    public R delHistoryById(@PathVariable("id" ) Long id) {
        return bankStatementService.delHistoryById(id);
    }
    /**
     * 通过id退回银行流水历史
     * @param id id
     * @return R
     */
    @Operation(summary = "通过id退回银行流水历史" , description = "通过id退回银行流水历史" )
    @GetMapping("/backHis/{id}" )
    public R backHis(@PathVariable("id" ) Long id) {
        return bankStatementService.backHis(id);
    }
    /**
     * 通过id退回银行流水余额
     * @param id id
     * @return R
     */
    @Operation(summary = "通过id退回银行流水余额" , description = "通过id退回银行流水余额" )
    @GetMapping("/backBal/{id}" )
    public R backBal(@PathVariable("id" ) Long id) {
        return bankStatementService.backBal(id);
    }
    /**
     * 通过id退回银行流水全部
     * @param id id
     * @return R
     */
    @Operation(summary = "通过id退回银行流水全部" , description = "通过id退回银行流水全部" )
    @GetMapping("/backAll/{id}" )
    public R backAll(@PathVariable("id" ) Long id) {
        return bankStatementService.backAll(id);
    }
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractController.java
@@ -89,6 +89,18 @@
        return contractService.add(addDTO);
    }
    /**
     * 新增简易合同
     * @param addDTO 合同管理
     * @return R
     */
    @Operation(summary = "新增简易合同" , description = "新增简易合同" )
    @SysLog("新增简易合同" )
    @PostMapping("/addSimple")
    public R addSimple(@RequestBody ContractAddDTO addDTO) {
        return contractService.addSimple(addDTO);
    }
    /**
     * 修改合同管理
     * @param updateDTO 合同管理
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractInvoiceController.java
@@ -141,6 +141,15 @@
    }
    /**
     * 重新开票
     * @return
     */
    @GetMapping("/refresh/{invoiceId}")
    public R refresh(@PathVariable("invoiceId")Long invoiceId) {
        return contractInvoiceService.refresh(invoiceId);
    }
    /**
     * 红票查询
     * @return
     */
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractSubjectMatterController.java
@@ -6,7 +6,10 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.by4cloud.platformx.business.entity.ContractSubjectMatter;
import com.by4cloud.platformx.business.vo.ProductExcelVO;
import com.by4cloud.platformx.business.vo.SubjectMatterExcelVO;
import com.by4cloud.platformx.common.core.util.R;
import com.by4cloud.platformx.common.excel.annotation.RequestExcel;
import com.by4cloud.platformx.common.log.annotation.SysLog;
import com.by4cloud.platformx.business.service.ContractSubjectMatterService;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -17,6 +20,7 @@
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -136,4 +140,15 @@
    public R selectSubjectMatter(@PathVariable("contractId" ) Long contractId) {
        return contractSubjectMatterService.selectSubjectMatter(contractId);
    }
    /**
     * 导入标的物
     * @param excelVOList
     * @param bindingResult
     * @return
     */
    @PostMapping("/importSubjectMatter")
    public R importSubjectMatter(@RequestExcel List<SubjectMatterExcelVO> excelVOList, BindingResult bindingResult) {
        return contractSubjectMatterService.importSubjectMatter(excelVOList, bindingResult);
    }
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BankStatementService.java
@@ -8,4 +8,14 @@
public interface BankStatementService extends IIService<BankStatement> {
    R edit(BankStatementUpdateDTO updateDTO);
    R getHistoryById(Long id);
    R delHistoryById(Long id);
    R backBal(Long id);
    R backAll(Long id);
    R backHis(Long id);
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractInvoiceService.java
@@ -32,4 +32,6 @@
    Page pageScope(Page page, ContractQueryDTO queryDTO);
    R getContractHouseWater(Long contractId);
    R refresh(Long invoiceId);
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractService.java
@@ -64,4 +64,6 @@
    void exportContractSMJGYPMMWord(Long id, HttpServletResponse response);
    void exportContractJXCXSWord(Long id, HttpServletResponse response);
    R addSimple(ContractAddDTO addDTO);
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractSubjectMatterService.java
@@ -2,11 +2,17 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.by4cloud.platformx.business.entity.ContractSubjectMatter;
import com.by4cloud.platformx.business.vo.SubjectMatterExcelVO;
import com.by4cloud.platformx.common.core.util.R;
import org.springframework.validation.BindingResult;
import java.util.List;
public interface ContractSubjectMatterService extends IService<ContractSubjectMatter> {
    R selectSubjectMatterProcess(Long id);
    R selectSubjectMatter(Long contractId);
    R importSubjectMatter(List<SubjectMatterExcelVO> excelVOList, BindingResult bindingResult);
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java
@@ -6,8 +6,10 @@
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.by4cloud.platformx.admin.api.entity.SysDept;
import com.by4cloud.platformx.admin.api.feign.RemoteDeptService;
@@ -20,8 +22,10 @@
import com.by4cloud.platformx.business.mapper.ContractMapper;
import com.by4cloud.platformx.business.service.BankStatementService;
import com.by4cloud.platformx.business.service.PaymentConfirmService;
import com.by4cloud.platformx.business.vo.StatementContractVo;
import com.by4cloud.platformx.common.core.util.R;
import com.by4cloud.platformx.common.security.util.SecurityUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -30,6 +34,7 @@
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 银行流水
@@ -52,8 +57,8 @@
    @Value("${bip.url}")
    private String url;
    @Value("${BWInvoice.flag}")
    private Boolean bwFlag;
    @Value("${bip.flag}")
    private Boolean bipFlag;
    @Override
    public R edit(BankStatementUpdateDTO updateDTO) {
@@ -66,6 +71,15 @@
        if (toPaidTotal.compareTo(statement.getTranAmount().subtract(statement.getConfirmAmount()))>0){
            return R.failed("确认收款总额不能超过交易流水金额");
        }
        //bip推送
        if (bipFlag) {
            R r = pushSaveCollection(statement, updateDTO.getContractCollectionList());
            if (!r.isOk()){
                return r;
            }
        }
        statement.setConfirmAmount(statement.getConfirmAmount().add(toPaidTotal));
        baseMapper.updateById(statement);
@@ -88,16 +102,10 @@
            paymentConfirmService.add(addDTO);
        });
        //bip推送
        if (bwFlag) {
            pushSaveCollection(statement, updateDTO.getContractCollectionList());
        }
        return R.ok();
    }
    private void pushSaveCollection(BankStatement statement, List<StatementContractDTO> contractDTOList) {
    private R pushSaveCollection(BankStatement statement, List<StatementContractDTO> contractDTOList) {
        String accessToken = "";
        if (redisTemplate.hasKey("BIP_TOKEN")) {
            accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
@@ -106,27 +114,33 @@
        }
        if (StrUtil.isEmpty(accessToken)) {
            log.error("bip accessToken 获取异常");
            return;
            return R.failed("bip accessToken 获取异常");
        }
        String finalAccessToken = accessToken;
        BusinessCustomer customer = businessCustomerMapper.selectById(statement.getBusGuestId());
        if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){
            log.error("查询客户信息异常");
            return;
            return R.failed("查询客户信息异常");
        }
        R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
        log.info("查询单位信息:{}",JSONObject.toJSONString(r.getData()));
        if (!r.isOk()){
            log.error("查询单位信息异常");
            return;
            return R.failed("查询单位信息异常");
        }
        SysDept dept = r.getData();
        JSONObject params = genRequestParam(statement,dept,customer,contractDTOList);
        log.info("收款单集成 Request:{}", params.toJSONString());
        String result = HttpUtil.post(url + "/yonbip/EFI/receivable/save?access_token=" + finalAccessToken, params.toJSONString());
        String result = HttpUtil.post(url + "/yonbip/EFI/collection/saveandsubmit?access_token=" + finalAccessToken, params.toJSONString());
        log.info("收款单集成 Response:{}", result);
        JSONObject resultJson = JSONObject.parseObject(result);
        if (!resultJson.getString("code").equals("200")) {
            return R.failed(resultJson.getString("message"));
        }
        return R.ok();
    }
    private JSONObject genRequestParam(BankStatement statement,SysDept dept,BusinessCustomer customer,List<StatementContractDTO> contractDTOList) {
@@ -139,8 +153,10 @@
        data.put("customerCode",customer.getBipCode());//客户编码
        data.put("financeOrgCode",dept.getBipCode());//开票组织编码
        data.put("orgCode",dept.getBipCode());//业务组织编码
        data.put("bustypeCode","");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT
        data.put("bustypeCode","ar_colsale");// TODO 交易类型编码 暂估默认ZGYSFP,装备默认ZBYXGLXT暂时不能用
        data.put("oriCurrencyCode","CNY");//币种
        data.put("srcBillType","38");
        data.put("srcBillNo",statement.getBankSeqNo());
        data.put("_status","Insert");
        JSONArray bodyItem = new JSONArray();
        for (StatementContractDTO statementContractDTO:contractDTOList) {
@@ -156,4 +172,300 @@
        jsonObject.put("data",data);
        return  jsonObject;
    }
    @Override
    public R getHistoryById(Long id) {
        MPJLambdaWrapper<BankStatementItem> wrapper = new MPJLambdaWrapper<BankStatementItem>()
                .selectAll(BankStatementItem.class)
                .select(Contract::getContractNo)
                .select(Contract::getPartyA)
                .select(Contract::getAmount)
                .leftJoin(Contract.class,Contract::getId,BankStatementItem::getContractId)
                .eq(BankStatementItem::getCompId,SecurityUtils.getUser().getCompId())
                .orderByDesc(BankStatementItem::getCreateTime);
        return R.ok(bankStatementItemMapper.selectJoinList(StatementContractVo.class, wrapper));
    }
    @Override
    public R delHistoryById(Long id) {
        BankStatementItem statement = bankStatementItemMapper.selectById(id);
        BankStatement bankStatement = baseMapper.selectById(statement.getStatetId());
        Contract contract = contractMapper.selectById(statement.getContractId());
        if (ObjUtil.isNull(contract)){
            return R.failed("合同信息异常");
        }
        BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId());
        if (ObjUtil.isNull(customer)){
            return R.failed("客户信息信息异常");
        }
        R<SysDept> r = remoteDeptService.getById(contract.getPartyBId());
        if (!r.isOk()){
            return r;
        }
        //bip推送
        if (bipFlag) {
            String accessToken = "";
            if (redisTemplate.hasKey("BIP_TOKEN")) {
                accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
            } else {
                accessToken = paymentConfirmService.getAccessToken(accessToken);
            }
            if (StrUtil.isEmpty(accessToken)) {
                log.error("bip accessToken 获取异常");
                return R.failed("bip accessToken 获取异常");
            }
            String finalAccessToken = accessToken;
            JSONObject request = genRefundParam(bankStatement,statement, contract, customer, r.getData());
            log.info("收款退款单-退款单一历史确认请求入参:{}", request.toJSONString());
            String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString());
            log.info("收款退款单-退款单一历史确认请求回参:{}", result);
            JSONObject resultJson = JSONObject.parseObject(result);
            if (!resultJson.getString("code").equals("200")) {
                return R.failed(resultJson.getString("message"));
            }
        }
        bankStatementItemMapper.deleteById(id);
        bankStatement.setConfirmAmount(bankStatement.getConfirmAmount().subtract(statement.getConfirmAmount()));
        baseMapper.updateById(bankStatement);
        return R.ok();
    }
    private JSONObject genRefundParam(BankStatement bankStatement,BankStatementItem statement, Contract contract,BusinessCustomer customer, SysDept dept) {
        JSONObject jsonObject = new JSONObject();
        JSONObject data = new JSONObject();
        data.put("billDate",DateUtil.now());
        data.put("exchangeRate","1");//汇率
        data.put("exchangeRateDate",DateUtil.now());//汇率时间
        data.put("objectType","1");
        data.put("customerCode",customer.getBipCode());//客户编码
        data.put("financeOrgCode",dept.getBipCode());//开票组织编码
        data.put("orgCode",dept.getBipCode());//业务组织编码
        data.put("bustypeCode","ar_refsale");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT
        data.put("oriCurrencyCode","CNY");//币种
        data.put("srcBillType","38");
        data.put("srcBillNo",bankStatement.getBankSeqNo());
        data.put("_status","Insert");
        JSONArray bodyItem = new JSONArray();
        JSONObject item = new JSONObject();
        item.put("oriTaxIncludedAmount", statement.getConfirmAmount());
        item.put("contractNo", contract.getContractNo());
        item.put("quickTypeCode", "1");
        item.put("_status", "Insert");
        bodyItem.add(item);
        data.put("bodyItem",bodyItem);
        jsonObject.put("data",data);
        return  jsonObject;
    }
    @Override
    public R backBal(Long id) {
        BankStatement bankStatement = baseMapper.selectById(id);
        BusinessCustomer customer = businessCustomerMapper.selectById(bankStatement.getBusGuestId());
        if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){
            log.error("查询客户信息异常");
            return R.failed("查询客户信息异常");
        }
        R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
        if (!r.isOk()){
            log.error("查询单位信息异常");
            return R.failed("查询单位信息异常");
        }
        SysDept dept = r.getData();
        List<BankStatementItem> items = bankStatementItemMapper.selectList(Wrappers.<BankStatementItem>lambdaQuery()
                .eq(BankStatementItem::getStatetId,id));
        if (bipFlag){
            String accessToken = "";
            if (redisTemplate.hasKey("BIP_TOKEN")) {
                accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
            } else {
                accessToken = paymentConfirmService.getAccessToken(accessToken);
            }
            if (StrUtil.isEmpty(accessToken)) {
                log.error("bip accessToken 获取异常");
                return R.failed("bip accessToken 获取异常");
            }
            String finalAccessToken = accessToken;
            JSONObject request = genBackBalParam(bankStatement,customer,dept,items);
            log.info("收款退款单-退款余额请求入参:{}", request.toJSONString());
            String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString());
            log.info("收款退款单-退款余额请求回参:{}", result);
            JSONObject resultJson = JSONObject.parseObject(result);
            if (!resultJson.getString("code").equals("200")) {
                return R.failed(resultJson.getString("message"));
            }
        }
        bankStatement.setTranAmount(bankStatement.getConfirmAmount());
        baseMapper.updateById(bankStatement);
        return R.ok();
    }
    private JSONObject genBackBalParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept, List<BankStatementItem> items) {
        JSONObject jsonObject = new JSONObject();
        JSONObject data = new JSONObject();
        data.put("billDate",DateUtil.now());
        data.put("exchangeRate","1");//汇率
        data.put("exchangeRateDate",DateUtil.now());//汇率时间
        data.put("objectType","1");
        data.put("customerCode",customer.getBipCode());//客户编码
        data.put("financeOrgCode",dept.getBipCode());//开票组织编码
        data.put("orgCode",dept.getBipCode());//业务组织编码
        data.put("bustypeCode","ar_refsale");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT
        data.put("oriCurrencyCode","CNY");//币种
        data.put("srcBillType","38");
        data.put("srcBillNo",bankStatement.getBankSeqNo());
        data.put("_status","Insert");
        JSONArray bodyItem = new JSONArray();
        JSONObject item = new JSONObject();
        item.put("oriTaxIncludedAmount", bankStatement.getTranAmount().subtract(bankStatement.getConfirmAmount()));
        item.put("quickTypeCode", "1");
        item.put("_status", "Insert");
        bodyItem.add(item);
        data.put("bodyItem",bodyItem);
        jsonObject.put("data",data);
        return  jsonObject;
    }
    @Override
    public R backAll(Long id) {
        BankStatement bankStatement = baseMapper.selectById(id);
        BusinessCustomer customer = businessCustomerMapper.selectById(bankStatement.getBusGuestId());
        if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){
            log.error("查询客户信息异常");
            return R.failed("查询客户信息异常");
        }
        R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
        if (!r.isOk()){
            log.error("查询单位信息异常");
            return R.failed("查询单位信息异常");
        }
        SysDept dept = r.getData();
        List<BankStatementItem> items = bankStatementItemMapper.selectList(Wrappers.<BankStatementItem>lambdaQuery()
                .eq(BankStatementItem::getStatetId,id));
        if (bipFlag){
            String accessToken = "";
            if (redisTemplate.hasKey("BIP_TOKEN")) {
                accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
            } else {
                accessToken = paymentConfirmService.getAccessToken(accessToken);
            }
            if (StrUtil.isEmpty(accessToken)) {
                log.error("bip accessToken 获取异常");
                return R.failed("bip accessToken 获取异常");
            }
            String finalAccessToken = accessToken;
            JSONObject request = genBackAllParam(bankStatement,customer,dept,items);
            log.info("收款退款单-退款所有请求入参:{}", request.toJSONString());
            String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString());
            log.info("收款退款单-退款所有请求回参:{}", result);
            JSONObject resultJson = JSONObject.parseObject(result);
            if (!resultJson.getString("code").equals("200")) {
                return R.failed(resultJson.getString("message"));
            }
        }
        bankStatement.setConfirmAmount(new BigDecimal("0"));
        baseMapper.updateById(bankStatement);
        return R.ok();
    }
    private JSONObject genBackAllParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept, List<BankStatementItem> items) {
        JSONObject jsonObject = new JSONObject();
        JSONObject data = new JSONObject();
        data.put("billDate",DateUtil.now());
        data.put("exchangeRate","1");//汇率
        data.put("exchangeRateDate",DateUtil.now());//汇率时间
        data.put("objectType","1");
        data.put("customerCode",customer.getBipCode());//客户编码
        data.put("financeOrgCode",dept.getBipCode());//开票组织编码
        data.put("orgCode",dept.getBipCode());//业务组织编码
        data.put("bustypeCode","ar_refsale");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT
        data.put("oriCurrencyCode","CNY");//币种
        data.put("srcBillType","38");
        data.put("srcBillNo",bankStatement.getBankSeqNo());
        data.put("_status","Insert");
        JSONArray bodyItem = new JSONArray();
        JSONObject item = new JSONObject();
        item.put("oriTaxIncludedAmount", bankStatement.getTranAmount());
        item.put("quickTypeCode", "1");
        item.put("_status", "Insert");
        bodyItem.add(item);
        data.put("bodyItem",bodyItem);
        jsonObject.put("data",data);
        return  jsonObject;
    }
    @Override
    public R backHis(Long id) {
        BankStatement bankStatement = baseMapper.selectById(id);
        BusinessCustomer customer = businessCustomerMapper.selectById(bankStatement.getBusGuestId());
        if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){
            log.error("查询客户信息异常");
            return R.failed("查询客户信息异常");
        }
        R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
        if (!r.isOk()){
            log.error("查询单位信息异常");
            return R.failed("查询单位信息异常");
        }
        SysDept dept = r.getData();
        List<BankStatementItem> items = bankStatementItemMapper.selectList(Wrappers.<BankStatementItem>lambdaQuery()
                .eq(BankStatementItem::getStatetId,id));
        if (bipFlag){
            String accessToken = "";
            if (redisTemplate.hasKey("BIP_TOKEN")) {
                accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
            } else {
                accessToken = paymentConfirmService.getAccessToken(accessToken);
            }
            if (StrUtil.isEmpty(accessToken)) {
                log.error("bip accessToken 获取异常");
                return R.failed("bip accessToken 获取异常");
            }
            String finalAccessToken = accessToken;
            JSONObject request = genBackHisParam(bankStatement,customer,dept,items);
            log.info("收款退款单-退款历史确认请求入参:{}", request.toJSONString());
            String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString());
            log.info("收款退款单-退款历史确认请求回参:{}", result);
            JSONObject resultJson = JSONObject.parseObject(result);
            if (!resultJson.getString("code").equals("200")) {
                return R.failed(resultJson.getString("message"));
            }
        }
        bankStatement.setConfirmAmount(new BigDecimal("0"));
        baseMapper.updateById(bankStatement);
        bankStatementItemMapper.deleteByIds(items.stream().map(item->item.getId()).collect(Collectors.toList()));
        return R.ok();
    }
    private JSONObject genBackHisParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept,List<BankStatementItem> items) {
        JSONObject jsonObject = new JSONObject();
        JSONObject data = new JSONObject();
        data.put("billDate",DateUtil.now());
        data.put("exchangeRate","1");//汇率
        data.put("exchangeRateDate",DateUtil.now());//汇率时间
        data.put("objectType","1");
        data.put("customerCode",customer.getBipCode());//客户编码
        data.put("financeOrgCode",dept.getBipCode());//开票组织编码
        data.put("orgCode",dept.getBipCode());//业务组织编码
        data.put("bustypeCode","ar_refsale");//交易类型编码 暂估默认ZGYSFP,销售默认MJHYXGLXT
        data.put("oriCurrencyCode","CNY");//币种
        data.put("srcBillType","38");
        data.put("srcBillNo",bankStatement.getBankSeqNo());
        data.put("_status","Insert");
        JSONArray bodyItem = new JSONArray();
        for (BankStatementItem statementItem:items) {
            Contract contract = contractMapper.selectById(statementItem.getContractId());
            JSONObject item = new JSONObject();
            item.put("oriTaxIncludedAmount", statementItem.getConfirmAmount());
            item.put("contractNo", contract.getContractNo());
            item.put("quickTypeCode", "1");
            item.put("_status", "Insert");
            bodyItem.add(item);
        }
        data.put("bodyItem",bodyItem);
        jsonObject.put("data",data);
        return  jsonObject;
    }
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java
@@ -507,7 +507,7 @@
                ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
                contractOutBound.setInvoiceStatus("1");
                if (contractOutBoundInvoiceVo.getInvoiceNum().compareTo(contractOutBound.getOutBoundNum().subtract(contractOutBound.getInvoiceNum())) <= 0) {
                    contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().subtract(contractOutBoundInvoiceVo.getInvoiceNum()));
                    contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().add(contractOutBoundInvoiceVo.getInvoiceNum()));
                }
                contractOutBoundMapper.updateById(contractOutBound);
            });
@@ -550,11 +550,13 @@
            JSONObject invoiceDetail = new JSONObject();
            invoiceDetail.put("goodsLineNo", lineNo);
            invoiceDetail.put("goodsName", invoiceItemVo.getItemName());
            invoiceDetail.put("projectName", invoiceItemVo.getItemName());
            invoiceDetail.put("goodsCode", invoiceItemVo.getTaxCode());
            invoiceDetail.put("goodsTaxRate", invoiceItemVo.getTaxRate().divide(new BigDecimal("100")));
            invoiceDetail.put("goodsUnit", invoiceItemVo.getUnit());
            invoiceDetail.put("goodsQuantity", invoiceItemVo.getQuantity());
            invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice());
//            invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice());
            if (!StrUtil.equals(vo.getContractCategory(), "water_house")) {
                invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceNoTax());
            } else {
@@ -565,7 +567,7 @@
            invoiceDetailsList.add(invoiceDetail);
            lineNo++;
        }
        jsonObject.put("invoiceDetailsList", invoiceDetailsList);
        data.put("invoiceDetailsList", invoiceDetailsList);
        //购方
        data.put("buyerTaxNo", vo.getPartyAOrgCode());
        data.put("buyerName", vo.getPartyA());
@@ -691,7 +693,7 @@
            invoiceDetail.put("goodsTaxRate", invoiceItemVo.getTaxRate().divide(new BigDecimal("100")));
            invoiceDetail.put("goodsUnit", invoiceItemVo.getUnit());
            invoiceDetail.put("goodsQuantity", invoiceItemVo.getQuantity());
            invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice());
//            invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice());
            invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceNoTax().multiply(new BigDecimal("-1")));
            invoiceDetail.put("goodsTotalTax", invoiceItemVo.getPriceTax().multiply(new BigDecimal("-1")));
            invoiceDetailsList.add(invoiceDetail);
@@ -706,19 +708,22 @@
    public R queryBlueInvoice() {
        if (bwFlag) {
            List<ContractInvoice> contractInvoices = baseMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery()
                    .eq(ContractInvoice::getInvoiceCategory, "1").eq(ContractInvoice::getInvoiceStatus, "1"));
                    .eq(ContractInvoice::getApprovalStatus, "1")
                    .eq(ContractInvoice::getBwRequestResult,"1")
                    .isNull(ContractInvoice::getInvoicePath));
            if (ArrayUtil.isNotEmpty(contractInvoices)) {
                contractInvoices.stream().forEach(contractInvoice -> {
                    JSONObject request = new JSONObject();
                    request.put("taxNo", contractInvoice.getTaxNo());
                    JSONObject data = new JSONObject();
                    data.put("taxNo", contractInvoice.getSerialNo());
                    data.put("serialNo", contractInvoice.getSerialNo());
                    data.put("returnType", "3");
                    data.put("invoiceIssueMode", "1");
                    request.put("data",data);
                    String requestId = IdUtil.fastUUID();
                    log.info("serial_no:{},发票查询入参:{},", contractInvoice.getSerialNo(), request.toJSONString());
                    String result = HttpUtil.post("method=baiwang.output.format.query&version=1.0&request_id=" + requestId, request.toJSONString());
                    String result = HttpUtil.post(bwUrl+"method=baiwang.output.format.query&version=1.0&request_id=" + requestId, request.toJSONString());
                    log.info("serial_no:{},发票查询回参:{},", contractInvoice.getSerialNo(), result);
                    saveBwRequestRecord("baiwang.output.format.query", requestId, request.toJSONString(), result);
                    JSONObject resultObj = JSONObject.parseObject(result);
@@ -728,8 +733,6 @@
                        contractInvoice.setInvoiceStatus("2");
                        baseMapper.updateById(contractInvoice);
                    }
                    //推送BIP
                    pushBipInvoice(contractInvoice);
                });
            }
        }
@@ -768,11 +771,11 @@
            JSONObject params = genBlueReceiveParams(contractInvoice, contract, customer, dept);
            String finalAccessToken = accessToken;
            log.info("XSJZ_YS_DJ_INSERT Request:{}", params.toJSONString());
            log.info("应收发票集成入参:{}", params.toJSONString());
            String result = HttpUtil.post(url + "/yonbip/EFI/receivable/save?access_token=" + finalAccessToken, params.toJSONString());
            log.info("XSJZ_YS_DJ_INSERT Response:{}", result);
            log.info("应收发票集成回参:{}", result);
            //保存请求记录
            paymentConfirmService.saveBipRequestRecord(params, "< XSJZ_YS_DJ_001>-应收发票保存接口", result);
            paymentConfirmService.saveBipRequestRecord(params, "应收发票集成接口", result);
            JSONObject resultJson = JSONObject.parseObject(result);
            if (resultJson.containsKey("code") && resultJson.getString("code").equals("200")) {
                JSONObject data = resultJson.getJSONObject("data");
@@ -787,11 +790,11 @@
            JSONObject params = genRedReceiveParams(contractInvoice);
            String finalAccessToken = accessToken;
            log.info("XSJZ_YS_DJ_DELETE Request:", params.toJSONString());
            log.info("应收发票删除入参:{}", params.toJSONString());
            String result = HttpUtil.post(url + "/yonbip/EFI/receivable/delete?access_token=" + finalAccessToken, params.toJSONString());
            log.info("XSJZ_YS_DJ_DELETE Response:{}", result);
            log.info("应收发票删除回参:{}", result);
            //保存请求记录
            paymentConfirmService.saveBipRequestRecord(params, "< XSJZ_YS_DJ_002>-应收发票删除接口", result);
            paymentConfirmService.saveBipRequestRecord(params, "应收发票删除接口", result);
            JSONObject resultJson = JSONObject.parseObject(result);
            if (resultJson.containsKey("code") && resultJson.getString("code").equals("200")) {
                contractInvoice.setBipPush("1");
@@ -898,6 +901,7 @@
        vo.setContractCategory(contract.getContractCategory());
        invoice.setApprovalStatus("1");
        baseMapper.updateById(invoice);
        invoice.setBwRequestResult("0");
        //蓝票
        if (invoice.getInvoiceCategory().equals("1")) {
            // TODO 开蓝票接口
@@ -905,23 +909,29 @@
            if (bwFlag) {
                String requestId = IdUtil.fastUUID();
                invoice.setBwRequestId(requestId);
                log.info("蓝票请求接口入参", request.toJSONString());
                invoice.setBwRequestResult("1");
                invoice.setBwRequestParam(request.toJSONString());
                log.info("蓝票请求接口入参:{}", request.toJSONString());
                String result = HttpUtil.post(bwUrl + "method=baiwang.output.invoice.issue&version=1.0&requestId=" + requestId, request.toJSONString());
                log.info("蓝票请求接口回参", result);
                log.info("蓝票请求接口回参:{}", result);
                saveBwRequestRecord("baiwang.output.invoice.issue", requestId, request.toJSONString(), result);
                JSONObject resultObj = JSONObject.parseObject(result);
                if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) &&
                        !resultObj.getBoolean("success")) {
                    log.error("开票失败!!!");
                    return;
                        resultObj.getBoolean("success")) {
                    log.info("开票成功!!!");
                    invoice.setBwRequestResult("1");
                }
                JSONObject modelJson = resultObj.getJSONObject("model");
                JSONArray models = modelJson.getJSONArray("success");
                if (ArrayUtil.isNotEmpty(models)) {
                    JSONObject model = (JSONObject) models.get(0);
                    Date invoiceDate = DateUtil.parse(model.getString("invoiceDate"), DatePattern.PURE_DATETIME_PATTERN);
                    invoice.setInvoiceTime(invoiceDate);
                    invoice.setInvoiceNo(model.getString("invoiceNo"));
                if (ObjUtil.isNotNull(modelJson)) {
                    JSONArray models = modelJson.getJSONArray("success");
                    if (CollUtil.isNotEmpty(models)) {
                        JSONObject model = (JSONObject) models.get(0);
                        Date invoiceDate = DateUtil.parse(model.getString("invoiceDate"), DatePattern.PURE_DATETIME_PATTERN);
                        invoice.setInvoiceTime(invoiceDate);
                        invoice.setInvoiceNo(model.getString("invoiceNo"));
                        //推送BIP
                        pushBipInvoice(invoice);
                    }
                }
            }
            if (StrUtil.isNotBlank(vo.getAdvanceInvoice())){
@@ -938,6 +948,13 @@
                    }
                    if (contract.getBillingAmout().compareTo(contract.getAmount()) < 0) {
                        contract.setBillingStatus("1");
                        List<ContractOutBound> outBoundList = contractOutBoundMapper.selectList(Wrappers.<ContractOutBound>lambdaQuery()
                                .eq(ContractOutBound::getContractId,contract.getId())
                                .apply("invoice_num < out_bound_num"));
                        if (CollUtil.isNotEmpty(outBoundList)){
                            contract.setBillingStatus("2");
                        }
                    }
                    //防止重复审开票审核通过后 开票金额超出合同金额
                    if (contract.getBillingAmout().compareTo(contract.getAmount()) > 0) {
@@ -979,6 +996,7 @@
                }
                contractMapper.updateById(contract);
            }
            baseMapper.updateById(invoice);
        }
        //红票
        if (invoice.getInvoiceCategory().equals("2")) {
@@ -987,6 +1005,7 @@
            JSONObject request = genRedInvoice(contract, blueInvoice, invoice.getSerialNo());
            String requestId = IdUtil.fastUUID();
            invoice.setBwRequestId(requestId);
            invoice.setBwRequestParam(request.toJSONString());
            if (bwFlag) {
                log.info("红字确认单请求接口入参:{}", request.toJSONString());
                String result = HttpUtil.post(bwUrl + "method=baiwang.output.redinvoice.add&version=1.0&requestId=" + requestId, request.toJSONString());
@@ -994,12 +1013,13 @@
                saveBwRequestRecord("baiwang.output.redinvoice.add", requestId, request.toJSONString(), result);
                JSONObject resultObj = JSONObject.parseObject(result);
                if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) &&
                        !resultObj.getBoolean("success")) {
                    log.error("红字确认单失败!!!");
                    return;
                        resultObj.getBoolean("success")) {
                    log.info("红字确认单成功!!!");
                    invoice.setBwRequestResult("1");
                }
                JSONArray models = resultObj.getJSONArray("model");
                if (ArrayUtil.isNotEmpty(models)) {
                if (CollUtil.isNotEmpty(models)) {
                    JSONObject model = (JSONObject) models.get(0);
                    if (StrUtil.isEmpty(model.getString("confirmBillingMark")) || StrUtil.equals(model.getString("confirmBillingMark"), "N")) {
@@ -1014,6 +1034,7 @@
                    }
                }
            }
            baseMapper.updateById(invoice);
            contract.setBillingAmout(contract.getBillingAmout().subtract(invoice.getInvoiceTotalPriceTax()));
            //防止重复审开票审核通过后 开票金额为负
            if (contract.getBillingAmout().compareTo(new BigDecimal("0")) < 0) {
@@ -1120,4 +1141,77 @@
    public Page pageScope(Page page, ContractQueryDTO queryDTO) {
        return baseMapper.pageScope(page, queryDTO, DataScope.of("comp_id"));
    }
    @Override
    public R refresh(Long invoiceId) {
        ContractInvoice invoice = baseMapper.selectById(invoiceId);
        //蓝票
        if (invoice.getInvoiceCategory().equals("1")) {
            // TODO 开蓝票接口
            if (bwFlag) {
                String requestId = IdUtil.fastUUID();
                invoice.setBwRequestId(requestId);
                invoice.setBwRequestResult("1");
                invoice.setBwRequestParam(invoice.getBwRequestParam());
                log.info("蓝票请求接口入参:{}", invoice.getBwRequestParam());
                String result = HttpUtil.post(bwUrl + "method=baiwang.output.invoice.issue&version=1.0&requestId=" + requestId, invoice.getBwRequestParam());
                log.info("蓝票请求接口回参:{}", result);
                saveBwRequestRecord("baiwang.output.invoice.issue", requestId, invoice.getBwRequestParam(), result);
                JSONObject resultObj = JSONObject.parseObject(result);
                if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) &&
                        !resultObj.getBoolean("success")) {
                    log.error("开票失败!!!");
                    return R.failed(resultObj.getString("message"));
                }
                invoice.setBwRequestResult("1");
                JSONObject modelJson = resultObj.getJSONObject("model");
                JSONArray models = modelJson.getJSONArray("success");
                if (CollUtil.isNotEmpty(models)) {
                    JSONObject model = (JSONObject) models.get(0);
                    Date invoiceDate = DateUtil.parse(model.getString("invoiceDate"), DatePattern.PURE_DATETIME_PATTERN);
                    invoice.setInvoiceTime(invoiceDate);
                    invoice.setInvoiceNo(model.getString("invoiceNo"));
                    //推送BIP
                    pushBipInvoice(invoice);
                }
            }
        }
        //红票
        if (invoice.getInvoiceCategory().equals("2")) {
            // TODO 开红票接口
            String requestId = IdUtil.fastUUID();
            invoice.setBwRequestId(requestId);
            invoice.setBwRequestParam(invoice.getBwRequestParam());
            if (bwFlag) {
                log.info("红字确认单请求接口入参:{}", invoice.getBwRequestParam());
                String result = HttpUtil.post(bwUrl + "method=baiwang.output.redinvoice.add&version=1.0&requestId=" + requestId, invoice.getBwRequestParam());
                log.info("红字确认单请求接口回参:{}", result);
                saveBwRequestRecord("baiwang.output.redinvoice.add", requestId, invoice.getBwRequestParam(), result);
                JSONObject resultObj = JSONObject.parseObject(result);
                if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) &&
                        !resultObj.getBoolean("success")) {
                    log.error("红字确认单成功!!!");
                    return R.failed(resultObj.getString("message"));
                }
                invoice.setBwRequestResult("1");
                JSONArray models = resultObj.getJSONArray("model");
                if (ArrayUtil.isNotEmpty(models)) {
                    JSONObject model = (JSONObject) models.get(0);
                    if (StrUtil.isEmpty(model.getString("confirmBillingMark")) || StrUtil.equals(model.getString("confirmBillingMark"), "N")) {
                        //等待确认
                        invoice.setRedReversal("3");
                    } else if (StrUtil.equals(model.getString("confirmBillingMark"), "Y")) {
                        //确认即开
                        invoice.setInvoiceNo(model.getString("redInvoiceNo"));
                        invoice.setRedReversal("1");
                        //推送BIP
                        pushBipInvoice(invoice);
                    }
                }
            }
        }
        baseMapper.updateById(invoice);
        return R.ok();
    }
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
@@ -103,6 +103,12 @@
    @Value("${dept.smj}")
    private String smj;
    @Value("${dept.smjsc}")
    private String smjsc;
    @Value("${dept.smjzt}")
    private String smjzt;
    @Value("${dept.sgb}")
    private String sgb;
@@ -163,7 +169,8 @@
            return R.failed("标的物不能为空");
        }
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)||
                StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){
            contract.setContractNo(generateSMJContractNo());
        }
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
@@ -286,7 +293,8 @@
        contract.setPaidAmount(new BigDecimal("0"));
        contract.setBillingAmout(new BigDecimal("0"));
        contract.setNickName(SecurityUtils.getUser().getNickname());
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)||
                StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){
            contract.setContractNo(generateSMJContractNo());
        }
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
@@ -423,6 +431,12 @@
    @Override
    public R startApproval(Long id) {
        Contract contract = baseMapper.selectById(id);
        //简易合同无法继续后续操作
        if (StrUtil.equals(contract.getContractCategory(), "simple")){
            return R.failed("请补充标的物和收款阶段后再进行操作!");
        }
        //启动流程
        ProcessInstanceParamDto dto = new ProcessInstanceParamDto();
        Map<String, Object> map = BeanUtil.beanToMap(contract);
@@ -441,6 +455,7 @@
        Contract contract = baseMapper.selectById(id);
        contract.setContractStatus(2);
        baseMapper.updateById(contract);
        List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery()
                .eq(ContractSubjectMatter::getContractId,id));
@@ -968,7 +983,8 @@
        newContract.setErpPushFlag("0");
        newContract.setContractStatus(0);
        newContract.setBillingAmout(new BigDecimal("0"));
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)||
                StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){
            newContract.setContractNo(generateSMJContractNo());
        }
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
@@ -2216,4 +2232,42 @@
            e.printStackTrace();
        }
    }
    @Override
    public R addSimple(ContractAddDTO addDTO) {
        Contract contract = BeanUtil.copyProperties(addDTO, Contract.class);
        contract.setPartyBId(SecurityUtils.getUser().getCompId());
        contract.setPartyB(SecurityUtils.getUser().getCompName());
        if (StrUtil.isEmpty(addDTO.getPartyA())){
            BusinessCustomer bc = businessCustomerMapper.selectById(addDTO.getPartyAId());
            if (ObjUtil.isNotNull(bc)){
                contract.setPartyA(bc.getCompanyName());
            }
        }
        contract.setPaidAmount(new BigDecimal("0"));
        contract.setBillingStatus("1");
        contract.setBillingAmout(new BigDecimal("0"));
        contract.setErpPushFlag("0");
        contract.setNickName(SecurityUtils.getUser().getNickname());
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)||
                StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){
            contract.setContractNo(generateSMJContractNo());
        }
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
            contract.setContractNo(generateGYBContractNo());
        }
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",ymj)){
            contract.setContractNo(generateYMJContractNo());
        }
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",tfgs)){
            contract.setContractNo(generateTFContractNo());
        }
        if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",jxc)){
            contract.setContractNo(generateJXCContractNo());
        }
        baseMapper.insert(contract);
        return R.ok();
    }
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractSubjectMatterServiceImpl.java
@@ -1,19 +1,33 @@
package com.by4cloud.platformx.business.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.by4cloud.platformx.admin.api.entity.SysDept;
import com.by4cloud.platformx.admin.api.vo.DeptExcelVO;
import com.by4cloud.platformx.business.dto.ContractSubjectMatterAddDTO;
import com.by4cloud.platformx.business.entity.ContractSubjectMatter;
import com.by4cloud.platformx.business.entity.Product;
import com.by4cloud.platformx.business.mapper.ContractSubjectMatterMapper;
import com.by4cloud.platformx.business.mapper.ProductMapper;
import com.by4cloud.platformx.business.service.ContractSubjectMatterService;
import com.by4cloud.platformx.business.vo.ContractSubjectMatterVo;
import com.by4cloud.platformx.business.vo.SubjectMatterExcelVO;
import com.by4cloud.platformx.common.core.util.R;
import com.by4cloud.platformx.common.data.datascope.DataScope;
import com.by4cloud.platformx.common.data.mybatis.BaseModel;
import com.by4cloud.platformx.common.excel.vo.ErrorMessage;
import com.by4cloud.platformx.common.security.util.SecurityUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.validation.BindingResult;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
 * 合同标的物明细表
@@ -22,7 +36,11 @@
 * @date 2026-04-29 16:39:29
 */
@Service
@RequiredArgsConstructor
public class ContractSubjectMatterServiceImpl extends ServiceImpl<ContractSubjectMatterMapper, ContractSubjectMatter> implements ContractSubjectMatterService {
    private final ProductMapper productMapper;
    @Override
    public R selectSubjectMatterProcess(Long id) {
        MPJLambdaWrapper<ContractSubjectMatter> wrapper = new MPJLambdaWrapper<ContractSubjectMatter>()
@@ -38,4 +56,41 @@
        return R.ok(baseMapper.selectListByScope(Wrappers.<ContractSubjectMatter>lambdaQuery().eq(ContractSubjectMatter::getContractId,contractId)
                .orderByAsc(ContractSubjectMatter::getCreateTime), DataScope.of("comp_id")));
    }
    @Override
    public R importSubjectMatter(List<SubjectMatterExcelVO> excelVOList, BindingResult bindingResult) {
        List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
        List<ContractSubjectMatterAddDTO> addDTOList = new ArrayList<>();
        for (SubjectMatterExcelVO item : excelVOList) {
            Set<String> errorMsg = new HashSet<>();
            Product one = productMapper.selectOne(Wrappers.<Product>lambdaQuery()
                    .eq(Product::getErpCode, item.getMaterialCode())
                    .eq(Product::getCompId, SecurityUtils.getUser().getCompId()));
            if (one == null) {
                errorMsg.add(item.getMaterialCode()+"erp编码不存在");
            }
            if (CollUtil.isEmpty(errorMsg)) {
                ContractSubjectMatterAddDTO addDTO = new ContractSubjectMatterAddDTO();
                addDTO.setMaterialCode(item.getMaterialCode());
                addDTO.setMaterialInternalName(one.getProductName());
                addDTO.setMaterialName(item.getMaterialName());
                addDTO.setUnitPrice(item.getUnitPrice());
                addDTO.setQuantity(item.getQuantity());
                addDTO.setSpecification(one.getProductType());
                addDTOList.add(addDTO);
            }
            else {
                // 数据不合法情况
                errorMessageList.add(new ErrorMessage(item.getLineNum(), errorMsg));
            }
        }
        if (CollUtil.isNotEmpty(errorMessageList)) {
            return R.failed(errorMessageList,"部门导入失败");
        }
        return R.ok(addDTOList, "部门导入成功");
    }
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
@@ -50,6 +50,12 @@
    @Value("${dept.smj}")
    private String smj;
    @Value("${dept.smjsc}")
    private String smjsc;
    @Value("${dept.smjzt}")
    private String smjzt;
    @Value("${dept.sgb}")
    private String sgb;
@@ -102,7 +108,8 @@
        //出库
        addDTO.getSubjectMatterList().stream().forEach(outSubjectMatterAddDTO -> {
            OutBound outBound = BeanUtil.copyProperties(outSubjectMatterAddDTO, OutBound.class);
            if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
            if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)||
                    StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){
                outBound.setBatchNumber(generateSMJContractCKNo());
            }
            if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
@@ -545,7 +552,8 @@
            contractSubjectMatterMapper.updateById(subjectMatter);
            //
            OutBound outBound = new OutBound();
            if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)){
            if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smj)||StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjsc)||
                    StrUtil.equals(SecurityUtils.getUser().getCompId()+"",smjzt)){
                outBound.setBatchNumber(generateSMJContractCKNo());
            }
            if (StrUtil.equals(SecurityUtils.getUser().getCompId()+"",sgb)){
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
@@ -528,7 +528,7 @@
                    throw new RuntimeException(e);
                }
                log.info("银行流水查询 Request:{}", params.toJSONString());
                String result = HttpUtil.post(url + "/iuap-api-auth/yonbip/ctm/cmp/bankReconciliationQuery?access_token=" + finalAccessToken, params.toJSONString());
                String result = HttpUtil.post(url + "/yonbip/ctm/cmp/bankReconciliationQuery?access_token=" + finalAccessToken, params.toJSONString());
                log.info("银行流水查询 Response:{}", result);
                //保存请求记录
                saveBipRequestRecord(params, "银行流水查询接口", result);
@@ -558,7 +558,7 @@
        } catch (InvalidKeyException e) {
            throw new RuntimeException(e);
        }
        String getTokenResult = HttpUtil.get(url + "/iuap-api-auth/open-auth/selfAppAuth/getAccessToken?appKey=" + appKey + "&timestamp=" + timestamp
        String getTokenResult = HttpUtil.get(url + "/open-auth/selfAppAuth/getAccessToken?appKey=" + appKey + "&timestamp=" + timestamp
                + "&signature=" + signature);
        log.info("Get access_token Response:{}", getTokenResult);
        JSONObject tokenJson = JSONObject.parseObject(getTokenResult);
platformx-business-finance-biz/src/main/resources/mapper/ContractInvoiceMapper.xml
@@ -44,21 +44,21 @@
                   SELECT sum(ci.invoice_total_price_tax)
                   FROM contract_invoice ci
                   WHERE ci.del_flag = '0'
                     AND comp_id = 2056555602756063234
                     AND comp_id = 2089995177814495234
                     AND ci.invoice_time &gt;= CURDATE()
                     AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            smjbr,
               (
                   SELECT sum(ci.invoice_total_price_tax)
                   FROM contract_invoice ci
                   WHERE ci.del_flag = '0'
                     AND comp_id = 2056555602756063234
                     AND comp_id = 2089995177814495234
                     AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
                     AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) smjby,
               (
                   SELECT sum(ci.invoice_total_price_tax)
                   FROM contract_invoice ci
                   WHERE ci.del_flag = '0'
                     AND comp_id = 2056555602756063234
                     AND comp_id = 2089995177814495234
                     AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
                     AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  smjbn,
               (
platformx-business-finance-biz/src/main/resources/mapper/ContractMapper.xml
@@ -1178,7 +1178,7 @@
        contract c
        WHERE
        c.del_flag = '0'
        AND comp_id = 2056555602756063234
        AND comp_id = 2089995177814495234
        AND c.sign_date &gt;= CURDATE()
        AND c.sign_date &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) smjbr,
        (
@@ -1188,7 +1188,7 @@
        contract c
        WHERE
        c.del_flag = '0'
        AND comp_id = 2056555602756063234
        AND comp_id = 2089995177814495234
        AND c.sign_date &gt;=DATE_FORMAT( CURDATE(), '%Y-%m-01' )
        AND c.sign_date &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby,
        (
@@ -1198,7 +1198,7 @@
        contract c
        WHERE
        c.del_flag = '0'
        AND comp_id = 2056555602756063234
        AND comp_id = 2089995177814495234
        AND c.sign_date &gt;=DATE_FORMAT( CURDATE(), '%Y-01-01' )
        AND c.sign_date &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn,
        (
platformx-business-finance-biz/src/main/resources/mapper/ContractOutBoundMapper.xml
@@ -74,7 +74,7 @@
        cob.del_flag = '0'
        AND cob.contract_id = csm.contract_id
        AND cob.subject_matter_code = csm.material_code
        AND cob.comp_id = 2056555602756063234
        AND cob.comp_id = 2089995177814495234
         <!--  AND cob.out_bound_time &gt;= CURDATE() -->
        AND cob.out_bound_time &lt; DATE_ADD( CURDATE(), INTERVAL -6 DAY )) smjbr,
        (
@@ -87,7 +87,7 @@
        cob.del_flag = '0'
        AND cob.contract_id = csm.contract_id
        AND cob.subject_matter_code = csm.material_code
        AND cob.comp_id = 2056555602756063234
        AND cob.comp_id = 2089995177814495234
        AND cob.out_bound_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
        AND cob.out_bound_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby,
        (
@@ -100,7 +100,7 @@
        cob.del_flag = '0'
        AND cob.contract_id = csm.contract_id
        AND cob.subject_matter_code = csm.material_code
        AND cob.comp_id = 2056555602756063234
        AND cob.comp_id = 2089995177814495234
        AND cob.out_bound_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
        AND cob.out_bound_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn,
        (
@@ -277,7 +277,7 @@
        AND csm.del_flag = '0'
        AND cob.contract_id = csm.contract_id
        AND cob.subject_matter_code = csm.material_code
        AND cob.comp_id = 2056555602756063234
        AND cob.comp_id = 2089995177814495234
        <!--  AND cob.out_bound_time &gt;= CURDATE() -->
        AND cob.out_bound_time &lt; DATE_ADD( CURDATE(), INTERVAL -6 DAY )) smjbr,
        (
@@ -291,7 +291,7 @@
        AND csm.del_flag = '0'
        AND cob.contract_id = csm.contract_id
        AND cob.subject_matter_code = csm.material_code
        AND cob.comp_id = 2056555602756063234
        AND cob.comp_id = 2089995177814495234
        AND cob.out_bound_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
        AND cob.out_bound_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby,
        (
@@ -305,7 +305,7 @@
        AND csm.del_flag = '0'
        AND cob.contract_id = csm.contract_id
        AND cob.subject_matter_code = csm.material_code
        AND cob.comp_id = 2056555602756063234
        AND cob.comp_id = 2089995177814495234
        AND cob.out_bound_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
        AND cob.out_bound_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn,
        (
platformx-business-finance-biz/src/main/resources/mapper/CurrentOverdueMapper.xml
@@ -58,7 +58,7 @@
        current_overdue co
        WHERE
        co.del_flag = '0'
        AND comp_id = 2056555602756063234
        AND comp_id = 2089995177814495234
        AND co.create_time &gt;= CURDATE()
        AND co.create_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) smjbr,
        (
@@ -68,7 +68,7 @@
        current_overdue co
        WHERE
        co.del_flag = '0'
        AND comp_id = 2056555602756063234
        AND comp_id = 2089995177814495234
        AND co.create_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
        AND co.create_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby,
        (
@@ -78,7 +78,7 @@
        current_overdue co
        WHERE
        co.del_flag = '0'
        AND comp_id = 2056555602756063234
        AND comp_id = 2089995177814495234
        AND co.create_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
        AND co.create_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn,
        (
platformx-business-finance-biz/src/main/resources/mapper/HistoryOverdueMapper.xml
@@ -59,7 +59,7 @@
                    history_overdue co
                WHERE
                    co.del_flag = '0'
                  AND comp_id = 2056555602756063234
                  AND comp_id = 2089995177814495234
                  AND co.create_time &gt;= CURDATE()
                  AND co.create_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) smjbr,
            (
@@ -69,7 +69,7 @@
                    history_overdue co
                WHERE
                    co.del_flag = '0'
                  AND comp_id = 2056555602756063234
                  AND comp_id = 2089995177814495234
                  AND co.create_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
                  AND co.create_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby,
            (
@@ -79,7 +79,7 @@
                    history_overdue co
                WHERE
                    co.del_flag = '0'
                  AND comp_id = 2056555602756063234
                  AND comp_id = 2089995177814495234
                  AND co.create_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
                  AND co.create_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn,
            (
platformx-business-finance-biz/src/main/resources/mapper/PaymentSlipMapper.xml
@@ -60,7 +60,7 @@
        payment_slip ps
        WHERE
        ps.del_flag = '0'
        AND comp_id = 2056555602756063234
        AND comp_id = 2089995177814495234
        AND ps.payment_time &gt;= CURDATE()
        AND ps.payment_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) smjbr,
        (
@@ -70,7 +70,7 @@
        payment_slip ps
        WHERE
        ps.del_flag = '0'
        AND comp_id = 2056555602756063234
        AND comp_id = 2089995177814495234
        AND ps.payment_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
        AND ps.payment_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby,
        (
@@ -80,7 +80,7 @@
        payment_slip ps
        WHERE
        ps.del_flag = '0'
        AND comp_id = 2056555602756063234
        AND comp_id = 2089995177814495234
        AND ps.payment_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
        AND ps.payment_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn,
        (
platformx-business-finance-biz/src/main/resources/template/jxc/product.xlsx
Binary files differ