李白
2026-06-02 08095d9847f0cd612c3007f860e57e967278562e
修改bip提交和开票记录信息。
6个文件已修改
8个文件已添加
4 文件已重命名
2082 ■■■■■ 已修改文件
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/SaleCredit.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPBody.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPPayPlan.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYs.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYsItem.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYsMx.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYsMxHeader.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BipResVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BipTokenVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/InvoicingVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/RedConfirmVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/InvoiceResultController.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BIPYsService.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BIPYsServiceImpl.java 1398 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipHttpUtil.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/InvoiceService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/InvoiceServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/SaleCredit.java
@@ -97,6 +97,10 @@
    @Column(columnDefinition = "decimal(10,2) comment '挂账金额总税额'")
    private BigDecimal totalTax;
    @Schema(description = "挂账金额合计")
    @Column(columnDefinition = "decimal(10,2) comment '挂账金额合计'")
    private BigDecimal amountAndtax;
    @Schema(description = "标的物详情")
    @Column(columnDefinition = "TEXT comment '标的物详情'")
    private String matterStr;
@@ -113,12 +117,12 @@
    @Column(columnDefinition = "tinyint(2) default 0 comment '状态(200)'")
    private Integer bipStatus;
    @Schema(description = "开票结果状态 0未提交默认 1处理中 2通过 3驳回 4开票失败")
    @javax.persistence.Column(columnDefinition="int(1) comment '排序'")
    @Schema(description = "开蓝票结果状态 0未开票 1开票成功 2开票失败")
    @javax.persistence.Column(columnDefinition="int(1) default 0 comment '开蓝票结果状态'")
    private Integer blueResultStatus;
    @Schema(description = "开红票结果状态 0未提交默认 1处理中 2通过 3驳回 4开票失败")
    @javax.persistence.Column(columnDefinition="int(1) comment '排序'")
    @Schema(description = "开红票结果状态 0未开票 1开票成功 2开票失败")
    @javax.persistence.Column(columnDefinition="int(1) comment '开红票结果状态'")
    private Integer redResultStatus;
    @Schema(description = "蓝票id")
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPBody.java
New file
@@ -0,0 +1,68 @@
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class BIPBody {
    private String resubmitCheckKey;
    private String supplierCode;//供应商
    private String code;//BIP系统单据编号 新增时不填,修改时必填
    private String extVouchCode;//煤销系统单号
    private String YSYF_08;//煤销系统单号
    private String extSystemCode;//煤销系统单号
    private String id;//BIP应收发票id 新增时不填,修改时必填
    private String financeOrg;//开票组织 id,开票组织 id 和开票组织编码不能同时为空
    private String financeOrgCode;//开票组织编码
    private Boolean checkFlag = false;//验证
    private String direction;//单据方向 1:蓝字 -1:红字 示例:1 默认值:1
    private String billDate;//结算日期
    private String bustype;//交易类型 id,交易类型 id 和交易类型编码不能同时为空
    private String bustypeCode;//交易类型编码,
    private String contractNo;//合同编号,
    private String org;//业务组织 id,
    private String orgCode;//业务组织编码,
    //    private String oriCurrency;//币种 id
//    private String orgCurrency;//币种 id
    private String oriCurrencyCode = "CNY";//币种编码
    private String orgCurrencyCode = "CNY";//币种编码
    private String objectType;//往来对象类型(枚举值 1:客户; 2:员工;3:资金业务对象)
    private String customer;//客户 id
    private String customerCode;//客户编码
    private String employee;//员工 id
    private String employeeCode;//员工编码
    private String invoiceType = "01";
    private String funder;//资金业务对象 id
    private String exchangeRateType;//汇率类型 id
    private String exchangeRateTypeCode = "01";//汇率类型编码
    private Double exchangeRate = 1.0;//汇率
    private String exchangeRateDate;//汇率日期
    private String agreement;//收款协议 id
    private String agreementCode;//收款协议编码
    private String dept;//部门 id
    private String deptCode;//部门编码
    private String staff;//业务员 id
    private String staffCode;//业务员编码
    private String fk_038_code;//业务员编码
    private String projectCode;//项目编码
    private String project;//项目 id
    private String _status="Insert";//操作标识
    private String retailer;//散户名称
    private String remarks;//备注
    private String verifyState;//状态
    private String localTaxExcludedAmount;//本币无税金额
    private String localTaxIncludedAmount;//本币含税金额
    private String oriTaxExcludedAmount;// 原币无税金额
    private String oriTaxIncludedAmount; //原币含税金额
    //表体
    private List<BIPYsItem> bodyItem;
    private BIPYsMxHeader freeChId;
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPPayPlan.java
New file
@@ -0,0 +1,27 @@
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
@Data
public class BIPPayPlan {
    private String _status = "Insert";
    private Integer issueNo;
    private String startDate;
    private String expireDate;
    private Double ration;
    private Double oriTaxIncludedAmount;//含税金额
    private Double localTaxIncludedAmount;//含税金额
    private Integer blnPrepare;//是否预收
    private Integer blnDeposit;//是否保证金
    private String id;
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYs.java
New file
@@ -0,0 +1,38 @@
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
//应收表头
@Data
public class BIPYs {
    //                                                                        是否必填
    private String financeOrg; // 开票组织                                     是
    private String org; // 表体业务组织                                        是
    private String billDate; // 单 据 日 期 ( 格 式为 :yyyy-MM-ddHH:mm:ss)        是
    private String direction; // 单据方向(枚举值 -1:红字;1:蓝字)                是
    private String bustype; // 交易类型:煤炭销售算(应收)单:MXysfp                是
    private String verifyState; // 单据状态 默认:Insert                        是
    private String dept; // BIP 业务员所在部门                                    是
    private String staff; // 业务员 BIP 员工档案                                否
    private String contractNo; // 合同编号                                    否
    private String objecttype; // 往来对象类型 默认 1:客户;                        是
    private String customer; // 客户                                            是
    private String MX04; // 结算单号                                            是
    private String MX0401; // 托收单号                                        是
    private String MX01; // 发站(煤销发站档案)                                是
    private String MX02; // 用煤客商 客户档案                                     是
    private String GX08; // 矿厂                                                是
    private String MX05; // 煤销业务种类                                        是
    private String MX06; // 煤销制表人                                                是
    private String MX07; // 煤销审核人                                                是
    private String MX08; // 入洗来源                                            是
    private String fk_038; // 凭证制单人                                            是
    private String oriCurrency; // 币种
    private String exchangeRate; // 组织币种汇率
    private String srcSystem = "3"; // 单据来源系统来源系统
    private String oriTaxIncludedAmount;//孙表原币含税金额
    private Integer freeChId__fk_002; // 附件张数
    private Integer remarks; // 附件张数
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYsItem.java
New file
@@ -0,0 +1,120 @@
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
//应收表体
@Data
public class BIPYsItem {
    //                                                                        是否必填
    private String id; // 收款单子表 id
    private String _status="Insert"; // 收款单子表 id
    private String orgCurrency;// 表体行币种 id
//    private String oriCurrencyCode="CNY";//币种简称
//    private String exchangeRateType="01";//汇率类型 id
//    private String exchangeRateDate;// 汇率日期
//    private String exchangeRate="1";// 汇率
    private String oriCurrencyCode="CNY";//币种编码
    private String exchangeRateTypeCode;//汇率类型
    private String exchangeRateDate;//汇率日期
    private Double exchangeRate;//汇率
    private String orgCurrencyCode="CNY";//币种编码
    private Double taxRate;//税率
    private BigDecimal localTaxAmount;// 税额
    private BigDecimal oriTaxExcludedAmount;// 原币无税金额
    private String zzbkfl_code;//板块
    private BigDecimal oriTaxIncludedAmount; //原币含税金额
    private String objectType;// 表体行币种 id
    private String customer;// 表体行币种 id
    private String customerCode;// 表体行币种 id
    private String supplierCode;//供应商
    private String employee;//员工 id
    private String employeeCode;//员工编码
    private String funder;//资金业务对象 id
    private String funderCode;//资金业务对象 id
    private BigDecimal localTaxExcludedAmount;//本币无税金额
    private BigDecimal localTaxIncludedAmount;//本币含税金额
    private BigDecimal oriTaxAmount;//税额
    private String dept;//部门ID
    private String deptCode;//部门编码
    private String agreement;//收款协议 id
    private BigDecimal agreementCode;//收款协议编码
    private BigDecimal quantity;//数量,传值时物料必传
    private String unitName;//单位
    private String unitCode;//单位
    private String material;//物料ID
    private String materialCode;//物料编码
    private String JT09_code="0101";//发票类型
    private String expenseItemCode;//经济事项
    private String staff;//业务员 id
    private String staffCode;//业务员编码
    private Double oriTaxExcludedPrice;//无税单价
    private Double oriTaxIncludedPrice;//含税单价
    private Double localTaxExcludedPrice;//本币无税单价
    private Double localTaxIncludedPrice;//本币含税单价
    private String project;//项目 id
    private String projectCode;//项目编码
    private Integer deductTaxType = 0;
    private Boolean blnDeductTax = true;
    private String invoiceNo;//发票号
    private String YSYF33;//发票号
    private String invoiceType = "01";//发票类型
    private String contractNo;//合同编号
    private Integer HTBMBT;//是否有合同0-否,1-是
    private BIPYsMx freeChId;
    private String remarks;
    private List<BIPPayPlan> grandsonItem;
//    private String expenseItemName; // 经济事项                                     是
//    private String JT04; // 交易类型                                        是
//    private String JT06; // 款项明细
//    private String JT11; // 提缴方式            是
//    private String JT01; //业态
//    private String MX09; //运销系统煤种 档案
//    private String JT12; //物料名称 物料档案
//     private BigDecimal MX10; //水煤量
//    private BigDecimal MX11; //无税金额
//    private String MX12; //灰分级别
//    private String MX13; //水分
//    private String MX14; //硫分
//    private String MX15; //品种
//    private BigDecimal MX16; //折干量
//    private BigDecimal MX17; //标煤量
//    private BigDecimal MX18; //标煤量单价
//    private String unitName; //运销系统煤种
//    private String quantity; //运销系统煤种
//    private Double taxRate; //税率
//    private BigDecimal oriTaxAmount; //税额
//    private BigDecimal oriTaxExcludedPrice; //无税单价
//    private BigDecimal oriTaxExcludedAmount; //无税金额
//    private BigDecimal oriTaxIncludedPrice; //含税单价
//    private BigDecimal oriTaxIncludedAmount; //含税金额
//    private String invoiceType; // 发票类型
//    private String invoiceNo; // 发票号码
//    private String remarks; // 备注
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYsMx.java
New file
@@ -0,0 +1,79 @@
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
 * 表体特征
 */
@Data
public class BIPYsMx {
    private String id; // 特征 id
//    private String JT01_code="01";//业态
    private String JT04_code;//交易类型
    private String JT06;//款项明细
    private String JT06_code;//款项明细
    private String JT32_code;//作业要素
    private String YSYF14_code;//款项类型
    private String YSYF52;//自定义字段
    private String YSYF_08;//款项类型
//    private String JT25_code;//其他业务明细
    private String GX08_code;//核算单元
    private String GX06_code;//物料名称
    //    private String JT11_code="01";//提缴方式
    private String JT09_code = "0101";//提缴方式
    private String JT12_code;//物料
    private String MX021_code;//收货客户
    private String customerCode;
    private String MX09; // 运销系统煤种
    private BigDecimal MX10; //水煤量
    private String zzbkfl_code; // 订单号
    private Double MX11; //灰分
    private Integer MX12; //灰分级别
    private Double MX13; //水分
    private Double MX14; //硫分
    private String MX15; //品种
    private Double MX16; //折干量
    private BigDecimal MX17; //标煤量
    private Double MX18; //标煤量单价
    private String unitName;
    private String YSYF33;//发票号
    private String invoiceType = "01";
    public Integer getMX12() {
        if (MX11 != null) {
            if (MX11 > 9 && MX11 <= 9.5) {
                this.MX12 = 9;
            } else if (MX11 > 9.5 && MX11 <= 10) {
                this.MX12 = 10;
            } else if (MX11 > 10 && MX11 <= 10.5) {
                this.MX12 = 11;
            } else if (MX11 > 10.5 && MX11 <= 11) {
                this.MX12 = 12;
            }else if (MX11>11 && MX11<=11.5){
                this.MX12 = 13;
            }else if (MX11>11.5 && MX11<=12){
                this.MX12 = 14;
            }else if (MX11<9){
                this.MX12 = 9;
            }else if (MX11>12){
                this.MX12 = 14;
            }
        }else {
            return null;
        }
//        Coal coal = RedisCacheYunXiaoHelper.getInstance().getCoalById(coalId);
//        if (coal!=null && StrUtil.isNotEmpty(coal.getCoalPath()) && coal.getCoalPath().indexOf("炼焦精煤") == -1){
//            this.MX12 = null;
//        }
        return this.MX12;
    }
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYsMxHeader.java
New file
@@ -0,0 +1,35 @@
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
/**
 * 表头特征
 */
@Data
public class BIPYsMxHeader {
    private String id;//对应ID
    private String GX08;//核算单元,显示为矿厂
    private String GX08_code;//核算单元,显示为矿厂
    private String MX01_code;//发站
    private String MX02;//用煤客商
    private String MX03;//结算客商
    private String MX021_code;//用煤客商(编码)
    private String MX031_code;//结算客商(编码)
    private String MX04;//煤销结算单号
    private String MX0401;//煤销托收单号
    private String MX05;//业务种类(不用)
    private String MX051_code;//业务种类
    private String MX06;//煤销制表人
    private String MX07; // 煤销审核人
    private String MX08; // 入洗来源
    private Integer fk_002; // 凭证制单人
    private String fk_038; // 凭证制单人
    //    private String freeChId__JT01 = "01";//业态
    private String invoiceType = "01";
    private String contractNo;//合同编号
    private Integer HTBMBT;//是否有合同0-否,1-是
    private String orderNo;//订单编号
    private String remarks;//摘要
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BipResVo.java
File was renamed from platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipResVo.java
@@ -1,4 +1,4 @@
package com.by4cloud.platformx.business.entity.invoice;
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BipTokenVo.java
File was renamed from platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipTokenVo.java
@@ -1,4 +1,4 @@
package com.by4cloud.platformx.business.entity.invoice;
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/InvoicingVo.java
File was renamed from platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoicingVo.java
@@ -1,4 +1,4 @@
package com.by4cloud.platformx.business.entity.invoice;
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/RedConfirmVo.java
File was renamed from platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/RedConfirmVo.java
@@ -1,10 +1,9 @@
package com.by4cloud.platformx.business.entity.invoice;
package com.by4cloud.platformx.business.entity.invoice.vo;
import lombok.Data;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
 * @author kdq
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/InvoiceResultController.java
@@ -1,12 +1,15 @@
package com.by4cloud.platformx.business.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.by4cloud.platformx.business.entity.ContractOutBound;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.entity.invoice.InvoiceResult;
import com.by4cloud.platformx.business.entity.invoice.InvoiceResultItem;
import com.by4cloud.platformx.business.entity.invoice.InvoicingVo;
import com.by4cloud.platformx.business.entity.invoice.vo.BipResVo;
import com.by4cloud.platformx.business.entity.invoice.vo.InvoicingVo;
import com.by4cloud.platformx.business.invoice.service.BIPYsService;
import com.by4cloud.platformx.business.invoice.service.FpInvoiceResultItemService;
import com.by4cloud.platformx.business.service.ContractOutBoundService;
import com.by4cloud.platformx.business.service.InvoiceService;
@@ -42,6 +45,7 @@
    private final InvoiceService invoiceService;
    private final SaleCreditService saleCreditService;
    private final ContractOutBoundService contractOutBoundService;
    private final BIPYsService bipYsService;
    @Operation(summary = "推送应付蓝票" , description = "推送应付蓝票" )
    @GetMapping("/pushYfBlue" )
@@ -103,15 +107,26 @@
            Map<String, Object> objectMap = invoiceService.toKaipiao(invoicingVo);
            Boolean success = (Boolean) objectMap.get("success");
            String message = (String) objectMap.get("message");
            System.out.println(saleCredit.getEntrustCode() + "的railwayEntrust蓝字开票结果为:" + success + "------" + message);
            //System.out.println(saleCredit.getEntrustCode() + "的railwayEntrust蓝字开票结果为:" + success + "------" + message);
            if(success){
                saleCredit.setBlueResultStatus(1);
                saleCreditService.updateById(saleCredit);
                //StringBuffer errMsg = new StringBuffer();
                BipResVo bipResVo = bipYsService.sendBIPYs(saleCredit);
                if (!bipResVo.getCode().equals("200")) {
                    /*if (StrUtil.isNotEmpty(errMsg)) {
                        errMsg.append(",");
                    }
                    errMsg.append(saleCredit.getCreditCodeB()+ "应收发票推送失败:" + bipResVo.getMessage());*/
                    return R.failed("开票成功,推送bip失败,err:" + bipResVo.getMessage());
                }else{
                    return R.ok("开票成功,推送big成功!");
                }
            }else{
                saleCredit.setStatus(2);
                saleCreditService.updateById(saleCredit);
                return R.ok("开票成功!");
            }else{
                saleCredit.setStatus(3);
                saleCreditService.updateById(saleCredit);
                return R.failed("开票失败!");
                return R.failed("开票失败!原因:" + message);
            }
        }catch (Exception e){
@@ -124,47 +139,49 @@
    @Operation(summary = "发票查看" , description = "发票查看" )
    @GetMapping("/downInvoice" )
    public R downInvoice(String code) {
        SaleCredit saleCredit = saleCreditService.getOne(new LambdaQueryWrapper<SaleCredit>()
                .eq(SaleCredit::getEntrustCode, code)
                .last("limit 1")
        );
        QueryWrapper<InvoiceResult> invoiceResultQueryWrapper = new QueryWrapper<>();
        invoiceResultQueryWrapper.lambda()
                .eq(InvoiceResult::getEntrustCode,code)
                .eq(InvoiceResult::getMethodName,"蓝字开票接口")
                .eq(InvoiceResult::getSuccess,1)
                .eq(InvoiceResult::getEntrustCode, code)
                .eq(InvoiceResult::getMethodName, "蓝字开票接口")
                .eq(InvoiceResult::getSuccess, 1)
                .orderByDesc(InvoiceResult::getCreateTime);
        List<InvoiceResult> list = invoiceService.list(invoiceResultQueryWrapper);
        if(list !=null && list.size()>0){
        if (list != null && list.size() > 0) {
            InvoiceResult result = list.get(0);
            Map<String, Object> objectMap = invoiceService.downInvoiceMethod(result);
            Boolean success = (Boolean) objectMap.get("success");
            String message = (String) objectMap.get("message");
            if(success){
//                if(result.getPushBip()==null||result.getPushBip()!=1){
//                    QueryWrapper<RailwayEntrust> wrapper = new QueryWrapper<>();
//                    wrapper.lambda()
//                            .eq(RailwayEntrust::getEntrustCode,code);
//                    List<RailwayEntrust> railwayEntrusts = railwayEntrustService.list(wrapper);
//                    if(railwayEntrusts !=null && railwayEntrusts.size()>0){
//                        RailwayEntrust railwayEntrust = railwayEntrusts.get(0);
//                        System.out.println(railwayEntrust.getEntrustCode()+"开始推送bip蓝票");
//                        try {
//                            pushBip(railwayEntrust.getId(),railwayEntrust.getInvoicUrl());
//                            System.out.println(railwayEntrust.getEntrustCode()+"推送bip蓝票成功");
//                            result.setPushBip(1);
//                            result.setPushBipyf(1);
//                            invoiceResultService.updateById(result);
//                        }catch (Exception e){
//                            e.printStackTrace();
//                        }
//                    }
//                }
                return R.ok(objectMap);
            }else {
                return R.failed(message);
            if (success) {
                if (result.getPushBip() == null || result.getPushBip() != 1) {
                    try {
                        boolean b = invoiceService.pushBlue(saleCredit.getId(), 1);
                        if (b) {
                            //System.out.println(railwayEntrust.getEntrustCode() + "推送bip蓝票成功");
                            result.setPushBip(1);
                            result.setPushBipyf(1);
                            invoiceService.updateById(result);
                            return R.ok("查看蓝票成功,推送bip蓝票成功!");
                        }else{
                            return R.failed("查看蓝票成功,推送bip蓝票失败!");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        return R.failed("查看蓝票成功,推送bip蓝票失败!");
                    }
                }
                 return R.ok("查看蓝票成功!");
            } else{
                return R.failed("查看蓝票失败!err:" + message);
            }
        }else {
            return R.failed("未查询到开票记录");
        }
    }
    /**
     * 去开红票
@@ -236,7 +253,7 @@
        }
    }
   /* @Operation(summary = "红冲确认单" , description = "红冲确认单" )
    @Operation(summary = "红冲确认单" , description = "红冲确认单" )
    @PostMapping("/redConfirm" )
    public R redConfirm(@RequestBody InvoicingVo vo) {
@@ -253,16 +270,21 @@
            Boolean success = (Boolean) objectMap.get("success");
            String message = (String) objectMap.get("message");
            if(success){
                return R.ok(null,message);
                BipResVo bipResVo = bipYsService.removeBipInvoice(saleCredit.getBlueInvoiceResultId().toString(),saleCredit.getEntrustCode(),6);
                if(bipResVo.getCode().equals("200")){
                    return R.ok("开红票成功,bip删除成功!");
                }else{
                    return R.ok("开红票成功,bip删除失败,err:" + bipResVo.getMessage());
                }
            }else {
                return R.failed(null,message);
                return R.failed(null,"开票失败,err:" + message);
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.failed("开红票失败");
        }
    }*/
    }
    //发红冲之前,先进行红票确认。
    @Operation(summary = "红冲发票form" , description = "红冲发票form" )
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java
@@ -10,6 +10,9 @@
import com.by4cloud.platformx.admin.api.entity.SysDept;
import com.by4cloud.platformx.admin.api.feign.RemoteDeptService;
import com.by4cloud.platformx.business.entity.*;
import com.by4cloud.platformx.business.entity.invoice.vo.BipResVo;
import com.by4cloud.platformx.business.entity.invoice.vo.InvoicingVo;
import com.by4cloud.platformx.business.invoice.service.BIPYsService;
import com.by4cloud.platformx.business.service.*;
import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
import com.by4cloud.platformx.common.core.util.R;
@@ -27,6 +30,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 销售挂账
@@ -49,7 +53,8 @@
    private final ContractSubjectMatterService contractSubjectMatterService;
    private final RemoteDeptService remoteDeptService;
    private final InvoiceService invoiceService;
    private final BIPYsService bipYsService;
    /**
@@ -136,9 +141,43 @@
            contractOutBoundService.updateById(outBound);
        }
        saleCredit.setOutBoundIds(outBoundIds);
        saleCreditService.save(saleCredit);
        saleCredit.setEntrustCode("JsNo"+System.currentTimeMillis());
        saleCreditService.updateById(saleCredit);
       return R.ok("销售挂账生成!");
        //生成vo
        InvoicingVo invoicingVo = invoiceService.toGetByCompareByVo(saleCredit,contractOutBoundList);
        try {
            Map<String, Object> objectMap = invoiceService.toKaipiao(invoicingVo);
            Boolean success = (Boolean) objectMap.get("success");
            String message = (String) objectMap.get("message");
            //System.out.println(saleCredit.getEntrustCode() + "的railwayEntrust蓝字开票结果为:" + success + "------" + message);
            if(success){
                saleCredit.setBlueResultStatus(1);
                saleCreditService.updateById(saleCredit);
                //StringBuffer errMsg = new StringBuffer();
                BipResVo bipResVo = bipYsService.sendBIPYs(saleCredit);
                if (!bipResVo.getCode().equals("200")) {
                    /*if (StrUtil.isNotEmpty(errMsg)) {
                        errMsg.append(",");
                    }
                    errMsg.append(saleCredit.getCreditCodeB()+ "应收发票推送失败:" + bipResVo.getMessage());*/
                    return R.failed("开票成功,推送bip失败,err:" + bipResVo.getMessage());
                }else{
                    return R.ok("开票成功,推送big成功!");
                }
            }else{
                saleCredit.setStatus(2);
                saleCreditService.updateById(saleCredit);
                return R.failed("开票失败!原因:" + message);
            }
        }catch (Exception e){
            saleCredit.setStatus(3);
            saleCreditService.updateById(saleCredit);
            return R.failed("开票失败!");
        }
       //return R.ok("销售挂账生成!");
    }
@@ -154,7 +193,6 @@
    @SysLog("拼接销售挂账" )
    @GetMapping("/generatorInvoice")
    @PreAuthorize("@pms.hasPermission('business_saleCredit_view')" )
    @Inner(value = false)
    public R generatorInvoice(@ParameterObject SaleCredit saleCredit) {
        if(saleCredit.getContractId()==null){
            return R.failed("合同id不能为空");
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BIPYsService.java
New file
@@ -0,0 +1,75 @@
package com.by4cloud.platformx.business.invoice.service;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.entity.invoice.BipInvoice;
import com.by4cloud.platformx.business.entity.invoice.vo.BIPBody;
import com.by4cloud.platformx.business.entity.invoice.vo.BipResVo;
import java.util.List;
public interface BIPYsService {
    /**
     *
     * @param railwayEntrust
     * @param id1
     * @param id2
     * @param focus 是否对外
     * @param customerCode 客户编号
     * @param customerAddressCode 收货客户编号
     * @param //ncCoalNumber 煤种编号
     * @param businessType 交易类型(路运集中)
     * @param fromStation 发站
     * @param allId 主结算单ID
     * @param contractNum 合同编号
     * @param number 结算单号
     * @param jyType 交易类型 集团外
     * @param accountUnitNumber 核算单元
     * @param isNd 0内调 1外销
     * @return
     */
    BipResVo sendBIPYs(SaleCredit railwayEntrust, String id1, String id2, Boolean focus, String customerCode, String customerAddressCode,String businessType, String fromStation, Integer allId, String contractNum, String number, String jyType, String accountUnitNumber, String deptCode, String userCode, Integer isNd);
    BipResVo sendBIPYs(SaleCredit saleCredit);
    /**
     *
     * @param railwayEntrust
     * @param id1 供应商
     * @param id2 业务组织
     * @param customerAddressCode 收货客户
     * @param //coal 煤种
     * @param businessType 销售类型
     * @param fromStation 发站
     * @param allId 主ID
     * @param contractNum 合同编号
     * @param number
     * @param jyType 交易类型
     * @param accountUnitNumber 核算单元
     * @param isNd 0内调 1外销
     * @return
     */
    BipResVo sendBIPYf(SaleCredit railwayEntrust,String id1,String id2,String customerAddressCode,String businessType,String fromStation,Integer allId,String contractNum,String number,String jyType,String accountUnitNumber,String deptCode,String userCode,Integer isNd);
    BipResVo saveRedFlushInvoice(BipInvoice oldBipInvoice, BIPBody bipBody);
//    RailwayEntrust sendBIPYf(RailwayEntrust railwayEntrust,String id1,String id2,String customerAddressCode,String ncCoalNumber,String businessType,String fromStation,Integer allId,String contractNum,String number,String jyType,String accountUnitNumber);
    BipResVo removeBipInvoice(String number, String code, Integer type);
    BipResVo removeBipInvoices(List<BipInvoice> bipInvoiceList);
    BIPBody getBipInvoices(String code, Integer type);
    BipResVo updBipInvoices(BipInvoice bipInvoice, String number);
    BipResVo removeBipInvoice(String number, String code, Integer type, String msg);
//    void sendBipAndGenerateInternal(RailwayEntrust railwayEntrust);
//    RailwayEntrust selectBipInvoice();
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BIPYsServiceImpl.java
New file
@@ -0,0 +1,1398 @@
package com.by4cloud.platformx.business.invoice.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.entity.invoice.BipInvoice;
import com.by4cloud.platformx.business.entity.invoice.InvoiceResult;
import com.by4cloud.platformx.business.entity.invoice.vo.*;
import com.by4cloud.platformx.business.invoice.service.BIPYsService;
import com.by4cloud.platformx.business.invoice.service.BipInvoiceService;
import com.by4cloud.platformx.business.invoice.service.FileUploadService;
import com.by4cloud.platformx.business.invoice.service.FpInvoiceResultService;
import com.by4cloud.platformx.business.invoice.utils.BipApiEnum;
import com.by4cloud.platformx.business.invoice.utils.BipHttpUtil;
import com.by4cloud.platformx.business.invoice.utils.NumUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Slf4j
@Component
public class BIPYsServiceImpl implements BIPYsService {
    @Autowired
    private BipHttpUtil bipHttpUtil;
    @Autowired
    private BipInvoiceService bipInvoiceService;
    @Autowired
    private FileUploadService fileUploadService;
    @Autowired
    private FpInvoiceResultService fpInvoiceResultService;
    /*@Value("${otherPrice.dustFeePrice}")
    private Double dustFeePrice;
    @Value("${otherPrice.dustFeeRate}")
    private Double dustFeeRate;*/
    @Override
    public BipResVo sendBIPYs(SaleCredit railwayEntrust, String id1, String id2, Boolean focus, String customerCode, String customerAddressCode, String businessType, String fromStation, Integer allId, String contractNum, String number, String jyType, String accountUnitNumber, String deptCode, String userCode, Integer isNd){//}, ZhAccountLedger accountLedger) {
//        BipInvoice bipInvoice1 = new BipInvoice();
//        bipInvoice1.setDay(DateUtil.date());
//        bipInvoice1.setBipCompNumber(id2);
//        bipInvoice1.setType(0);
//        bipInvoice1.setInvoiceType(0);
//        bipInvoice1.setRailwayEntrustId(railwayEntrust.getId());
//        bipInvoice1.setAllId(allId);
//        bipInvoice1.setCompId(railwayEntrust.getCompId());
//        bipInvoice1.setMoney(railwayEntrust.getAllPrice());
//        bipInvoice1.setTonnage(railwayEntrust.getTonnage());
//        bipInvoice1.setPrice(railwayEntrust.getPrice());
//        bipInvoice1.setResStatus("200");
//        bipInvoice1.setDirection(1);
//        bipInvoice1.setTrainType(railwayEntrust.getTrainType());
//        bipInvoiceService.save(bipInvoice1);
//        BipResVo bipResVo1 = new BipResVo<>();
//        bipResVo1.setCode("200");
//        if (true){
//            return bipResVo1;
//        }
        /*Map<String, String> dictMap = RedisCacheHelper.getInstance().getDictMapByType("bip_expense_item");
        AtomicReference<String> expenseItemCode = new AtomicReference<>("09001001,01");
        dictMap.forEach((k, v) -> {
            if (k.equals(railwayEntrust.getCoalId().toString())) {
                expenseItemCode.set(v);
            }
        });*/
        /*List<ContractOrder> orders = contractOrderService.list(new QueryWrapper<ContractOrder>().lambda().eq(ContractOrder::getNumber, railwayEntrust.getOrderNumber()));
        ContractOrder order = orders.get(0);
        Map<String,String> fromStationMap = RedisCacheHelper.getInstance().getDictMapByType("from_station");//发站
        String fromStation2 = "";
        if (railwayEntrust.getTrainType().equals(2) && StrUtil.isNotEmpty(order.getFromStation()) && fromStationMap!=null){
            fromStation2 = fromStationMap.get(order.getFromStation());
        }*/
        //SysUser user = remoteUserService.getByName(railwayEntrust.getCreateBy());
        //String createName = (user == null ? "" : user.getRealName());
        //String ncCoalNumber = coal.getBipCategoryCode();//产品大类
        //String coalBipCode = coal.getBipCode();//具体产品
        BIPBody bipBody = new BIPBody();
        BIPYsMxHeader mx = new BIPYsMxHeader();
        List<BIPYsItem> bipYsItems = new ArrayList<>();
//        mx.(railwayEntrust.getFyCompName());//发运矿
        //mx.setMX01_code(fromStation2);//发站
        /*if (accountLedger.getId().equals(80) || accountLedger.getId().equals(81) && !accountLedger.getId().equals(82)) {
            contractNum = "";
        }*/
        if (StrUtil.isNotEmpty(contractNum)) {
            mx.setHTBMBT(1);
        } else {
            mx.setHTBMBT(0);
        }
        mx.setContractNo(contractNum);
        mx.setMX021_code(customerCode);//收货客户
        mx.setMX031_code(customerCode);//结算客户
        mx.setMX04(number);//结算单号
        mx.setMX0401(railwayEntrust.getEntrustCode());//托收单号
        mx.setMX051_code(businessType);//业务种类
        //mx.setMX06(createName);//创建人
        //mx.setMX07(railwayEntrust.getUserName());//审核人
        mx.setGX08_code(accountUnitNumber);//核算单元
        //String remark = getRemark(railwayEntrust, "销", customerCode, id2);
        mx.setRemarks(railwayEntrust.getInvoiceRemark());
        //String fileUrl = fileUploadService.fileUpload(6, railwayEntrust.getId());
        mx.setFk_002(3);
        /*if (StrUtil.isNotEmpty(fileUrl) && "01".equals(jyType)) {
            mx.setFk_002(3 + fileUrl.split(",").length);
        }*/
        /*if (railwayEntrust.getFatherEntrustId() != null) {
            fileUrl = fileUploadService.fileUpload(6, contractNum);
            mx.setFk_002(3);
            if (StrUtil.isNotEmpty(fileUrl) && "01".equals(jyType)) {
                mx.setFk_002(3 + fileUrl.split(",").length);
            }
        }*/
        bipBody.setBustypeCode("MXysfp");
        bipBody.setStaffCode(userCode);
//        bipBody.setFk_038_code(userCode);
        bipBody.setObjectType("1");
        bipBody.setCustomerCode(customerCode);
        bipBody.setExtVouchCode(railwayEntrust.getEntrustCode());//煤销系统单号
        bipBody.setFinanceOrgCode(id2);//开票组织ID
        bipBody.setDirection("1");//单据方向 1蓝 -1红
        bipBody.setBillDate(DateUtil.format(new Date(), "yyyy-MM-dd"));//开票日期
//        bipBody.setBillDate(DateUtil.format(railwayEntrust.getBalanceDate(), "yyyy-MM-dd"));//开票日期
//        if ("0101".equals(jyType)){
//
//        }
        bipBody.setContractNo(contractNum);
        bipBody.setOrgCode(id2);//业务组织id
        bipBody.setDeptCode(deptCode);
        bipBody.setExchangeRateDate(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
//        bipBody.setExchangeRateDate(DateUtil.format(railwayEntrust.getBalanceDate(), "yyyy-MM-dd HH:mm:ss"));
//        bipBody.setCustomer();//客户编码
        //bipBody.setRemarks(remark);
        //表体
        //煤种类目
        BIPYsItem bipYsItem = new BIPYsItem();
//        bipYsItem.setExchangeRateDate(DateUtil.format(railwayEntrust.getBalanceDate(),"yyyy-MM-dd HH:mm:ss"));
        //bipYsItem.setTaxRate(NumUtils.multiplyDouble(railwayEntrust.getTaxRate(),100d));
        //bipYsItem.setUnitName("吨");
        /*bipYsItem.setMaterialCode("7704000001");
        bipYsItem.setQuantity(BigDecimal.valueOf(railwayEntrust.getTonnage()));
        bipYsItem.setCustomerCode(customerCode);//客户编码
        Double noTaxPrice = railwayEntrust.getPrice();
        bipYsItem.setOriTaxAmount(BigDecimal.valueOf(railwayEntrust.getTaxFee()));//税额
        String[] codes = expenseItemCode.get().split(",");
        bipYsItem.setExpenseItemCode(codes[0]);
        Double allPrice = railwayEntrust.getTotalPrice();
        bipYsItem.setOriTaxExcludedAmount(BigDecimal.valueOf(railwayEntrust.getCoalFree()));//原币无税金额
        bipYsItem.setOriTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getTotalPrice()));//原币含税金额
        bipYsItem.setLocalTaxExcludedAmount(BigDecimal.valueOf(railwayEntrust.getCoalFree()));//本币无税金额
        bipYsItem.setLocalTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getTotalPrice()));//本币含税金额
        bipYsItem.setOriTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCoalFree(), railwayEntrust.getTonnage(), 8));//无税单价
        bipYsItem.setLocalTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCoalFree(), railwayEntrust.getTonnage(), 8));//无税单价
        Double realPrice = NumUtils.divideDouble(railwayEntrust.getTotalPrice(), railwayEntrust.getTonnage(), 8);
        bipYsItem.setOriTaxIncludedPrice(realPrice);//本币含税单价
        bipYsItem.setLocalTaxIncludedPrice(realPrice);//本币含税单价
        //分割单金额
        if (CompUtils.isTsCustomer(railwayEntrust.getCustomerId())) {
            if (railwayEntrust.getFatherEntrustId() == null) {
                Double noTaxMoney = railwayEntrust.getCoalMoney();
                Double taxMoney = railwayEntrust.getCoalTaxMoney();
                Double allMoney = NumUtils.addDouble(noTaxMoney, taxMoney, 2);
                allPrice = allMoney;
                bipYsItem.setOriTaxAmount(BigDecimal.valueOf(taxMoney));//税额
                bipYsItem.setOriTaxExcludedAmount(BigDecimal.valueOf(noTaxMoney));//原币无税金额
                bipYsItem.setOriTaxIncludedAmount(BigDecimal.valueOf(allMoney));//原币含税金额
                bipYsItem.setLocalTaxExcludedAmount(BigDecimal.valueOf(noTaxMoney));//本币无税金额
                bipYsItem.setLocalTaxIncludedAmount(BigDecimal.valueOf(allMoney));//本币含税金额
                bipYsItem.setOriTaxExcludedPrice(railwayEntrust.getPrice());//无税单价
                bipYsItem.setLocalTaxExcludedPrice(railwayEntrust.getPrice());//无税单价
                bipYsItem.setOriTaxIncludedPrice(NumUtils.divideDouble(allMoney, railwayEntrust.getTonnage(), 8));//本币含税单价
                bipYsItem.setLocalTaxIncludedPrice(NumUtils.divideDouble(allMoney, railwayEntrust.getTonnage(), 8));//本币含税单价
            }
        }
        bipYsItem.setRemarks(remark);*/
        //煤种表体
        BIPYsMx bipYsMx = new BIPYsMx();
        //bipYsMx.setJT12_code(ncCoalNumber);//物料编码
//        bipYsMx.setJT25_code(codes[1]);
        //bipYsMx.setGX06_code(coalBipCode);//物料名称
        bipYsMx.setMX021_code(customerCode);//收货客户
        bipYsMx.setCustomerCode(customerAddressCode);//客户编码
        bipYsMx.setJT06_code("01001001");//款项明细
        bipYsMx.setYSYF14_code("2");
        if (id2!=null){
            /*if (id2 != null && id2.equals("10439") && railwayEntrust.getCoalId() != null && railwayEntrust.getCoalId().equals(45)) {
                bipYsMx.setJT12_code("0101020401");//物料编码
                bipYsMx.setGX06_code("01010201043902438");//物料名称
            }*/
            if (id2.equals("126") || id2.equals("10439") || id2.equals("1045116") || id2.equals("104810210") || id2.equals("1027902")) {
                bipBody.setYSYF_08("0");
                bipYsMx.setYSYF_08("0");
            }
            if (id2.startsWith("104")) {
                if (focus) {
                    bipYsMx.setYSYF52("0");
                } else {
                    bipYsMx.setYSYF52("1");
                }
            }
        }
        bipYsMx.setGX08_code(accountUnitNumber);
        /*bipYsMx.setMX09(railwayEntrust.getCoalName());//运销煤种
        bipYsMx.setMX10(BigDecimal.valueOf(railwayEntrust.getRealTonnage()));//水煤量
        bipYsMx.setMX11(railwayEntrust.getAshContentMetering());//灰分
        bipYsMx.setMX13(railwayEntrust.getMoistureMetering());
        bipYsMx.setMX14(railwayEntrust.getSulFurMetering());
        bipYsMx.setMX15(railwayEntrust.getCoalName());
        if (railwayEntrust.getInvoiceResultId() == null && !CompUtils.isKp(accountLedger.getId()) && !accountLedger.getId().equals(165)) {
            throw new RuntimeException("结算单未开票");
        }*/
        InvoiceResult invoiceResult = fpInvoiceResultService.getById(railwayEntrust.getBlueInvoiceResultId());
        if (invoiceResult != null) {
            bipYsMx.setYSYF33(invoiceResult.getInvoiceNo());
            bipYsItem.setInvoiceNo(invoiceResult.getInvoiceNo());
//            bipYsMx.setInvoiceNo(invoiceResult.getInvoiceNo());
        }
        bipYsMx.setZzbkfl_code("01");
        /*if (StrUtil.isNotEmpty(accountLedger.getZzbkfl())) {
            bipYsMx.setZzbkfl_code(accountLedger.getZzbkfl());
        }
        String jyType1 = jyType;//特殊交易单
        if (jyType.equals("0101") && railwayEntrust.getCustomerId() != null && railwayEntrust.getCustomerId().equals(203)) {
            jyType1 = "01020202";
        }
        if (jyType.equals("0101") && railwayEntrust.getCustomerId() != null && (railwayEntrust.getCustomerId().equals(172) || railwayEntrust.getCustomerId().equals(200) || railwayEntrust.getCustomerId().equals(2002381))) {
            jyType1 = "010201";
        }*/
        //bipYsMx.setJT04_code(jyType1);
        //bipYsMx.setMX16(railwayEntrust.getTonnage());//折干量
        bipYsItem.setFreeChId(bipYsMx);
//        bipYsMx.setMX18(railwayEntrust.getRealTonnage());//标煤量
//        bipYsMx.setMX18(railwayEntrust.getRealPrice());//标煤量单价
        //收款计划
        /*if (focus) {
            List<BIPPayPlan> bipPayPlans = this.getBipPayPlan(railwayEntrust, allPrice);
            bipYsItem.setGrandsonItem(bipPayPlans);
        }*/
        bipYsItems.add(bipYsItem);
        String invoiceNo = invoiceResult == null ? "" : invoiceResult.getInvoiceNo();
        /*if (railwayEntrust.getCustomerId() != null && (railwayEntrust.getCustomerId().equals(618) || railwayEntrust.getCustomerId().equals(608) || railwayEntrust.getCustomerId().equals(1367) || railwayEntrust.getCustomerId().equals(1002134))) {
            this.getTsBt(railwayEntrust, customerCode, jyType1, focus, bipYsItems, isNd, accountUnitNumber, id2, fromStation, invoiceNo, contractNum);
        } else {
            this.getPtBt(railwayEntrust, customerCode, jyType1, focus, bipYsItems, isNd, accountUnitNumber, id2, fromStation, invoiceNo, contractNum);
        }*/
        bipBody.setBodyItem(bipYsItems);
        /*if (railwayEntrust.getFatherEntrustId() == null && !railwayEntrust.getFyCompId().equals(227) && !order.getFiledId().equals(48)) {
            List<Contract> contracts = fileUploadService.getContractsByEntrustId(railwayEntrust.getId());
            System.out.println("重复合同:" + contracts.size() + "上级ID:" + railwayEntrust.getFatherEntrustId() + "结算单号:" + railwayEntrust.getEntrustCode());
            if (contracts != null && contracts.size() > 0) {
                contracts.forEach(e -> {
                    BIPYsMxHeader newMx = new BIPYsMxHeader();
                    BeanUtils.copyProperties(mx, newMx);
                    if (accountLedger.getId().equals(80) || accountLedger.getId().equals(81) || accountLedger.getId().equals(82)) {
                        newMx.setContractNo("");
                        newMx.setHTBMBT(0);
                    } else {
                        newMx.setContractNo(e.getNum());
                        newMx.setHTBMBT(1);
                    }
                    bipBody.setFreeChId(newMx);
                });
            }
        } else {
            bipBody.setFreeChId(mx);
        }*/
        String result = bipHttpUtil.post(BipApiEnum.应收发票保存接口, new JSONObject().set("data", bipBody));
        BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
        //放到单据记录表
        BipInvoice bipInvoice = new BipInvoice();
        bipInvoice.setDay(DateUtil.date());
        bipInvoice.setInvoice(JSONUtil.toJsonStr(bipBody));
        bipInvoice.setType(0);
        bipInvoice.setInvoiceType(0);
        bipInvoice.setContractNum(contractNum);
        bipInvoice.setRailwayEntrustId(railwayEntrust.getId());
        bipInvoice.setAllId(Long.parseLong(allId+""));
        bipInvoice.setBipCompNumber(id2);
        bipInvoice.setDirection(1);
        bipInvoice.setCompId(railwayEntrust.getCompId());
        bipInvoice.setResStatus(resVo.getCode());
//            bipInvoice.setMoney(railwayEntrust.getAllPrice());
//            bipInvoice.setTonnage(railwayEntrust.getTonnage());
//            bipInvoice.setPrice(railwayEntrust.getPrice());
        //bipInvoice.setTrainType(railwayEntrust.getTrainType());
        BipResVo bipResVo = new BipResVo<>();
        bipResVo.setCode(resVo.getCode());
        BIPBody resBipBody = null;
        if (resVo.getData() == null) {
            resBipBody = new BIPBody();
        } else {
            resBipBody = JSONUtil.toBean(resVo.getData().toString(), BIPBody.class);
        }
        if (resVo.getCode().equals("200") || (StrUtil.isNotEmpty(resVo.getMessage()) && resVo.getMessage().contains("活动[财务审核]上找不到用户")) || StrUtil.isNotEmpty(resBipBody.getCode())) {
            bipInvoice.setResInvoice(resVo.getData().toString());
            bipInvoice.setBipNumber(resBipBody.getId());
            //                bipInvoice.setCode("200");
            bipInvoice.setCode(resBipBody.getCode());
            bipInvoice.setMessage(resVo.getMessage());
            bipInvoiceService.save(bipInvoice);
            bipResVo.setCode("200");
        } else {
            if (resVo.getData() != null && StrUtil.isNotEmpty(resVo.getData().toString())) {
                bipInvoice.setBipNumber(resBipBody.getId());
                bipInvoice.setCode(resBipBody.getCode());
            }
            bipInvoice.setMessage(resVo.getMessage());
            bipResVo.setMessage(resVo.getMessage());
            bipInvoiceService.save(bipInvoice);
        }
        if (resVo.getData() != null && StrUtil.isNotEmpty(resVo.getData().toString())) {
            if (resBipBody.getId() != null) {
                try {
                    /*if (railwayEntrust.getTrainType().equals(1)) {
                        if (order != null && order.getCompId() != null && order.getCompId().equals(227) && order.getFiledId() != null && order.getFiledId().equals(48)) {
                            fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(8, allId));
                        } else {
                            fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(0, allId));
                        }
                        fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(3, railwayEntrust.getId(), railwayEntrust.getQualityName(), railwayEntrust.getUserCompId()));
                    } else if (railwayEntrust.getTrainType().equals(2)) {
                        fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(1, allId));
                        fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(4, railwayEntrust.getId(), railwayEntrust.getQualityName(), railwayEntrust.getUserCompId()));
                    }
                    if (StrUtil.isNotEmpty(fileUrl)) {
                        for (String s : fileUrl.split(",")) {
                            fileUploadService.uploadUrlToBip(railwayEntrust.getId(), resBipBody.getId(), s);
                        }
                    }*/
                    //发票
                    railwayEntrust.setBipStatus(200);
                    fpInvoiceResultService.update(new UpdateWrapper<InvoiceResult>().lambda()
                            .eq(InvoiceResult::getEntrustCode, railwayEntrust.getEntrustCode())
                            .set(InvoiceResult::getPushBip, null));
                    //fpInvoiceResultService.pushBlue(railwayEntrust, 0);
                    //fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(2, allId));
                } catch (Exception e) {
                    //railwayEntrust.setBipFileStatus(-1);
                    log.error("结算单推送附件错误---", e);
                    e.printStackTrace();
                }
            }
        }
        return bipResVo;
    }
    @Override
    public BipResVo sendBIPYs(SaleCredit railwayEntrust) {
        BIPBody bipBody = new BIPBody();
        BIPYsMxHeader mx = new BIPYsMxHeader();
        List<BIPYsItem> bipYsItems = new ArrayList<>();
//        mx.(railwayEntrust.getFyCompName());//发运矿
        //mx.setMX01_code(fromStation2);//发站
        /*if (accountLedger.getId().equals(80) || accountLedger.getId().equals(81) && !accountLedger.getId().equals(82)) {
            contractNum = "";
        }*/
        if (StrUtil.isNotEmpty(railwayEntrust.getContractNo())) {
            mx.setHTBMBT(1);
        } else {
            mx.setHTBMBT(0);
        }
        mx.setContractNo(railwayEntrust.getContractNo());
        //mx.setMX021_code(customerCode);//收货客户
        //mx.setMX031_code(customerCode);//结算客户
        //mx.setMX04(number);//结算单号
        mx.setMX0401(railwayEntrust.getEntrustCode());//托收单号
        //mx.setMX051_code(businessType);//业务种类
        //mx.setMX06(createName);//创建人
        //mx.setMX07(railwayEntrust.getUserName());//审核人
        //mx.setGX08_code(accountUnitNumber);//核算单元
        //String remark = getRemark(railwayEntrust, "销", customerCode, id2);
        mx.setRemarks(railwayEntrust.getInvoiceRemark());
        //String fileUrl = fileUploadService.fileUpload(6, railwayEntrust.getId());
        mx.setFk_002(3);
        /*if (StrUtil.isNotEmpty(fileUrl) && "01".equals(jyType)) {
            mx.setFk_002(3 + fileUrl.split(",").length);
        }*/
        /*if (railwayEntrust.getFatherEntrustId() != null) {
            fileUrl = fileUploadService.fileUpload(6, contractNum);
            mx.setFk_002(3);
            if (StrUtil.isNotEmpty(fileUrl) && "01".equals(jyType)) {
                mx.setFk_002(3 + fileUrl.split(",").length);
            }
        }*/
        bipBody.setBustypeCode("MXysfp");
        //bipBody.setStaffCode(userCode);
//        bipBody.setFk_038_code(userCode);
        bipBody.setObjectType("1");
        //bipBody.setCustomerCode(customerCode);
        bipBody.setExtVouchCode(railwayEntrust.getEntrustCode());//煤销系统单号
        //bipBody.setFinanceOrgCode(id2);//开票组织ID
        bipBody.setDirection("1");//单据方向 1蓝 -1红
        bipBody.setBillDate(DateUtil.format(new Date(), "yyyy-MM-dd"));//开票日期
//        bipBody.setBillDate(DateUtil.format(railwayEntrust.getBalanceDate(), "yyyy-MM-dd"));//开票日期
//        if ("0101".equals(jyType)){
//
//        }
        //bipBody.setContractNo(contractNum);
        //bipBody.setOrgCode(id2);//业务组织id
        //bipBody.setDeptCode(deptCode);
        bipBody.setExchangeRateDate(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
//        bipBody.setExchangeRateDate(DateUtil.format(railwayEntrust.getBalanceDate(), "yyyy-MM-dd HH:mm:ss"));
//        bipBody.setCustomer();//客户编码
        //bipBody.setRemarks(remark);
        //表体
        //煤种类目
        BIPYsItem bipYsItem = new BIPYsItem();
//        bipYsItem.setExchangeRateDate(DateUtil.format(railwayEntrust.getBalanceDate(),"yyyy-MM-dd HH:mm:ss"));
        //bipYsItem.setTaxRate(NumUtils.multiplyDouble(railwayEntrust.getTaxRate(),100d));
        //bipYsItem.setUnitName("吨");
        /*bipYsItem.setMaterialCode("7704000001");
        bipYsItem.setQuantity(BigDecimal.valueOf(railwayEntrust.getTonnage()));
        bipYsItem.setCustomerCode(customerCode);//客户编码
        Double noTaxPrice = railwayEntrust.getPrice();
        bipYsItem.setOriTaxAmount(BigDecimal.valueOf(railwayEntrust.getTaxFee()));//税额
        String[] codes = expenseItemCode.get().split(",");
        bipYsItem.setExpenseItemCode(codes[0]);
        Double allPrice = railwayEntrust.getTotalPrice();
        bipYsItem.setOriTaxExcludedAmount(BigDecimal.valueOf(railwayEntrust.getCoalFree()));//原币无税金额
        bipYsItem.setOriTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getTotalPrice()));//原币含税金额
        bipYsItem.setLocalTaxExcludedAmount(BigDecimal.valueOf(railwayEntrust.getCoalFree()));//本币无税金额
        bipYsItem.setLocalTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getTotalPrice()));//本币含税金额
        bipYsItem.setOriTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCoalFree(), railwayEntrust.getTonnage(), 8));//无税单价
        bipYsItem.setLocalTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCoalFree(), railwayEntrust.getTonnage(), 8));//无税单价
        Double realPrice = NumUtils.divideDouble(railwayEntrust.getTotalPrice(), railwayEntrust.getTonnage(), 8);
        bipYsItem.setOriTaxIncludedPrice(realPrice);//本币含税单价
        bipYsItem.setLocalTaxIncludedPrice(realPrice);//本币含税单价
        //分割单金额
        if (CompUtils.isTsCustomer(railwayEntrust.getCustomerId())) {
            if (railwayEntrust.getFatherEntrustId() == null) {
                Double noTaxMoney = railwayEntrust.getCoalMoney();
                Double taxMoney = railwayEntrust.getCoalTaxMoney();
                Double allMoney = NumUtils.addDouble(noTaxMoney, taxMoney, 2);
                allPrice = allMoney;
                bipYsItem.setOriTaxAmount(BigDecimal.valueOf(taxMoney));//税额
                bipYsItem.setOriTaxExcludedAmount(BigDecimal.valueOf(noTaxMoney));//原币无税金额
                bipYsItem.setOriTaxIncludedAmount(BigDecimal.valueOf(allMoney));//原币含税金额
                bipYsItem.setLocalTaxExcludedAmount(BigDecimal.valueOf(noTaxMoney));//本币无税金额
                bipYsItem.setLocalTaxIncludedAmount(BigDecimal.valueOf(allMoney));//本币含税金额
                bipYsItem.setOriTaxExcludedPrice(railwayEntrust.getPrice());//无税单价
                bipYsItem.setLocalTaxExcludedPrice(railwayEntrust.getPrice());//无税单价
                bipYsItem.setOriTaxIncludedPrice(NumUtils.divideDouble(allMoney, railwayEntrust.getTonnage(), 8));//本币含税单价
                bipYsItem.setLocalTaxIncludedPrice(NumUtils.divideDouble(allMoney, railwayEntrust.getTonnage(), 8));//本币含税单价
            }
        }
        bipYsItem.setRemarks(remark);*/
        //煤种表体
        BIPYsMx bipYsMx = new BIPYsMx();
        //bipYsMx.setJT12_code(ncCoalNumber);//物料编码
//        bipYsMx.setJT25_code(codes[1]);
        //bipYsMx.setGX06_code(coalBipCode);//物料名称
        //bipYsMx.setMX021_code(customerCode);//收货客户
        //bipYsMx.setCustomerCode(customerAddressCode);//客户编码
        bipYsMx.setJT06_code("01001001");//款项明细
        bipYsMx.setYSYF14_code("2");
        /*if (id2!=null){
            *//*if (id2 != null && id2.equals("10439") && railwayEntrust.getCoalId() != null && railwayEntrust.getCoalId().equals(45)) {
                bipYsMx.setJT12_code("0101020401");//物料编码
                bipYsMx.setGX06_code("01010201043902438");//物料名称
            }*//*
            if (id2.equals("126") || id2.equals("10439") || id2.equals("1045116") || id2.equals("104810210") || id2.equals("1027902")) {
                bipBody.setYSYF_08("0");
                bipYsMx.setYSYF_08("0");
            }
            if (id2.startsWith("104")) {
                if (focus) {
                    bipYsMx.setYSYF52("0");
                } else {
                    bipYsMx.setYSYF52("1");
                }
            }
        }
        bipYsMx.setGX08_code(accountUnitNumber);*/
        /*bipYsMx.setMX09(railwayEntrust.getCoalName());//运销煤种
        bipYsMx.setMX10(BigDecimal.valueOf(railwayEntrust.getRealTonnage()));//水煤量
        bipYsMx.setMX11(railwayEntrust.getAshContentMetering());//灰分
        bipYsMx.setMX13(railwayEntrust.getMoistureMetering());
        bipYsMx.setMX14(railwayEntrust.getSulFurMetering());
        bipYsMx.setMX15(railwayEntrust.getCoalName());
        if (railwayEntrust.getInvoiceResultId() == null && !CompUtils.isKp(accountLedger.getId()) && !accountLedger.getId().equals(165)) {
            throw new RuntimeException("结算单未开票");
        }*/
        InvoiceResult invoiceResult = fpInvoiceResultService.getById(railwayEntrust.getBlueInvoiceResultId());
        if (invoiceResult != null) {
            bipYsMx.setYSYF33(invoiceResult.getInvoiceNo());
            bipYsItem.setInvoiceNo(invoiceResult.getInvoiceNo());
//            bipYsMx.setInvoiceNo(invoiceResult.getInvoiceNo());
        }
        bipYsMx.setZzbkfl_code("01");
        /*if (StrUtil.isNotEmpty(accountLedger.getZzbkfl())) {
            bipYsMx.setZzbkfl_code(accountLedger.getZzbkfl());
        }
        String jyType1 = jyType;//特殊交易单
        if (jyType.equals("0101") && railwayEntrust.getCustomerId() != null && railwayEntrust.getCustomerId().equals(203)) {
            jyType1 = "01020202";
        }
        if (jyType.equals("0101") && railwayEntrust.getCustomerId() != null && (railwayEntrust.getCustomerId().equals(172) || railwayEntrust.getCustomerId().equals(200) || railwayEntrust.getCustomerId().equals(2002381))) {
            jyType1 = "010201";
        }*/
        //bipYsMx.setJT04_code(jyType1);
        //bipYsMx.setMX16(railwayEntrust.getTonnage());//折干量
        bipYsItem.setFreeChId(bipYsMx);
//        bipYsMx.setMX18(railwayEntrust.getRealTonnage());//标煤量
//        bipYsMx.setMX18(railwayEntrust.getRealPrice());//标煤量单价
        //收款计划
        /*if (focus) {
            List<BIPPayPlan> bipPayPlans = this.getBipPayPlan(railwayEntrust, allPrice);
            bipYsItem.setGrandsonItem(bipPayPlans);
        }*/
        bipYsItems.add(bipYsItem);
        String invoiceNo = invoiceResult == null ? "" : invoiceResult.getInvoiceNo();
        /*if (railwayEntrust.getCustomerId() != null && (railwayEntrust.getCustomerId().equals(618) || railwayEntrust.getCustomerId().equals(608) || railwayEntrust.getCustomerId().equals(1367) || railwayEntrust.getCustomerId().equals(1002134))) {
            this.getTsBt(railwayEntrust, customerCode, jyType1, focus, bipYsItems, isNd, accountUnitNumber, id2, fromStation, invoiceNo, contractNum);
        } else {
            this.getPtBt(railwayEntrust, customerCode, jyType1, focus, bipYsItems, isNd, accountUnitNumber, id2, fromStation, invoiceNo, contractNum);
        }*/
        bipBody.setBodyItem(bipYsItems);
        /*if (railwayEntrust.getFatherEntrustId() == null && !railwayEntrust.getFyCompId().equals(227) && !order.getFiledId().equals(48)) {
            List<Contract> contracts = fileUploadService.getContractsByEntrustId(railwayEntrust.getId());
            System.out.println("重复合同:" + contracts.size() + "上级ID:" + railwayEntrust.getFatherEntrustId() + "结算单号:" + railwayEntrust.getEntrustCode());
            if (contracts != null && contracts.size() > 0) {
                contracts.forEach(e -> {
                    BIPYsMxHeader newMx = new BIPYsMxHeader();
                    BeanUtils.copyProperties(mx, newMx);
                    if (accountLedger.getId().equals(80) || accountLedger.getId().equals(81) || accountLedger.getId().equals(82)) {
                        newMx.setContractNo("");
                        newMx.setHTBMBT(0);
                    } else {
                        newMx.setContractNo(e.getNum());
                        newMx.setHTBMBT(1);
                    }
                    bipBody.setFreeChId(newMx);
                });
            }
        } else {
            bipBody.setFreeChId(mx);
        }*/
        String result = bipHttpUtil.post(BipApiEnum.应收发票保存接口, new JSONObject().set("data", bipBody));
        BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
        //放到单据记录表
        BipInvoice bipInvoice = new BipInvoice();
        bipInvoice.setDay(DateUtil.date());
        bipInvoice.setInvoice(JSONUtil.toJsonStr(bipBody));
        bipInvoice.setType(0);
        bipInvoice.setInvoiceType(0);
        bipInvoice.setContractNum(railwayEntrust.getContractNo());
        bipInvoice.setRailwayEntrustId(railwayEntrust.getId());
        //bipInvoice.setAllId(Long.parseLong(allId+""));
        bipInvoice.setBipCompNumber("id2");
        bipInvoice.setDirection(1);
        bipInvoice.setCompId(railwayEntrust.getCompId());
        bipInvoice.setResStatus(resVo.getCode());
//            bipInvoice.setMoney(railwayEntrust.getAllPrice());
//            bipInvoice.setTonnage(railwayEntrust.getTonnage());
//            bipInvoice.setPrice(railwayEntrust.getPrice());
        //bipInvoice.setTrainType(railwayEntrust.getTrainType());
        BipResVo bipResVo = new BipResVo<>();
        bipResVo.setCode(resVo.getCode());
        BIPBody resBipBody = null;
        if (resVo.getData() == null) {
            resBipBody = new BIPBody();
        } else {
            resBipBody = JSONUtil.toBean(resVo.getData().toString(), BIPBody.class);
        }
        if (resVo.getCode().equals("200") || (StrUtil.isNotEmpty(resVo.getMessage()) && resVo.getMessage().contains("活动[财务审核]上找不到用户")) || StrUtil.isNotEmpty(resBipBody.getCode())) {
            bipInvoice.setResInvoice(resVo.getData().toString());
            bipInvoice.setBipNumber(resBipBody.getId());
            //                bipInvoice.setCode("200");
            bipInvoice.setCode(resBipBody.getCode());
            bipInvoice.setMessage(resVo.getMessage());
            bipInvoiceService.save(bipInvoice);
            bipResVo.setCode("200");
        } else {
            if (resVo.getData() != null && StrUtil.isNotEmpty(resVo.getData().toString())) {
                bipInvoice.setBipNumber(resBipBody.getId());
                bipInvoice.setCode(resBipBody.getCode());
            }
            bipInvoice.setMessage(resVo.getMessage());
            bipResVo.setMessage(resVo.getMessage());
            bipInvoiceService.save(bipInvoice);
        }
        if (resVo.getData() != null && StrUtil.isNotEmpty(resVo.getData().toString())) {
            if (resBipBody.getId() != null) {
                try {
                    /*if (railwayEntrust.getTrainType().equals(1)) {
                        if (order != null && order.getCompId() != null && order.getCompId().equals(227) && order.getFiledId() != null && order.getFiledId().equals(48)) {
                            fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(8, allId));
                        } else {
                            fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(0, allId));
                        }
                        fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(3, railwayEntrust.getId(), railwayEntrust.getQualityName(), railwayEntrust.getUserCompId()));
                    } else if (railwayEntrust.getTrainType().equals(2)) {
                        fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(1, allId));
                        fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(4, railwayEntrust.getId(), railwayEntrust.getQualityName(), railwayEntrust.getUserCompId()));
                    }
                    if (StrUtil.isNotEmpty(fileUrl)) {
                        for (String s : fileUrl.split(",")) {
                            fileUploadService.uploadUrlToBip(railwayEntrust.getId(), resBipBody.getId(), s);
                        }
                    }*/
                    //发票
                    railwayEntrust.setBipStatus(200);
                    fpInvoiceResultService.update(new UpdateWrapper<InvoiceResult>().lambda()
                            .eq(InvoiceResult::getEntrustCode, railwayEntrust.getEntrustCode())
                            .set(InvoiceResult::getPushBip, null));
                    //fpInvoiceResultService.pushBlue(railwayEntrust, 0);
                    //fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(2, allId));
                } catch (Exception e) {
                    //railwayEntrust.setBipFileStatus(-1);
                    log.error("结算单推送附件错误---", e);
                    e.printStackTrace();
                }
            }
        }
        return bipResVo;
    }
    public BipResVo sendBIPYf(SaleCredit railwayEntrust,String id1,String id2,String customerCode,String businessType,String fromStation,Integer allId,String contractNum,String number,String jyType,String accountUnitNumber,String deptCode,String userCode,Integer isNd) {
//        BipResVo bipResVo1 = new BipResVo<>();
//        bipResVo1.setCode("200");
//        BipInvoice bipInvoice1 = new BipInvoice();
//        bipInvoice1.setDay(DateUtil.date());
//        bipInvoice1.setBipCompNumber(id2);
//        bipInvoice1.setType(0);
//        bipInvoice1.setInvoiceType(1);
//        bipInvoice1.setRailwayEntrustId(railwayEntrust.getId());
//        bipInvoice1.setAllId(allId);
//        bipInvoice1.setCompId(railwayEntrust.getCompId());
//        bipInvoice1.setMoney(railwayEntrust.getAllPrice());
//        bipInvoice1.setTonnage(railwayEntrust.getTonnage());
//        bipInvoice1.setPrice(railwayEntrust.getPrice());
//        bipInvoice1.setResStatus("200");
//        bipInvoice1.setDirection(1);
//        bipInvoice1.setTrainType(railwayEntrust.getTrainType());
//        bipInvoiceService.save(bipInvoice1);
//        if (true){
//            return bipResVo1;
//        }
        /*Map<String, String> dictMap = RedisCacheHelper.getInstance().getDictMapByType("bip_expense_item");
        AtomicReference<String> expenseItemCode = new AtomicReference<>("12008001001,01");
        List<ContractOrder> orders = contractOrderService.list(new QueryWrapper<ContractOrder>().lambda().eq(ContractOrder::getNumber, railwayEntrust.getOrderNumber()));
        ContractOrder order = orders.get(0);
        dictMap.forEach((k, v) -> {
            if (k.equals(railwayEntrust.getCoalId().toString())) {
                expenseItemCode.set(v);
            }
        });
        Map<String,String> fromStationMap = RedisCacheHelper.getInstance().getDictMapByType("from_station");//发站
        String fromStation2 = "";
        if (railwayEntrust.getTrainType().equals(2) && StrUtil.isNotEmpty(order.getFromStation()) && fromStationMap!=null){
            fromStation2 = fromStationMap.get(order.getFromStation());
        }
        SysUser user = remoteUserService.getByName(railwayEntrust.getCreateBy());
        String createName = (user==null?"":user.getRealName());*/
        BIPBody bipBody = new BIPBody();
        BIPYsMxHeader mx = new BIPYsMxHeader();
        List<BIPYsItem> bipYsItems = new ArrayList<>();
        //mx.setMX01_code(fromStation2);//发站
        mx.setMX031_code(customerCode);//结算客户
//        mx.setContractNo(contractNum);
        //mx.setOrderNo(railwayEntrust.getOrderNumber());
        //String ncCoalNumber = coal.getBipCategoryCode();
        //String coalBipCode = coal.getBipCode();
//        mx.setMX03("102");//结算客户
        mx.setMX04(number);//结算单号
        mx.setMX0401(railwayEntrust.getEntrustCode());//托收单号
        mx.setMX051_code(businessType);//业务种类
        //mx.setMX06(createName);//创建人
        //mx.setMX07(railwayEntrust.getUserName());//审核人
        mx.setGX08_code(accountUnitNumber);//核算单元档案
        //String remark = getRemark(railwayEntrust, "购", id2, id1);
        //mx.setRemarks(remark);
        //String fileUrl = fileUploadService.fileUpload(6, contractNum);
        mx.setFk_002(3);
        /*if (StrUtil.isNotEmpty(fileUrl)) {
            mx.setFk_002(3 + fileUrl.split(",").length);
        }*/
//
        bipBody.setBustypeCode("MXyffp");
        bipBody.setObjectType("0");
        bipBody.setStaffCode(userCode);
//        bipBody.setFk_038_code(userCode);
        /*if (accountLedger.getId().equals(80) || accountLedger.getId().equals(81) || accountLedger.getId().equals(82)) {
            contractNum = "";
        }*/
        if (StrUtil.isNotEmpty(contractNum)) {
            mx.setHTBMBT(1);
        } else {
            mx.setHTBMBT(0);
        }
        mx.setContractNo(contractNum);
        bipBody.setContractNo(contractNum);//合同号!!
        bipBody.setSupplierCode(id1);
        bipBody.setCustomerCode(customerCode);
        bipBody.setExtVouchCode(railwayEntrust.getEntrustCode());//煤销系统单号
        bipBody.setFinanceOrgCode(id2);//收票组织ID
        bipBody.setDirection("1");//单据方向 1蓝 -1红
        bipBody.setBillDate(DateUtil.format(new Date(), "yyyy-MM-dd"));//开票日期
//        bipBody.setBillDate(DateUtil.format(railwayEntrust.getBalanceDate(), "yyyy-MM-dd"));//开票日期
        bipBody.setDeptCode(deptCode);
        bipBody.setOrgCode(id2);//业务组织id
//        bipBody.setExchangeRateDate(DateUtil.format(railwayEntrust.getBalanceDate(), "yyyy-MM-dd HH:mm:ss"));
        bipBody.setExchangeRateDate(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
//        bipBody.setCustomer();//客户编码
        //bipBody.setRemarks(remark);
//
//
        BIPYsItem bipYsItem = new BIPYsItem();
//        bipYsItem.setExchangeRateDate(DateUtil.format(railwayEntrust.getBalanceDate(),"yyyy-MM-dd HH:mm:ss"));
        //bipYsItem.setTaxRate(NumUtils.multiplyDouble(railwayEntrust.getTaxRate(), 100d));
        /*bipYsItem.setCustomerCode(id1);//客户编码
        Double noTaxPrice = NumUtils.divideDouble(railwayEntrust.getCoalFree(), railwayEntrust.getTonnage(), 8);
        bipYsItem.setOriTaxAmount(BigDecimal.valueOf(railwayEntrust.getTaxFee()));//税额
        bipYsItem.setOriTaxExcludedAmount(BigDecimal.valueOf(railwayEntrust.getCoalFree()));//原币无税金额
        bipYsItem.setOriTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getTotalPrice()));//原币含税金额
        bipYsItem.setLocalTaxExcludedAmount(BigDecimal.valueOf(railwayEntrust.getCoalFree()));//本币无税金额
        bipYsItem.setLocalTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getTotalPrice()));//本币含税金额
        bipYsItem.setOriTaxExcludedPrice(noTaxPrice);//无税单价
        bipYsItem.setLocalTaxExcludedPrice(noTaxPrice);//无税单价
        Double realPrice = NumUtils.divideDouble(railwayEntrust.getTotalPrice(),railwayEntrust.getTonnage(),8);
        bipYsItem.setOriTaxIncludedPrice(realPrice);//本币含税单价
        bipYsItem.setLocalTaxIncludedPrice(realPrice);//本币含税单价
        Double allPrice = railwayEntrust.getTotalPrice();*/
        //分割单金额
        /*if (railwayEntrust.getCustomerId()!=null && (railwayEntrust.getCustomerId().equals(618) || railwayEntrust.getCustomerId().equals(608) || railwayEntrust.getCustomerId().equals(1367)|| railwayEntrust.getCustomerId().equals(1002134))){
            Double noTaxMoney = NumUtils.multiplyDouble(railwayEntrust.getPrice(),railwayEntrust.getTonnage(),2);
            Double taxMoney = NumUtils.multiplyDouble(noTaxMoney,railwayEntrust.getTaxRate(),2);
            Double allMoney = NumUtils.addDouble(noTaxMoney,taxMoney,2);
            allPrice = allMoney;
            bipYsItem.setOriTaxAmount(BigDecimal.valueOf(taxMoney));//税额
            bipYsItem.setOriTaxExcludedAmount(BigDecimal.valueOf(noTaxMoney));//原币无税金额
            bipYsItem.setOriTaxIncludedAmount(BigDecimal.valueOf(allMoney));//原币含税金额
            bipYsItem.setLocalTaxExcludedAmount(BigDecimal.valueOf(noTaxMoney));//本币无税金额
            bipYsItem.setLocalTaxIncludedAmount(BigDecimal.valueOf(allMoney));//本币含税金额
            bipYsItem.setOriTaxExcludedPrice(railwayEntrust.getPrice());//无税单价
            bipYsItem.setLocalTaxExcludedPrice(railwayEntrust.getPrice());//无税单价
            bipYsItem.setOriTaxIncludedPrice(NumUtils.divideDouble(allMoney,railwayEntrust.getTonnage(),8));//本币含税单价
            bipYsItem.setLocalTaxIncludedPrice(NumUtils.divideDouble(allMoney,railwayEntrust.getTonnage(),8));//本币含税单价
        }
        String[] codes = expenseItemCode.get().split(",");*/
        /*bipYsItem.setExpenseItemCode(codes[0]);//经济事项
        if (codes[0]!=null && codes[0].equals("09003013")){
            bipYsItem.setExpenseItemCode("10006011");//经济事项
        }
        bipYsItem.setUnitName("吨");
        bipYsItem.setUnitCode("0110");
        bipYsItem.setMaterialCode("7704000001");
        bipYsItem.setQuantity(BigDecimal.valueOf(railwayEntrust.getTonnage()));
        bipYsItem.setRemarks(remark);*/
        //煤种表体
        BIPYsMx bipYsMx = new BIPYsMx();
//        bipYsMx.setJT01("01");//物料编码
        bipYsMx.setJT04_code(jyType);//交易类型
        bipYsMx.setJT06_code("01001001");//款项明细
        bipYsMx.setMX021_code(id1);//收货客户
        bipYsMx.setCustomerCode(id1);//客户编码
//        bipYsMx.setJT11("");
        bipYsMx.setGX08_code(accountUnitNumber);
        /*bipYsMx.setJT12_code(ncCoalNumber);
        bipYsMx.setGX06_code(coalBipCode);*/
        /*if (id2 != null && id2.equals("10439") && railwayEntrust.getCoalId() != null && railwayEntrust.getCoalId().equals(45)) {
            bipYsMx.setJT12_code("0101020401");//物料编码
            bipYsMx.setGX06_code("01010201043902438");//物料名称
        }*/
//        bipYsMx.setJT25_code(codes[1]);
        bipYsMx.setYSYF14_code("6");
        /*bipYsMx.setMX09(railwayEntrust.getCoalName());//运销煤种
        bipYsMx.setMX10(BigDecimal.valueOf(railwayEntrust.getRealTonnage()));//水煤量
        bipYsMx.setMX11(railwayEntrust.getAshContentMetering());//灰分
        bipYsMx.setMX13(railwayEntrust.getMoistureMetering());
        bipYsMx.setMX14(railwayEntrust.getSulFurMetering());
        bipYsMx.setMX15(railwayEntrust.getCoalName());
        bipYsMx.setMX16(railwayEntrust.getTonnage());
        bipYsMx.setZzbkfl_code("01");
        if (StrUtil.isNotEmpty(accountLedger.getZzbkfl())) {
            bipYsMx.setZzbkfl_code(accountLedger.getZzbkfl());
        }
        if (id2.equals("10439")) {
            bipYsItem.setJT09_code(null);
            bipYsMx.setJT09_code(null);
        }
        bipYsItem.setFreeChId(bipYsMx);*/
//        bipYsMx.setMX18(railwayEntrust.getRealTonnage());//标煤量
//        bipYsMx.setMX18(railwayEntrust.getRealPrice());//标煤量单价
        if (id2.startsWith("104")) {
            bipYsMx.setYSYF52("1");
        }
        bipYsItems.add(bipYsItem);
        /*if (id2.equals("1045116")) {
            //运费
            if (railwayEntrust.getFreight() != null && railwayEntrust.getFreight() != 0) {
                BIPYsItem freight = new BIPYsItem();
                freight.setExpenseItemCode("12005002007002");//经济事项
                freight.setTaxRate(0.0);
                freight.setOriTaxExcludedAmount(new BigDecimal(railwayEntrust.getFreight()).setScale(2,BigDecimal.ROUND_HALF_UP));//原币无税金额
                freight.setOriTaxIncludedAmount(new BigDecimal(railwayEntrust.getFreight()).setScale(2,BigDecimal.ROUND_HALF_UP));//原币含税金额
                freight.setOriTaxAmount(BigDecimal.valueOf(NumUtils.subtractDouble(railwayEntrust.getFreight(),railwayEntrust.getFreight(),2)));//税额
                freight.setCustomerCode("104810210");//客户编码
                freight.setSupplierCode("104810210");
                freight.setLocalTaxExcludedAmount(new BigDecimal(railwayEntrust.getFreight()).setScale(2,BigDecimal.ROUND_HALF_UP));//本币无税金额
                freight.setLocalTaxIncludedAmount(new BigDecimal(railwayEntrust.getFreight()).setScale(2,BigDecimal.ROUND_HALF_UP));//本币含税金额
                freight.setOriTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getFreight(), railwayEntrust.getTonnage().doubleValue(),2));//无税单价
                freight.setOriTaxIncludedPrice(NumUtils.divideDouble(railwayEntrust.getFreight(),  railwayEntrust.getTonnage().doubleValue(),2));//含税单价
                freight.setLocalTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getFreight(),  railwayEntrust.getTonnage().doubleValue(),2));//本币无税单价
                freight.setLocalTaxIncludedPrice(NumUtils.divideDouble(railwayEntrust.getFreight(),  railwayEntrust.getTonnage().doubleValue(),2));//本币含税单价
//                freight.setExpenseItemCode("1007");
                //运费表体
                BIPYsMx freightBipYsMx = new BIPYsMx();
                if (id2!=null){
                    if (id2.equals("126")|| id2.equals("1045116") || id2.equals("104810210")){
                        freightBipYsMx.setJT06_code("08008");//款项明细
                    } else if (id2.equals("10439")) {
                        freightBipYsMx.setJT06_code("01001001");//款项明细
                    }
                }
                freightBipYsMx.setGX08_code(fromStation);//核算单元档案
//                freightBipYsMx.setJT12_code("X0330101");//产品大类
//                freightBipYsMx.setJT25_code("03");//其他业务明细
                freightBipYsMx.setYSYF14_code("6");
                freightBipYsMx.setJT04_code("01020202");
                freight.setFreeChId(freightBipYsMx);
                bipYsItems.add(freight);
            }
        }else{
            if (railwayEntrust.getTrainType().equals(2) && isNd.equals(1)){
                //运费
                if (railwayEntrust.getFreight() != null && railwayEntrust.getFreight() != 0) {
                    BIPYsItem freight = new BIPYsItem();
                    freight.setExpenseItemCode("12005002007002");//经济事项
                    freight.setTaxRate(0.0);
                    freight.setOriTaxExcludedAmount(new BigDecimal(railwayEntrust.getFreight()).setScale(2,BigDecimal.ROUND_HALF_UP));//原币无税金额
                    freight.setOriTaxIncludedAmount(new BigDecimal(railwayEntrust.getFreight()).setScale(2,BigDecimal.ROUND_HALF_UP));//原币含税金额
                    freight.setOriTaxAmount(BigDecimal.valueOf(NumUtils.subtractDouble(railwayEntrust.getFreight(),railwayEntrust.getFreight(),2)));//税额
                    freight.setCustomerCode(customerCode);//客户编码
                    freight.setLocalTaxExcludedAmount(new BigDecimal(railwayEntrust.getFreight()).setScale(2,BigDecimal.ROUND_HALF_UP));//本币无税金额
                    freight.setLocalTaxIncludedAmount(new BigDecimal(railwayEntrust.getFreight()).setScale(2,BigDecimal.ROUND_HALF_UP));//本币含税金额
                    freight.setOriTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getFreight(), railwayEntrust.getTonnage().doubleValue(),2));//无税单价
                    freight.setOriTaxIncludedPrice(NumUtils.divideDouble(railwayEntrust.getFreight(),  railwayEntrust.getTonnage().doubleValue(),2));//含税单价
                    freight.setLocalTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getFreight(),  railwayEntrust.getTonnage().doubleValue(),2));//本币无税单价
                    freight.setLocalTaxIncludedPrice(NumUtils.divideDouble(railwayEntrust.getFreight(),  railwayEntrust.getTonnage().doubleValue(),2));//本币含税单价
//                freight.setExpenseItemCode("1007");
                    //运费表体
                    BIPYsMx freightBipYsMx = new BIPYsMx();
                    if (id2!=null){
                        if (id2.equals("126") || id2.equals("1045116") || id2.equals("104810210")){
                            freightBipYsMx.setJT06_code("08008");//款项明细
                        } else if (id2.equals("10439")) {
                            freightBipYsMx.setJT06_code("01001001");//款项明细
                        }
                    }
                    freightBipYsMx.setGX08_code(fromStation);//核算单元档案
//                freightBipYsMx.setJT12_code("X0330101");//产品大类
//                freightBipYsMx.setJT25_code("03");//其他业务明细
                    freightBipYsMx.setYSYF14_code("6");
                    freightBipYsMx.setJT04_code(jyType);
                    freight.setFreeChId(freightBipYsMx);
                    bipYsItems.add(freight);
                }
                if (railwayEntrust.getCustomerId()!=null && (railwayEntrust.getCustomerId().equals(618) || railwayEntrust.getCustomerId().equals(608) || railwayEntrust.getCustomerId().equals(1367))){
//                bipYsItems.add(this.getYfTsBt(railwayEntrust,id1,isNd,jyType));
                }else{
                    //取送车费
                    if (railwayEntrust.getCarFee() != null && railwayEntrust.getCarFee() != 0) {
                        BIPYsItem carFee = new BIPYsItem();
                        carFee.setTaxRate(NumUtils.multiplyDouble(railwayEntrust.getTaxRate(),100d,2));
                        carFee.setOriTaxExcludedAmount(new BigDecimal(railwayEntrust.getCarFee2()).setScale(2,BigDecimal.ROUND_HALF_UP));//原币无税金额
                        carFee.setOriTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getCarFee()).setScale(2,BigDecimal.ROUND_HALF_UP));//原币含税金额
                        carFee.setOriTaxAmount(BigDecimal.valueOf(NumUtils.subtractDouble(railwayEntrust.getCarFee(),railwayEntrust.getCarFee2(),2)));//税额
                        carFee.setCustomerCode(id1);//客户编码
                        carFee.setLocalTaxExcludedAmount(new BigDecimal(railwayEntrust.getCarFee2()).setScale(2,BigDecimal.ROUND_HALF_UP));//本币无税金额
                        carFee.setLocalTaxIncludedAmount(new BigDecimal(railwayEntrust.getCarFee()).setScale(2,BigDecimal.ROUND_HALF_UP));//本币含税金额
                        carFee.setOriTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCarFee2(), railwayEntrust.getCarNum().doubleValue(),2));//无税单价
                        carFee.setOriTaxIncludedPrice(NumUtils.divideDouble(railwayEntrust.getCarFee(),  railwayEntrust.getCarNum().doubleValue(),2));//含税单价
                        carFee.setLocalTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCarFee2(),  railwayEntrust.getCarNum().doubleValue(),2));//本币无税单价
                        carFee.setLocalTaxIncludedPrice(NumUtils.divideDouble(railwayEntrust.getCarFee(),  railwayEntrust.getCarNum().doubleValue(),2));//本币含税单价
                        carFee.setExpenseItemCode("10006016");
                        //取送车费表体
                        BIPYsMx carFeeBipYsMx = new BIPYsMx();
                        carFeeBipYsMx.setJT32_code("010404");//作业要素
                        carFeeBipYsMx.setJT06_code("01001001");//款项明细
                        carFeeBipYsMx.setGX08_code(accountUnitNumber);//核算单元档案
//                    carFeeBipYsMx.setJT12_code("X0330104");//产品大类
                        carFeeBipYsMx.setYSYF14_code("6");
//                    carFeeBipYsMx.setJT25_code("12A");//其他业务明细
                        carFeeBipYsMx.setJT04_code(jyType);//交易类型(二级集团间)
                        carFee.setFreeChId(carFeeBipYsMx);
                        bipYsItems.add(carFee);
                    }
                }
            }else if(railwayEntrust.getTrainType().equals(2) && isNd.equals(3)){
                //取送车费
                if (railwayEntrust.getCarFee2()!=null && railwayEntrust.getCarFee2() != 0) {
                    BIPYsItem carFee = new BIPYsItem();
                    carFee.setExpenseItemCode("10006016");//经济事项
                    carFee.setTaxRate(NumUtils.multiplyDouble(railwayEntrust.getTaxRate(),100d,2));
                    Double money = NumUtils.addDouble(railwayEntrust.getCarFee2(),railwayEntrust.getCarFeeTax(),2);
                    Double noTaxMoney = railwayEntrust.getCarFee2();
                    Double taxMoney = railwayEntrust.getCarFeeTax();
                    carFee.setOriTaxExcludedAmount(new BigDecimal(noTaxMoney).setScale(2,BigDecimal.ROUND_HALF_UP));//原币无税金额
                    carFee.setOriTaxIncludedAmount(BigDecimal.valueOf(money).setScale(2,BigDecimal.ROUND_HALF_UP));//原币含税金额
                    carFee.setOriTaxAmount(BigDecimal.valueOf(taxMoney));//税额
                    carFee.setCustomerCode(customerCode);//客户编码
                    carFee.setLocalTaxExcludedAmount(new BigDecimal(noTaxMoney).setScale(2,BigDecimal.ROUND_HALF_UP));//本币无税金额
                    carFee.setLocalTaxIncludedAmount(new BigDecimal(money).setScale(2,BigDecimal.ROUND_HALF_UP));//本币含税金额
                    carFee.setOriTaxExcludedPrice(NumUtils.divideDouble(noTaxMoney, railwayEntrust.getCarNum().doubleValue(),8));//无税单价
                    carFee.setOriTaxIncludedPrice(NumUtils.divideDouble(money,  railwayEntrust.getCarNum().doubleValue(),8));//含税单价
                    carFee.setLocalTaxExcludedPrice(NumUtils.divideDouble(noTaxMoney,  railwayEntrust.getCarNum().doubleValue(),8));//本币无税单价
                    carFee.setLocalTaxIncludedPrice(NumUtils.divideDouble(money,  railwayEntrust.getCarNum().doubleValue(),2));//本币含税单价
//                if (focus) {
//                    List<BIPPayPlan> bipPayPlans = this.getBipPayPlan(railwayEntrust,carFee.getOriTaxIncludedAmount().doubleValue());
//                    bipYsItem.setGrandsonItem(bipPayPlans);
//                }
                    //取送车费表体
                    BIPYsMx carFeeBipYsMx = new BIPYsMx();
                    carFeeBipYsMx.setGX08_code(accountUnitNumber);//核算单元档案
                    carFeeBipYsMx.setJT32_code("010404");//作业要素
                    carFeeBipYsMx.setJT06_code("01001001");//款项明细
//                carFeeBipYsMx.setJT25_code("12A");
                    carFeeBipYsMx.setYSYF14_code("2");
//                carFeeBipYsMx.setJT12_code("X0330104");//产品大类
                    carFeeBipYsMx.setJT04_code(jyType);
                    carFee.setFreeChId(carFeeBipYsMx);
                    bipYsItems.add(carFee);
                }
            }
        }*/
        /*if (railwayEntrust.getInvoiceResultId() == null && !CompUtils.isKp(accountLedger.getId()) && !accountLedger.getId().equals(165)) {
            throw new RuntimeException("结算单未开票");
        }*/
        InvoiceResult invoiceResult = fpInvoiceResultService.getById(railwayEntrust.getBlueInvoiceResultId());
        if (invoiceResult != null) {
            bipYsMx.setYSYF33(invoiceResult.getInvoiceNo());
            bipYsItem.setInvoiceNo(invoiceResult.getInvoiceNo());
        }
        bipBody.setBodyItem(bipYsItems);
        bipBody.setFreeChId(mx);
        String result = bipHttpUtil.post(BipApiEnum.应付发票保存接口, new JSONObject().set("data", bipBody));
        BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
        //放到单据记录表
        BipInvoice bipInvoice = new BipInvoice();
        bipInvoice.setDay(DateUtil.date());
        bipInvoice.setInvoice(JSONUtil.toJsonStr(bipBody));
        bipInvoice.setBipCompNumber(id2);
        bipInvoice.setType(0);
        bipInvoice.setInvoiceType(1);
        bipInvoice.setContractNum(contractNum);
        bipInvoice.setRailwayEntrustId(railwayEntrust.getId());
        //bipInvoice.setAllId(allId);
        bipInvoice.setCompId(railwayEntrust.getCompId());
        /*bipInvoice.setMoney(railwayEntrust.getAllPrice());
        bipInvoice.setTonnage(railwayEntrust.getTonnage());
        bipInvoice.setPrice(railwayEntrust.getPrice());
        bipInvoice.setResStatus(resVo.getCode());
        bipInvoice.setDirection(1);
        bipInvoice.setTrainType(railwayEntrust.getTrainType());*/
        BipResVo bipResVo = new BipResVo<>();
        bipResVo.setCode(resVo.getCode());
        BIPBody resBipBody = JSONUtil.toBean(resVo.getData() == null ? new Object().toString() : resVo.getData().toString(), BIPBody.class);
        if (resVo.getCode().equals("200") || (StrUtil.isNotEmpty(resVo.getMessage()) && resVo.getMessage().contains("活动[财务审核]上找不到用户")) || StrUtil.isNotEmpty(resBipBody.getCode())) {
            bipInvoice.setResInvoice(resVo.getData().toString());
            bipInvoice.setBipNumber(resBipBody.getId());
            bipInvoice.setCode(resBipBody.getCode());
            bipInvoice.setResInvoice(resVo.getData().toString());
            bipInvoice.setBipNumber(resBipBody.getId());
//            bipInvoice.setCode("200");
            bipInvoiceService.save(bipInvoice);
            bipResVo.setCode("200");
            bipResVo.setMessage(resVo.getMessage());
        } else {
            if (resVo.getData() != null && StrUtil.isNotEmpty(resVo.getData().toString())) {
                bipInvoice.setBipNumber(resBipBody.getId());
                bipInvoice.setCode(resBipBody.getCode());
            }
            bipInvoice.setMessage(resVo.getMessage());
            bipResVo.setMessage(resVo.getMessage());
            bipInvoiceService.save(bipInvoice);
        }
        if (resVo.getData() != null && StrUtil.isNotEmpty(resVo.getData().toString())) {
            if (resBipBody.getId() != null) {
                /*try {
                    if (railwayEntrust.getTrainType().equals(1)) {
                        if (order != null && order.getCompId() != null && order.getCompId().equals(227) && order.getFiledId() != null && order.getFiledId().equals(48)) {
                            fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(8, allId));
                        } else {
                            fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(0, allId));
                        }
                        fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(3, railwayEntrust.getId(), railwayEntrust.getQualityName(), railwayEntrust.getUserCompId()));
                    } else if (railwayEntrust.getTrainType().equals(2)) {
                        fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(1, allId));
                        fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(4, railwayEntrust.getId(), railwayEntrust.getQualityName(), railwayEntrust.getUserCompId()));
                    }
                    if (StrUtil.isNotEmpty(fileUrl)) {
                        for (String s : fileUrl.split(",")) {
                            fileUploadService.uploadUrlToBip(railwayEntrust.getId(), resBipBody.getId(), s);
                        }
                    }
                    //发票
                    railwayEntrust.setBipStatus("200");
                    fpInvoiceResultService.update(new UpdateWrapper<InvoiceResult>().lambda()
                            .eq(InvoiceResult::getEntrustCode, railwayEntrust.getEntrustCode())
                            .set(InvoiceResult::getPushBipyf, null));
                    fpInvoiceResultService.pushBlue(railwayEntrust, 1);
                    fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(2, allId));
                } catch (Exception e) {
                    railwayEntrust.setBipFileStatus(-1);
                    log.error("结算单推送附件错误---", e);
                    e.printStackTrace();
                }*/
            }
        }
        return bipResVo;
    }
    private String getCompName(String sellCode){
        switch (sellCode){
            case "104810210":
                return "邯峰运销";
            case "126":
                return "冀中运销";
            case "1045116":
                return "峰峰分";
            case "11035":
                return " 峰峰集团(本部运销)";
        }
        return "";
    }
    @Override
    public BipResVo saveRedFlushInvoice(BipInvoice oldBipInvoice,BIPBody bipBody) {
        String result = "";
        if (oldBipInvoice.getInvoiceType().equals(0)){
            result = bipHttpUtil.post(BipApiEnum.应收发票保存接口,new JSONObject().set("data",bipBody));
        }else {
            result = bipHttpUtil.post(BipApiEnum.应付发票保存接口,new JSONObject().set("data",bipBody));
        }
        Long id = oldBipInvoice.getId();
        BipResVo resVo = JSONUtil.toBean(result,BipResVo.class);
        //放到单据记录表
        BipInvoice bipInvoice = new BipInvoice();
        bipInvoice.setDay(DateUtil.date());
        bipInvoice.setInvoice(JSONUtil.toJsonStr(bipBody));
        bipInvoice.setType(oldBipInvoice.getType());
        bipInvoice.setInvoiceType(oldBipInvoice.getInvoiceType());
        bipInvoice.setRedInvoiceId(oldBipInvoice.getId());
        bipInvoice.setDirection(-1);
        bipInvoice.setResStatus(resVo.getCode());
        if (resVo.getCode().equals("200")){
            bipInvoice.setResInvoice(resVo.getData().toString());
            BIPBody resBipBody = JSONUtil.toBean(resVo.getData() == null ? new Object().toString() : resVo.getData().toString(), BIPBody.class);
            bipInvoice.setBipNumber(resBipBody.getId());
            bipInvoice.setCode(resBipBody.getCode());
        }else {
            bipInvoice.setMessage(resVo.getMessage());
        }
        bipInvoiceService.save(bipInvoice);
        bipInvoiceService.update(new UpdateWrapper<BipInvoice>().lambda().eq(BipInvoice::getId,id)
                .set(BipInvoice::getRedInvoiceStatus,resVo.getCode()).set(BipInvoice::getRedInvoiceMessage,resVo.getMessage())
                .set(BipInvoice::getRedInvoiceId,bipInvoice.getId()));
        return resVo;
    }
    @Override
    public BipResVo removeBipInvoice(String number,String code,Integer type) {
        JSONObject jsonObject = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        jsonArray.add(new JSONObject().set("id",number).set("code",code));
        jsonObject.set("data",jsonArray);
        if (type.equals(0)) {
            String result = bipHttpUtil.post(BipApiEnum.应收发票删除接口, jsonObject);
            BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
            return resVo;
        } else {
            String result = bipHttpUtil.post(BipApiEnum.应付发票删除接口, jsonObject);
            BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
            return resVo;
        }
    }
    @Override
    public BipResVo removeBipInvoice(String number, String code, Integer type, String msg) {
        JSONObject jsonObject = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        jsonArray.add(new JSONObject().set("id", number).set("code", code));
        jsonObject.set("data", jsonArray);
        if (type.equals(0)) {
            String result = bipHttpUtil.post(BipApiEnum.应收发票删除接口, jsonObject);
            BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
            if (StrUtil.isNotEmpty(msg))
                msg += ";";
            if (!resVo.getCode().equals("200")) {
                resVo.setMessage(msg += "节点应收发票删除成功");
            } else {
                resVo.setMessage(msg += "节点应收发票删除失败");
            }
            return resVo;
        } else {
            String result = bipHttpUtil.post(BipApiEnum.应付发票删除接口, jsonObject);
            BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
            if (StrUtil.isNotEmpty(msg))
                msg += ";";
            if (!resVo.getCode().equals("200")) {
                resVo.setMessage(msg += "节点应付发票删除成功");
            } else {
                resVo.setMessage(msg += "节点应收发票删除失败");
            }
            return resVo;
        }
    }
    @Override
    public BipResVo removeBipInvoices(List<BipInvoice> bipInvoiceList) {
        JSONObject jsonObjectYs = new JSONObject();
        JSONObject jsonObjectYf = new JSONObject();
        JSONArray jsonArrayYs = new JSONArray();
        JSONArray jsonArrayYf = new JSONArray();
        if (bipInvoiceList != null && bipInvoiceList.size() > 0) {
            bipInvoiceList.forEach(e -> {
                if (e.getInvoiceType().equals(0)) {
                    jsonArrayYs.add(new JSONObject().set("id",e.getBipNumber()).set("code",e.getCode()));
                }else{
                    jsonArrayYf.add(new JSONObject().set("id",e.getBipNumber()).set("code",e.getCode()));
                }
            });
        }
        if (jsonArrayYs.size()>0){
            jsonObjectYs.set("data",jsonArrayYs);
            String result = bipHttpUtil.post(BipApiEnum.应收发票删除接口,jsonObjectYs);
            BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
            return resVo;
        }
        if (jsonArrayYf.size()>0){
            jsonObjectYf.set("data",jsonArrayYf);
            String result = bipHttpUtil.post(BipApiEnum.应付发票删除接口,jsonObjectYf);
            BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
            return resVo;
        }
        return null;
    }
    @Override
    public BIPBody getBipInvoices(String code,Integer type) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.set("pageIndex",1);
        jsonObject.set("pageSize",999);
        jsonObject.set("code",code);
        StringBuffer message = new StringBuffer();
        String result = "";
        if (type.equals(0)){
            result = bipHttpUtil.post(BipApiEnum.应收发票查询接口,jsonObject);
        }else {
            result = bipHttpUtil.post(BipApiEnum.应付发票查询接口,jsonObject);
        }
        BipResVo resVo = JSONUtil.toBean(result,BipResVo.class);
        if (resVo.getCode().equals("200")){
            JSONObject object = JSONUtil.parseObj(resVo.getData());
            if (object==null && object.get("recordList")==null)
                return null;
            JSONArray jsonArray = JSONUtil.parseArray(object.get("recordList"));
            if (jsonArray==null)
                return null;
            List<BIPBody> resBipBody = JSONUtil.toList(jsonArray.toString(), BIPBody.class);
            if (resBipBody==null || resBipBody.size()==0)
                return null;
            return resBipBody.get(0);
        }else {
            message.append(resVo.getMessage());
        }
        return null;
    }
    @Override
    public BipResVo updBipInvoices(BipInvoice bipInvoice,String number) {
        BIPBody bipBody = JSONUtil.toBean(bipInvoice.getResInvoice(), BIPBody.class);
//        BIPBody selectBipBody = this.getBipInvoices(bipInvoice.getCode(),bipInvoice.getInvoiceType());
//        bipBody.setId(selectBipBody.getId());
//        bipBody.setCode(selectBipBody.getCode());
//        bipBody.setBodyItem(null);
//        bipBody.setFreeChId(null);
//        if (bipBody!=null){
//            bipBody.getBodyItem().forEach(e -> {
//
//            });
//        }
        if (bipBody!= null){
            List<BIPYsItem> items = bipBody.getBodyItem();
            bipBody.set_status("Update");
            bipBody.setOrgCurrencyCode("CNY");
            if (items!=null){
                Double localTaxIncludedAmount = 0d;
                Double    localTaxExcludedAmount =0d;
                for (BIPYsItem e:items){
                    e.set_status("Update");
                    e.setOrgCurrency("1514492081064640537");
                    e.setExchangeRateTypeCode("01");
                    e.setExchangeRate(1.0);
                    e.setExchangeRateDate(bipBody.getExchangeRateDate());
                    e.setLocalTaxAmount(e.getOriTaxAmount());
                    localTaxExcludedAmount = NumUtils.addDouble(localTaxExcludedAmount,e.getLocalTaxExcludedAmount().doubleValue());
                    localTaxIncludedAmount = NumUtils.addDouble(localTaxIncludedAmount,e.getLocalTaxIncludedAmount().doubleValue());
                    if (e.getGrandsonItem()!=null){
                        e.getGrandsonItem().forEach(i -> {
                            i.set_status("Update");
                        });
                    }
                }
                bipBody.setLocalTaxExcludedAmount(BigDecimal.valueOf(NumUtils.accurateDouble(localTaxExcludedAmount,2)).toPlainString());
                bipBody.setLocalTaxIncludedAmount(BigDecimal.valueOf(NumUtils.accurateDouble(localTaxIncludedAmount,2)).toPlainString());
                bipBody.setOriTaxExcludedAmount(BigDecimal.valueOf(NumUtils.accurateDouble(localTaxExcludedAmount,2)).toPlainString());
                bipBody.setOriTaxIncludedAmount(BigDecimal.valueOf(NumUtils.accurateDouble(localTaxIncludedAmount,2)).toPlainString());
            }
            String result = null;
            if (bipInvoice.getInvoiceType().equals(0)){
                result = bipHttpUtil.post(BipApiEnum.应收发票修改接口, new JSONObject().set("data", bipBody));
//                    result = bipHttpUtil.post(BipApiEnum.应收发票查询接口,jsonObject);
            }else {
                result = bipHttpUtil.post(BipApiEnum.应付发票修改接口, new JSONObject().set("data", bipBody));
            }
            BipResVo resVo = JSONUtil.toBean(result,BipResVo.class);
            if (resVo.getCode().equals("200")){
                bipInvoiceService.update(new UpdateWrapper<BipInvoice>().lambda()
                        .set(BipInvoice::getUpdInvoice,bipBody).eq(BipInvoice::getId,bipInvoice.getId()));
            }else {
                bipInvoiceService.update(new UpdateWrapper<BipInvoice>().lambda()
                        .set(BipInvoice::getUpdMessage,resVo.getMessage()).eq(BipInvoice::getId,bipInvoice.getId()));
            }
            return resVo;
        }
        return null;
    }
    /**
     * 特殊户表体
     * @param railwayEntrust
     * @return
     */
//    private List<BIPYsItem> getTsBipYsItems(RailwayEntrust railwayEntrust,String id1,String jyType){
//        List<BIPYsItem> bipYsItems = new ArrayList<>();
//        BIPYsItem carFee = new BIPYsItem();
//        carFee.setTaxRate(NumUtils.multiplyDouble(railwayEntrust.getTaxRate(),100d,2));
//        carFee.setOriTaxExcludedAmount(new BigDecimal(railwayEntrust.getCarFee2()).setScale(2,BigDecimal.ROUND_HALF_UP));//原币无税金额
//        carFee.setOriTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getCarFee()).setScale(2,BigDecimal.ROUND_HALF_UP));//原币含税金额
//        carFee.setOriTaxAmount(BigDecimal.valueOf(NumUtils.subtractDouble(railwayEntrust.getCarFee(),railwayEntrust.getCarFee2(),2)));//税额
//        carFee.setCustomerCode(id1);//客户编码
//        carFee.setLocalTaxExcludedAmount(new BigDecimal(railwayEntrust.getCarFee2()).setScale(2,BigDecimal.ROUND_HALF_UP));//本币无税金额
//        carFee.setLocalTaxIncludedAmount(new BigDecimal(railwayEntrust.getCarFee()).setScale(2,BigDecimal.ROUND_HALF_UP));//本币含税金额
//        carFee.setOriTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCarFee2(), railwayEntrust.getCarNum().doubleValue(),2));//无税单价
//        carFee.setOriTaxIncludedPrice(NumUtils.divideDouble(railwayEntrust.getCarFee(),  railwayEntrust.getCarNum().doubleValue(),2));//含税单价
//        carFee.setLocalTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCarFee2(),  railwayEntrust.getCarNum().doubleValue(),2));//本币无税单价
//        carFee.setLocalTaxIncludedPrice(NumUtils.divideDouble(railwayEntrust.getCarFee(),  railwayEntrust.getCarNum().doubleValue(),2));//本币含税单价
//        carFee.setExpenseItemCode("09001001");
//
//        //取送车费表体
//        BIPYsMx carFeeBipYsMx = new BIPYsMx();
//        carFeeBipYsMx.setJT06_code("0809");//款项明细
//        carFeeBipYsMx.setJT12_code("X0330104");//产品大类
//        carFeeBipYsMx.setYSYF14_code("6");
//        carFeeBipYsMx.setJT25_code("12");//其他业务明细
//        carFeeBipYsMx.setJT04_code(jyType);//交易类型(二级集团间)
//        carFee.setFreeChId(carFeeBipYsMx);
//        bipYsItems.add(carFee);
//    }
    /*private RailwayEntrust getDivEntrust(RailwayEntrust railwayEntrust) {
//        railwayEntrust.setDust(railwayEntrust);
        Double dustPrice = NumUtils.divideDouble(railwayEntrust.getDust(), 1.06d, 8);
        railwayEntrust.setDustFee(NumUtils.multiplyDouble(dustPrice, railwayEntrust.getRealTonnage(), 2));//不含税金额
        Double dustTax = NumUtils.multiplyDouble(railwayEntrust.getDustFee(), railwayEntrust.getTaxRate(), 2);//税额
        railwayEntrust.setDustPrice(NumUtils.addDouble(railwayEntrust.getDustFee(), dustTax, 2));//合计金额
        if (railwayEntrust.getCustomerId().equals(618) || railwayEntrust.getCustomerId().equals(1002134)) {
            Date date = railwayEntrust.getBalanceDate();
//            Date date1 = DateUtil.parse("2024-08-01","yyyy-MM-dd");
            Double b = 14.8934;
//            if (date.before(date1)){
//                b = 13.18;
//            }
            railwayEntrust.setSpecialLineFee(NumUtils.multiplyDouble(railwayEntrust.getRealTonnage(), b, 4));
            //专线费
            railwayEntrust.setCarFee(NumUtils.addDouble(railwayEntrust.getCarFee2(), railwayEntrust.getCarFeeTax()));
        }
        Double taxRate = railwayEntrust.getTaxRate();
        Double rate = NumUtils.addDouble(1d, railwayEntrust.getTaxRate());
        railwayEntrust.setTaxFeeCount(NumUtils.subtractDouble(railwayEntrust.getAllPrice(), railwayEntrust.getFreight(), 2));
        railwayEntrust.setCoalMoney(NumUtils.accurateFloat(railwayEntrust.getTaxFeeCount() - (railwayEntrust.getCarFee() == null ? 0 : railwayEntrust.getCarFee()) - (railwayEntrust.getSpecialLineFee() == null ? 0 : railwayEntrust.getSpecialLineFee()) - (railwayEntrust.getDustPrice() == null ? 0 : railwayEntrust.getDustPrice()), 2));
        railwayEntrust.setCoalTaxMoney(NumUtils.accurateFloat(railwayEntrust.getCoalMoney() * taxRate, 2));
        railwayEntrust.setOutNoTaxMoney(NumUtils.divideDouble(railwayEntrust.getTaxFeeCount(), rate, 2));
        railwayEntrust.setCoalMoney(NumUtils.accurateDouble(NumUtils.accurateDouble(railwayEntrust.getOutNoTaxMoney(), 2) - NumUtils.accurateDouble((railwayEntrust.getDustFee()), 2) - railwayEntrust.getCarFee2() - NumUtils.divideDouble(railwayEntrust.getSpecialLineFee(), 1.13, 2), 2));
        railwayEntrust.setPrice(NumUtils.divideDouble(railwayEntrust.getCoalMoney(), railwayEntrust.getTonnage(), 8));
        if (railwayEntrust.getTrainType().equals(2)) {
            railwayEntrust.setPrice(NumUtils.accurateDouble(railwayEntrust.getPrice(), 8));
        }
        railwayEntrust.setOriginalPrice(NumUtils.divideDouble(railwayEntrust.getPrice(), 1.13, 6));
        railwayEntrust.setTaxFee(NumUtils.multiplyDouble(railwayEntrust.getCoalMoney(), railwayEntrust.getTaxRate(), 2));
        return railwayEntrust;
    }*/
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipHttpUtil.java
@@ -6,8 +6,8 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.by4cloud.platformx.business.entity.invoice.BipResVo;
import com.by4cloud.platformx.business.entity.invoice.BipTokenVo;
import com.by4cloud.platformx.business.entity.invoice.vo.BipResVo;
import com.by4cloud.platformx.business.entity.invoice.vo.BipTokenVo;
import com.by4cloud.platformx.business.utils.SignHelper;
import lombok.RequiredArgsConstructor;
import org.apache.http.HttpEntity;
@@ -35,7 +35,6 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.InvalidKeyException;
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/InvoiceService.java
@@ -4,7 +4,8 @@
import com.by4cloud.platformx.business.entity.ContractOutBound;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.entity.invoice.InvoiceResult;
import com.by4cloud.platformx.business.entity.invoice.InvoicingVo;
import com.by4cloud.platformx.business.entity.invoice.vo.InvoicingVo;
import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
import java.util.List;
import java.util.Map;
@@ -15,6 +16,8 @@
    InvoicingVo toGetByCompare(SaleCredit saleCredit, List<ContractOutBound> contractOutBoundList);
    InvoicingVo toGetByCompareByVo(SaleCredit saleCredit, List<ContractOutBoundVo> contractOutBoundList);
    Map<String, Object> toKaipiao(InvoicingVo invoicingVo);
    Map<String,Object> downInvoiceMethod(InvoiceResult invoiceResult);
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/InvoiceServiceImpl.java
@@ -12,6 +12,8 @@
import com.by4cloud.platformx.business.entity.ContractOutBound;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.entity.invoice.*;
import com.by4cloud.platformx.business.entity.invoice.vo.InvoicingVo;
import com.by4cloud.platformx.business.entity.invoice.vo.RedConfirmVo;
import com.by4cloud.platformx.business.invoice.mapper.FpInvoiceResultItemMapper;
import com.by4cloud.platformx.business.invoice.mapper.FpInvoiceResultMapper;
import com.by4cloud.platformx.business.invoice.service.BipInvoiceService;
@@ -19,11 +21,11 @@
import com.by4cloud.platformx.business.invoice.service.FpInvoiceResultService;
import com.by4cloud.platformx.business.service.InvoiceService;
import com.by4cloud.platformx.business.service.SaleCreditService;
import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -86,6 +88,11 @@
    @Override
    public InvoicingVo toGetByCompare(SaleCredit saleCredit, List<ContractOutBound> contractOutBoundList) {
        return getByCompare(saleCredit,contractOutBoundList);
    }
    @Override
    public InvoicingVo toGetByCompareByVo(SaleCredit saleCredit, List<ContractOutBoundVo> contractOutBoundList) {
        return getByCompareVo(saleCredit,contractOutBoundList);
    }
    /**
@@ -409,6 +416,62 @@
        return invoicingVo;
    }
    private InvoicingVo getByCompareVo(SaleCredit saleCredit, List<ContractOutBoundVo> contractOutBoundList){
        InvoicingVo invoicingVo = new InvoicingVo();
        invoicingVo.setSaleCreditId(saleCredit.getId());
        invoicingVo.setEntrustCode(saleCredit.getEntrustCode());
        //销方
        invoicingVo.setTaxNo(saleCredit.getCreditCodeB());
        invoicingVo.setLedgerName(saleCredit.getPartyB());
        invoicingVo.setOrgCode(saleCredit.getCreditCodeB());
        invoicingVo.setFormatGenerate(false);
        invoicingVo.setIsSplit(false);
        invoicingVo.setFormatPushType(false);
        invoicingVo.setTaxUserName(saleCredit.getContactPhoneB());
        InvoicingVo.InvoicingVoInfo invoicingVoInfo = new InvoicingVo.InvoicingVoInfo();
        invoicingVoInfo.setInvoiceTypeCode("01");
        invoicingVoInfo.setSerialNo("MX_ZPP_" + System.currentTimeMillis());
        invoicingVoInfo.setDrawer(saleCredit.getContactPhoneB());
        Map<String, Object> ext = new HashMap<>();
        ext.put("htbh",saleCredit.getContractNo());
        invoicingVoInfo.setExt(ext);
        invoicingVoInfo.setSystemName("xx销售管理信息系统");
        List<InvoicingVo.InvoiceDetail> details = new ArrayList<>();
        int i = 0;
        for (ContractOutBound outBoundVo : contractOutBoundList){
            i++;
            InvoicingVo.InvoiceDetail invoiceDetail = new InvoicingVo.InvoiceDetail();
            invoiceDetail.setGoodsLineNo(i);
            invoiceDetail.setGoodsTaxRate(outBoundVo.getTaxRate());
            invoiceDetail.setGoodsType(outBoundVo.getSubjectMatterName());
            invoiceDetail.setGoodsUnit(outBoundVo.getUnit());
            invoiceDetail.setGoodsQuantity(outBoundVo.getOutBoundNum());
            invoiceDetail.setGoodsPrice(outBoundVo.getUnitPrice());
            invoiceDetail.setGoodsTotalPrice(outBoundVo.getTotalPrice());
            invoiceDetail.setGoodsTotalTax(outBoundVo.getTotalTax());
            details.add(invoiceDetail);
        }
        //购方
        invoicingVoInfo.setBuyerTaxNo(saleCredit.getCreditCodeA());
        invoicingVoInfo.setBuyerName(saleCredit.getPartyA());
        invoicingVoInfo.setInvoiceTotalPrice(saleCredit.getTotalAmount());
        //invoicingVoInfo.setInvoiceTotalTax(new BigDecimal(allTax).setScale(2,BigDecimal.ROUND_HALF_UP));
        invoicingVoInfo.setInvoiceTotalPriceTax(saleCredit.getTotalTax());
        invoicingVoInfo.setBuyerBankName(saleCredit.getBankNameB());
        invoicingVoInfo.setBuyerBankNumber(saleCredit.getBankAccountB());
        //invoicingVoInfo.setBuyerAddress(.getBuyerAddress());
        invoicingVoInfo.setBuyerTelphone(saleCredit.getContactPhoneA());
        invoicingVoInfo.setInvoiceDetailsList(details);
        invoicingVo.setData(invoicingVoInfo);
        return invoicingVo;
    }
    //@Async("myExecutor")
    public Map<String, Object> redTicket(SaleCredit saleCredit) {
        System.out.println("进入异步方法");