From c865989f10e5a1ae4bb78831a879210fcdca2f83 Mon Sep 17 00:00:00 2001
From: 李白 <7387820+wjli_13439841639@user.noreply.gitee.com>
Date: 星期五, 29 五月 2026 11:30:28 +0800
Subject: [PATCH] 开票(开蓝票,红票,上传bip)
---
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/controller/FpInvoiceResultController.java | 117 +
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BipInvoiceService.java | 16
platformx-business-finance-biz/src/main/resources/mapper/BipInvoiceMapper.xml | 39
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/InvoiceServiceImpl.java | 1458 ++++++++++++++++++++
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoicingVo.java | 291 ++++
platformx-business-finance-biz/src/main/resources/mapper/FileBipMapper.xml | 50
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResultItem.java | 110 +
platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultMapper.xml | 47
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultService.java | 20
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileBipServiceImpl.java | 19
platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultItemMapper.xml | 50
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BipInvoiceServiceImpl.java | 24
platformx-business-finance-biz/pom.xml | 17
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultItemServiceImpl.java | 20
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultServiceImpl.java | 22
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResult.java | 218 +++
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipHttpUtil.java | 308 ++++
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/RedConfirmVo.java | 64
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipTokenVo.java | 9
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/NumUtils.java | 305 ++++
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipResVo.java | 10
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/FileBip.java | 94 +
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultItemMapper.java | 19
platformx-boot/src/main/resources/application-dev.yml | 27
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/InvoiceResultController.java | 353 ++++
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileBipService.java | 17
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipInvoice.java | 232 +++
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultMapper.java | 18
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FileBipMapper.java | 17
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/BipInvoiceMapper.java | 17
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileUploadService.java | 31
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipApiEnum.java | 32
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/constant/FlowNameEnum.java | 5
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultItemService.java | 17
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileUploadServiceImpl.java | 138 +
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/InvoiceService.java | 24
36 files changed, 4,248 insertions(+), 7 deletions(-)
diff --git a/platformx-boot/src/main/resources/application-dev.yml b/platformx-boot/src/main/resources/application-dev.yml
index 47ca879..6a99c07 100644
--- a/platformx-boot/src/main/resources/application-dev.yml
+++ b/platformx-boot/src/main/resources/application-dev.yml
@@ -38,18 +38,33 @@
swagger:
token-url: ${swagger.gateway}/admin/oauth2/token
-#bip 閰嶇疆
-bip:
- url:
- codes: 111111111111111111111111,222222222222222222
- appKey:
- appSecret:
+
# 鏂囦欢涓婁紶閰嶇疆
file:
local:
base-path: D:\\Users\\platformx\\Downloads\\img
+#bip 閰嶇疆
+bip:
+ url: ''
+ codes: 111111111111111111111111,222222222222222222
+ ip: https://bip01.res.jzeg.cn/
+ filePath: D:\test\
+ fontPath: /Users/kongdeqiang/Desktop/SIMSUN.TTC
+ appKey: 800b2805c5584f0abb8705acbe487dc5
+ appSecret: 59ba72c62a6a27203d7e517787a738be89ba55cb
+
+BWInvoice:
+ ip: https://einv01.res.jzeg.cn/post
+ kaipiao: ?method=baiwang.output.invoice.issue&version=1.0&requestId=
+ chaxun: ?method=baiwang.output.format.query&version=1.0&request_id=
+ redConfirmAdd: ?method=baiwang.output.redinvoice.add&version=1.0&requestId=
+ redConfirmSearch: ?method=baiwang.output.redinvoice.formlist&version=1.0&requestId=
+ search: ?method=baiwang.input.invoice.queryinvoicepool&version=1.0&requestId=
+ bind: ?method=baiwang.image.invoices.invoicemanageadd&version=1.0&requestId=
+ ocr: ?baiwang.image.invoices.recogcollect&version=1.0&requestId=
+
# 5瀹跺崟浣峣d
dept:
smj: 2056555602756063234
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/constant/FlowNameEnum.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/constant/FlowNameEnum.java
index 5d82fae..78d88ee 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/constant/FlowNameEnum.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/constant/FlowNameEnum.java
@@ -11,6 +11,9 @@
@Getter
@AllArgsConstructor
public enum FlowNameEnum {
- 鍚堝悓瀹℃壒("鍚堝悓瀹℃壒");
+ 鍚堝悓瀹℃壒("鍚堝悓瀹℃壒"),
+ 鎺掍骇璁″垝瀹℃壒("鎺掍骇璁″垝瀹℃壒");
private String name;
+
+
}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipInvoice.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipInvoice.java
new file mode 100644
index 0000000..f4928c1
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipInvoice.java
@@ -0,0 +1,232 @@
+package com.by4cloud.platformx.business.entity.invoice;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import jakarta.persistence.Table;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+import java.util.Date;
+
+/**
+ * @author wjli
+ * @description
+ * @date 2026/4/29 10:51
+ **/
+@Data
+@Entity
+@org.hibernate.annotations.Table(appliesTo="bip_invoice",comment = "bip瀵瑰簲鍗曟嵁琛�")//bip瀵瑰簲鍗曟嵁琛�
+@jakarta.persistence.Table(name = "bip瀵瑰簲鍗曟嵁琛�")//bip瀵瑰簲鍗曟嵁琛�
+@Comment("bip瀵瑰簲鍗曟嵁琛�")
+public class BipInvoice extends BaseModel<BipInvoice> {
+
+ @Schema(description = "浼犲叆鍗曟嵁淇℃伅")
+ @Column(columnDefinition = "text comment '浼犲叆鍗曟嵁淇℃伅'")
+ private String invoice;
+
+ @Schema(description = "瀵瑰簲BIP绯荤粺缂栧彿")
+ @Column(columnDefinition = "varchar(128) comment '瀵瑰簲BIP绯荤粺缂栧彿'")
+ private String bipNumber;
+
+ @Schema(description = "涓婁紶鏃ユ湡")
+ @Column(columnDefinition="date comment '涓婁紶鏃ユ湡'")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date day;
+
+ @Schema(description = "鏆備及鏈堜唤")
+ @Column(columnDefinition="date comment '鏆備及鏈堜唤'")
+ @DateTimeFormat(pattern = "yyyy-MM")
+ @JsonFormat(pattern = "yyyy-MM")
+ private Date month;
+
+ @Schema(description = "鍟嗗搧ID")
+ @Column(columnDefinition = "int comment '鍟嗗搧ID'")
+ private Integer coalId;
+
+ @Schema(description = "缁撶畻瀹㈡埛ID")
+ @Column(columnDefinition = "int comment '缁撶畻瀹㈡埛ID'")
+ private Integer customerId;
+
+ @Schema(description = "鏀惰揣瀹㈡埛ID")
+ @Column(columnDefinition = "int comment '鏀惰揣瀹㈡埛ID'")
+ private Integer customerAddressId;
+//
+ @Schema(description = "鍗曚环")
+ @Column(columnDefinition = "double comment '鍗曚环'")
+ private Double price;
+
+ @Schema(description = "鏃犵◣鍗曚环")
+ @Column(columnDefinition = "double comment '鏃犵◣鍗曚环'")
+ private Double noTaxPrice;
+
+ @Schema(description = "鏁伴噺")
+ @Column(columnDefinition = "double comment '鏁伴噺'")
+ private Double tonnage;
+
+ @Schema(description = "鍚◣閲戦")
+ @Column(columnDefinition = "double comment '鍚◣閲戦'")
+ private Double money;
+//
+//
+
+ @Schema(description = "浼犲洖鍗曟嵁淇℃伅")
+ @Column(columnDefinition = "text comment '浼犲洖鍗曟嵁淇℃伅'")
+ private String resInvoice;
+
+ @Schema(description = "淇敼鍙戦�佸崟鎹俊鎭�")
+ @Column(columnDefinition = "text comment '淇敼鍙戦�佸崟鎹俊鎭�'")
+ private String updInvoice;
+
+ @Schema(description = "澶辫触淇℃伅")
+ @Column(columnDefinition = "VARCHAR(512) comment '澶辫触淇℃伅'")
+ private String message;
+
+ @Schema(description = "鍚堝悓缂栧彿")
+ @Column(columnDefinition = "VARCHAR(50) comment '鍚堝悓缂栧彿'")
+ private String contractNum;
+
+ @Schema(description = "淇敼鍙戦�佸崟鎹俊鎭�")
+ @Column(columnDefinition = "VARCHAR(512) comment '淇敼鍙戦�佸崟鎹俊鎭�'")
+ private String updMessage;
+
+ @Schema(description = "bip缂栧彿")
+ @Column(columnDefinition = "VARCHAR(32) comment 'bip缂栧彿'")
+ private String code;
+
+
+ @Schema(description = "bip鍐呴儴瀹㈠晢缂栧彿")
+ @Column(columnDefinition="VARCHAR(32) comment 'bip鍐呴儴瀹㈠晢缂栧彿'")
+ private String bipCompNumber;
+
+ @Schema(description = "杩愯緭鏂瑰紡 1鍦伴攢/2璺繍/3鑸硅繍")
+ @Column(columnDefinition = "char(1) comment '杩愯緭鏂瑰紡 1鍦伴攢/2璺繍/3鑸硅繍'")
+ private Integer trainType;
+
+ @Schema(description = "bip杩斿洖鐘舵�佷俊鎭�")
+ @Column(columnDefinition = "int comment 'bip杩斿洖鐘舵�佷俊鎭�'")
+ private Integer returnCode;
+
+ @Schema(description = "鍗曟嵁绫诲瀷 0缁撶畻鍗�1鏆備及")
+ @Column(columnDefinition = "char(1) comment '鍗曟嵁绫诲瀷 0缁撶畻鍗�1鏆備及'")
+ private Integer type;
+
+ @Schema(description = "鍗曟嵁绫诲瀷 0搴旀敹 1搴斾粯")
+ @Column(columnDefinition = "char(1) comment '鍗曟嵁绫诲瀷 0搴旀敹 1搴斾粯'")
+ private Integer invoiceType;
+
+ @Schema(description = "鍗曟嵁鏂瑰悜 1钃� -1绾�")
+ @Column(columnDefinition = "char(10) comment '鍗曟嵁鏂瑰悜 1钃� -1绾�'")
+ private Integer direction;
+
+ @Schema(description = "绾㈠啿鍗曟嵁ID")
+ @Column(columnDefinition = "int comment '绾㈠啿鍗曟嵁ID'")
+ private Long redInvoiceId;
+
+ @Schema(description = "绾㈠啿鎺夌殑鍗曟嵁鐘舵��")
+ @Column(columnDefinition = "VARCHAR(20) comment '绾㈠啿鎺夌殑鍗曟嵁鐘舵��'")
+ private String redInvoiceStatus;
+
+ @Schema(description = "绾㈠啿鎺夌殑鍗曟嵁杩斿洖淇℃伅")
+ @Column(columnDefinition = "VARCHAR(500) comment '绾㈠啿鎺夌殑鍗曟嵁杩斿洖淇℃伅'")
+ private String redInvoiceMessage;
+
+ @Schema(description = "涓荤粨绠楀崟ID")
+ @Column(columnDefinition = "int comment '涓荤粨绠楀崟ID'")
+ private Long allId;
+
+ @Schema(description = "瀵瑰簲姣忎釜缁撶畻鍗旾D")
+ @Column(columnDefinition = "int comment '瀵瑰簲姣忎釜缁撶畻鍗旾D'")
+ private Long railwayEntrustId;
+
+ @Schema(description = "bip鐘舵��0:寮�绔嬨��1:瀹℃壒涓��2:宸插鎵广��3:缁堟銆�4:宸查┏鍥�")
+ @Column(columnDefinition = "int comment 'bip鐘舵��0:寮�绔嬨��1:瀹℃壒涓��2:宸插鎵广��3:缁堟銆�4:宸查┏鍥�'")
+ private Integer verifyState;
+
+
+ @Schema(description = "鐘舵��0:寮�绔嬨��1:瀹℃壒涓��2:宸插鎵广��3:缁堟銆�4:宸查┏鍥�-1:宸插垹闄�")
+ @Column(columnDefinition = "int comment 'bip鐘舵��0:寮�绔嬨��1:瀹℃壒涓��2:宸插鎵广��3:缁堟銆�4:宸查┏鍥�-1:宸插垹闄�'")
+ private Integer status;
+
+ @Schema(description = "bip杩斿洖鐘舵�佺爜")
+ @Column(columnDefinition = "VARCHAR(20) comment 'bip杩斿洖鐘舵�佺爜'")
+ private String resStatus;
+
+ @Schema(description = "鍒犻櫎杩斿洖淇℃伅")
+ @Column(columnDefinition = "VARCHAR(200) comment '鍒犻櫎杩斿洖淇℃伅'")
+ private String delMessage;
+
+ @Transient
+ @TableField(exist = false)
+ private Integer isTs;//0宸叉帹閫�1鏈帹閫�
+
+ @Transient
+ @TableField(exist = false)
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date startDate;
+
+ @Transient
+ @TableField(exist = false)
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date endDate;
+
+
+ /**
+ * 瀹㈡埛鍚嶇О
+ */
+ @Transient
+ @TableField(exist = false)
+ private String customerName;
+
+ public String getCustomerName(){
+ /*if (customerId != null){
+ Customer customer = RedisCacheYunXiaoHelper.getInstance().getCustomerById(customerId);
+ if (customer != null){
+ this.customerName = customer.getCustomerName();
+ }
+ }*/
+ return this.customerName;
+ }
+
+ /**
+ * 瀹㈡埛鍚嶇О
+ */
+ @Transient
+ @TableField(exist = false)
+ private String coalName;
+
+ public String getCoalName() {
+ /*if (coalId != null) {
+ Coal c = RedisCacheYunXiaoHelper.getInstance().getCoalById(coalId);
+ coalName = c.getCoalName();
+ }*/
+ return coalName;
+ }
+ /**
+ * 鏀惰揣瀹㈡埛鍚嶇О
+ */
+ @Transient
+ @TableField(exist = false)
+ private String customerAddressName;
+
+ public String getCustomerAddressName() {
+ /*if (customerAddressId != null) {
+ Customer customer = RedisCacheYunXiaoHelper.getInstance().getCustomerById(customerAddressId);
+ if (customer != null) {
+ this.customerAddressName = customer.getCustomerName();
+ }
+ }*/
+ return this.customerAddressName;
+ }
+
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipResVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipResVo.java
new file mode 100644
index 0000000..881c83f
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipResVo.java
@@ -0,0 +1,10 @@
+package com.by4cloud.platformx.business.entity.invoice;
+
+import lombok.Data;
+
+@Data
+public class BipResVo<T> {
+ private String code;
+ private String message;
+ private T data;
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipTokenVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipTokenVo.java
new file mode 100644
index 0000000..6863f09
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipTokenVo.java
@@ -0,0 +1,9 @@
+package com.by4cloud.platformx.business.entity.invoice;
+
+import lombok.Data;
+
+@Data
+public class BipTokenVo {
+ private String access_token;
+ private long expire;
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/FileBip.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/FileBip.java
new file mode 100644
index 0000000..e096e25
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/FileBip.java
@@ -0,0 +1,94 @@
+package com.by4cloud.platformx.business.entity.invoice;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+import jakarta.persistence.Table;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+/**
+ * @author kdq
+ * @version 1.0.0
+ * @ClassName FileBip.java
+ * @Description TODO
+ * @createTime 2024骞�09鏈�06鏃� 07:55:00
+ */
+@Data
+//@TableName("file_bip")
+@Entity
+//@Table(name = "file_bip")
+@Comment("bip鐢靛瓙褰卞儚琛�")
+public class FileBip extends BaseModel<FileBip> {
+
+ @Schema(description = "鏂囦欢id")
+ @Column(columnDefinition="VARCHAR(500) comment '鏂囦欢id'")
+ private String fileId;
+
+ @Schema(description = "鏂囦欢璺緞")
+ @Column(columnDefinition="VARCHAR(500) comment '鏂囦欢璺緞'")
+ private String filePath;
+
+ @Schema(description = "鏂囦欢鏈湴璺緞")
+ @Column(columnDefinition="VARCHAR(500) comment '鏂囦欢鏈湴璺緞'")
+ private String fileLocalPath;
+
+ @Schema(description = "鏂囦欢鍒涘缓鏃堕棿鎴�")
+ @Column(columnDefinition="VARCHAR(500) comment '鏂囦欢鍒涘缓鏃堕棿鎴�'")
+ private String fileCTime;
+
+ @Schema(description = "鏂囦欢鏇存柊鏃堕棿鎴�")
+ @Column(columnDefinition="VARCHAR(500) comment '鏂囦欢鏇存柊鏃堕棿鎴�'")
+ private String fileUTime;
+
+ @Schema(description = "bip绯荤粺id")
+ @Column(columnDefinition="VARCHAR(500) comment 'bip绯荤粺id'")
+ private String fileBipId;
+
+ @Schema(description = "鏂囦欢鍚庣紑")
+ @Column(columnDefinition="VARCHAR(500) comment '鏂囦欢鍚庣紑'")
+ private String fileExtension;
+
+ @Schema(description = "鏂囦欢澶у皬")
+ @Column(columnDefinition="double comment '鏂囦欢澶у皬'")
+ private double fileSize;
+
+ @Schema(description = "鏂囦欢澶у皬鏂囨湰")
+ @Column(columnDefinition="VARCHAR(500) comment '鏂囦欢澶у皬鏂囨湰'")
+ private String fileSizeText;
+
+ @Schema(description = "鏂囦欢鍚嶇О")
+ @Column(columnDefinition="VARCHAR(500) comment '鏂囦欢鍚嶇О'")
+ private String fileName;
+
+ @Schema(description = "鏂囦欢鍏ㄧО")
+ @Column(columnDefinition="VARCHAR(500) comment '鏂囦欢鍏ㄧО'")
+ private String name;
+
+ @Schema(description = "鐢ㄦ埛id")
+ @Column(columnDefinition="VARCHAR(500) comment '鐢ㄦ埛id'")
+ private String yhtUserId;
+
+ @Schema(description = "绉熸埛id")
+ @Column(columnDefinition="VARCHAR(500) comment '绉熸埛id'")
+ private String tenantId;
+
+ @Schema(description = "绛惧悕")
+ @Column(columnDefinition="VARCHAR(500) comment '绛惧悕'")
+ private String sign;
+
+ @Schema(description = "澶嶅埗")
+ @Column(columnDefinition="VARCHAR(500) comment '澶嶅埗'")
+ private String copy;
+
+ @Schema(description = "缁撶畻鍗昳d")
+ @Column(columnDefinition="int comment '缁撶畻鍗昳d'")
+ private Long entrustId;
+
+ @Schema(description = "缁撶畻鍗曠紪鍙�")
+ @Column(columnDefinition="VARCHAR(500) comment '缁撶畻鍗曠紪鍙�'")
+ private String entrustCode;
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResult.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResult.java
new file mode 100644
index 0000000..2a62569
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResult.java
@@ -0,0 +1,218 @@
+package com.by4cloud.platformx.business.entity.invoice;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+import jakarta.persistence.Table;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+/**
+ * @author kdq
+ * @version 1.0.0
+ * @ClassName InvoiceResult.java
+ * @Description TODO
+ * @createTime 10024骞�11鏈�05鏃� 17:10:00
+ */
+@Data
+@Entity
+@org.hibernate.annotations.Table(appliesTo="fp_invoice_result",comment = "寮�鍏峰彂绁ㄨ繑鍥炲��")//缁欒〃鍔犳敞閲�
+@jakarta.persistence.Table(name = "fp_invoice_result")//寮�鍏峰彂绁ㄨ繑鍥炲��
+@Comment("寮�鍏峰彂绁ㄨ繑鍥炲��")
+public class InvoiceResult extends BaseModel<InvoiceResult> {
+ @Schema(description = "閿�鍞寕璐d")
+ @Column(columnDefinition = "bigint default null comment '閿�鍞寕璐d'")
+ private Long saleCreditId;
+
+ @Schema(description = "鎺ㄩ�乥ip")
+ @Column(columnDefinition = "int comment '鎺ㄩ�乥ip'")
+ private Integer pushBip;
+
+ @Schema(description = "鎺ㄩ�乥ip搴斾粯")
+ @Column(columnDefinition = "int comment '鎺ㄩ�乥ip搴斾粯'")
+ private Integer pushBipyf;
+
+ @Schema(description = "鎺ㄩ�乥ip绾㈢エ")
+ @Column(columnDefinition = "int comment '鎺ㄩ�乥ip绾㈢エ'")
+ private Integer pushRedBip;
+
+ @Schema(description = "鎺ㄩ�乥ip绾㈢エ搴斾粯")
+ @Column(columnDefinition = "int comment '鎺ㄩ�乥ip绾㈢エ搴斾粯'")
+ private Integer pushRedBipyf;
+
+ @Schema(description = "鏄惁鎴愬姛")
+ @Column(columnDefinition = "tinyint(1) comment '鏄惁鎴愬姛'")
+ private Boolean success;
+
+ @Schema(description = "閿�鏂圭◣鍙�")
+ @Column(columnDefinition = "varchar(100) comment '閿�鏂圭◣鍙�'")
+ private String xTaxNo;
+
+ @Schema(description = "閿�鏂瑰悕绉�")
+ @Column(columnDefinition = "varchar(100) comment '閿�鏂瑰悕绉�'")
+ private String xName;
+
+ @Schema(description = "璐柟绋庡彿")
+ @Column(columnDefinition = "varchar(100) comment '璐柟绋庡彿'")
+ private String gTaxNo;
+
+ @Schema(description = "璐柟鍚嶇О")
+ @Column(columnDefinition = "varchar(100) comment '璐柟鍚嶇О'")
+ private String gName;
+
+ @Schema(description = "閿�鏂筩ode")
+ @Column(columnDefinition = "varchar(100) comment '閿�鏂筩ode'")
+ private String xOrgCode;
+
+ @Schema(description = "璇锋眰id")
+ @Column(columnDefinition = "varchar(50) comment '璇锋眰id'")
+ private String requestId;
+
+ @Schema(description = "鍙戠エ涓嬭浇璇锋眰id")
+ @Column(columnDefinition = "varchar(50) comment '鍙戠エ涓嬭浇璇锋眰id'")
+ private String fpRequestId;
+
+ @Schema(description = "璇锋眰缁撴灉")
+ @Column(columnDefinition = "varchar(100) comment '璇锋眰缁撴灉'")
+ private String result;
+
+ @Schema(description = "璇锋眰缁撴灉")
+ @Column(columnDefinition = "varchar(100) comment '璇锋眰缁撴灉'")
+ private String message;
+
+ @Schema(description = "璇锋眰鎺ュ彛")
+ @Column(columnDefinition = "varchar(100) comment '璇锋眰鎺ュ彛'")
+ private String methodName;
+
+ @Schema(description = "椤圭洰鍚嶇О")
+ @Column(columnDefinition = "varchar(100) comment '椤圭洰鍚嶇О'")
+ private String projectName;
+
+ @Schema(description = "钃濈エ鍚堣閲戦")
+ @Column(columnDefinition = "double comment '钃濈エ鍚堣閲戦'")
+ private Double originInvoiceTotalPrice;
+
+ @Schema(description = "寮�绁ㄦ祦姘村彿")
+ @Column(columnDefinition = "varchar(100) comment '寮�绁ㄦ祦姘村彿'")
+ private String serialNo;
+
+ @Schema(description = "鍚堣绋庨")
+ @Column(columnDefinition = "double comment '鍚堣绋庨'")
+ private Double invoiceTotalTax;
+
+ @Schema(description = "鍚堣閲戦")
+ @Column(columnDefinition = "double comment '鍚堣閲戦'")
+ private Double invoiceTotalPrice;
+
+ @Schema(description = "钃濈エ鍚堣绋庨")
+ @Column(columnDefinition = "double comment '钃濈エ鍚堣绋庨'")
+ private Double originInvoiceTotalTax;
+
+ @Schema(description = "浠风◣鍚堣")
+ @Column(columnDefinition = "double comment '浠风◣鍚堣'")
+ private Double invoiceTotalPriceTax;
+
+ @Schema(description = "涓績code")
+ @Column(columnDefinition = "varchar(100) comment '涓績code'")
+ private String taxControlCode;
+
+ @Schema(description = "鍙戠エurl")
+ @Column(columnDefinition = "varchar(100) comment '鍙戠エurl'")
+ private String eInvoiceUrl;
+
+ @Schema(description = "鍙戠エ鍚嶇О")
+ @Column(columnDefinition = "varchar(100) comment '鍙戠エ鍚嶇О'")
+ private String eInvoiceName;
+
+ @Schema(description = "鍙戠エ鏍搁獙缂栧彿")
+ @Column(columnDefinition = "varchar(100) comment '鍙戠エ鏍搁獙缂栧彿'")
+ private String invoiceCheckCode;
+
+ @Schema(description = "鍙戠エqrCode")
+ @Column(columnDefinition = "varchar(1000) comment '鍙戠エqrCode'")
+ private String invoiceQrCode;
+
+ @Schema(description = "鍙戠エ鍙�")
+ @Column(columnDefinition = "varchar(50) comment '鍙戠エ鍙�'")
+ private String invoiceNo;
+
+ @Schema(description = "钃濈エ鍙戠エ鍙�")
+ @Column(columnDefinition = "varchar(50) comment '钃濈エ鍙戠エ鍙�'")
+ private String originalInvoiceNo;
+
+ @Schema(description = "绾㈢エ寮�绁ㄧ紪鍙�")
+ @Column(columnDefinition = "varchar(100) comment '绾㈢エ寮�绁ㄧ紪鍙�'")
+ private String redInvoiceNo;
+
+ @Schema(description = "绾㈢エ寮�绁ㄥ師鍥�")
+ @Column(columnDefinition = "varchar(100) comment '绾㈢エ寮�绁ㄥ師鍥�'")
+ private String redInvoiceLabel;
+
+ @Schema(description = "寮�绁ㄦ椂闂�")
+ @Column(columnDefinition = "varchar(100) comment '鍙戠エ鍙�'")
+ private String invoiceDate;
+
+ @Schema(description = "绾㈢エ寮�绁ㄦ椂闂�")
+ @Column(columnDefinition = "varchar(100) comment '绾㈢エ寮�绁ㄦ椂闂�'")
+ private String redInvoiceDate;
+
+ @Schema(description = "褰曞叆鏃堕棿")
+ @Column(columnDefinition = "varchar(100) comment '褰曞叆鏃堕棿'")
+ private String entryDate;
+
+ @Schema(description = "褰曞叆韬唤")
+ @Column(columnDefinition = "varchar(100) comment '褰曞叆韬唤'")
+ private String entryIdentity;
+
+ @Schema(description = "鏈夋晥鏍囧織")
+ @Column(columnDefinition = "varchar(100) comment '鏈夋晥鏍囧織'")
+ private String validFlag;
+
+ @Schema(description = "鏄惁绾歌川鍙戠エ")
+ @Column(columnDefinition = "varchar(100) comment '鏄惁绾歌川鍙戠エ'")
+ private String originInvoiceIsPaper;
+
+ @Schema(description = "钃濈エ绫诲瀷")
+ @Column(columnDefinition = "varchar(100) comment '钃濈エ绫诲瀷'")
+ private String originInvoiceType;
+
+ @Schema(description = "钃濈エ寮�绁ㄦ椂闂�")
+ @Column(columnDefinition = "varchar(100) comment '钃濈エ寮�绁ㄦ椂闂�'")
+ private String originalInvoiceDate;
+
+ @Schema(description = "寮�绁ㄧ被鍨�")
+ @Column(columnDefinition = "varchar(100) comment '寮�绁ㄧ被鍨�'")
+ private String invoiceTyCode;
+
+ @Schema(description = "鍏宠仈缁撶畻鍗�")
+ @Column(columnDefinition = "varchar(100) comment '鍏宠仈缁撶畻鍗�'")
+ private String entrustCode;
+
+ @Schema(description = "鏈夋棤鍏卞悓璐拱鏂�")
+ @Column(columnDefinition = "varchar(100) comment '鏈夋棤鍏卞悓璐拱鏂�'")
+ private String mulPurchaserMark;
+
+ @Schema(description = "绾㈠瓧纭鍗昒UID")
+ @Column(columnDefinition = "varchar(100) comment '绾㈠瓧纭鍗昒UID'")
+ private String redConfirmUuid;
+
+ @Schema(description = "绾㈠瓧纭鍗曠姸鎬�")
+ @Column(columnDefinition = "varchar(100) comment '绾㈠瓧纭鍗曠姸鎬�'")
+ private String confirmState;
+
+ @Schema(description = "绋庡眬纭鍗冲紑鏍囧織")
+ @Column(columnDefinition = "varchar(100) comment '绋庡眬纭鍗冲紑鏍囧織'")
+ private String confirmBillingMark;
+
+ @Schema(description = "纭绾㈢エ鏍囧織")
+ @Column(columnDefinition = "varchar(100) comment '纭绾㈢エ鏍囧織'")
+ private String alreadyRedInvoiceFlag;
+
+
+
+
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResultItem.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResultItem.java
new file mode 100644
index 0000000..dc02a98
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResultItem.java
@@ -0,0 +1,110 @@
+package com.by4cloud.platformx.business.entity.invoice;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+import jakarta.persistence.Table;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+/**
+ * @author kdq
+ * @version 1.0.0
+ * @ClassName InvoiceResultItem.java
+ * @Description TODO
+ * @createTime 2024骞�11鏈�28鏃� 10:45:00
+ */
+@Data
+@Entity
+@org.hibernate.annotations.Table(appliesTo="fp_invoice_result_item",comment = "寮�鍏峰彂绁ㄨ繑鍥炲�兼槑缁嗚")//寮�鍏峰彂绁ㄨ繑鍥炲�兼槑缁嗚
+@jakarta.persistence.Table(name = "fp_invoice_result_item")//寮�鍏峰彂绁ㄨ繑鍥炲�兼槑缁嗚
+@Comment("寮�鍏峰彂绁ㄨ繑鍥炲�兼槑缁嗚")
+public class InvoiceResultItem extends BaseModel<InvoiceResultItem> {
+
+ @Schema(description = "杩斿洖鍊糹d")
+ @Column(columnDefinition = "int comment '杩斿洖鍊糹d'")
+ private Long resultId;
+
+ @Schema(description = "鍘熺エ鎹")
+ @Column(columnDefinition = "int comment '鍘熺エ鎹'")
+ private Integer originalInvoiceDetailNo;
+
+ @Schema(description = "绁ㄦ嵁琛�")
+ @Column(columnDefinition = "int comment '绁ㄦ嵁琛�'")
+ private Integer goodsLineNo;
+
+ @Schema(description = "鍟嗗搧缂栧彿")
+ @Column(columnDefinition = "varchar(100) comment '鍟嗗搧缂栧彿'")
+ private String goodsCode;
+
+ @Schema(description = "鍟嗗搧绫诲瀷")
+ @Column(columnDefinition = "varchar(100) comment '鍟嗗搧绫诲瀷'")
+ private String goodsType;
+
+ @Schema(description = "鍟嗗搧鍚嶇О")
+ @Column(columnDefinition = "varchar(100) comment '鍟嗗搧鍚嶇О'")
+ private String goodsName;
+
+ @Schema(description = "鐓ょ鍚嶇О")
+ @Column(columnDefinition = "varchar(100) comment '鐓ょ鍚嶇О'")
+ private String coalName;
+
+ @Schema(description = "鍏宠仈缁撶畻鍗�")
+ @Column(columnDefinition = "varchar(100) comment '鍏宠仈缁撶畻鍗�'")
+ private String entrustCode;
+
+ @Schema(description = "鍟嗗搧绠�绉�")
+ @Column(columnDefinition = "varchar(100) comment '鍟嗗搧绠�绉�'")
+ private String goodsSimpleName;
+
+ @Schema(description = "椤圭洰鍚嶇О")
+ @Column(columnDefinition = "varchar(100) comment '椤圭洰鍚嶇О'")
+ private String projectName;
+
+ @Schema(description = "鍗曚綅")
+ @Column(columnDefinition = "varchar(100) comment '鍗曚綅'")
+ private String goodsUnit;
+
+ @Schema(description = "鍗曚环")
+ @Column(columnDefinition = "double comment '鍗曚綅'")
+ private Double goodsPrice;
+
+ @Schema(description = "鏁伴噺")
+ @Column(columnDefinition = "double comment '鏁伴噺'")
+ private Double goodsQuantity;
+
+ @Schema(description = "鍟嗗搧閲戦")
+ @Column(columnDefinition = "double comment '鍟嗗搧閲戦'")
+ private Double goodsTotalPrice;
+
+ @Schema(description = "绋庣巼")
+ @Column(columnDefinition = "double comment '绋庣巼'")
+ private Double goodsTaxRate;
+
+ @Schema(description = "绋庨")
+ @Column(columnDefinition = "double comment '绋庨'")
+ private Double goodsTotalTax;
+
+ @Schema(description = "鏄惁鍚堝苟")
+ @Column(columnDefinition = "varchar(10) comment '绋庨'")
+ private String goodsLineNature;
+
+ @Schema(description = "瑙勬牸鍨嬪彿")
+ @Column(columnDefinition = "varchar(50) comment '瑙勬牸鍨嬪彿'")
+ private String goodsSpecification;
+
+ @Schema(description = "鍚◣鏍囧織")
+ @Column(columnDefinition = "varchar(10) comment '鍚◣鏍囧織'")
+ private String priceTaxMark;
+
+ @Schema(description = "绫诲埆")
+ @Column(columnDefinition = "varchar(10) comment '鐓ょ绫诲埆'")
+ private String coalType;
+
+ @Schema(description = "闀垮崗鏃堕棿")
+ @Column(columnDefinition = "varchar(10) comment '闀垮崗鏃堕棿'")
+ private String agreementTerm;
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoicingVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoicingVo.java
new file mode 100644
index 0000000..c8db56c
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoicingVo.java
@@ -0,0 +1,291 @@
+package com.by4cloud.platformx.business.entity.invoice;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author kdq
+ * @version 1.0.0
+ * @ClassName InvoicingVo.java
+ * @Description TODO
+ * @createTime 2024骞�10鏈�08鏃� 11:16:00
+ */
+@Data
+public class InvoicingVo {//鍙戠エ寮�鍏�
+ private Long saleCreditId;
+ private String taxNo; //绋庡彿
+ private String entrustCode; //缁撶畻鍗曞彿
+ private Integer fatherEntrustId; //鐖剁粨绠楀崟id
+ private Integer settlementPathId; //缁撶畻璺緞id
+ private Integer sort; //鎺掑簭
+ private String ledgerName; //閿�鏂瑰悕绉�
+ private String taxUserName;//鐧诲綍鍚�
+ private String invoiceTerminalCode;//寮�绁ㄧ粓绔唬鐮�
+ private Boolean isSplit;//鏄惁闇�瑕佹媶鍒嗗紑鍏凤紝榛樿涓嶆媶鍒�
+ private String orgCode;//缁勭粐鏈烘瀯缂栫爜
+ private String taxDiskNo;//璁惧缂栧彿
+ private Boolean formatGenerate;//鏄惁闇�瑕佺敓鎴愮増寮忚繑鍥炵増寮忛摼鎺�(true / false)
+ private Boolean formatPushType;// 鐗堝紡鐢熸垚鏄惁鎺ㄩ��(true / false)
+ /**
+ * 鍊间负锛�1/0 1 闇�瑕佽ˉ鍏� 0涓嶉渶瑕佽ˉ鍏紝榛樿涓�0锛夋槸鍚︽牴鎹鎴风紪鐮侊紝璐柟绋庡彿锛岃喘鏂瑰悕绉版煡璇㈠鎴蜂俊鎭ˉ鍏ㄦ湭濉啓鐨勮喘
+ * 鏂逛俊鎭紙璐柟绋庡彿锛岃喘鏂瑰悕绉帮紝璐柟鍦板潃鐢佃瘽锛岃喘鏂归摱琛岃处鍙凤紝閭锛屾墜鏈猴級
+ */
+ private String completionCustom;
+ /**
+ * 寮�鍏疯姹傜被鍨嬶細isAsync 0 鍚屾 1 寮傛 榛樿鍚屾寮�鍏凤紙浠呮敮鎸乺pa锛�
+ */
+ private String isAsync;
+ /**
+ * 鏄惁杩斿洖钃濈エ宸茬孩鍐茬孩绁ㄤ俊鎭紝0鍚︼紝1鏄紝榛樿涓�0锛堜粎鏀寔绋庢帶鍙戠エ锛�
+ */
+ private String isReturnRedInfo;
+ private InvoicingVoInfo data;
+
+ @Data
+ public static class InvoicingVoInfo {
+ /**
+ * 鍙戠エ绫诲瀷浠g爜, 004锛氬鍊肩◣涓撶敤鍙戠エ锛�007锛氬鍊肩◣鏅�氬彂绁紱026锛氬鍊肩◣鐢靛瓙鍙戠エ锛�025锛氬鍊肩◣鍗峰紡鍙戠エ锛�028:澧炲�肩◣鐢靛瓙涓撶敤鍙戠エ
+ * 01:鍏ㄧ數鍙戠エ(澧炲�肩◣涓撶敤鍙戠エ) 02:鍏ㄧ數鍙戠エ(鏅�氬彂绁�)
+ */
+ private String invoiceTypeCode;
+ /**
+ * 鏁扮數绾歌川鍙戠エ鏍囧織锛孻锛氭槸锛孨锛氬惁銆傜◣鎺х被鍙戠エ寮�鍏蜂笉鏍¢獙姝ゅ瓧娈碉紱鏆傚彧鏀寔鐢ㄦ暟鐢电數绁ㄧ孩鍐叉暟鐢电焊绁�
+ */
+ private String paperInvoiceFlag;
+ /**
+ * 閫夋嫨绾歌川鍙戠エ鏍囧織涓篩鏃讹紝绾哥エ绫诲瀷蹇呭~銆傜エ绉嶄负 鏅�氬彂绁�02鏃跺彲浼狅細 04 2016鐗堝鍊肩◣鏅�氬彂绁紙浜岃仈鎶樺彔绁級锛� 052016鐗堝鍊肩◣鏅�氬彂绁紙浜旇仈鎶樺彔绁�);
+ * 绁ㄧ涓� 澧炲�肩◣涓撶敤鍙戠エ01鍙紶锛� 1130 澧炲�肩◣涓撶敤鍙戠エ锛堜腑鏂囦笁鑱旀棤閲戦闄愬埗鐗堬級 锛�1140 澧炲�肩◣涓撶敤鍙戠エ锛堜腑鏂囧洓鑱旀棤閲戦闄愬埗鐗堬級 1160澧炲�硷紝绋庝笓鐢ㄥ彂绁紙涓枃鍏仈鏃犻噾棰濋檺鍒剁増锛� 锛�
+ * 1170 澧炲�肩◣涓撶敤鍙戠エ锛堜腑鏂囦竷鑱旀棤閲戦闄愬埗鐗堬級
+ */
+ private String paperInvoiceTypeCode;
+ /**
+ * 寮�绁ㄧ被鍨� 0:姝f暟鍙戠エ锛堣摑绁級 1锛氳礋鏁板彂绁紙绾㈢エ锛夐粯璁�0
+ */
+ private String invoiceType;
+ /**
+ * 鐗规畩绁ㄧ鏍囧織锛� 00锛氭櫘閫氬彂绁紱01锛氬啘浜у搧閿�鍞紱02锛氬啘浜у搧鏀惰喘锛�08锛氭垚鍝佹补 鏈哄姩杞︼紙榛樿鏄�00鏅�氬彂绁級;16鐭夸骇鍝侊紱03绋�鍦燂紱 鍏ㄧ數绫诲彂绁ㄧ壒娈婄エ绉嶆爣蹇楋細01 鎴愬搧娌瑰彂绁紱
+ * 03锛氬缓绛戞湇鍔″彂绁紱04锛氳揣鐗╄繍杈撴湇鍔″彂绁紱05锛氫笉鍔ㄤ骇閿�鍞湇鍔″彂绁紱06锛氫笉鍔ㄤ骇绉熻祦鏈嶅姟鍙戠エ锛�09锛氭梾瀹㈣繍杈撳彂绁紱12锛氳嚜浜у啘浜у搧閿�鍞紱
+ * 13锛氭嫋鎷夋満鍜岃仈鍚堟敹鍓叉満锛�14锛氭満鍔ㄨ溅锛�15锛氫簩鎵嬭溅锛�16锛氬啘浜у搧鏀惰喘锛�31锛氫簩鎵嬭溅*锛�24锛氭姤搴熶骇鍝佹敹璐紱02锛氱█鍦燂紱17锛氬厜浼忔敹璐紱07锛氫唬鏀惰溅鑸圭◣锛�32锛氱數瀛愮儫锛�18鍗风儫
+ */
+ private String invoiceSpecialMark;
+ /**
+ * 鎴愬搧娌瑰崟浠疯繃浣庢槸鍚︾‘璁ゅ紑鍏锋爣璇嗭細Y 鏄紱 N 鍚� 涓虹┖鏃堕粯璁ゅ�间负N 锛堝娉細涓撶エ鍗曚环杩囦綆寮哄埗寮�绁ㄤ細璁板叆寮傚父鍙戠エ锛岀孩鍐查渶瑕佸湪鐢靛瓙绋庡姟灞�鐢宠瑙i櫎鐒跺悗鍐嶇孩鍐诧紱鏅エ鍗曚环杩�
+ * 浣庡紑鍏锋垚鍔熷彂绁ㄥ彲浠ユ甯哥孩鍐诧級
+ */
+ private String isConfirmIssue;
+ /**
+ * 绋庡眬浜屾纭鏄惁缁х画寮�绁紝1锛氭槸锛�0锛氬惁锛涳紙03寤虹瓚鏈嶅姟鍙戠エ锛屽缓绛戞湇鍔″彂鐢熷湴鍜岄攢鏂规敞鍐屽湴鍧�涓嶅悓鏃舵槸鍚︾户缁紑绁�,24鎶ュ簾浜у搧鏀惰喘闇�瑕佺即绾宠喘缃◣鐨勬彁绀烘槸鍚︾户缁紑鍏�
+ * 锛夛紝鑻ヤ笉浼犲�硷紝绯荤粺榛樿鎸夌収鈥滄槸鈥濆鐞�;
+ */
+ private String confirmIssue;
+ /**
+ * 寰佺◣鏂瑰紡锛� 0锛氭櫘閫氬緛绋庯紱2锛氬樊棰濆緛绋庯紙榛樿鏄�0鏅�氬緛绋庯級
+ */
+ private String taxationMethod;
+ /**
+ * 宸寰佺◣鏍囩锛�01 鍏ㄩ寮�绁ㄣ�� 02 宸寮�绁� 锛涘彂绁ㄧ被鍨嬩唬鐮佷负01锛�02鏃朵笖寰佺◣鏂瑰紡涓�2蹇呭~
+ */
+ private String taxationLabel;
+ /**
+ * 鍑忔寜寰佺◣鏍囪瘑锛�01锛氫釜浜哄嚭绉熶綇鎴匡紱03锛氶攢鍞嚜宸变娇鐢ㄨ繃鐨勫浐瀹氳祫浜э紱05锛氫綇鎴跨璧併�傞粯璁や负绌�,绌轰唬琛ㄦ棤銆�
+ */
+ private String reducedTaxCode;
+ /**
+ * 0锛氭棤娓呭崟锛�1锛氬甫娓呭崟锛堜笓鏅エ鍙戠エ鏄庣粏澶т簬绛変簬8琛屽繀椤诲甫娓呭崟锛夛細澶т簬8琛屽繀椤讳负娓呭崟绁�(鐢靛瓙绁ㄥ彧鑳戒负闈炶鍗曠エ)锛堥粯璁ゆ槸0鏃犳竻鍗曪級锛屽彂绁ㄧ被鍨嬩唬鐮佷负01锛�02鏃惰瀛楁鏃�
+ */
+ private String invoiceListMark;
+ /**
+ * 鍚◣鏍囧織锛� 0锛氫笉鍚◣锛�1锛氬惈绋庯紙榛樿涓嶅惈绋庯級
+ */
+ private String priceTaxMark;
+ /**
+ * 寮�绁ㄦ祦姘村彿锛� 鍞竴鏍囧織寮�绁ㄨ姹傘�傛敮鎸佹暟瀛楀瓧姣嶄笅鍒掔嚎缁勫悎銆�
+ */
+ private String serialNo;
+ /**
+ * 鍙戠エ璇锋眰娴佹按鍙�
+ */
+ private String orderNo;
+ /**
+ * 璐柟鍗曚綅绋庡彿锛� invoiceTypeCode=004銆�028銆�01锛堝鍊肩◣涓撶敤鍙戠エ銆佸鍊肩◣鐢靛瓙涓撶敤鍙戠エ銆佸叏鐢靛彂绁紙澧炲�肩◣涓撶敤鍙戠エ锛夛級寮�鍏锋椂蹇呬紶 invoiceSpecialMark=16|17锛堝啘浜у搧鏀惰喘銆佸厜浼忔敹璐級寮�鍏锋椂蹇呬紶
+ */
+ private String buyerTaxNo;
+ /**
+ * 璐柟鍗曚綅鍚嶇О 鍏ㄧ數涓�100涓瓧绗�
+ */
+ private String buyerName;
+ /**
+ * 璐柟鍦板潃鍙婄數璇濓紝 澧炲�肩◣涓撶敤鍙戠エ寮�鍏锋椂蹇呭~锛屽彂绁ㄧ被鍨嬩唬鐮佷负01銆�02鏃惰瀛楁鎷嗗垎涓哄湴鍧�鐢佃瘽涓や釜瀛楁
+ */
+ private String buyerAddressPhone;
+ /**
+ * 璐柟寮�鎴疯鍙婅处鍙凤紝 澧炲�肩◣涓撶敤鍙戠エ寮�鍏锋椂蹇呭~锛屽彂绁ㄧ被鍨嬩唬鐮佷负01銆�02鏃惰瀛楁鎷嗗垎涓洪摱琛屽悕绉般�佽处鍙蜂袱涓瓧娈�
+ */
+ private String buyerBankAccount;
+ /**
+ * 寮�绁ㄤ汉锛岀◣绁ㄩ�夊~锛屽彇鍊奸�昏緫锛氬鏋滅粓绔湁鍊煎彇缁堢锛屽鏋滄病鏈夊幓鏈烘瀯鑾峰彇锛屽鏋滈兘娌℃湁浼氳嚜鍔ㄨ幏鍙栨満鏋勪笅闅忔満鐢ㄦ埛鍚嶇О锛涙暟鐢电エWeb杩炴帴鍣ㄩ�夊~锛�
+ * 鍙栧�奸�昏緫锛歵axUserName锛瀌rawer锛為粯璁ゅ紑绁ㄤ汉锛炵粓绔巿鏉冨紑绁ㄤ汉锛屽鏋滀互涓婂洓澶勯兘鏈彇鍒伴殢鏈鸿幏鍙栬绋庡彿涓嬫渶杩戜竴娆$櫥褰曠殑鏁扮數璐﹀彿瀵瑰簲鐨勫紑
+ * 绁ㄤ汉锛涙暟鐢电エ涔愪紒杩炴帴鍣ㄥ繀濉紝闀垮害鏈�澶�300瀛楃銆�
+ */
+ private String drawer;
+ /**
+ * 澶嶆牳浜猴紝 16涓瓧绗︼紱绋庢帶寮�鍏锋椂锛� 涓虹┖鏃讹紝濡傛灉缁堢鏈夊�煎彇缁堢锛屽鏋滄病鏈夊幓鏈烘瀯鑾峰彇锛岃嫢閮芥病鏈夊垯涓虹┖锛佸叏鐢电被寮�鍏锋椂锛氭瀛楁闈炲繀濉紝鍗冲彂绁ㄧ被鍨嬩唬鐮佷负01锛�02鏃惰瀛楁闈炲繀濉�
+ */
+ private String checker;
+ /**
+ * 鏀舵浜猴紝 16涓瓧绗︼紱绋庢帶绫诲紑鍏锋椂锛氳嫢涓虹┖锛屽鏋滅粓绔湁鍊煎彇缁堢锛屽鏋滄病鏈夊幓鏈烘瀯鑾峰彇锛岃嫢閮芥病鏈夊垯涓虹┖锛涘叏鐢电被寮�鍏锋椂锛氭瀛楁闈炲繀濉紝鍗冲彂绁ㄧ被鍨嬩唬鐮佷负01锛�02鏃惰瀛楁闈炲繀濉�
+ */
+ private String payee;
+ /**
+ *鍚堣閲戦锛� 淇濈暀涓や綅灏忔暟锛涙敮鎸佷环绋庡垎绂�
+ */
+ private BigDecimal invoiceTotalPrice;
+ /**
+ * 鍚堣绋庨锛� 淇濈暀涓や綅灏忔暟锛涙敮鎸佷环绋庡垎绂�
+ */
+ private BigDecimal invoiceTotalTax;
+ /**
+ * 浠风◣鍚堣锛� 淇濈暀涓や綅灏忔暟锛涙敮鎸佷环绋庡垎绂�
+ */
+ private BigDecimal invoiceTotalPriceTax;
+ /**
+ * 澶囨敞 涔愪紒闀垮害涓�230涓瓧绗�
+ */
+ private String remarks;
+ /**
+ * 绾㈠瓧淇℃伅琛�/纭鍗曠紪鍙凤紝浠卛nvoiceType=1鏃堕渶瑕佷紶鍏ユ暟鎹◣鎺х被绾㈢エ寮�鍏锋椂锛宨nvoiceTypeCode=004銆�028鏃跺繀椤讳紶鍊硷紝浼犲叆绾㈠瓧淇℃伅琛ㄧ紪鍙凤紱 鍏ㄧ數绫荤孩绁ㄥ紑鍏锋椂锛�
+ * invoiceTypeCode=01銆�02鏃跺繀椤讳紶鍊硷紝浼犲叆绾㈠瓧纭鍗曠紪鍙凤紱
+ */
+ private String redInfoNo;
+ /**
+ * 鍘熷彂绁ㄤ唬鐮侊紝 invoiceType=1锛岀◣鎺ц礋鏁版櫘绁ㄥ紑鍏锋椂蹇呬紶锛涚孩绁ㄩ�夋暟鐢电エ鏃讹紝姝ら」鍙负绌恒��
+ */
+ private String originalInvoiceCode;
+ /**
+ * 鍘熷彂绁ㄥ彿鐮侊紝 invoiceType=1锛岀◣鎺ц礋鏁版櫘绁ㄥ紑鍏锋椂蹇呬紶锛涚孩绁ㄩ�夋暟鐢电エ鏃讹紝姝ら」鍙负绌恒��
+ */
+ private String originalInvoiceNo;
+ /**
+ * 鎵i櫎棰濓紝 taxationLabel=2锛屽樊棰濆緛绋庢椂蹇呬紶銆傛暟鍊煎繀椤诲皬浜庝环绋庡悎璁°��
+ */
+ private BigDecimal deductibleAmount;
+ /**
+ * 閿�鏂瑰湴鍧�鍙婄數璇濓紝鍙戠エ绫诲瀷浠g爜涓�01銆�02鏃惰瀛楁鎷嗗垎涓哄湴鍧�銆佺數璇濅袱涓瓧娈�
+ */
+ private String sellerAddressPhone;
+ /**
+ * 閿�鏂瑰紑鎴疯鍙婅处鍙凤紝鍙戠エ绫诲瀷浠g爜涓�01銆�02鏃朵笉鐢ㄦ瀛楁
+ */
+ private String sellerBankAccount;
+ private Map ext;//鎵╁睍瀛楁
+ /**
+ * 绗笁鏂圭郴缁熷悕绉�
+ */
+ private String systemName;
+ /**
+ * 绗笁鏂圭郴缁焛d
+ */
+ private String systemId;
+ /**
+ * 瀹㈡埛閭
+ */
+ private String buyerEmail;
+ /**
+ * 鎶勯�侀偖绠�
+ */
+ private String emailCarbonCopy;
+ /**
+ * 瀹㈡埛鐢佃瘽
+ */
+ private String buyerPhone;
+ /**
+ * 鐢ㄦ埛璐﹀彿锛岀敤浜庝釜浜虹淮搴︽暟鎹爣璁�
+ */
+ private String userAccount;
+ /**
+ * 绾㈠啿鍘熷洜锛�1 閿�璐ч��鍥� 2 寮�绁ㄦ湁璇� 3 鏈嶅姟缁堟 4 閿�鍞姌璁╋級绋庢帶绾㈠啿鍘熷洜锛氬缓璁寜瀹為檯寮�绁ㄦ儏鍐典紶鍏ョ孩鍐插師鍥狅紝鑻ヤ笉浼犵郴缁熶細鑷姩鏍规嵁鎯呭喌鍒ゆ柇骞惰祴鍊硷紱鍏ㄧ數绾㈠啿鍘熷洜锛氬繀濉�
+ */
+ private String redIssueReason;
+ private String buyerBankName;
+ private String buyerBankNumber;
+ private String buyerAddress;
+ private String buyerTelphone;
+ private String redConfirmUuid;
+ private String coalCalorificValue; //姣忓崈鍏嬬叅鐐彂鐑噺( 鍗冨崱 ) ,澶т簬1000w蹇呭~
+ private String totalSulfurOnDryBasis; //骞插熀鍏ㄧ~( % ) ,澶т簬1000w蹇呭~
+ private String dryAshFreeVolatileMatter; //骞茬叅鏃犵伆鍩烘尌鍙戝垎(%) ,澶т簬1000w蹇呭~
+
+ private List<InvoiceDetail> invoiceDetailsList;
+
+ }
+
+ @Data
+ public static class InvoiceDetail{
+ private Map<String,Object> ext;
+ private String goodsType;
+ /**
+ * 鏄庣粏琛屽彿
+ */
+ private Integer goodsLineNo;
+ /**
+ * 瀵瑰簲钃濈エ鏄庣粏琛屽彿 绋庢帶绫荤孩瀛楀彂绁ㄥ紑鍏锋椂鏃犻渶浼犲�硷紱 鍏ㄧ數绫荤孩瀛楀彂绁ㄥ紑鍏锋椂蹇呴』浼犲�硷紱
+ */
+ private String originalInvoiceDetailNo;
+ /**
+ * 鍙戠エ琛屾�ц川锛� 0锛氭甯歌锛�1锛氭姌鎵h锛�2锛氳鎶樻墸琛岋紝榛樿涓�0
+ */
+ private String invoiceLineNature;
+ /**
+ * 绋庢敹鍒嗙被缂栫爜
+ */
+ private String goodsCode;
+ /**
+ * 鍟嗗搧缂栫爜
+ */
+ private String goodsPersonalCode;
+ /**
+ * 鍟嗗搧鍚嶇О
+ */
+ private String goodsName;
+ /**
+ * 瑙勬牸鍨嬪彿
+ */
+ private String goodsSpecification;
+ /**
+ * 璁¢噺鍗曚綅
+ */
+ private String goodsUnit;
+ /**
+ * 閲戦锛屽皬鏁扮偣鍚�2浣�,瓒呴暱鑷姩淇濈暀涓や綅灏忔暟
+ */
+ private BigDecimal goodsTotalPrice;
+ /**
+ * 鍟嗗搧鏁伴噺
+ */
+ private BigDecimal goodsQuantity;
+ /**
+ * 鍟嗗搧鍗曚环
+ */
+ private BigDecimal goodsPrice;
+ /**
+ * 绋庣巼,瓒呴暱鑷姩淇濈暀涓変綅灏忔暟
+ */
+ private Double goodsTaxRate;
+ /**
+ * 绋庨锛屼袱浣嶅皬鏁�
+ */
+ private BigDecimal goodsTotalTax;
+
+ private String coalType;
+ private String agreementTerm;
+
+
+ }
+
+
+
+
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/RedConfirmVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/RedConfirmVo.java
new file mode 100644
index 0000000..e819ba8
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/RedConfirmVo.java
@@ -0,0 +1,64 @@
+package com.by4cloud.platformx.business.entity.invoice;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @author kdq
+ * @version 1.0.0
+ * @ClassName RedConfirmVo.java
+ * @Description TODO
+ * @createTime 2024骞�11鏈�06鏃� 11:35:00
+ */
+@Data
+public class RedConfirmVo {//绾㈢エ纭
+ private String taxNo;
+ private String orgCode;
+ private String taxUserName;
+ private String redConfirmSerialNo; //绾㈠瓧纭鍗曟祦姘村彿
+ private String entryIdentity; //褰曞叆鏂硅韩浠� 01:閿�鏂�,02:璐柟,03:浜屾墜杞﹀競鍦�/鎷嶅崠浼佷笟
+ private String sellerTaxNo; //閿�鍞柟缁熶竴绀句細淇$敤浠g爜/绾崇◣浜鸿瘑鍒彿/韬唤璇佷欢鍙风爜
+ private String sellerTaxName;//閿�鍞柟鍚嶇О
+ private String buyerTaxNo;//璐拱鏂圭粺涓�绀句細淇$敤浠g爜/绾崇◣浜鸿瘑鍒彿/韬唤璇佷欢鍙风爜, 褰曞叆鏂硅韩浠戒负銆愯喘鏂广�戞椂蹇呭~
+ private String buyerTaxName;//璐拱鏂瑰悕绉�
+ private String originInvoiceIsPaper;//鏄惁绾歌川鍙戠エ鏍囧織 Y锛氱焊璐ㄥ彂绁� N锛氱數瀛愬彂绁�
+ private String originalInvoiceNo;//钃濆瓧鍙戠エ鍏ㄧ數鍙戠エ鍙风爜锛屻�愬彂绁ㄦ潵婧愩�戜负2鏃跺繀濉�
+ private String originalPaperInvoiceCode;//绾歌川銆佺◣鎺у彂绁ㄤ唬鐮侊紝銆愬彂绁ㄦ潵婧愩�戜负1鏃舵垨鍏ㄧ數绾哥エ鏃跺繀濉�
+ private String originalPaperInvoiceNo;//绾歌川銆佺◣鎺у彂绁ㄥ彿鐮侊紝銆愬彂绁ㄦ潵婧愩�戜负1鏃舵垨鍏ㄧ數绾哥エ鏃跺繀濉�
+ private String originInvoiceDate;//钃濆瓧鍙戠エ寮�绁ㄦ棩鏈� yyyy-MM-dd HH:mm:ss
+ private String originInvoiceType;//钃濆瓧鍙戠エ绁ㄧ浠g爜 01:澧炲�肩◣涓撶敤鍙戠エ 02:鏅�氬彂绁� 03:鏈哄姩杞︾粺涓�閿�鍞彂绁� 04:浜屾墜杞︾粺涓�閿�鍞彂绁�
+ private String originInvoiceSetCode;//
+ private String autoIssueSwitch;//闈炵‘璁ゅ嵆寮�鈥斺�旇嚜鍔ㄥ紑绁� Y:鑷姩寮�绁� N锛氫笉鑷姩寮�绁� 榛樿涓篘
+ private String redInvoiceLabel;//绾㈠瓧鍙戠エ鍐茬孩鍘熷洜浠g爜 01:寮�绁ㄦ湁璇� 02:閿�璐ч��鍥� 03:鏈嶅姟涓 04:閿�鍞姌璁┿�備簩鎵嬭溅閿�鍞粺涓�鍙戠エ浠呭彲浣跨敤01銆�02
+ private String invoiceSource;//鍙戠エ鏉ユ簮 1:澧炲�肩◣鍙戠エ绠$悊绯荤粺锛� 2锛氱數瀛愬彂绁ㄦ湇鍔″钩鍙帮細
+ private Double originInvoiceTotalPrice;//钃濆瓧鍙戠エ鍚堣閲戦
+ private Double originInvoiceTotalTax;//钃濆瓧鍙戠エ鍚堣绋庨
+ private Double invoiceTotalPrice;//绾㈠瓧鍐查攢閲戦
+ private Double invoiceTotalTax;//绾㈠瓧鍐查攢绋庨
+ private List<RedConfirmDetail> redConfirmDetailReqEntityList;
+ @Data
+ public static class RedConfirmDetail{
+ private Map<String, Object> ext;
+ private Integer originalInvoiceDetailNo; //钃濆瓧鍙戠エ鏄庣粏搴忓彿
+ private Integer goodsLineNo; //琛屽彿
+ private String goodsCode; //绋庢敹鍒嗙被缂栫爜
+ private String goodsName; //鍟嗗搧鍏ㄧО
+ private String goodsSimpleName; //鍟嗗搧鏈嶅姟绠�绉�
+ private String projectName; //椤圭洰鍚嶇О锛堣嚜瀹氫箟鍟嗗搧鍚嶇О锛�
+ private String goodsSpecification; //瑙勬牸鍨嬪彿
+ private String goodsUnit;//鍗曚綅
+ private String goodsPrice;//鍗曚环
+ private String goodsQuantity;//鏁伴噺
+ private Double goodsTaxRate; //绋庣巼
+ private Double goodsTotalPrice; //閲戦
+ private Double goodsTotalTax; //绋庨
+ private String coalType;
+ private String agreementTerm;
+
+
+ }
+
+}
diff --git a/platformx-business-finance-biz/pom.xml b/platformx-business-finance-biz/pom.xml
index 7ad150f..2c6a695 100644
--- a/platformx-business-finance-biz/pom.xml
+++ b/platformx-business-finance-biz/pom.xml
@@ -141,6 +141,23 @@
<artifactId>poi-tl</artifactId>
<version>1.12.2</version> <!-- 璇蜂娇鐢ㄦ渶鏂扮ǔ瀹氱増 -->
</dependency>
+ <dependency>
+ <groupId>org.apache.pdfbox</groupId>
+ <artifactId>pdfbox</artifactId>
+ <version>2.0.24</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <version>4.5.14</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpmime</artifactId>
+ <version>4.5.14</version>
+ </dependency>
+
</dependencies>
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/InvoiceResultController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/InvoiceResultController.java
new file mode 100644
index 0000000..3bf5bd6
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/InvoiceResultController.java
@@ -0,0 +1,353 @@
+package com.by4cloud.platformx.business.controller;
+
+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.invoice.service.FpInvoiceResultItemService;
+import com.by4cloud.platformx.business.service.ContractOutBoundService;
+import com.by4cloud.platformx.business.service.InvoiceService;
+import com.by4cloud.platformx.business.service.SaleCreditService;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.log.annotation.SysLog;
+import com.google.gson.Gson;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 閿�鍞寕璐�
+ *
+ * @author wjli
+ * @date 2026-05-21 16:16:31
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/invoiceResult" )
+@Tag(description = "invoice" , name = "寮�绁ㄧ鐞�" )
+public class InvoiceResultController {
+ //鍙戠エ缁撴灉
+ private final FpInvoiceResultItemService invoiceResultItemService;
+ private final InvoiceService invoiceService;
+ private final SaleCreditService saleCreditService;
+ private final ContractOutBoundService contractOutBoundService;
+
+ @Operation(summary = "鎺ㄩ�佸簲浠樿摑绁�" , description = "鎺ㄩ�佸簲浠樿摑绁�" )
+ @GetMapping("/pushYfBlue" )
+ public R pushYfBlue(@RequestBody SaleCredit saleCredit1) {
+ SaleCredit byId = saleCreditService.getById(saleCredit1.getId());
+ if(byId.getBipStatus()==null ||!byId.getBipStatus().equals("200")){
+ return R.failed("璇峰厛鎺ㄩ�佸崟鎹悗鍐嶆帹閫佸彂绁�");
+ }
+ if(byId.getBlueInvoiceResultId()==null){
+ return R.failed("鍙戠エ鏈紑鍏�");
+ }
+ boolean b = invoiceService.pushBlue(saleCredit1.getId(), 1);
+ if(b){
+ return R.ok(null,"鎺ㄩ�佹垚鍔�");
+ }else {
+ return R.failed(null,"鎺ㄩ�佸け璐�");
+ }
+ }
+ @Operation(summary = "鎺ㄩ�佸簲鏀惰摑绁�" , description = "鎺ㄩ�佸簲鏀惰摑绁�" )
+ @GetMapping("/pushYsBlue" )
+ public R pushYsBlue(@RequestBody SaleCredit saleCredit1) {
+ SaleCredit byId = saleCreditService.getById(saleCredit1.getId());
+ if(byId.getBipStatus()==null || !byId.getBipStatus().equals("200")){
+ return R.failed("璇峰厛鎺ㄩ�佸崟鎹悗鍐嶆帹閫佸彂绁�");
+ }
+ if(byId.getBlueInvoiceResultId()==null){
+ return R.failed("鍙戠エ鏈紑鍏�");
+ }
+ boolean b = invoiceService.pushBlue(saleCredit1.getId(),0);
+ if(b){
+ return R.ok(null,"鎺ㄩ�佹垚鍔�");
+ }else {
+ return R.failed(null,"鎺ㄩ�佸け璐�");
+ }
+ }
+
+
+ /**
+ * 鍘诲紑钃濈エ
+ * @param saleCredit1 鍘诲紑钃濈エ
+ * @return R
+ */
+ @Operation(summary = "鍘诲紑钃濈エ" , description = "鍘诲紑钃濈エ" )
+ @SysLog("鍘诲紑钃濈エ" )
+ @PostMapping("/toBluePiao")
+ @PreAuthorize("@pms.hasPermission('business_saleCredit_add')" )
+ public R toBluePiao(@RequestBody SaleCredit saleCredit1) {
+ if(saleCredit1.getId()==null){
+ return R.failed("閿�鍞寕璐d涓嶈兘涓虹┖锛�");
+ }
+ SaleCredit saleCredit = saleCreditService.getById(saleCredit1.getId());
+ List<ContractOutBound> contractOutBoundList = contractOutBoundService.list(new LambdaQueryWrapper<ContractOutBound>()
+ .eq(ContractOutBound::getSaleCreditId,saleCredit.getId())
+ );
+
+ //鐢熸垚vo
+ InvoicingVo invoicingVo = invoiceService.toGetByCompare(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() + "鐨剅ailwayEntrust钃濆瓧寮�绁ㄧ粨鏋滀负锛�" + success + "------" + message);
+ if(success){
+ saleCredit.setStatus(2);
+ saleCreditService.updateById(saleCredit);
+ return R.ok("寮�绁ㄦ垚鍔燂紒");
+ }else{
+ saleCredit.setStatus(3);
+ saleCreditService.updateById(saleCredit);
+ return R.failed("寮�绁ㄥけ璐ワ紒");
+ }
+
+ }catch (Exception e){
+ saleCredit.setStatus(3);
+ saleCreditService.updateById(saleCredit);
+ return R.failed("寮�绁ㄥけ璐ワ紒");
+ }
+ }
+
+ @Operation(summary = "鍙戠エ鏌ョ湅" , description = "鍙戠エ鏌ョ湅" )
+ @GetMapping("/downInvoice" )
+ public R downInvoice(String code) {
+ QueryWrapper<InvoiceResult> invoiceResultQueryWrapper = new QueryWrapper<>();
+ invoiceResultQueryWrapper.lambda()
+ .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){
+ 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()+"寮�濮嬫帹閫乥ip钃濈エ");
+// try {
+// pushBip(railwayEntrust.getId(),railwayEntrust.getInvoicUrl());
+// System.out.println(railwayEntrust.getEntrustCode()+"鎺ㄩ�乥ip钃濈エ鎴愬姛");
+// result.setPushBip(1);
+// result.setPushBipyf(1);
+// invoiceResultService.updateById(result);
+// }catch (Exception e){
+// e.printStackTrace();
+// }
+// }
+// }
+ return R.ok(objectMap);
+ }else {
+ return R.failed(message);
+ }
+ }else {
+ return R.failed("鏈煡璇㈠埌寮�绁ㄨ褰�");
+ }
+ }
+
+
+ /**
+ * 鍘诲紑绾㈢エ
+ * @param saleCredit1 鍘诲紑绾㈢エ
+ * @return R
+ */
+ @Operation(summary = "鍘诲紑绾㈢エ" , description = "鍘诲紑绾㈢エ" )
+ @SysLog("鍘诲紑绾㈢エ" )
+ @PostMapping("/toRedPiao")
+ @PreAuthorize("@pms.hasPermission('business_saleCredit_add')" )
+ public R toRedPiao(@RequestBody SaleCredit saleCredit1){
+ if(saleCredit1.getId()==null){
+ return R.failed("閿�鍞寕璐d涓嶈兘涓虹┖锛�");
+ }
+ SaleCredit saleCredit = saleCreditService.getById(saleCredit1.getId());
+ try {
+ Map<String, Object> map = invoiceService.toRedTicket(saleCredit);
+ Boolean success = (Boolean) map.get("success");
+ if(success){
+ return R.ok("绾㈠瓧寮�绁ㄦ垚鍔�");
+ }else {
+ return R.failed((String) map.get("message"));
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ return R.failed("绾㈠瓧寮�绁ㄥけ璐�");
+ }
+ }
+
+ @Operation(summary = "绾㈢エ鏌ョ湅" , description = "绾㈢エ鏌ョ湅" )
+ @GetMapping("/downRedInvoice" )
+ public R downRedInvoice(String code) {
+ QueryWrapper<InvoiceResult> invoiceResultQueryWrapper = new QueryWrapper<>();
+ invoiceResultQueryWrapper.lambda()
+ .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){
+ Map<String, Object> objectMap = null;
+ Boolean success = null;
+ String message = null;
+ InvoiceResult result = list.get(0);
+ if(result.getConfirmBillingMark().equals("Y")){
+ objectMap = invoiceService.downInvoiceMethod(result);
+ success = (Boolean) objectMap.get("success");
+ message = (String) objectMap.get("message");
+ }else {
+ QueryWrapper<InvoiceResult> invoiceResultQueryWrapper1 = new QueryWrapper<>();
+ invoiceResultQueryWrapper1.lambda()
+ .eq(InvoiceResult::getEntrustCode,code)
+ .eq(InvoiceResult::getMethodName,"绾㈠瓧寮�绁ㄦ帴鍙�")
+ .eq(InvoiceResult::getSuccess,1)
+ .orderByDesc(InvoiceResult::getCreateTime);
+ List<InvoiceResult> list1 = invoiceService.list(invoiceResultQueryWrapper1);
+ InvoiceResult result1 = list1.get(0);
+ objectMap = invoiceService.downInvoiceMethod(result1);
+ success = (Boolean) objectMap.get("success");
+ message = (String) objectMap.get("message");
+ }
+ if(success){
+ return R.ok(objectMap);
+ }else {
+ return R.failed(message);
+ }
+ }else {
+ return R.failed("鏈煡璇㈠埌寮�绁ㄨ褰�");
+ }
+ }
+
+ /* @Operation(summary = "绾㈠啿纭鍗�" , description = "绾㈠啿纭鍗�" )
+ @PostMapping("/redConfirm" )
+ public R redConfirm(@RequestBody InvoicingVo vo) {
+
+ SaleCredit saleCredit = saleCreditService.getOne(new LambdaQueryWrapper<SaleCredit>()
+ .eq(SaleCredit::getEntrustCode,vo.getEntrustCode())
+ .last("limit 1")
+ );
+ if(saleCredit==null){
+ return R.failed("鏈壘鍒板搴旂粨绠楀崟");
+ }
+
+ try {
+ Map<String, Object> objectMap = invoiceService.toRedTicket(saleCredit);
+ Boolean success = (Boolean) objectMap.get("success");
+ String message = (String) objectMap.get("message");
+ if(success){
+ return R.ok(null,message);
+ }else {
+ return R.failed(null,message);
+ }
+
+ }catch (Exception e){
+ e.printStackTrace();
+ return R.failed("寮�绾㈢エ澶辫触");
+ }
+ }*/
+
+ //鍙戠孩鍐蹭箣鍓嶏紝鍏堣繘琛岀孩绁ㄧ‘璁ゃ��
+ @Operation(summary = "绾㈠啿鍙戠エform" , description = "绾㈠啿鍙戠エform" )
+ @GetMapping("/issueRed" )
+ public R issueRed(@RequestBody SaleCredit saleCredit1) {
+ SaleCredit saleCredit = saleCreditService.getById(saleCredit1.getId());
+ InvoiceResult blueResult = null;
+ InvoiceResult redResult = null;
+ if(saleCredit.getBlueInvoiceResultId()==null){
+ return R.failed("璇峰厛寮�鍏疯摑瀛楀彂绁�");
+ }
+ blueResult = invoiceService.getById(saleCredit.getRedInvoiceResultId());
+
+ InvoicingVo invoicingVo = new InvoicingVo();
+
+ QueryWrapper<InvoiceResultItem> itemQueryWrapper = new QueryWrapper<>();
+ itemQueryWrapper.lambda()
+ .eq(InvoiceResultItem::getResultId,blueResult.getId());
+ List<InvoiceResultItem> resultItems = invoiceResultItemService.list(itemQueryWrapper);
+
+ if(saleCredit!=null) {
+
+ 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.setEntrustCode(saleCredit.getEntrustCode());
+ InvoicingVo.InvoicingVoInfo invoicingVoInfo = new InvoicingVo.InvoicingVoInfo();
+ invoicingVoInfo.setInvoiceTypeCode("01");
+ invoicingVoInfo.setInvoiceType("1");
+ invoicingVoInfo.setSerialNo("MX_REDPP_" + System.currentTimeMillis());
+// invoicingVoInfo.setRedInfoNo(redResult.getInvoiceNo());
+// invoicingVoInfo.setRedIssueReason("1");
+// invoicingVoInfo.setRedConfirmUuid(redResult.getRedConfirmUuid());
+ invoicingVoInfo.setDrawer(saleCredit.getContactPhoneB());
+ /*Map<String, Object> ext1 = new HashMap<>();
+ ContractOrder order = contractOrderService.getOrderByNum(railwayEntrust.getOrderNumber());
+ if(order!=null){
+ ext1.put("htbh",order.getContractNum());
+ invoicingVoInfo.setExt(ext1);
+ }*/
+ invoicingVoInfo.setSystemName("**閿�鍞鐞嗕俊鎭郴缁�");
+
+ List<InvoicingVo.InvoiceDetail> details = new ArrayList<>();
+ for (int i = 0; i < resultItems.size(); i++) {
+ InvoiceResultItem resultItem = resultItems.get(i);
+ Map<String,Object> ext = new HashMap<>();
+ ext.put("coalType",resultItem.getCoalType());
+ InvoicingVo.InvoiceDetail invoiceDetail = new InvoicingVo.InvoiceDetail();
+ invoiceDetail.setGoodsLineNo(resultItem.getGoodsLineNo());
+ invoiceDetail.setOriginalInvoiceDetailNo(resultItem.getGoodsLineNo()+"");
+ invoiceDetail.setGoodsTaxRate(resultItem.getGoodsTaxRate());
+ invoiceDetail.setGoodsUnit(resultItem.getGoodsUnit());
+ invoiceDetail.setGoodsName(resultItem.getCoalName());
+ invoiceDetail.setGoodsType(resultItem.getGoodsType());
+ invoiceDetail.setGoodsCode(resultItem.getGoodsCode());
+ invoiceDetail.setGoodsSpecification(resultItem.getGoodsSpecification());
+ invoiceDetail.setExt(ext);
+ invoiceDetail.setGoodsQuantity(new BigDecimal(resultItem.getGoodsQuantity()*-1).setScale(3,BigDecimal.ROUND_HALF_UP));
+ invoiceDetail.setGoodsPrice(new BigDecimal(resultItem.getGoodsPrice()).setScale(8,BigDecimal.ROUND_HALF_UP));
+ invoiceDetail.setGoodsTotalPrice(new BigDecimal(resultItem.getGoodsTotalPrice()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ invoiceDetail.setGoodsTotalTax(new BigDecimal(resultItem.getGoodsTotalTax()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ details.add(invoiceDetail);
+ }
+
+ invoicingVoInfo.setBuyerTaxNo(saleCredit.getCreditCodeA());
+ invoicingVoInfo.setBuyerName(saleCredit.getPartyA());
+ invoicingVoInfo.setInvoiceTotalPrice(new BigDecimal(blueResult.getInvoiceTotalPrice()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ invoicingVoInfo.setInvoiceTotalTax(new BigDecimal(blueResult.getInvoiceTotalTax()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ invoicingVoInfo.setInvoiceTotalPriceTax(new BigDecimal(blueResult.getInvoiceTotalPriceTax()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ invoicingVoInfo.setBuyerBankName(saleCredit.getBankNameA());
+ invoicingVoInfo.setBuyerBankNumber(saleCredit.getBankAccountA());
+ //invoicingVoInfo.setBuyerAddress(invoiceCustomer.getBuyerAddress());
+ invoicingVoInfo.setBuyerTelphone(saleCredit.getContactPhoneA());
+ invoicingVoInfo.setInvoiceDetailsList(details);
+ invoicingVo.setData(invoicingVoInfo);
+ Gson gson =new Gson();
+ String vostr = gson.toJson(invoicingVo);
+ System.out.println(vostr);
+ return R.ok(invoicingVo);
+ }else {
+ return R.failed("鏆傛湭鏌ヨ鍒伴攢鏂瑰紑绁ㄤ俊鎭�");
+ }
+ }
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/controller/FpInvoiceResultController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/controller/FpInvoiceResultController.java
new file mode 100644
index 0000000..df6de4e
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/controller/FpInvoiceResultController.java
@@ -0,0 +1,117 @@
+package com.by4cloud.platformx.business.invoice.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.business.entity.invoice.InvoiceResult;
+import com.by4cloud.platformx.business.invoice.service.FpInvoiceResultService;
+import com.by4cloud.platformx.common.excel.annotation.ResponseExcel;
+import com.by4cloud.platformx.common.log.annotation.SysLog;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import com.by4cloud.platformx.common.core.util.R;
+
+import java.util.List;
+
+/**
+ * 寮�鍏峰彂绁ㄨ繑鍥炲��
+ *
+ * @author kdq
+ * @date 2024-11-05 18:44:09
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/fpinvoiceresult" )
+@Tag(description = "fpinvoiceresult" , name = "寮�鍏峰彂绁ㄨ繑鍥炲�肩鐞�" )
+public class FpInvoiceResultController {
+
+ private final FpInvoiceResultService fpInvoiceResultService;
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ * @param page 鍒嗛〉瀵硅薄
+ * @param fpInvoiceResult 寮�鍏峰彂绁ㄨ繑鍥炲��
+ * @return
+ */
+ @Operation(summary = "鍒嗛〉鏌ヨ" , description = "鍒嗛〉鏌ヨ" )
+ @GetMapping("/page" )
+ @PreAuthorize("@pms.hasPermission('business_fpinvoiceresult_view')" )
+ public R getFpInvoiceResultPage(Page page, InvoiceResult fpInvoiceResult) {
+ QueryWrapper<InvoiceResult> wrapper = new QueryWrapper<>();
+ wrapper.lambda()
+ .eq(InvoiceResult::getSuccess,fpInvoiceResult.getSuccess())
+ .eq(StringUtils.isNotBlank(fpInvoiceResult.getMethodName()),InvoiceResult::getMethodName,fpInvoiceResult.getMethodName())
+ .like(fpInvoiceResult.getEntrustCode() !=null,InvoiceResult::getEntrustCode,fpInvoiceResult.getEntrustCode())
+ .orderByDesc(InvoiceResult::getCreateTime);
+ return R.ok(fpInvoiceResultService.page(page, wrapper));
+ }
+
+
+ /**
+ * 閫氳繃id鏌ヨ寮�鍏峰彂绁ㄨ繑鍥炲��
+ * @param id id
+ * @return R
+ */
+ @Operation(summary = "閫氳繃id鏌ヨ" , description = "閫氳繃id鏌ヨ" )
+ @GetMapping("/{id}" )
+ @PreAuthorize("@pms.hasPermission('business_fpinvoiceresult_view')" )
+ public R getById(@PathVariable("id" ) Integer id) {
+ return R.ok(fpInvoiceResultService.getById(id));
+ }
+
+ /**
+ * 鏂板寮�鍏峰彂绁ㄨ繑鍥炲��
+ * @param fpInvoiceResult 寮�鍏峰彂绁ㄨ繑鍥炲��
+ * @return R
+ */
+ @Operation(summary = "鏂板寮�鍏峰彂绁ㄨ繑鍥炲��" , description = "鏂板寮�鍏峰彂绁ㄨ繑鍥炲��" )
+ @SysLog("鏂板寮�鍏峰彂绁ㄨ繑鍥炲��" )
+ @PostMapping
+ @PreAuthorize("@pms.hasPermission('business_fpinvoiceresult_add')" )
+ public R save(@RequestBody InvoiceResult fpInvoiceResult) {
+ return R.ok(fpInvoiceResultService.save(fpInvoiceResult));
+ }
+
+ /**
+ * 淇敼寮�鍏峰彂绁ㄨ繑鍥炲��
+ * @param fpInvoiceResult 寮�鍏峰彂绁ㄨ繑鍥炲��
+ * @return R
+ */
+ @Operation(summary = "淇敼寮�鍏峰彂绁ㄨ繑鍥炲��" , description = "淇敼寮�鍏峰彂绁ㄨ繑鍥炲��" )
+ @SysLog("淇敼寮�鍏峰彂绁ㄨ繑鍥炲��" )
+ @PutMapping
+ @PreAuthorize("@pms.hasPermission('business_fpinvoiceresult_edit')" )
+ public R updateById(@RequestBody InvoiceResult fpInvoiceResult) {
+ return R.ok(fpInvoiceResultService.updateById(fpInvoiceResult));
+ }
+
+ /**
+ * 閫氳繃id鍒犻櫎寮�鍏峰彂绁ㄨ繑鍥炲��
+ * @param id id
+ * @return R
+ */
+ @Operation(summary = "閫氳繃id鍒犻櫎寮�鍏峰彂绁ㄨ繑鍥炲��" , description = "閫氳繃id鍒犻櫎寮�鍏峰彂绁ㄨ繑鍥炲��" )
+ @SysLog("閫氳繃id鍒犻櫎寮�鍏峰彂绁ㄨ繑鍥炲��" )
+ @DeleteMapping("/{id}" )
+ @PreAuthorize("@pms.hasPermission('business_fpinvoiceresult_del')" )
+ public R removeById(@PathVariable Integer id) {
+ return R.ok(fpInvoiceResultService.removeById(id));
+ }
+
+
+ /**
+ * 瀵煎嚭excel 琛ㄦ牸
+ * @param fpInvoiceResult 鏌ヨ鏉′欢
+ * @return excel 鏂囦欢娴�
+ */
+ @ResponseExcel
+ @GetMapping("/export")
+ @PreAuthorize("@pms.hasPermission('business_fpinvoiceresult_export')" )
+ public List<InvoiceResult> export(InvoiceResult fpInvoiceResult) {
+ return fpInvoiceResultService.list(Wrappers.query(fpInvoiceResult));
+ }
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/BipInvoiceMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/BipInvoiceMapper.java
new file mode 100644
index 0000000..2ddfb7b
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/BipInvoiceMapper.java
@@ -0,0 +1,17 @@
+
+package com.by4cloud.platformx.business.invoice.mapper;
+
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+import com.by4cloud.platformx.business.entity.invoice.BipInvoice;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * bip瀵瑰簲鍗曟嵁琛�
+ *
+ * @author zzl
+ * @date 2024-09-05 17:59:36
+ */
+@Mapper
+public interface BipInvoiceMapper extends PlatformxBaseMapper<BipInvoice> {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FileBipMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FileBipMapper.java
new file mode 100644
index 0000000..05bb078
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FileBipMapper.java
@@ -0,0 +1,17 @@
+
+package com.by4cloud.platformx.business.invoice.mapper;
+
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+import com.by4cloud.platformx.business.entity.invoice.FileBip;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * bip鐢靛瓙褰卞儚琛�
+ *
+ * @author kdq
+ * @date 2024-09-06 08:51:32
+ */
+@Mapper
+public interface FileBipMapper extends PlatformxBaseMapper<FileBip> {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultItemMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultItemMapper.java
new file mode 100644
index 0000000..95bd521
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultItemMapper.java
@@ -0,0 +1,19 @@
+
+package com.by4cloud.platformx.business.invoice.mapper;
+
+
+import com.by4cloud.platformx.business.entity.invoice.InvoiceResultItem;
+import org.apache.ibatis.annotations.Mapper;
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+
+
+/**
+ * 寮�鍏峰彂绁ㄨ繑鍥炲�兼槑缁嗚
+ *
+ * @author kdq
+ * @date 2024-11-28 15:35:41
+ */
+@Mapper
+public interface FpInvoiceResultItemMapper extends PlatformxBaseMapper<InvoiceResultItem> {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultMapper.java
new file mode 100644
index 0000000..81ad018
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultMapper.java
@@ -0,0 +1,18 @@
+
+package com.by4cloud.platformx.business.invoice.mapper;
+
+import com.by4cloud.platformx.business.entity.invoice.InvoiceResult;
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 寮�鍏峰彂绁ㄨ繑鍥炲��
+ *
+ * @author kdq
+ * @date 2024-11-05 18:44:09
+ */
+@Mapper
+public interface FpInvoiceResultMapper extends PlatformxBaseMapper<InvoiceResult> {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BipInvoiceService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BipInvoiceService.java
new file mode 100644
index 0000000..274feac
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BipInvoiceService.java
@@ -0,0 +1,16 @@
+
+
+package com.by4cloud.platformx.business.invoice.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.by4cloud.platformx.business.entity.invoice.BipInvoice;
+
+/**
+ * bip瀵瑰簲鍗曟嵁琛�
+ *
+ * @author zzl
+ * @date 2024-09-05 17:59:36
+ */
+public interface BipInvoiceService extends IService<BipInvoice> {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileBipService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileBipService.java
new file mode 100644
index 0000000..62ae2ae
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileBipService.java
@@ -0,0 +1,17 @@
+
+
+package com.by4cloud.platformx.business.invoice.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.by4cloud.platformx.business.entity.invoice.FileBip;
+
+
+/**
+ * bip鐢靛瓙褰卞儚琛�
+ *
+ * @author kdq
+ * @date 2024-09-06 08:51:32
+ */
+public interface FileBipService extends IService<FileBip> {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileUploadService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileUploadService.java
new file mode 100644
index 0000000..79b0abb
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileUploadService.java
@@ -0,0 +1,31 @@
+package com.by4cloud.platformx.business.invoice.service;
+
+/**
+ * @author kdq
+ * @version 1.0.0
+ * @ClassName FileUploadService.java
+ * @Description TODO
+ * @createTime 2024骞�09鏈�03鏃� 10:04:00
+ */
+
+
+
+import com.by4cloud.platformx.business.entity.Contract;
+
+import java.util.List;
+
+/**
+ * 鐢靛瓙褰卞儚鎺ュ彛
+ *
+ * @author kdq
+ */
+public interface FileUploadService {
+
+ //涓婁紶鏂囦欢鍒癰ip
+ String uploadToBip(Long railwayEntrustId, String businessId, String filename);
+
+ String uploadUrlToBip(Long railwayEntrustId, String businessId, String fileUrl);
+
+ String deleteFileBip(Integer railwayEntrustId, String businessId, String fid);
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultItemService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultItemService.java
new file mode 100644
index 0000000..7b305eb
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultItemService.java
@@ -0,0 +1,17 @@
+
+
+package com.by4cloud.platformx.business.invoice.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.by4cloud.platformx.business.entity.invoice.InvoiceResultItem;
+
+
+/**
+ * 寮�鍏峰彂绁ㄨ繑鍥炲�兼槑缁嗚
+ *
+ * @author kdq
+ * @date 2024-11-28 15:35:41
+ */
+public interface FpInvoiceResultItemService extends IService<InvoiceResultItem> {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultService.java
new file mode 100644
index 0000000..ccec451
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultService.java
@@ -0,0 +1,20 @@
+
+
+package com.by4cloud.platformx.business.invoice.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+
+
+import com.by4cloud.platformx.business.entity.invoice.*;
+import com.by4cloud.platformx.common.core.util.R;
+import java.util.Map;
+
+/**
+ * 寮�鍏峰彂绁ㄨ繑鍥炲��
+ *
+ * @author kdq
+ * @date 2024-11-05 18:44:09
+ */
+public interface FpInvoiceResultService extends IService<InvoiceResult> {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BipInvoiceServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BipInvoiceServiceImpl.java
new file mode 100644
index 0000000..89e271c
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BipInvoiceServiceImpl.java
@@ -0,0 +1,24 @@
+
+package com.by4cloud.platformx.business.invoice.service.impl;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.business.invoice.mapper.BipInvoiceMapper;
+import com.by4cloud.platformx.business.invoice.service.BipInvoiceService;
+import com.by4cloud.platformx.business.entity.invoice.*;
+
+
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * bip瀵瑰簲鍗曟嵁琛�
+ *
+ * @author zzl
+ * @date 2024-09-05 17:59:36
+ */
+@Service
+@AllArgsConstructor
+public class BipInvoiceServiceImpl extends ServiceImpl<BipInvoiceMapper, BipInvoice> implements BipInvoiceService {
+
+}
+
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileBipServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileBipServiceImpl.java
new file mode 100644
index 0000000..9feb3f9
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileBipServiceImpl.java
@@ -0,0 +1,19 @@
+
+package com.by4cloud.platformx.business.invoice.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.business.entity.invoice.FileBip;
+import com.by4cloud.platformx.business.invoice.mapper.FileBipMapper;
+import com.by4cloud.platformx.business.invoice.service.FileBipService;
+import org.springframework.stereotype.Service;
+
+/**
+ * bip鐢靛瓙褰卞儚琛�
+ *
+ * @author kdq
+ * @date 2024-09-06 08:51:32
+ */
+@Service
+public class FileBipServiceImpl extends ServiceImpl<FileBipMapper, FileBip> implements FileBipService {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileUploadServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileUploadServiceImpl.java
new file mode 100644
index 0000000..37b4729
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileUploadServiceImpl.java
@@ -0,0 +1,138 @@
+package com.by4cloud.platformx.business.invoice.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.by4cloud.platformx.business.entity.SaleCredit;
+import com.by4cloud.platformx.business.entity.invoice.FileBip;
+import com.by4cloud.platformx.business.invoice.mapper.FileBipMapper;
+import com.by4cloud.platformx.business.invoice.service.FileUploadService;
+import com.by4cloud.platformx.business.invoice.utils.BipHttpUtil;
+import com.by4cloud.platformx.business.service.SaleCreditService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author kdq
+ * @version 1.0.0
+ * @ClassName FileUploadServiceImpl.java
+ * @Description TODO
+ * @createTime 2024骞�09鏈�03鏃� 10:06:00
+ */
+@Service
+public class FileUploadServiceImpl implements FileUploadService {
+ @Autowired
+ private SaleCreditService saleCreditService;
+
+ @Autowired
+ private FileBipMapper fileBipMapper;
+
+ @Autowired
+ private BipHttpUtil bipHttpUtil;
+
+ @Value("${bip.filePath}")
+ private String bipFilePath;
+
+
+
+ @Override
+ public String uploadToBip(Long railwayEntrustId,String businessId,String filename) {
+ String s = bipHttpUtil.postUploadFile(businessId, filename);
+ SaleCredit saleCredit = saleCreditService.getById(railwayEntrustId);
+ JSONObject result = JSON.parseObject(s) ;
+ String code = (String) result.get("code");
+ if(code.equals("200")){
+ // 浣跨敤JSON.parseObject()鏉ヨВ鏋怞SON瀵硅薄
+ JSONObject jsonObject = JSON.parseObject(s);
+ JSONObject data = jsonObject.getJSONObject("data");
+ JSONArray jsonArray = data.getJSONArray("data");
+
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject obj = jsonArray.getJSONObject(i);
+ FileBip fileBip = new FileBip();
+ fileBip.setFileId(obj.get("fileId").toString());
+ fileBip.setFilePath(obj.get("filePath").toString());
+ fileBip.setFileCTime(obj.get("ctime")+"");
+ fileBip.setFileUTime(obj.get("utime")+"");
+ fileBip.setFileBipId(obj.get("id").toString());
+ fileBip.setFileExtension(obj.get("fileExtension").toString());
+ fileBip.setFileSize((Integer)obj.get("fileSize"));
+ fileBip.setFileSizeText(obj.get("fileSizeText").toString());
+ fileBip.setFileName(obj.get("fileName").toString());
+ fileBip.setName(obj.get("name").toString());
+ fileBip.setYhtUserId(obj.get("yhtUserId").toString());
+ fileBip.setTenantId(obj.get("tenantId").toString());
+ fileBip.setSign(obj.get("sign").toString());
+ fileBip.setCopy(obj.get("copy")+"");
+ fileBip.setEntrustId(railwayEntrustId);
+ fileBip.setEntrustCode(saleCredit.getEntrustCode());
+ fileBip.setFileLocalPath("/yunxiao/filebip/local/"+filename);
+ fileBipMapper.insert(fileBip);
+ }
+ }
+ return s;
+ }
+
+ @Override
+ public String uploadUrlToBip(Long railwayEntrustId, String businessId, String fileUrl) {
+ String s = bipHttpUtil.postUploadFileUrl(businessId, fileUrl);
+ SaleCredit saleCredit = saleCreditService.getById(railwayEntrustId);
+ JSONObject result = JSON.parseObject(s) ;
+ String code = (String) result.get("code");
+ if(code.equals("200")){
+ // 浣跨敤JSON.parseObject()鏉ヨВ鏋怞SON瀵硅薄
+ JSONObject jsonObject = JSON.parseObject(s);
+ JSONObject data = jsonObject.getJSONObject("data");
+ JSONArray jsonArray = data.getJSONArray("data");
+
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject obj = jsonArray.getJSONObject(i);
+ FileBip fileBip = new FileBip();
+ fileBip.setFileId(obj.get("fileId").toString());
+ fileBip.setFilePath(obj.get("filePath").toString());
+ fileBip.setFileCTime(obj.get("ctime")+"");
+ fileBip.setFileUTime(obj.get("utime")+"");
+ fileBip.setFileBipId(obj.get("id").toString());
+ fileBip.setFileExtension(obj.get("fileExtension").toString());
+ fileBip.setFileSize((Integer)obj.get("fileSize"));
+ fileBip.setFileSizeText(obj.get("fileSizeText").toString());
+ fileBip.setFileName(obj.get("fileName").toString());
+ fileBip.setName(obj.get("name").toString());
+ fileBip.setYhtUserId(obj.get("yhtUserId").toString());
+ fileBip.setTenantId(obj.get("tenantId").toString());
+ fileBip.setSign(obj.get("sign").toString());
+ fileBip.setCopy(obj.get("copy")+"");
+ fileBip.setEntrustId(railwayEntrustId);
+ fileBip.setEntrustCode(saleCredit.getEntrustCode());
+ fileBip.setFileLocalPath(fileUrl);
+ fileBipMapper.insert(fileBip);
+ }
+ }
+ return s;
+ }
+
+
+ @Override
+ public String deleteFileBip(Integer railwayEntrustId,String businessId, String fid) {
+ String s = bipHttpUtil.postDeleteFile(businessId, fid);
+ JSONObject result = JSON.parseObject(s) ;
+ String code = (String) result.get("code");
+ if(code.equals("200")){
+ QueryWrapper<FileBip> wrapper = new QueryWrapper<>();
+ wrapper.lambda()
+ .eq(FileBip::getFileBipId,fid);
+ List<FileBip> fileBips = fileBipMapper.selectList(wrapper);
+ if(!fileBips.isEmpty() && fileBips.size()>0){
+ for (FileBip fileBip : fileBips) {
+ fileBipMapper.deleteById(fileBip);
+ }
+ }
+ }
+ return s;
+ }
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultItemServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultItemServiceImpl.java
new file mode 100644
index 0000000..688d46c
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultItemServiceImpl.java
@@ -0,0 +1,20 @@
+
+package com.by4cloud.platformx.business.invoice.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.business.entity.invoice.InvoiceResultItem;
+import com.by4cloud.platformx.business.invoice.mapper.FpInvoiceResultItemMapper;
+import com.by4cloud.platformx.business.invoice.service.FpInvoiceResultItemService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 寮�鍏峰彂绁ㄨ繑鍥炲�兼槑缁嗚
+ *
+ * @author kdq
+ * @date 2024-11-28 15:35:41
+ */
+@Service
+public class FpInvoiceResultItemServiceImpl extends ServiceImpl<FpInvoiceResultItemMapper, InvoiceResultItem> implements FpInvoiceResultItemService {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultServiceImpl.java
new file mode 100644
index 0000000..6d51f8a
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultServiceImpl.java
@@ -0,0 +1,22 @@
+
+package com.by4cloud.platformx.business.invoice.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.by4cloud.platformx.business.invoice.service.FpInvoiceResultService;
+import com.by4cloud.platformx.business.entity.invoice.*;
+import com.by4cloud.platformx.business.invoice.mapper.FpInvoiceResultMapper;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.stereotype.Service;
+
+/**
+ * 寮�鍏峰彂绁ㄨ繑鍥炲��
+ *
+ * @author kdq
+ * @date 2024-11-05 18:44:09
+ */
+@Service
+@EnableAsync
+public class FpInvoiceResultServiceImpl extends ServiceImpl<FpInvoiceResultMapper, InvoiceResult> implements FpInvoiceResultService {
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipApiEnum.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipApiEnum.java
new file mode 100644
index 0000000..e5c95a7
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipApiEnum.java
@@ -0,0 +1,32 @@
+package com.by4cloud.platformx.business.invoice.utils;
+
+public enum BipApiEnum {
+ 鑾峰彇TOKEN("/iuap-api-auth/open-auth/selfAppAuth/getAccessToken"),
+ 搴旀敹鍙戠エ淇濆瓨鎺ュ彛("/iuap-api-gateway/yonbip/EFI/receivable/saveandsubmit"),
+ 搴旀敹鍙戠エ鍒犻櫎鎺ュ彛("/iuap-api-gateway/yonbip/EFI/earap/openapi/bill/receivable/batchdelete"),
+ 搴旀敹鍙戠エ鏌ヨ鎺ュ彛("/iuap-api-gateway/yonbip/EFI/receivable/list"),
+
+ 搴旀敹鍙戠エ淇敼鎺ュ彛("/iuap-api-gateway/yonbip/EFI/receivable/batchupdate"),
+ 搴斾粯鍙戠エ淇濆瓨鎺ュ彛("/iuap-api-gateway/yonbip/EFI/payable/saveandsubmit"),
+ 搴斾粯鍙戠エ鍒犻櫎鎺ュ彛("/iuap-api-gateway/yonbip/EFI/earap/openapi/bill/payable/batchdelete"),
+ 搴斾粯鍙戠エ鏌ヨ鎺ュ彛("/iuap-api-gateway/yonbip/EFI/payable/list"),
+
+ 搴斾粯鍙戠エ淇敼鎺ュ彛("/iuap-api-gateway/yonbip/EFI/payable/batchupdate"),
+ 鏀舵鍗曟煡璇㈡帴鍙�("/iuap-api-gateway/yonbip/EFI/collection/list"),
+ 鏀舵閫�娆惧崟淇濆瓨鎺ュ彛("/iuap-api-gateway/yonbip/EFI/arRefund/save"),
+ 鏀舵閫�娆惧崟鍒犻櫎鎺ュ彛("/iuap-api-gateway/yonbip/EFI/arRefund/delete"),
+ 鏀舵閫�娆惧崟鏌ヨ鎺ュ彛("/iuap-api-gateway/yonbip/EFI/arRefund/list"),
+ BIP鏂囦欢涓婃帴鍙�("/iuap-api-gateway/yonbip/uspace/iuap-apcom-file/rest/v1/file"),
+ BIP鏂囦欢鍒犻櫎鎺ュ彛("/iuap-api-gateway/yonbip/uspace/iuap-apcom-file/rest/v1/file/delete"),
+ 搴旀敹鏄庣粏璐︽煡璇�("/iuap-api-gateway/h7rx7y0r/current_yonbip_default_sys/KKJCJK/DetailedAccountsReceivableController");
+
+
+
+ private String url;
+ BipApiEnum(String url) {
+ this.url = url;
+ }
+ public String getUrl() {
+ return url;
+ }
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipHttpUtil.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipHttpUtil.java
new file mode 100644
index 0000000..6b27c5b
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipHttpUtil.java
@@ -0,0 +1,308 @@
+package com.by4cloud.platformx.business.invoice.utils;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
+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.utils.SignHelper;
+import lombok.RequiredArgsConstructor;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.*;
+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;
+import java.security.NoSuchAlgorithmException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+@Component
+@RequiredArgsConstructor
+public class BipHttpUtil {
+ private static final Logger log = LoggerFactory.getLogger(BipHttpUtil.class);
+ @Value("${bip.ip}")
+ private String ip;
+ @Value("${bip.filePath}")
+ private String bipFilePath;
+
+ @Value("${bip.appKey}")
+ private String appKey;
+ @Value("${bip.appSecret}")
+ private String appSecret;
+ private final RedisTemplate redisTemplate;
+ public String getToken(){
+ String redisKey="BIP_TOKEN:";
+// String appKey = "800b2805c5584f0abb8705acbe487dc5";
+// String appSecret = "59ba72c62a6a27203d7e517787a738be89ba55cb";
+ redisKey+=appKey;
+ if (redisTemplate.hasKey(redisKey)){
+ return (String) redisTemplate.opsForValue().get(redisKey);
+ }
+ for (int i=0;i<10;i++){
+ long timestamp = System.currentTimeMillis();
+ Map<String,Object> paramMap = new HashMap<>();
+ paramMap.put("appKey",appKey);
+ paramMap.put("timestamp",timestamp);
+ String signature = null;
+ try {
+ signature = SignHelper.sign(paramMap,appSecret);
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException(e);
+ } catch (InvalidKeyException e) {
+ throw new RuntimeException(e);
+ }
+ String url = ip+BipApiEnum.鑾峰彇TOKEN.getUrl()+"?appKey="+appKey+"×tamp="+timestamp+"&signature="+signature;
+ String result = HttpUtil.get(url);
+ if (result==null){
+ continue;
+ }
+
+ try {
+ BipResVo<BipTokenVo> tokenVo = JSON.parseObject(result,new TypeReference<BipResVo<BipTokenVo>>(){});
+ if (tokenVo.getCode().equals("00000")){
+ redisTemplate.opsForValue().set(redisKey,tokenVo.getData().getAccess_token(),tokenVo.getData().getExpire()-10, TimeUnit.SECONDS);
+ System.out.println("-------bipToken:"+tokenVo.getData().getAccess_token());
+ return tokenVo.getData().getAccess_token();
+ }
+ }catch (Exception e){
+ throw new RuntimeException("bip璁块棶鎺ュ彛寮傚父,璇锋鏌ョ綉缁滄槸鍚︽甯�");
+ }
+
+
+ }
+ return null;
+
+ }
+ public String post(BipApiEnum apiEnum,Object data){
+ log.warn("-------------bipPost-url:"+ip+apiEnum.getUrl()+"?access_token="+getToken());
+ log.warn("-------------bipPost-req:"+JSONUtil.toJsonStr(data));
+ try {
+ String result = HttpRequest.post(ip+apiEnum.getUrl()+"?access_token="+getToken())
+ .body(JSONUtil.toJsonStr(data))
+ .timeout(10*3000)
+ .execute().body();
+ log.warn("-------------bipPost-res:"+result);
+ return result;
+ }catch (Exception e){
+ e.printStackTrace();
+ log.error("-------------bipPost-res:璇锋眰澶辫触");
+ throw new RuntimeException("BIP鎺ュ彛瓒呮椂,璇锋鏌ョ綉缁滃悗閲嶆柊灏濊瘯");
+ }
+ }
+
+ public String postUploadFile(String businessId,String fileLocalPath){
+ // 鍒涘缓HttpClient瀵硅薄
+ CloseableHttpClient httpClient = HttpClients.createDefault();
+ String param = "?access_token="+getToken()+"&businessType=yonbip-fi-earapbill&businessId="+businessId;
+ // 鍒涘缓HttpPost瀵硅薄锛屽苟璁剧疆URL
+ HttpPost httpPost = new HttpPost(ip+BipApiEnum.BIP鏂囦欢涓婃帴鍙�.getUrl()+param);
+ // 鍒涘缓MultipartEntityBuilder瀵硅薄锛屽苟璁剧疆鏂囦欢鍜屽叾浠栧弬鏁�
+ MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+ builder.addBinaryBody("files", new File(bipFilePath+fileLocalPath), ContentType.MULTIPART_FORM_DATA, fileLocalPath);
+ // 灏哅ultipartEntityBuilder鏋勫缓鐨勫疄浣撳璞¤缃埌HttpPost瀵硅薄涓�
+ HttpEntity entity = builder.build();
+ httpPost.setEntity(entity);
+ // 鎵цHttpPost璇锋眰锛岃幏鍙栧搷搴�
+ HttpResponse response = null;
+ String responseBody = null;
+ try {
+ response = httpClient.execute(httpPost);
+ // 瑙f瀽鍝嶅簲
+ HttpEntity responseEntity = response.getEntity();
+ responseBody= EntityUtils.toString(responseEntity);
+ System.out.println(responseBody);
+
+ // 鍏抽棴HttpClient
+ httpClient.close();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return responseBody;
+ }
+
+ public String postUploadFileUrl(String businessId,String fileLocalPath){
+ URL url = null;
+ InputStream stream = null;
+ String lastThreeChars = fileLocalPath.substring(fileLocalPath.length() - 3);
+ String lowLast = lastThreeChars.toLowerCase();
+ if (lowLast.equals("png") || lowLast.equals("jpeg") || lowLast.equals("jpg")) {
+ stream = pngToPdf(fileLocalPath, lowLast);
+ } else {
+ try {
+ url = new URL(fileLocalPath);
+ URLConnection connection = url.openConnection();
+ stream = connection.getInputStream();
+ } catch (MalformedURLException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ // 鍒涘缓HttpClient瀵硅薄
+ CloseableHttpClient httpClient = HttpClients.createDefault();
+ String param = "?access_token="+getToken()+"&businessType=yonbip-fi-earapbill&businessId="+businessId;
+ // 鍒涘缓HttpPost瀵硅薄锛屽苟璁剧疆URL
+ HttpPost httpPost = new HttpPost(ip+BipApiEnum.BIP鏂囦欢涓婃帴鍙�.getUrl()+param);
+ // 鍒涘缓MultipartEntityBuilder瀵硅薄锛屽苟璁剧疆鏂囦欢鍜屽叾浠栧弬鏁�
+ MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+ // 灏哅ultipartEntityBuilder鏋勫缓鐨勫疄浣撳璞¤缃埌HttpPost瀵硅薄涓�
+ builder.addBinaryBody("files", stream, ContentType.MULTIPART_FORM_DATA, "MX_"+System.currentTimeMillis()+".pdf");
+ HttpEntity entity = builder.build();
+ httpPost.setEntity(entity);
+ // 鎵цHttpPost璇锋眰锛岃幏鍙栧搷搴�
+ HttpResponse response = null;
+ String responseBody = null;
+ try {
+ response = httpClient.execute(httpPost);
+ // 瑙f瀽鍝嶅簲
+ HttpEntity responseEntity = response.getEntity();
+ responseBody= EntityUtils.toString(responseEntity);
+ System.out.println(responseBody);
+
+ // 鍏抽棴HttpClient
+ httpClient.close();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return responseBody;
+ }
+
+ public InputStream pngToPdf(String filePath,String format){
+ //String bipFilePath = "/Users/kongdeqiang/Desktop/";
+ long l = System.currentTimeMillis();
+ InputStream stream = null;
+ try {
+ // 鍔犺浇PNG鍥剧墖
+ URL url1 = new URL(filePath);
+ InputStream inputStream = url1.openStream();
+ OutputStream out = new FileOutputStream(bipFilePath+format+l+"."+format);
+ int bytesRead = 0;
+ byte[] buffer = new byte[8192];
+ while ((bytesRead = inputStream.read(buffer,0,8192)) !=-1){
+ out.write(buffer,0,bytesRead);
+ }
+ out.close();
+ inputStream.close();
+
+ File file = new File(bipFilePath+format+l+"."+format);
+ BufferedImage image = ImageIO.read(file);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ImageIO.write(image, format, baos);
+ byte[] bytes = baos.toByteArray();
+ // 鍒涘缓涓�涓狿DF鏂囨。
+ PDDocument document = new PDDocument();
+ PDPage page = new PDPage(new PDRectangle(image.getWidth(), image.getHeight()));
+ document.addPage(page);
+
+ // 灏嗗浘鐗囪浆鎹负PDF涓殑瀵硅薄
+ PDImageXObject pdImage = PDImageXObject.createFromByteArray(document, bytes, format);
+ PDPageContentStream contents = new PDPageContentStream(document, page);
+ contents.drawImage(pdImage, 0, 0, image.getWidth(), image.getHeight());
+ contents.close();
+
+ // 淇濆瓨PDF鏂囨。
+ document.save(bipFilePath+format+l+".pdf");
+ document.close();
+ stream = Files.newInputStream(Paths.get(bipFilePath+format+l+".pdf"));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return stream;
+ }
+
+
+ public String postDeleteFile(String businessId, String fid){
+ // 鍒涘缓HttpClient瀵硅薄
+ CloseableHttpClient httpClient = HttpClients.createDefault();
+ String param = "?access_token="+getToken()+"&businessType=yonbip-fi-earapbill&businessId="+businessId+"&fid="+fid;
+ // 鍒涘缓HttpPost瀵硅薄锛屽苟璁剧疆URL
+ HttpPost httpPost = new HttpPost(ip+BipApiEnum.BIP鏂囦欢鍒犻櫎鎺ュ彛.getUrl()+param);
+ // 鎵цHttpPost璇锋眰锛岃幏鍙栧搷搴�
+ HttpResponse response = null;
+ String responseBody = null;
+ try {
+ response = httpClient.execute(httpPost);
+ // 瑙f瀽鍝嶅簲
+ HttpEntity responseEntity = response.getEntity();
+ responseBody= EntityUtils.toString(responseEntity);
+ System.out.println(responseBody);
+
+ // 鍏抽棴HttpClient
+ httpClient.close();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return responseBody;
+ }
+
+ public static void main1(String[] args) {
+ /* File file = new File("/Users/kongdeqiang/Desktop/1725590083564FFDXJS.pdf");
+ Map<String,Object> paramMap = new HashMap<>();
+ paramMap.put("access_token","");
+ paramMap.put("businessType","yonbip-fi-earapbill");
+ paramMap.put("businessId","");
+ paramMap.put("file",file);
+ Map<String,Object> dataBody = new HashMap<>();
+ String result = HttpRequest.post("https://bip01.res.jzeg.cn"+BipApiEnum.BIP鏂囦欢涓婃帴鍙�.getUrl())
+ .form(paramMap)
+ .timeout(10*1000)
+ .execute().body();
+ System.out.println(result);*/
+ }
+
+ public static void main(String[] args) throws Exception {
+ //姝e紡
+// String appKey = "800b2805c5584f0abb8705acbe487dc5";
+// String appSecret = "59ba72c62a6a27203d7e517787a738be89ba55cb";
+ //娴嬭瘯
+// String appKey = "91d28a4b776a4ab992db225958cf2d93";
+// String appSecret = "77abbe9a3bc647ccf4a2a08629a7a0316ffff830";
+// for (int i=0;i<100;i++){
+// long timestamp = System.currentTimeMillis();
+// Map<String,Object> paramMap = new HashMap<>();
+// paramMap.put("appKey",appKey);
+// paramMap.put("timestamp",timestamp);
+// String signature = SignHelper.sign(paramMap,appSecret);
+// System.out.println("signature:"+signature);
+// String url = "https://bip.res.jzeg.cn"+BipApiEnum.鑾峰彇TOKEN.getUrl()+"?appKey="+appKey+"×tamp="+timestamp+"&signature="+signature;
+// System.out.println(url);
+// String result = HttpUtil.get(url);
+// System.out.println(result);
+// Thread.sleep(300);
+// }
+
+ //InputStream pdf = BipHttpUtil.pngToPdf("/Users/kongdeqiang/Desktop/WechatIMG316.png", "png");
+
+
+ }
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/NumUtils.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/NumUtils.java
new file mode 100644
index 0000000..634cb36
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/NumUtils.java
@@ -0,0 +1,305 @@
+package com.by4cloud.platformx.business.invoice.utils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+/**
+ * @author xfei
+ * @date 2022/5/27涓嬪崍8:26
+ */
+public class NumUtils {
+ /**
+ * 绮剧‘灏忔暟
+ * @param f 灏忔暟
+ * @param length 绮剧‘浣嶆暟
+ * @return
+ */
+ public static Float accurateFloat(Float f,int length){
+ BigDecimal b = new BigDecimal(f.toString());
+ f = b.setScale(length,BigDecimal.ROUND_HALF_UP).floatValue();
+ return f;
+ }
+ public static Float accurateFloat(Float f){
+ return accurateFloat(f,3);
+ }
+
+ public static Double accurateFloat(Double f,int length){
+ BigDecimal b = new BigDecimal(f.toString());
+ f = b.setScale(length,BigDecimal.ROUND_HALF_UP).doubleValue();
+ return f;
+ }
+ public static Double accurateFloat(Double f){
+ return accurateFloat(f,3);
+ }
+
+
+ public static Double accurateDouble(Double f,int length){
+ if(f==null){
+ f=0d;
+ }
+ BigDecimal b2 = new BigDecimal(f.toString());
+ f = b2.setScale(length,BigDecimal.ROUND_HALF_UP).doubleValue();
+ return f;
+ }
+ public static Double accurateDouble(Double f){
+ return accurateDouble(f,3);
+ }
+
+ /**
+ * 鍔�
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double addDouble(Double a,Double b){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.add(bb);
+ aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP);
+ return aa.doubleValue();
+ }
+ public static Double addDoubles(Double ... a){
+ Double result = 0d;
+ for (Double d :a){
+ result =addDouble(result,d);
+ }
+ return result;
+ }
+
+ public static Double addDoubles(int len,Double ... a){
+ Double result = 0d;
+ for (Double d :a){
+ result =addDouble(result,d,len);
+ }
+ return result;
+ }
+
+ /**
+ * 鍑�
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double subtractDouble(Double a,Double b){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.subtract(bb);
+ aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP);
+ return aa.doubleValue();
+ }
+
+ /**
+ * 鍑� 鍙垗涓嶅叆
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double subtractDoubleDown(Double a,Double b){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.subtract(bb);
+ aa = aa.setScale(2,BigDecimal.ROUND_DOWN);
+ return aa.doubleValue();
+ }
+
+ /**
+ * 涔�
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double multiplyDouble(Double a,Double b){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.multiply(bb);
+ aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP);
+ return aa.doubleValue();
+ }
+ /**
+ * 涔� 鍙垗涓嶅叆
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double multiplyDoubleDown(Double a,Double b){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.multiply(bb);
+ aa = aa.setScale(2,BigDecimal.ROUND_DOWN);
+ return aa.doubleValue();
+ }
+ /**
+ * 瀹夊叏鐨勯櫎娉曡繍绠楋紝澶勭悊 null 鍜岄櫎浠ラ浂锛屽苟杩斿洖淇濈暀涓や綅灏忔暟鐨勭粨鏋溿��
+ *
+ * @param a 琚櫎鏁�
+ * @param b 闄ゆ暟
+ * @return (a / b) 鐨勭粨鏋滐紝淇濈暀涓や綅灏忔暟銆傚鏋� b 涓� 0 鎴� null锛屽垯杩斿洖 0.0銆�
+ */
+ public static Double divideDouble(Double a, Double b) {
+ // 浣跨敤 Double.valueOf(0d) 鏉ラ伩鍏嶈嚜鍔ㄨ绠卞甫鏉ョ殑娼滃湪闂锛岃櫧鐒惰繖閲� 0d 鏄瓧闈㈤噺
+ Double dividend = a==null? 0.0:a;
+ Double divisor = b==null? 0.0:b;
+
+ // 澶勭悊闄や互闆剁殑鎯呭喌
+ if (divisor.equals(0.0)) {
+ // 鍙互鏍规嵁涓氬姟閫昏緫閫夋嫨杩斿洖 0.0銆乶ull 鎴栨姏鍑� IllegalArgumentException
+ return 0.0;
+ }
+
+ // 浣跨敤 String.valueOf 鎴� toString() 鏉ラ伩鍏� double 鏋勯�犲櫒鐨勭簿搴﹂棶棰�
+ BigDecimal bdDividend = new BigDecimal(dividend.toString());
+ BigDecimal bdDivisor = new BigDecimal(divisor.toString());
+
+ // 鍦ㄩ櫎娉曠殑鍚屾椂鎸囧畾绮惧害鍜岃垗鍏ユā寮�
+ BigDecimal result = bdDividend.divide(bdDivisor, 2, RoundingMode.HALF_UP);
+
+ return result.doubleValue();
+ }
+// /**
+// * 闄�
+// * 闄ゆ硶
+// * @param a
+// * @param b
+// * @return
+// */
+// public static Double divideDouble(Double a,Double b){
+// if (a==null)a=0d;
+// if (b==null)b=0d;
+// BigDecimal aa = new BigDecimal(a+"");
+// BigDecimal bb = new BigDecimal(b+"");
+// aa = aa.divide(bb);
+// aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP);
+// return aa.doubleValue();
+// }
+
+ public static Double divideDoubleUp(Double a,Double b){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.divide(bb,BigDecimal.ROUND_HALF_UP);
+ aa = aa.setScale(2,BigDecimal.ROUND_HALF_UP);
+ return aa.doubleValue();
+ }
+
+ /**
+ * 闄�
+ * 闄ゆ硶
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double divideDoubleDown(Double a,Double b){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.divide(bb);
+ aa = aa.setScale(2,BigDecimal.ROUND_DOWN);
+ return aa.doubleValue();
+ }
+ /**
+ * 鍔�
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double addDouble(Double a,Double b,int len){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.add(bb);
+ aa = aa.setScale(len,BigDecimal.ROUND_HALF_UP);
+ return aa.doubleValue();
+ }
+
+ /**
+ * 鍑�
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double subtractDouble(Double a,Double b,int len){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.subtract(bb);
+ aa = aa.setScale(len,BigDecimal.ROUND_HALF_UP);
+ return aa.doubleValue();
+ }
+
+ /**
+ * 涔�
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double multiplyDouble(Double a,Double b,int len){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.multiply(bb);
+ aa = aa.setScale(len,BigDecimal.ROUND_HALF_UP);
+ return aa.doubleValue();
+ }
+ /**
+ * 闄�
+ * @param a
+ * @param b
+ * @return
+ */
+ public static Double divideDouble(Double a,Double b,int len){
+ if (a==null)a=0d;
+ if (b==null)b=0d;
+ if(b==0){
+ return 0.0d;
+ }
+ BigDecimal aa = new BigDecimal(a+"");
+ BigDecimal bb = new BigDecimal(b+"");
+ aa = aa.divide(bb,len, BigDecimal.ROUND_HALF_UP);
+ return aa.doubleValue();
+ }
+
+
+
+ public static Double floatToD(Float f){
+ if (f == null) {
+ return new Double(0);
+ }
+ return new Double(f);
+ }
+
+ public static void main(String[] args) {
+// System.out.println(NumUtils.accurateDouble(60.1575,3));
+ System.out.println(NumUtils.addDoubles(6.1234d, 6.1234d, 4.33d));
+ }
+
+ /**
+ * 鍙垗涓嶅叆璁$畻鏂规硶
+ *
+ * @param number
+ * @param decimalPlaces
+ * @return
+ */
+ public static double truncateToDecimalPlaces(double number, int decimalPlaces) {
+ if (decimalPlaces < 0) {
+ throw new IllegalArgumentException("灏忔暟浣嶆暟涓嶈兘涓鸿礋鏁�");
+ }
+ double multiplier = Math.pow(10, decimalPlaces);
+ return (double) ((long) (number * multiplier)) / multiplier;
+ }
+
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/InvoiceService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/InvoiceService.java
new file mode 100644
index 0000000..4ff9c4d
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/InvoiceService.java
@@ -0,0 +1,24 @@
+package com.by4cloud.platformx.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+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 java.util.List;
+import java.util.Map;
+
+public interface InvoiceService extends IService<InvoiceResult> {
+
+ Map<String, Object> toRedTicket(SaleCredit saleCredit);
+
+ InvoicingVo toGetByCompare(SaleCredit saleCredit, List<ContractOutBound> contractOutBoundList);
+
+ Map<String, Object> toKaipiao(InvoicingVo invoicingVo);
+
+ Map<String,Object> downInvoiceMethod(InvoiceResult invoiceResult);
+
+ boolean pushBlue(Long railwayId, Integer type); //0搴旀敹 1搴斾粯
+
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/InvoiceServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/InvoiceServiceImpl.java
new file mode 100644
index 0000000..891c3c6
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/InvoiceServiceImpl.java
@@ -0,0 +1,1458 @@
+package com.by4cloud.platformx.business.service.impl;
+
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.common.utils.StringUtils;
+import com.alibaba.nacos.common.utils.UuidUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.invoice.mapper.FpInvoiceResultItemMapper;
+import com.by4cloud.platformx.business.invoice.mapper.FpInvoiceResultMapper;
+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.service.InvoiceService;
+import com.by4cloud.platformx.business.service.SaleCreditService;
+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;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 閿�鍞寕璐�
+ *
+ * @author wjli
+ * @date 2026-05-21 16:16:31
+ */
+@Service
+public class InvoiceServiceImpl extends ServiceImpl<FpInvoiceResultMapper, InvoiceResult> implements InvoiceService {
+
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
+ @Autowired
+ private FpInvoiceResultItemMapper itemMapper;
+
+ @Autowired
+ private SaleCreditService saleCreditService;
+
+ @Autowired
+ private FpInvoiceResultService invoiceResultService;
+
+ @Autowired
+ private BipInvoiceService bipInvoiceService;
+
+ @Autowired
+ private FileUploadService fileUploadService;
+
+ @Value("${BWInvoice.ip}")
+ private String invoiceIp;
+ @Value("${BWInvoice.kaipiao}")
+ private String kpUrl;
+ @Value("${BWInvoice.chaxun}")
+ private String cxUrl;
+ @Value("${BWInvoice.redConfirmAdd}")
+ private String redConfirmUrl;
+
+ @Value("${BWInvoice.redConfirmSearch}")
+ private String redConfirmSearchUrl;
+
+ @Override
+ public Map<String, Object> toKaipiao(InvoicingVo invoicingVo) {
+ Map<String, Object> stringObjectMap = zizhuKaiPiao(invoicingVo);
+ return stringObjectMap;
+ }
+
+ @Override
+ public Map<String, Object> toRedTicket(SaleCredit saleCredit) {
+ return redTicket(saleCredit);
+ }
+
+ @Override
+ public InvoicingVo toGetByCompare(SaleCredit saleCredit, List<ContractOutBound> contractOutBoundList) {
+ return getByCompare(saleCredit,contractOutBoundList);
+ }
+
+ /**
+ * 鑷富缁撶畻寮�绁�
+ */
+ Map<String, Object> zizhuKaiPiao(InvoicingVo vo){
+ String s1 = redisTemplate.opsForValue().get("ZZKP_BLUE:" + vo.getEntrustCode());
+ if(StringUtils.isNotBlank(s1)){
+ System.out.println("缁撶畻鍗曞彿锛�"+vo.getEntrustCode()+"姝e湪寮�绁紝璇峰嬁閲嶅鐐瑰嚮");
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",false);
+ res.put("message","缁撶畻鍗曞彿锛�"+vo.getEntrustCode()+"姝e湪寮�绁紝璇峰嬁閲嶅鐐瑰嚮");
+ return res;
+ }
+ redisTemplate.opsForValue().set("ZZKP_BLUE:" + vo.getEntrustCode(),"true");
+ try {
+ Gson gson =new Gson();
+ String str = gson.toJson(vo);
+ System.out.println(str);
+ String responseBody = "";
+ responseBody = HttpRequest.post(invoiceIp+kpUrl+ UuidUtils.generateUuid())
+ .timeout(400000)
+ .body(str)
+ .execute()
+ .body();
+ System.out.println(responseBody);
+ JSONObject jsonObj = JSON.parseObject(responseBody);
+ if(jsonObj!=null){
+ boolean flag = (Boolean)jsonObj.get("success");
+ JSONObject message = jsonObj.getJSONObject("message");
+ String requestId = (String) jsonObj.get("requestId");
+ if(!flag){
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",flag);
+ res.put("message",message.get("errorMessage"));
+ InvoiceResult invoiceResult = new InvoiceResult();
+ invoiceResult.setSaleCreditId(vo.getSaleCreditId());
+ invoiceResult.setRequestId(requestId);
+ invoiceResult.setSuccess(flag);
+ invoiceResult.setMessage((String) message.get("errorMessage"));
+ invoiceResult.setMethodName("钃濆瓧寮�绁ㄦ帴鍙�");
+ invoiceResult.setEntrustCode(vo.getEntrustCode());
+ invoiceResultService.save(invoiceResult);
+
+ SaleCredit saleCredit = saleCreditService.getById(invoiceResult.getSaleCreditId());
+ saleCredit.setInvoiceRemark((String) message.get("errorMessage"));
+ saleCreditService.updateById(saleCredit);
+
+ /* UpdateWrapper<RailwayEntrust> updateWrapper = new UpdateWrapper<>();
+ updateWrapper.lambda().set(RailwayEntrust::getInvoiceResult,null)
+ .set(RailwayEntrust::getInvoiceResultId,null)
+ .set(RailwayEntrust::getTaskId,null)
+ .set(RailwayEntrust::getInvoiceProcInstId,null)
+ .set(RailwayEntrust::getInvoiceRemark,(String) message.get("errorMessage"))
+ .eq(RailwayEntrust::getEntrustCode,vo.getEntrustCode());
+ railwayEntrustMapper.update(null,updateWrapper);*/
+
+ redisTemplate.delete("ZZKP_BLUE:" + vo.getEntrustCode());
+ return res;
+ }else {
+ String successMessage = (String)message.get("successMessage");
+ JSONObject model = jsonObj.getJSONObject("model");
+ JSONArray success = model.getJSONArray("success");
+ JSONObject modelObject = success.getJSONObject(0);
+ String invoiceTypeCode = (String)modelObject.get("invoiceTypeCode");
+ String invoiceNo = (String)modelObject.get("invoiceNo");
+ String invoiceDate = (String)modelObject.get("invoiceDate");
+ String invoiceQrCode = (String)modelObject.get("invoiceQrCode");
+ String serialNo = (String)modelObject.get("serialNo");
+ BigDecimal invoiceTotalPriceValue = (BigDecimal)modelObject.get("invoiceTotalPrice");
+ Double invoiceTotalPrice = Double.valueOf(invoiceTotalPriceValue.doubleValue());
+ BigDecimal invoiceTotalTaxValue = (BigDecimal)modelObject.get("invoiceTotalTax");
+ Double invoiceTotalTax = Double.valueOf(invoiceTotalTaxValue.doubleValue());
+ BigDecimal invoiceTotalPriceTaxValue = (BigDecimal)modelObject.get("invoiceTotalPriceTax");
+ Double invoiceTotalPriceTax = Double.valueOf(invoiceTotalPriceTaxValue.doubleValue());
+ String mulPurchaserMark = (String)modelObject.get("mulPurchaserMark");
+ String sellerTaxNo = (String)modelObject.get("sellerTaxNo");
+ String coalCalorificValue = (String)modelObject.get("coalCalorificValue");
+ String totalSulfurOnDryBasis = (String)modelObject.get("totalSulfurOnDryBasis");
+ String dryAshFreeVolatileMatter = (String)modelObject.get("dryAshFreeVolatileMatter");
+
+ InvoiceResult invoiceResult = new InvoiceResult();
+ invoiceResult.setSaleCreditId(vo.getSaleCreditId());
+ invoiceResult.setRequestId(requestId);
+ invoiceResult.setSuccess(flag);
+ invoiceResult.setMessage(successMessage);
+ invoiceResult.setInvoiceNo(invoiceNo);
+ invoiceResult.setInvoiceTyCode(invoiceTypeCode);
+ invoiceResult.setInvoiceDate(invoiceDate);
+ invoiceResult.setInvoiceQrCode(invoiceQrCode);
+ invoiceResult.setSerialNo(serialNo);
+ invoiceResult.setMethodName("钃濆瓧寮�绁ㄦ帴鍙�");
+ invoiceResult.setEntrustCode(vo.getEntrustCode());
+ invoiceResult.setInvoiceTotalPrice(invoiceTotalPrice);
+ invoiceResult.setInvoiceTotalTax(invoiceTotalTax);
+ invoiceResult.setInvoiceTotalPriceTax(invoiceTotalPriceTax);
+ invoiceResult.setMulPurchaserMark(mulPurchaserMark);
+ invoiceResult.setXTaxNo(sellerTaxNo);
+ /*if(StringUtils.isNotBlank(coalCalorificValue)){
+ invoiceResult.setCoalCalorificValue(coalCalorificValue);
+ }
+ if(StringUtils.isNotBlank(totalSulfurOnDryBasis)){
+ invoiceResult.setTotalSulfurOnDryBasis(totalSulfurOnDryBasis);
+ }
+ if(StringUtils.isNotBlank(dryAshFreeVolatileMatter)){
+ invoiceResult.setDryAshFreeVolatileMatter(dryAshFreeVolatileMatter);
+ }*/
+ invoiceResultService.save(invoiceResult);
+
+ JSONArray invoiceDetailList1 = modelObject.getJSONArray("invoiceDetailsList");
+ for (int i = 0; i < invoiceDetailList1.size(); i++) {
+ JSONObject jsonObject = invoiceDetailList1.getJSONObject(i);
+ int goodsLineNo = (int) jsonObject.get("goodsLineNo");
+ String goodsName = (String) jsonObject.get("goodsName");
+ String goodsCode = (String) jsonObject.get("goodsCode");
+ BigDecimal goodsPriceValue = (BigDecimal)jsonObject.get("goodsPrice");
+ Double goodsPrice = Double.valueOf(goodsPriceValue.doubleValue());
+
+ double goodsQuantity=0.0;
+ try {
+ int goodsQuantity1 = (int) jsonObject.get("goodsQuantity");
+ goodsQuantity = goodsQuantity1;
+ }catch (Exception e){
+ e.printStackTrace();
+ BigDecimal goodsQuantityValue = (BigDecimal)jsonObject.get("goodsQuantity");
+ goodsQuantity = Double.valueOf(goodsQuantityValue.doubleValue());
+ }
+ BigDecimal goodsTotalPriceValue = (BigDecimal)jsonObject.get("goodsTotalPrice");
+ Double goodsTotalPrice = Double.valueOf(goodsTotalPriceValue.doubleValue());
+ BigDecimal goodsTotalTaxValue = (BigDecimal)jsonObject.get("goodsTotalTax");
+ Double goodsTotalTax = Double.valueOf(goodsTotalTaxValue.doubleValue());
+ BigDecimal goodsTaxRateValue = (BigDecimal)jsonObject.get("goodsTaxRate");
+ Double goodsTaxRate = Double.valueOf(goodsTaxRateValue.doubleValue());
+ String invoiceLineNature = (String) jsonObject.get("invoiceLineNature");
+ String goodsUnit = (String) jsonObject.get("goodsUnit");
+ String goodsSpecification = (String) jsonObject.get("goodsSpecification");
+ String coalType = (String)jsonObject.get("coalType");
+ String agreementTerm = (String)jsonObject.get("agreementTerm");
+ String name = "";
+ /*if(goodsLineNo==1){
+ name = "鐓ゆ";
+ }
+ if(goodsLineNo==2 && goodsTaxRate==0.13){
+ name = "鍙栭�佽溅璐�";
+ }
+ if(goodsTaxRate==0.6){
+ name = "涓撶嚎璐�";
+ }*/
+ InvoiceResultItem item = new InvoiceResultItem();
+ item.setGoodsLineNature(invoiceLineNature);
+ item.setGoodsCode(goodsCode);
+ item.setGoodsPrice(goodsPrice);
+ item.setGoodsLineNo(goodsLineNo);
+ item.setGoodsQuantity(goodsQuantity);
+ item.setGoodsTaxRate(goodsTaxRate);
+ item.setGoodsType(name);
+ item.setGoodsName(goodsName);
+ item.setGoodsTotalPrice(goodsTotalPrice);
+ item.setGoodsTotalTax(goodsTotalTax);
+ item.setGoodsUnit(goodsUnit);
+ item.setCoalType(coalType);
+ if(StringUtils.isNotBlank(agreementTerm)){
+ item.setAgreementTerm(agreementTerm);
+ }
+ if(goodsSpecification !=null){
+ item.setGoodsSpecification(goodsSpecification);
+ }
+ item.setResultId(invoiceResult.getId());
+ item.setEntrustCode(invoiceResult.getEntrustCode());
+ String[] split = goodsName.split("\\*");
+ int length = split.length;
+ String coalName = split[length - 1];
+ item.setCoalName(coalName);
+ itemMapper.insert(item);
+ }
+
+ /*QueryWrapper<RailwayEntrust> wrapper = new QueryWrapper<>();
+ wrapper.lambda().eq(RailwayEntrust::getEntrustCode,invoiceResult.getEntrustCode());
+ RailwayEntrust railwayEntrust = railwayEntrustMapper.selectList(wrapper).get(0);
+ railwayEntrust.setInvoiceResultId(invoiceResult.getId());
+ railwayEntrust.setInvoiceResult(2);
+ railwayEntrust.setInvoiceRemark("钃濆瓧寮�绁ㄦ垚鍔�");
+ railwayEntrustMapper.updateById(railwayEntrust);*/
+
+ SaleCredit saleCredit = saleCreditService.getById(invoiceResult.getSaleCreditId());
+ saleCredit.setInvoiceRemark("钃濆瓧寮�绁ㄦ垚鍔�");
+ saleCredit.setStatus(2);
+ saleCredit.setBlueInvoiceResultId(invoiceResult.getId());
+ saleCreditService.updateById(saleCredit);
+
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",flag);
+ res.put("message",successMessage);
+ String s = redisTemplate.opsForValue().get("railwayEntrust_invoice_id:" + saleCredit.getId());
+ if(StringUtils.isNotBlank(s)){
+ redisTemplate.delete("railwayEntrust_invoice_id:" + saleCredit.getId());
+ }
+ redisTemplate.delete("ZZKP_BLUE:" + vo.getEntrustCode());
+ return res;
+ }
+
+ }else {
+ InvoiceResult invoiceResult = new InvoiceResult();
+ invoiceResult.setSuccess(false);
+ invoiceResult.setMessage("钃濆瓧寮�绁ㄦ帴鍙f棤杩斿洖鍊�");
+ invoiceResult.setMethodName("钃濆瓧寮�绁ㄦ帴鍙�");
+ invoiceResult.setEntrustCode(vo.getEntrustCode());
+ invoiceResultService.save(invoiceResult);
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",false);
+ res.put("message","钃濆瓧寮�绁ㄦ帴鍙f棤杩斿洖鍊�");
+
+ /*UpdateWrapper<RailwayEntrust> updateWrapper = new UpdateWrapper<>();
+ updateWrapper.lambda().set(RailwayEntrust::getInvoiceResult,null)
+ .set(RailwayEntrust::getInvoiceResultId,null)
+ .set(RailwayEntrust::getTaskId,null)
+ .set(RailwayEntrust::getInvoiceProcInstId,null)
+ .set(RailwayEntrust::getInvoiceRemark,"钃濆瓧寮�绁ㄦ帴鍙f棤杩斿洖鍊�")
+ .eq(RailwayEntrust::getEntrustCode,vo.getEntrustCode());
+ railwayEntrustMapper.update(null,updateWrapper);*/
+
+ SaleCredit saleCredit = saleCreditService.getById(invoiceResult.getSaleCreditId());
+ saleCredit.setInvoiceRemark("钃濆瓧寮�绁ㄦ帴鍙f棤杩斿洖鍊�");
+ saleCredit.setStatus(3);
+ saleCredit.setBlueInvoiceResultId(null);
+ saleCredit.setEntrustCode(vo.getEntrustCode());
+ saleCreditService.updateById(saleCredit);
+
+ redisTemplate.delete("ZZKP_BLUE:" + vo.getEntrustCode());
+ return res;
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",false);
+ res.put("message","寮�绁ㄦ帴鍙e紓甯�");
+ InvoiceResult invoiceResult = new InvoiceResult();
+ invoiceResult.setSuccess(false);
+ invoiceResult.setMessage("钃濆瓧寮�绁ㄦ帴鍙e紓甯�");
+ invoiceResult.setMethodName("钃濆瓧寮�绁ㄦ帴鍙�");
+ invoiceResult.setEntrustCode(vo.getEntrustCode());
+ invoiceResultService.save(invoiceResult);
+
+ /*UpdateWrapper<RailwayEntrust> updateWrapper = new UpdateWrapper<>();
+ updateWrapper.lambda().set(RailwayEntrust::getInvoiceResult,null)
+ .set(RailwayEntrust::getInvoiceResultId,null)
+ .set(RailwayEntrust::getTaskId,null)
+ .set(RailwayEntrust::getInvoiceProcInstId,null)
+ .set(RailwayEntrust::getInvoiceRemark,"钃濆瓧寮�绁ㄦ帴鍙e紓甯�")
+ .eq(RailwayEntrust::getEntrustCode,vo.getEntrustCode());
+ railwayEntrustMapper.update(null,updateWrapper);*/
+
+ SaleCredit saleCredit = saleCreditService.getById(invoiceResult.getSaleCreditId());
+ saleCredit.setInvoiceRemark("钃濆瓧寮�绁ㄦ帴鍙e紓甯�");
+ saleCredit.setStatus(3);
+ saleCredit.setBlueInvoiceResultId(null);
+ saleCredit.setEntrustCode(vo.getEntrustCode());
+ saleCreditService.updateById(saleCredit);
+
+ redisTemplate.delete("ZZKP_BLUE:" + vo.getEntrustCode());
+ return res;
+ }
+ }
+
+
+
+
+ private InvoicingVo getByCompare(SaleCredit saleCredit, List<ContractOutBound> 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("杩涘叆寮傛鏂规硶");
+ System.out.println("褰撳墠绾跨▼鍚嶇О锛�" + Thread.currentThread().getName());
+
+ try {
+ //绾㈠瓧纭鍗�
+ InvoiceResult result = invoiceResultService.getById(saleCredit.getBlueInvoiceResultId());
+ Map<String, Object> objectMap = redTicketConfirm(result,saleCredit);
+ Boolean success = (Boolean) objectMap.get("success");
+ if(success){
+ InvoiceResult obj = (InvoiceResult) objectMap.get("obj");
+ //绾㈠瓧纭鍗曠‘璁ゆ帴鍙�
+ Map<String, Object> stringObjectMap = redTicketConfirmSearch(obj,saleCredit);
+ Boolean confimSuccess = (Boolean) stringObjectMap.get("success");
+ if(confimSuccess){
+ //寮�绁ㄦ帴鍙�
+ InvoiceResult invoiceObj = (InvoiceResult) stringObjectMap.get("obj");
+ if(invoiceObj.getConfirmBillingMark().equals("Y")){
+ //鏃犻渶寮�绁�
+ System.out.println(saleCredit.getEntrustCode()+"鐨剅ailwayEntrust宸插紑绾㈠瓧寮�绁�");
+
+ QueryWrapper<InvoiceResult> invoiceResultQueryWrapper = new QueryWrapper<>();
+ invoiceResultQueryWrapper.lambda()
+ .eq(InvoiceResult::getEntrustCode,saleCredit.getEntrustCode())
+ .eq(InvoiceResult::getMethodName,"钃濆瓧寮�绁ㄦ帴鍙�")
+ .like(InvoiceResult::getMessage,"%鍙戠エ寮�鍏锋垚鍔�%");
+ List<InvoiceResult> list = invoiceResultService.list(invoiceResultQueryWrapper);
+ if(list !=null && list.size()>0){
+ invoiceResultService.removeByIds(list);
+ }
+
+ /*UpdateWrapper<RailwayEntrust> updateWrapper = new UpdateWrapper<>();
+ updateWrapper.lambda().set(RailwayEntrust::getInvoiceResult,null)
+ .set(RailwayEntrust::getInvoiceResultId,null)
+ .set(RailwayEntrust::getInvoiceRemark,"绾㈠瓧寮�绁ㄦ垚鍔�")
+ .set(RailwayEntrust::getInvoiceRedResultId,invoiceObj.getId())
+ .eq(RailwayEntrust::getEntrustCode,saleCredit.getEntrustCode());
+ railwayEntrustMapper.update(null,updateWrapper);*/
+ saleCredit.setInvoiceRemark("绾㈠瓧寮�绁ㄦ垚鍔�");
+ saleCredit.setRedInvoiceResultId(invoiceObj.getId());
+ saleCredit.setStatus(7);
+ saleCreditService.updateById(saleCredit);
+ return stringObjectMap;
+ }else {
+
+ InvoicingVo invoicingVo = redKaiPiaoVo(invoiceObj);
+ invoicingVo.setSaleCreditId(saleCredit.getId());
+ if(invoicingVo !=null){
+ Map<String, Object> stringObjectMap1 = redTicketKaiPiao(invoicingVo);
+ Boolean confimSuccess1 = (Boolean) stringObjectMap1.get("success");
+ String message1 = (String) stringObjectMap1.get("message");
+ if(confimSuccess1){
+ System.out.println(saleCredit.getEntrustCode()+"鐨剅ailwayEntrust绾㈠瓧寮�绁ㄧ粨鏋滀负锛�"+confimSuccess1+"------"+message1);
+ return stringObjectMap1;
+ }
+ }
+ }
+ }else {
+ System.out.println(saleCredit.getEntrustCode()+"鐨勭孩瀛楃‘璁ゅ崟纭鎺ュ彛寮傚父");
+ return stringObjectMap;
+ }
+ }else {
+ System.out.println(saleCredit.getEntrustCode()+"鐨勭孩瀛楃‘璁ゅ崟鏂板鎺ュ彛寮傚父");
+ return objectMap;
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ System.out.println("寮傛鏂规硶鎵ц瀹屾垚");
+ Map<String, Object> result = new HashMap<>();
+ result.put("success",false);
+ result.put("message","寮�绁ㄥ紓甯�");
+ return result;
+ }
+
+ /**
+ * 鐗堝紡鏂囦欢鏌ヨ
+ * @param invoiceResult
+ * @return
+ */
+ @Override
+ public Map<String, Object> downInvoiceMethod(InvoiceResult invoiceResult) {
+ SaleCredit saleCredit = saleCreditService.getById(invoiceResult.getSaleCreditId());
+ Map<String,Object> map = new HashMap<>();
+ Map<String,Object> map1 = new HashMap<>();
+ map.put("taxNo",invoiceResult.getXTaxNo());
+ map1.put("serialNo",invoiceResult.getSerialNo());
+ if(invoiceResult.getMethodName().equals("绾㈠瓧纭鍗曠‘璁ゆ帴鍙�")){
+ map1.put("einvoiceNo",invoiceResult.getRedInvoiceNo());
+ }else {
+ map1.put("einvoiceNo",invoiceResult.getInvoiceNo());
+ }
+ map1.put("returnType","1");
+ map1.put("invoiceIssueMode","1");
+ map.put("data",map1);
+ Gson gson =new Gson();
+ String str = gson.toJson(map);
+ System.out.println(str);
+ String responseBody = "";
+ responseBody = HttpRequest.post(invoiceIp+cxUrl+UuidUtils.generateUuid())
+ .timeout(400000)
+ .body(str)
+ .execute()
+ .body();
+ System.out.println(responseBody);
+ JSONObject jsonObj = JSON.parseObject(responseBody);
+ if(jsonObj!=null){
+ boolean flag = (Boolean)jsonObj.get("success");
+ JSONObject message = jsonObj.getJSONObject("message");
+ if(!flag){
+ String successMessage = (String) message.get("errorMessage");
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",flag);
+ res.put("message",successMessage);
+ return res;
+ }else {
+ String requestId = (String) jsonObj.get("requestId");
+ String successMessage = (String) message.get("successMessage");
+ JSONObject model = jsonObj.getJSONObject("model");
+ String modelRequestId = (String)model.get("requestId");
+ String invoiceNo = (String)model.get("invoiceNo");
+ String serialNo = (String)model.get("serialNo");
+ String sellerTaxNo = (String)model.get("sellerTaxNo");
+ String eInvoiceUrlOld = (String)model.get("eInvoiceUrl");
+ String returnType = (String)model.get("returnType");
+
+ String eInvoiceUrl = eInvoiceUrlOld.replace("http://","https://");
+
+ InvoiceResult result = new InvoiceResult();
+ result.setXTaxNo(sellerTaxNo);
+ result.setRequestId(requestId);
+ result.setFpRequestId(modelRequestId);
+ result.setSuccess(flag);
+ result.setMessage(successMessage);
+ result.setSerialNo(serialNo);
+ result.setInvoiceNo(invoiceNo);
+ result.setEInvoiceUrl(eInvoiceUrl);
+ result.setMethodName("鐗堝紡鏂囦欢鏌ヨ鎺ュ彛");
+ result.setEntrustCode(invoiceResult.getEntrustCode());
+ invoiceResultService.save(result);
+
+ /*QueryWrapper<RailwayEntrust> wrapper = new QueryWrapper<>();
+ wrapper.lambda().eq(RailwayEntrust::getEntrustCode,invoiceResult.getEntrustCode());
+ RailwayEntrust railwayEntrust = railwayEntrustMapper.selectList(wrapper).get(0);*/
+ if(invoiceResult.getMethodName().contains("钃濆瓧")){
+ /* railwayEntrust.setInvoiceRemark("钃濆瓧鍙戠エ宸叉煡璇�");
+ railwayEntrust.setInvoicUrl(result.getEInvoiceUrl());
+ if(railwayEntrust.getInvoiceResultId()==null){
+ railwayEntrust.setInvoiceResultId(result.getId());
+ }*/
+ saleCredit.setInvoiceRemark("钃濆瓧鍙戠エ宸叉煡璇�");
+ saleCredit.setInvoicUrl(result.getEInvoiceUrl());
+ saleCredit.setBlueInvoiceResultId(result.getId());
+ saleCreditService.updateById(saleCredit);
+
+
+ }else {
+ /*railwayEntrust.setInvoiceRemark("绾㈠瓧鍙戠エ宸叉煡璇�");
+ railwayEntrust.setInvoicRedUrl(result.getEInvoiceUrl());
+ if(railwayEntrust.getInvoiceRedResultId()==null){
+ railwayEntrust.setInvoiceRedResultId(result.getId());
+ }*/
+ saleCredit.setInvoiceRemark("绾㈠瓧鍙戠エ宸叉煡璇�");
+ saleCredit.setInvoicUrl(result.getEInvoiceUrl());
+ saleCredit.setBlueInvoiceResultId(result.getId());
+ saleCreditService.updateById(saleCredit);
+ }
+
+ //railwayEntrustMapper.updateById(railwayEntrust);
+
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",flag);
+ res.put("message",successMessage);
+ res.put("url",eInvoiceUrl);
+ res.put("name",invoiceNo);
+ return res;
+ }
+ }else {
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",false);
+ res.put("message","寮�绁ㄦ帴鍙e紓甯�");
+ return res;
+ }
+ }
+
+ @Override
+ public boolean pushBlue(Long railwayId, Integer type) {
+ SaleCredit saleCredit = saleCreditService.getById(railwayId);
+
+ if (saleCredit.getBipStatus() == null || !saleCredit.getBipStatus().equals("200")) {
+ return false;
+ } else {
+ InvoiceResult result = null;
+ QueryWrapper<InvoiceResult> invoiceResultQueryWrapper = new QueryWrapper<>();
+ invoiceResultQueryWrapper.lambda()
+ .eq(InvoiceResult::getEntrustCode, saleCredit.getEntrustCode())
+ .eq(InvoiceResult::getMethodName,"钃濆瓧寮�绁ㄦ帴鍙�")
+ .eq(InvoiceResult::getSuccess,1)
+ .like(InvoiceResult::getMessage,"%鍙戠エ寮�鍏锋垚鍔�%")
+ .orderByAsc(InvoiceResult::getCreateTime)
+ .last( " limit 4 ");
+ if(type==0){
+ invoiceResultQueryWrapper.lambda().eq(InvoiceResult::getPushBip,1);
+ }else {
+ invoiceResultQueryWrapper.lambda().eq(InvoiceResult::getPushBipyf,1);
+ }
+ List<InvoiceResult> list = invoiceResultService.list(invoiceResultQueryWrapper);
+ if(list !=null && list.size()>0){
+ return false;
+ }
+
+ QueryWrapper<InvoiceResult> invoiceResultQueryWrapper1 = new QueryWrapper<>();
+ invoiceResultQueryWrapper1.lambda()
+ .eq(InvoiceResult::getEntrustCode, saleCredit.getEntrustCode())
+ .eq(InvoiceResult::getMethodName,"钃濆瓧寮�绁ㄦ帴鍙�")
+ .eq(InvoiceResult::getSuccess,1)
+ .like(InvoiceResult::getMessage,"%鍙戠エ寮�鍏锋垚鍔�%")
+ .orderByAsc(InvoiceResult::getCreateTime)
+ .last( " limit 4 ");
+ if(type==0){
+ invoiceResultQueryWrapper1.lambda().isNull(InvoiceResult::getPushBip);
+ }else {
+ invoiceResultQueryWrapper1.lambda().isNull(InvoiceResult::getPushBipyf);
+ }
+ List<InvoiceResult> list1 = invoiceResultService.list(invoiceResultQueryWrapper1);
+ if(list1 !=null && list1.size()>0){
+ result = list1.get(0);
+ }else {
+ System.out.println(saleCredit.getEntrustCode()+"鏈煡璇㈠埌寮�绁ㄨ褰�");
+ return false;
+ }
+
+ if(com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(saleCredit.getInvoicUrl())){
+ if(type==0){
+ if(result.getPushBip()==null||result.getPushBip()==0) {
+ System.out.println(saleCredit.getEntrustCode() + "寮�濮嬫帹閫乥ip搴旀敹钃濈エ");
+ try {
+ boolean b = pushBipYS(saleCredit.getId(), saleCredit.getInvoicUrl());
+ if(b){
+ System.out.println(saleCredit.getEntrustCode() + "鎺ㄩ�乥ip搴旀敹钃濈エ鎴愬姛");
+ result.setPushBip(1);
+ invoiceResultService.updateById(result);
+ return true;
+ }else {
+ System.out.println(saleCredit.getEntrustCode() + "鎺ㄩ�乥ip搴旀敹钃濈エ澶辫触");
+ return false;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }else if (type==1){
+ if(result.getPushBipyf()==null||result.getPushBipyf()==0) {
+ System.out.println(saleCredit.getEntrustCode() + "寮�濮嬫帹閫乥ip搴斾粯钃濈エ");
+ try {
+ boolean b = pushBipYF(saleCredit.getId(), saleCredit.getInvoicUrl());
+ if(b){
+ System.out.println(saleCredit.getEntrustCode() + "鎺ㄩ�乥ip搴斾粯钃濈エ鎴愬姛");
+ result.setPushBipyf(1);
+ invoiceResultService.updateById(result);
+ return true;
+ }else {
+ System.out.println(saleCredit.getEntrustCode() + "鎺ㄩ�乥ip搴斾粯钃濈エ澶辫触");
+ return false;
+ }
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }else {
+ Map<String, Object> objectMap = downInvoiceMethod(result);
+ Boolean success = (Boolean) objectMap.get("success");
+ String message = (String) objectMap.get("message");
+ String url = (String) objectMap.get("url");
+ if(success){
+ try {
+ if(type==0){
+ boolean b = pushBipYS(saleCredit.getId(),url);
+ if(b){
+ System.out.println(saleCredit.getEntrustCode()+"鎺ㄩ�乥ip搴旀敹钃濈エ鎴愬姛");
+ result.setPushBip(1);
+ invoiceResultService.updateById(result);
+ return true;
+ }else {
+ System.out.println(saleCredit.getEntrustCode()+"鎺ㄩ�乥ip搴旀敹钃濈エ澶辫触");
+ return false;
+ }
+
+ }else if (type==1){
+ boolean b = pushBipYF(saleCredit.getId(),url);
+ if(b){
+ System.out.println(saleCredit.getEntrustCode()+"鎺ㄩ�乥ip搴斾粯钃濈エ鎴愬姛");
+ result.setPushBipyf(1);
+ invoiceResultService.updateById(result);
+ return true;
+ }else {
+ System.out.println(saleCredit.getEntrustCode()+"鎺ㄩ�乥ip搴斾粯钃濈エ澶辫触");
+ return false;
+ }
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 鎺ㄩ�乥ip搴旀敹钃濈エ
+ * @param id
+ * @param file
+ */
+ public boolean pushBipYS(Long id,String file){
+ //搴旀敹
+ QueryWrapper<BipInvoice> bipInvoiceQueryWrapper = new QueryWrapper<>();
+ bipInvoiceQueryWrapper.lambda()
+ .eq(BipInvoice::getRailwayEntrustId, id)
+ .eq(BipInvoice::getInvoiceType, 0)
+ .in(BipInvoice::getResStatus, 200, 910)
+ .orderByDesc(BipInvoice::getCreateTime);
+ List<BipInvoice> list1 = bipInvoiceService.list(bipInvoiceQueryWrapper);
+ if(list1!=null && list1.size()>0){
+ BipInvoice bipInvoice = list1.get(0);
+ String bipNumber = bipInvoice.getBipNumber();
+ fileUploadService.uploadUrlToBip(id,bipNumber,file);
+ return true;
+ }else {
+ return false;
+ }
+ }
+
+ /**
+ * 鎺ㄩ�乥ip搴斾粯钃濈エ
+ * @param id
+ * @param file
+ */
+ public boolean pushBipYF(Long id,String file){
+ //搴斾粯
+ QueryWrapper<BipInvoice> bipInvoiceQueryWrapper1 = new QueryWrapper<>();
+ bipInvoiceQueryWrapper1.lambda()
+ .eq(BipInvoice::getRailwayEntrustId, id)
+ .eq(BipInvoice::getInvoiceType, 1)
+ .in(BipInvoice::getResStatus, 200, 910)
+ .orderByDesc(BipInvoice::getCreateTime);
+ List<BipInvoice> list2 = bipInvoiceService.list(bipInvoiceQueryWrapper1);
+ if(list2!=null && list2.size()>0){
+ BipInvoice bipInvoice = list2.get(0);
+ String bipNumber = bipInvoice.getBipNumber();
+ fileUploadService.uploadUrlToBip(id,bipNumber,file);
+ return true;
+ }else {
+ return false;
+ }
+ }
+
+ /**
+ * 绾㈠啿寮�绁ㄦ帴鍙�
+ */
+ Map<String,Object> redTicketKaiPiao(InvoicingVo vo){
+ SaleCredit saleCredit = saleCreditService.getById(vo.getSaleCreditId());
+ Gson gson =new Gson();
+ String str = gson.toJson(vo);
+ System.out.println(str);
+ String responseBody = "";
+ responseBody = HttpRequest.post(invoiceIp+kpUrl+UuidUtils.generateUuid())
+ .timeout(400000)
+ .body(str)
+ .execute()
+ .body();
+ System.out.println(responseBody);
+
+ JSONObject jsonObj = JSON.parseObject(responseBody);
+ if(jsonObj!=null){
+ boolean flag = (Boolean)jsonObj.get("success");
+ JSONObject message = jsonObj.getJSONObject("message");
+ String requestId = (String) jsonObj.get("requestId");
+ if(!flag){
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",flag);
+ res.put("message",message.get("errorMessage"));
+ InvoiceResult invoiceResult = new InvoiceResult();
+ invoiceResult.setRequestId(requestId);
+ invoiceResult.setSuccess(flag);
+ invoiceResult.setMessage((String) message.get("errorMessage"));
+ invoiceResult.setMethodName("绾㈠瓧寮�绁ㄦ帴鍙�");
+ invoiceResult.setEntrustCode(vo.getEntrustCode());
+ invoiceResultService.save(invoiceResult);
+
+ /*UpdateWrapper<RailwayEntrust> updateWrapper = new UpdateWrapper<>();
+ updateWrapper.lambda()
+ .set(RailwayEntrust::getInvoiceRemark,(String) message.get("errorMessage"))
+ .eq(RailwayEntrust::getEntrustCode,invoiceResult.getEntrustCode());
+ railwayEntrustMapper.update(null,updateWrapper);*/
+
+ saleCredit.setInvoiceRemark((String) message.get("errorMessage"));
+ saleCreditService.updateById(saleCredit);
+
+ return res;
+ }else {
+ String successMessage = (String)message.get("successMessage");
+ JSONObject model = jsonObj.getJSONObject("model");
+ JSONArray success = model.getJSONArray("success");
+ JSONObject modelObject = success.getJSONObject(0);
+ String invoiceTypeCode = (String) modelObject.get("invoiceTypeCode");
+ String invoiceNo = (String) modelObject.get("invoiceNo");
+ String invoiceDate = (String) modelObject.get("invoiceDate");
+ String invoiceQrCode = (String) modelObject.get("invoiceQrCode");
+ String serialNo = (String) modelObject.get("serialNo");
+ BigDecimal invoiceTotalPriceValue = (BigDecimal) modelObject.get("invoiceTotalPrice");
+ Double invoiceTotalPrice = Double.valueOf(invoiceTotalPriceValue.doubleValue());
+ BigDecimal invoiceTotalTaxValue = (BigDecimal) modelObject.get("invoiceTotalTax");
+ Double invoiceTotalTax = Double.valueOf(invoiceTotalTaxValue.doubleValue());
+ BigDecimal invoiceTotalPriceTaxValue = (BigDecimal) modelObject.get("invoiceTotalPriceTax");
+ Double invoiceTotalPriceTax = Double.valueOf(invoiceTotalPriceTaxValue.doubleValue());
+ String mulPurchaserMark = (String) modelObject.get("mulPurchaserMark");
+ String sellerTaxNo = (String) modelObject.get("sellerTaxNo");
+
+ InvoiceResult issueRedResult = new InvoiceResult();
+ issueRedResult.setRequestId(requestId);
+ issueRedResult.setSuccess(flag);
+ issueRedResult.setMessage(successMessage);
+ issueRedResult.setInvoiceNo(invoiceNo);
+ issueRedResult.setInvoiceTyCode(invoiceTypeCode);
+ issueRedResult.setInvoiceDate(invoiceDate);
+ issueRedResult.setInvoiceQrCode(invoiceQrCode);
+ issueRedResult.setSerialNo(serialNo);
+ issueRedResult.setMethodName("绾㈠瓧寮�绁ㄦ帴鍙�");
+ issueRedResult.setEntrustCode(vo.getEntrustCode());
+ issueRedResult.setInvoiceTotalPrice(invoiceTotalPrice);
+ issueRedResult.setInvoiceTotalTax(invoiceTotalTax);
+ issueRedResult.setInvoiceTotalPriceTax(invoiceTotalPriceTax);
+ issueRedResult.setMulPurchaserMark(mulPurchaserMark);
+ issueRedResult.setXTaxNo(sellerTaxNo);
+ invoiceResultService.save(issueRedResult);
+
+
+ JSONArray invoiceDetailList1 = modelObject.getJSONArray("invoiceDetailsList");
+ for (int i = 0; i < invoiceDetailList1.size(); i++) {
+ JSONObject jsonObject = invoiceDetailList1.getJSONObject(i);
+ int goodsLineNo = (int) jsonObject.get("goodsLineNo");
+ String goodsName = (String) jsonObject.get("goodsName");
+ String goodsCode = (String) jsonObject.get("goodsCode");
+ BigDecimal goodsPriceValue = (BigDecimal)jsonObject.get("goodsPrice");
+ Double goodsPrice = Double.valueOf(goodsPriceValue.doubleValue());
+
+ double goodsQuantity=0.0;
+ try {
+ BigDecimal goodsQuantityValue = (BigDecimal)jsonObject.get("goodsQuantity");
+ goodsQuantity = Double.valueOf(goodsQuantityValue.doubleValue());
+ }catch (Exception e){
+ e.printStackTrace();
+ int goodsQuantity1 = (int) jsonObject.get("goodsQuantity");
+ goodsQuantity = goodsQuantity1;
+ }
+
+ BigDecimal goodsTotalPriceValue = (BigDecimal)jsonObject.get("goodsTotalPrice");
+ Double goodsTotalPrice = Double.valueOf(goodsTotalPriceValue.doubleValue());
+ BigDecimal goodsTotalTaxValue = (BigDecimal)jsonObject.get("goodsTotalTax");
+ Double goodsTotalTax = Double.valueOf(goodsTotalTaxValue.doubleValue());
+ BigDecimal goodsTaxRateValue = (BigDecimal)jsonObject.get("goodsTaxRate");
+ Double goodsTaxRate = Double.valueOf(goodsTaxRateValue.doubleValue());
+ String invoiceLineNature = (String) jsonObject.get("invoiceLineNature");
+ String goodsUnit = (String) jsonObject.get("goodsUnit");
+ String goodsSpecification = (String) jsonObject.get("goodsSpecification");
+ String coalType = (String)jsonObject.get("coalType");
+ String agreementTerm = (String)jsonObject.get("agreementTerm");
+ String name = "";
+ if(goodsLineNo==1){
+ name = "鐓ゆ";
+ }
+ if(goodsLineNo==2 && goodsTaxRate==0.13){
+ name = "鍙栭�佽溅璐�";
+ }
+ if(goodsTaxRate==0.6){
+ name = "涓撶嚎璐�";
+ }
+
+ InvoiceResultItem item = new InvoiceResultItem();
+ item.setGoodsLineNature(invoiceLineNature);
+ item.setGoodsCode(goodsCode);
+ item.setGoodsPrice(goodsPrice);
+ item.setGoodsType(name);
+ if(goodsSpecification != null){
+ item.setGoodsSpecification(goodsSpecification);
+ }
+ if(coalType !=null){
+ item.setCoalType(coalType);
+ }
+ if(agreementTerm !=null){
+ item.setAgreementTerm(agreementTerm);
+ }
+ item.setGoodsLineNo(goodsLineNo);
+ item.setGoodsQuantity(goodsQuantity);
+ item.setGoodsTaxRate(goodsTaxRate);
+ item.setGoodsName(goodsName);
+ item.setGoodsTotalPrice(goodsTotalPrice);
+ item.setGoodsTotalTax(goodsTotalTax);
+ item.setGoodsUnit(goodsUnit);
+ item.setResultId(issueRedResult.getId());
+ item.setEntrustCode(issueRedResult.getEntrustCode());
+ String[] split = goodsName.split("\\*");
+ int length = split.length;
+ String coalName = split[length - 1];
+ item.setCoalName(coalName);
+ itemMapper.insert(item);
+ }
+
+ QueryWrapper<InvoiceResult> invoiceResultQueryWrapper = new QueryWrapper<>();
+ invoiceResultQueryWrapper.lambda()
+ .eq(InvoiceResult::getEntrustCode,issueRedResult.getEntrustCode())
+ .eq(InvoiceResult::getMethodName,"钃濆瓧寮�绁ㄦ帴鍙�");
+ List<InvoiceResult> list = invoiceResultService.list(invoiceResultQueryWrapper);
+ List<Long> collect = list.stream().map(item -> item.getId()).collect(Collectors.toList());
+ removeByIds(collect);
+
+ /*UpdateWrapper<RailwayEntrust> updateWrapper = new UpdateWrapper<>();
+ updateWrapper.lambda().set(RailwayEntrust::getInvoiceResult,null)
+ .set(RailwayEntrust::getInvoiceResultId,null)
+ .set(RailwayEntrust::getInvoiceRemark,"绾㈠瓧寮�绁ㄦ垚鍔�")
+ .set(RailwayEntrust::getInvoiceRedResult,2)
+ .set(RailwayEntrust::getInvoicUrl,null)
+ .set(RailwayEntrust::getInvoiceRedResultId,issueRedResult.getId())
+ .eq(RailwayEntrust::getEntrustCode,issueRedResult.getEntrustCode());
+ railwayEntrustMapper.update(null,updateWrapper);*/
+
+ saleCredit.setInvoiceRemark("绾㈠瓧寮�绁ㄦ垚鍔�");
+ saleCredit.setRedInvoiceResultId(issueRedResult.getId());
+ saleCredit.setStatus(7);
+ saleCreditService.updateById(saleCredit);
+
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",flag);
+ res.put("message",successMessage);
+ return res;
+ }
+ }else {
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",false);
+ res.put("message","绾㈠瓧寮�绁ㄦ帴鍙e紓甯�");
+ InvoiceResult invoiceResult = new InvoiceResult();
+ invoiceResult.setSuccess(false);
+ invoiceResult.setMessage("绾㈠瓧寮�绁ㄦ帴鍙e紓甯�");
+ invoiceResult.setMethodName("绾㈠瓧寮�绁ㄦ帴鍙�");
+ invoiceResult.setEntrustCode(vo.getEntrustCode());
+ invoiceResultService.save(invoiceResult);
+
+ /* QueryWrapper<RailwayEntrust> wrapper = new QueryWrapper<>();
+ wrapper.lambda().eq(RailwayEntrust::getEntrustCode,invoiceResult.getEntrustCode());
+ RailwayEntrust railwayEntrust = railwayEntrustMapper.selectList(wrapper).get(0);
+ railwayEntrust.setInvoiceRemark("绾㈠瓧寮�绁ㄦ帴鍙e紓甯�");
+ railwayEntrustMapper.updateById(railwayEntrust);*/
+
+ saleCredit.setInvoiceRemark("绾㈠瓧寮�绁ㄦ帴鍙e紓甯�");
+ saleCredit.setStatus(6);
+ saleCreditService.updateById(saleCredit);
+
+
+ return res;
+ }
+
+ }
+
+ /**
+ * 鏁扮數绾㈠瓧纭鍗曟柊澧炴帴鍙�
+ */
+ Map<String,Object> redTicketConfirm(InvoiceResult invoiceResult,SaleCredit saleCredit){
+ String format = strToFormat(invoiceResult.getInvoiceDate());
+ List<InvoiceResultItem> resultItems = itemMapper.selectList(new LambdaQueryWrapper<InvoiceResultItem>()
+ .eq(InvoiceResultItem::getResultId,invoiceResult.getId())
+ );
+
+ if(saleCredit!=null) {
+ RedConfirmVo confirmVo = new RedConfirmVo();
+ confirmVo.setTaxNo(saleCredit.getCreditCodeB());
+ confirmVo.setOrgCode(saleCredit.getCreditCodeB());
+ confirmVo.setTaxUserName(saleCredit.getContactPhoneB());
+ confirmVo.setRedConfirmSerialNo("MX_RPP_"+System.currentTimeMillis());
+ confirmVo.setEntryIdentity("01");
+ confirmVo.setSellerTaxNo(saleCredit.getCreditCodeB());
+ confirmVo.setSellerTaxName(saleCredit.getPartyB());
+ confirmVo.setBuyerTaxName(saleCredit.getPartyA());
+ confirmVo.setBuyerTaxNo(saleCredit.getCreditCodeA());
+ confirmVo.setOriginInvoiceIsPaper("N");
+ confirmVo.setInvoiceSource("2");
+ confirmVo.setOriginalInvoiceNo(invoiceResult.getInvoiceNo());
+ confirmVo.setOriginInvoiceDate(format);
+ confirmVo.setOriginInvoiceTotalPrice(invoiceResult.getInvoiceTotalPrice());
+ confirmVo.setOriginInvoiceTotalTax(invoiceResult.getInvoiceTotalTax());
+ confirmVo.setOriginInvoiceType("01");
+ confirmVo.setInvoiceTotalPrice(invoiceResult.getInvoiceTotalPrice()*-1);
+ confirmVo.setInvoiceTotalTax(invoiceResult.getInvoiceTotalTax()*-1);
+ confirmVo.setRedInvoiceLabel("02");
+ confirmVo.setAutoIssueSwitch("N");
+
+ List<RedConfirmVo.RedConfirmDetail> detailList = new ArrayList<>();
+ for (InvoiceResultItem resultItem : resultItems) {
+ RedConfirmVo.RedConfirmDetail detail = new RedConfirmVo.RedConfirmDetail();
+ detail.setOriginalInvoiceDetailNo(resultItem.getGoodsLineNo());
+ detail.setGoodsLineNo(resultItem.getGoodsLineNo());
+ detail.setGoodsCode(resultItem.getGoodsCode());
+ detail.setGoodsTaxRate(resultItem.getGoodsTaxRate());
+ detail.setGoodsName(resultItem.getCoalName());
+ detail.setProjectName(resultItem.getCoalName());
+ detail.setGoodsPrice(resultItem.getGoodsPrice()+"");
+ detail.setGoodsSpecification(resultItem.getGoodsSpecification());
+ detail.setGoodsUnit(resultItem.getGoodsUnit());
+ detail.setGoodsQuantity(resultItem.getGoodsQuantity()*-1+"");
+ detail.setGoodsTotalPrice(resultItem.getGoodsTotalPrice()*-1);
+ detail.setGoodsTotalTax(resultItem.getGoodsTotalTax()*-1);
+ detail.setCoalType(resultItem.getCoalType());
+ detail.setAgreementTerm(resultItem.getAgreementTerm());
+ detailList.add(detail);
+ }
+ confirmVo.setRedConfirmDetailReqEntityList(detailList);
+ Gson gson =new Gson();
+ String str = gson.toJson(confirmVo);
+ System.out.println(str);
+ String responseBody = "";
+ responseBody = HttpRequest.post(invoiceIp+redConfirmUrl+ UuidUtils.generateUuid())
+ .timeout(400000)
+ .body(str)
+ .execute()
+ .body();
+ System.out.println(responseBody);
+ JSONObject jsonObj = JSON.parseObject(responseBody);
+ if(jsonObj!=null) {
+ boolean flag = (Boolean) jsonObj.get("success");
+ JSONObject message = jsonObj.getJSONObject("message");
+ String requestId = (String) jsonObj.get("requestId");
+ if (!flag) {
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",flag);
+ res.put("message",message.get("errorMessage"));
+ InvoiceResult result = new InvoiceResult();
+ result.setRequestId(requestId);
+ result.setSuccess(flag);
+ result.setMessage((String) message.get("errorMessage"));
+ result.setMethodName("绾㈠瓧纭鍗曟柊澧炴帴鍙�");
+ result.setEntrustCode(saleCredit.getEntrustCode());
+ invoiceResultService.save(result);
+
+ saleCredit.setInvoiceRemark((String) message.get("errorMessage"));
+ saleCreditService.updateById(saleCredit);
+ return res;
+ } else {
+ String successMessage = (String) message.get("successMessage");
+ JSONArray modelarr = jsonObj.getJSONArray("model");
+ JSONObject model = modelarr.getJSONObject(0);
+
+ String redConfirmSerialNo = (String)model.get("redConfirmSerialNo");
+ String redConfirmNo = (String)model.get("redConfirmNo");
+ String redConfirmUuid = (String)model.get("redConfirmUuid");
+ String confirmState = (String)model.get("confirmState");
+ String confirmBillingMark = (String)model.get("confirmBillingMark");
+
+ InvoiceResult result = new InvoiceResult();
+ result.setXTaxNo(invoiceResult.getXTaxNo());
+ result.setRequestId(requestId);
+ result.setSuccess(flag);
+ result.setMessage(successMessage);
+ result.setSerialNo(redConfirmSerialNo);
+ result.setInvoiceNo(redConfirmNo);
+ result.setRedConfirmUuid(redConfirmUuid);
+ result.setConfirmState(confirmState);
+ result.setConfirmBillingMark(confirmBillingMark);
+ result.setMethodName("绾㈠瓧纭鍗曟柊澧炴帴鍙�");
+ result.setOriginalInvoiceNo(invoiceResult.getInvoiceNo());
+ result.setEntrustCode(invoiceResult.getEntrustCode());
+ invoiceResultService.save(result);
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",flag);
+ res.put("message",successMessage);
+ res.put("obj",result);
+ return res;
+ }
+ }else {
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",false);
+ res.put("message","寮�绁ㄦ帴鍙e紓甯�");
+
+ InvoiceResult result = new InvoiceResult();
+ result.setSuccess(false);
+ result.setMessage("绾㈠瓧纭鍗曟柊澧炴帴鍙e紓甯�");
+ result.setMethodName("绾㈠瓧纭鍗曟柊澧炴帴鍙�");
+ result.setEntrustCode(saleCredit.getEntrustCode());
+ invoiceResultService.save(result);
+
+ saleCredit.setInvoiceRemark("绾㈠瓧纭鍗曟柊澧炴帴鍙e紓甯�");
+ saleCreditService.updateById(saleCredit);
+ return res;
+ }
+ }else {
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",false);
+ res.put("message","绾㈠瓧纭鍗曟柊澧炴帴鍙e紓甯�");
+ InvoiceResult result = new InvoiceResult();
+ result.setSuccess(false);
+ result.setMessage("绾㈠瓧纭鍗曟柊澧炴帴鍙e紓甯�");
+ result.setMethodName("绾㈠瓧纭鍗曟柊澧炴帴鍙�");
+ result.setEntrustCode(saleCredit.getEntrustCode());
+ invoiceResultService.save(result);
+
+ saleCredit.setInvoiceRemark("绾㈠瓧纭鍗曟柊澧炴帴鍙e紓甯�");
+ saleCreditService.updateById(saleCredit);
+ return res;
+ }
+ }
+
+ /**
+ * 鏁扮數绾㈠瓧纭鍗曟煡璇㈡帴鍙�
+ */
+ Map<String,Object> redTicketConfirmSearch(InvoiceResult invoiceResult,SaleCredit saleCredit){
+ /* QueryWrapper<RailwayEntrust> wrapper = new QueryWrapper<>();
+ wrapper.lambda().eq(RailwayEntrust::getEntrustCode,invoiceResult.getEntrustCode());
+ RailwayEntrust railwayEntrust = railwayEntrustMapper.selectList(wrapper).get(0);*/
+
+
+ Map<String,Object> map = new HashMap<>();
+ map.put("taxNo",invoiceResult.getXTaxNo());
+ //map.put("taxUserName",dwuser);
+ map.put("sellerTaxNo",invoiceResult.getXTaxNo());
+ map.put("redConfirmUuid",invoiceResult.getRedConfirmUuid());
+ Gson gson =new Gson();
+ String str = gson.toJson(map);
+ System.out.println(str);
+ String responseBody = "";
+ responseBody = HttpRequest.post(invoiceIp+redConfirmSearchUrl+UuidUtils.generateUuid())
+ .timeout(400000)
+ .body(str)
+ .execute()
+ .body();
+ System.out.println(responseBody);
+
+ JSONObject jsonObj = JSON.parseObject(responseBody);
+ if(jsonObj!=null) {
+ boolean flag = (Boolean) jsonObj.get("success");
+ JSONObject message = jsonObj.getJSONObject("message");
+ String requestId = (String) jsonObj.get("requestId");
+ if (!flag) {
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",false);
+ res.put("message","绾㈠瓧纭鍗曠‘璁ゆ帴鍙e紓甯�");
+ InvoiceResult result = new InvoiceResult();
+ result.setSuccess(false);
+ result.setRequestId(requestId);
+ result.setMessage("绾㈠瓧纭鍗曠‘璁ゆ帴鍙e紓甯�");
+ result.setMethodName("绾㈠瓧纭鍗曠‘璁ゆ帴鍙�");
+ result.setEntrustCode(invoiceResult.getEntrustCode());
+ invoiceResultService.save(result);
+
+ saleCredit.setInvoiceRemark("绾㈠瓧纭鍗曠‘璁ゆ帴鍙e紓甯�");
+ saleCreditService.updateById(saleCredit);
+ return res;
+ } else {
+
+
+ String successMessage = (String) message.get("successMessage");
+ JSONArray modelarr = jsonObj.getJSONArray("model");
+ JSONObject model = modelarr.getJSONObject(0);
+
+ String redConfirmSerialNo = (String)model.get("redConfirmSerialNo");
+ String redConfirmNo = (String)model.get("redConfirmNo");
+ String redConfirmUuid = (String)model.get("redConfirmUuid");
+ String confirmState = (String)model.get("confirmState");
+ String confirmBillingMark = (String)model.get("confirmBillingMark");
+ String entryIdentity = (String)model.get("entryIdentity");
+ String sellerTaxNo = (String)model.get("sellerTaxNo");
+ String sellerName = (String)model.get("sellerName");
+ String buyerTaxNo = (String)model.get("buyerTaxNo");
+ String buyerName = (String)model.get("buyerName");
+ String originalInvoiceNo = (String)model.get("originalInvoiceNo");
+ String originInvoiceIsPaper = (String)model.get("originInvoiceIsPaper");
+ String originInvoiceDate = (String)model.get("originInvoiceDate");
+ String originInvoiceType = (String)model.get("originInvoiceType");
+ String redInvoiceLabel = (String)model.get("redInvoiceLabel");
+ String alreadyRedInvoiceFlag = (String)model.get("alreadyRedInvoiceFlag");
+ String redInvoiceNo = (String)model.get("redInvoiceNo");
+ String redInvoiceDate = (String)model.get("redInvoiceDate");
+ String entryDate = (String)model.get("entryDate");
+ String validFlag = (String)model.get("validFlag");
+ String invoiceSource = (String)model.get("invoiceSource");
+ String tenantCode = (String)model.get("tenantCode");
+ String orgCode = (String)model.get("orgCode");
+ String buySelSelector = (String)model.get("buySelSelector");
+ String autoIssueSwitch = (String)model.get("autoIssueSwitch");
+ String priceTaxMark = (String)model.get("priceTaxMark");
+ BigDecimal originInvoiceTotalPriceValue = (BigDecimal) model.get("originInvoiceTotalPrice");
+ Double originInvoiceTotalPrice = Double.valueOf(originInvoiceTotalPriceValue.doubleValue());
+ BigDecimal originInvoiceTotalTaxValue = (BigDecimal) model.get("originInvoiceTotalTax");
+ Double originInvoiceTotalTax = Double.valueOf(originInvoiceTotalTaxValue.doubleValue());
+ BigDecimal invoiceTotalPriceValue = (BigDecimal) model.get("invoiceTotalPrice");
+ Double invoiceTotalPrice = Double.valueOf(invoiceTotalPriceValue.doubleValue());
+ BigDecimal invoiceTotalTaxValue = (BigDecimal) model.get("invoiceTotalTax");
+ Double invoiceTotalTax = Double.valueOf(invoiceTotalTaxValue.doubleValue());
+
+ InvoiceResult result = new InvoiceResult();
+ result.setRequestId(requestId);
+ result.setMessage(successMessage);
+ result.setSerialNo(redConfirmSerialNo);
+ result.setInvoiceNo(redConfirmNo);
+ result.setSuccess(flag);
+ result.setInvoiceNo(invoiceResult.getInvoiceNo());
+ result.setEntrustCode(invoiceResult.getEntrustCode());
+ result.setXTaxNo(sellerTaxNo);
+ result.setXOrgCode(orgCode);
+ result.setXName(sellerName);
+ result.setGName(buyerName);
+ result.setGTaxNo(buyerTaxNo);
+ result.setEntryDate(entryDate);
+ result.setEntryIdentity(entryIdentity);
+ result.setAlreadyRedInvoiceFlag(alreadyRedInvoiceFlag);
+ result.setOriginInvoiceType(originInvoiceType);
+ result.setOriginalInvoiceDate(originInvoiceDate);
+ result.setOriginInvoiceIsPaper(originInvoiceIsPaper);
+ result.setOriginalInvoiceNo(originalInvoiceNo);
+ result.setRedInvoiceNo(redInvoiceNo);
+ result.setRedInvoiceDate(redInvoiceDate);
+ result.setValidFlag(validFlag);
+ result.setRedInvoiceLabel(redInvoiceLabel);
+ result.setRedConfirmUuid(redConfirmUuid);
+ result.setConfirmState(confirmState);
+ result.setConfirmBillingMark(confirmBillingMark);
+ result.setMethodName("绾㈠瓧纭鍗曠‘璁ゆ帴鍙�");
+ result.setInvoiceTotalPrice(invoiceTotalPrice);
+ result.setInvoiceTotalTax(invoiceTotalTax);
+ result.setOriginInvoiceTotalPrice(originInvoiceTotalPrice);
+ result.setOriginInvoiceTotalTax(originInvoiceTotalTax);
+ invoiceResultService.save(result);
+
+
+ JSONArray invoiceDetailList1 = model.getJSONArray("electricInvoiceDetails");
+ for (int i = 0; i < invoiceDetailList1.size(); i++) {
+ JSONObject jsonObject = invoiceDetailList1.getJSONObject(i);
+ int goodsLineNo = (int) jsonObject.get("goodsLineNo");
+ int originalInvoiceDetailNo = (int) jsonObject.get("originalInvoiceDetailNo");
+ String goodsName = (String) jsonObject.get("goodsName");
+ String goodsCode = (String) jsonObject.get("goodsCode");
+ BigDecimal goodsPriceValue = (BigDecimal)jsonObject.get("goodsPrice");
+ Double goodsPrice = Double.valueOf(goodsPriceValue.doubleValue());
+ double goodsQuantity=0.0;
+ try {
+ BigDecimal goodsQuantityValue = (BigDecimal)jsonObject.get("goodsQuantity");
+ goodsQuantity = Double.valueOf(goodsQuantityValue.doubleValue());
+ }catch (Exception e){
+ e.printStackTrace();
+ int goodsQuantity1 = (int) jsonObject.get("goodsQuantity");
+ goodsQuantity = goodsQuantity1;
+ }
+
+ BigDecimal goodsTotalPriceValue = (BigDecimal)jsonObject.get("goodsTotalPrice");
+ Double goodsTotalPrice = Double.valueOf(goodsTotalPriceValue.doubleValue());
+ BigDecimal goodsTotalTaxValue = (BigDecimal)jsonObject.get("goodsTotalTax");
+ Double goodsTotalTax = Double.valueOf(goodsTotalTaxValue.doubleValue());
+ BigDecimal goodsTaxRateValue = (BigDecimal)jsonObject.get("goodsTaxRate");
+ Double goodsTaxRate = Double.valueOf(goodsTaxRateValue.doubleValue());
+ String invoiceLineNature = (String) jsonObject.get("invoiceLineNature");
+ String goodsUnit = (String) jsonObject.get("goodsUnit");
+ String goodsSpecification = (String) jsonObject.get("goodsSpecification");
+ String coalType = (String)jsonObject.get("coalType");
+ String agreementTerm = (String)jsonObject.get("agreementTerm");
+ String name = "";
+ if(goodsLineNo==1){
+ name = "鐓ゆ";
+ }
+ if(goodsLineNo==2){
+ name = "鍙栭�佽溅璐�";
+ }
+ if(goodsLineNo==3){
+ name = "涓撶嚎璐�";
+ }
+
+ InvoiceResultItem item = new InvoiceResultItem();
+ item.setGoodsLineNature(invoiceLineNature);
+ item.setOriginalInvoiceDetailNo(originalInvoiceDetailNo);
+ item.setGoodsCode(goodsCode);
+ item.setGoodsPrice(goodsPrice);
+ item.setGoodsType(name);
+ if(goodsSpecification !=null){
+ item.setGoodsSpecification(goodsSpecification);
+ }
+ item.setGoodsLineNo(goodsLineNo);
+ item.setGoodsQuantity(goodsQuantity);
+ item.setGoodsTaxRate(goodsTaxRate);
+ item.setGoodsName(goodsName);
+ item.setGoodsTotalPrice(goodsTotalPrice);
+ item.setGoodsTotalTax(goodsTotalTax);
+ item.setGoodsUnit(goodsUnit);
+ item.setResultId(result.getId());
+ item.setEntrustCode(result.getEntrustCode());
+ if(coalType !=null){
+ item.setCoalType(coalType);
+ }
+ if(agreementTerm !=null){
+ item.setAgreementTerm(agreementTerm);
+ }
+ String[] split = goodsName.split("\\*");
+ int length = split.length;
+ String coalName = split[length - 1];
+ item.setCoalName(coalName);
+ itemMapper.insert(item);
+ }
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",flag);
+ res.put("message",successMessage);
+ res.put("obj",result);
+ saleCredit.setInvoiceRemark("绾㈠瓧纭鍗曠‘璁ゆ帴鍙f垚鍔�");
+ saleCredit.setRedInvoiceResultId(result.getId());
+ saleCreditService.updateById(saleCredit);
+ return res;
+ }
+ }else {
+ Map<String,Object> res = new HashMap<>();
+ res.put("success",false);
+ res.put("message","绾㈠瓧纭鍗曠‘璁ゆ帴鍙e紓甯�");
+ InvoiceResult result = new InvoiceResult();
+ result.setSuccess(false);
+ result.setMessage("绾㈠瓧纭鍗曠‘璁ゆ帴鍙e紓甯�");
+ result.setMethodName("绾㈠瓧纭鍗曠‘璁ゆ帴鍙�");
+ result.setEntrustCode(invoiceResult.getEntrustCode());
+ invoiceResultService.save(result);
+
+ saleCredit.setInvoiceRemark("绾㈠瓧纭鍗曠‘璁ゆ帴鍙e紓甯�");
+ saleCreditService.updateById(saleCredit);
+ return res;
+ }
+
+ }
+
+ /**
+ * 绾㈠瓧纭鍗昮orm
+ * @param result
+ * @return
+ */
+ InvoicingVo redKaiPiaoVo(InvoiceResult result){
+ SaleCredit saleCredit = saleCreditService.getById(result.getSaleCreditId());
+ InvoiceResult blueResult = null;
+ InvoiceResult redResult = null;
+ QueryWrapper<InvoiceResult> invoiceResultQueryWrapper = new QueryWrapper<>();
+ invoiceResultQueryWrapper.lambda()
+ .eq(InvoiceResult::getEntrustCode,result.getEntrustCode())
+ .eq(InvoiceResult::getMethodName,"钃濆瓧寮�绁ㄦ帴鍙�")
+ .eq(InvoiceResult::getSuccess,1)
+ .orderByDesc(InvoiceResult::getCreateTime);
+ List<InvoiceResult> InvoiceResultList = invoiceResultService.list(invoiceResultQueryWrapper);
+ if(InvoiceResultList!=null&&InvoiceResultList.size()>0){
+ blueResult = InvoiceResultList.get(0);
+ redResult = result;
+ }else {
+ return null;
+ }
+
+
+ InvoicingVo invoicingVo = new InvoicingVo();
+
+ QueryWrapper<InvoiceResultItem> itemQueryWrapper = new QueryWrapper<>();
+ itemQueryWrapper.lambda()
+ .eq(InvoiceResultItem::getResultId,blueResult.getId());
+ List<InvoiceResultItem> resultItems = itemMapper.selectList(itemQueryWrapper);
+
+ if(saleCredit!=null) {
+
+ invoicingVo.setTaxNo(saleCredit.getCreditCodeB());
+ invoicingVo.setEntrustCode(blueResult.getEntrustCode());
+ 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.setInvoiceType("1");
+ invoicingVoInfo.setSerialNo("MX_REDPP_" + System.currentTimeMillis());
+ invoicingVoInfo.setRedInfoNo(redResult.getInvoiceNo());
+ invoicingVoInfo.setRedIssueReason("1");
+ invoicingVoInfo.setRedConfirmUuid(redResult.getRedConfirmUuid());
+ invoicingVoInfo.setDrawer(saleCredit.getContactPhoneB());
+
+ Map<String, Object> ext1 = new HashMap<>();
+ ext1.put("htbh",saleCredit.getContractNo());
+ invoicingVoInfo.setExt(ext1);
+
+ invoicingVoInfo.setSystemName("**閿�鍞鐞嗕俊鎭郴缁�");
+
+ List<InvoicingVo.InvoiceDetail> details = new ArrayList<>();
+ for (InvoiceResultItem resultItem : resultItems) {
+ InvoicingVo.InvoiceDetail invoiceDetail = new InvoicingVo.InvoiceDetail();
+ invoiceDetail.setGoodsLineNo(resultItem.getGoodsLineNo());
+ invoiceDetail.setCoalType(resultItem.getCoalType());
+ invoiceDetail.setAgreementTerm(resultItem.getAgreementTerm());
+ invoiceDetail.setOriginalInvoiceDetailNo(resultItem.getGoodsLineNo()+"");
+ invoiceDetail.setGoodsTaxRate(resultItem.getGoodsTaxRate());
+ invoiceDetail.setGoodsUnit(resultItem.getGoodsUnit());
+ invoiceDetail.setGoodsName(resultItem.getCoalName());
+ invoiceDetail.setGoodsCode(resultItem.getGoodsCode());
+ invoiceDetail.setGoodsType(resultItem.getGoodsType());
+ invoiceDetail.setGoodsSpecification(resultItem.getGoodsSpecification());
+ invoiceDetail.setGoodsQuantity(new BigDecimal(resultItem.getGoodsQuantity()*-1).setScale(3,BigDecimal.ROUND_HALF_UP));
+ invoiceDetail.setGoodsPrice(new BigDecimal(resultItem.getGoodsPrice()).setScale(8,BigDecimal.ROUND_HALF_UP));
+ invoiceDetail.setGoodsTotalPrice(new BigDecimal(resultItem.getGoodsTotalPrice()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ invoiceDetail.setGoodsTotalTax(new BigDecimal(resultItem.getGoodsTotalTax()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ details.add(invoiceDetail);
+ }
+
+ invoicingVoInfo.setBuyerTaxNo(saleCredit.getCreditCodeA());
+ invoicingVoInfo.setBuyerName(saleCredit.getPartyA());
+ invoicingVoInfo.setInvoiceTotalPrice(new BigDecimal(blueResult.getInvoiceTotalPrice()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ invoicingVoInfo.setInvoiceTotalTax(new BigDecimal(blueResult.getInvoiceTotalTax()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ invoicingVoInfo.setInvoiceTotalPriceTax(new BigDecimal(blueResult.getInvoiceTotalPriceTax()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
+ invoicingVoInfo.setBuyerBankName(saleCredit.getBankNameA());
+ invoicingVoInfo.setBuyerBankNumber(saleCredit.getBankAccountA());
+ //invoicingVoInfo.setBuyerAddress(invoiceCustomer.getBuyerAddress());
+ invoicingVoInfo.setBuyerTelphone(saleCredit.getContactPhoneA());
+ invoicingVoInfo.setInvoiceDetailsList(details);
+ /*if(invoicingVoInfo.getInvoiceTotalPriceTax().compareTo(new BigDecimal(10000000))>=0){
+ invoicingVoInfo.setCoalCalorificValue(blueResult.getCoalCalorificValue());
+ invoicingVoInfo.setDryAshFreeVolatileMatter(blueResult.getDryAshFreeVolatileMatter());
+ invoicingVoInfo.setTotalSulfurOnDryBasis(blueResult.getTotalSulfurOnDryBasis());
+ }*/
+ invoicingVo.setData(invoicingVoInfo);
+ return invoicingVo;
+ }else {
+ return null;
+ }
+ }
+
+ /**
+ * 鏃堕棿鏍煎紡鍖栧伐鍏�
+ * @param s
+ * @return
+ */
+ String strToFormat(String s){
+ String year = s.substring(0, 4);
+ String month = s.substring(4, 6);
+ String day = s.substring(6, 8);
+ String hour = s.substring(8, 10);
+ String minute = s.substring(10, 12);
+ String second = s.substring(12);
+ String date = year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second;
+ System.out.println(date);
+ return date;
+ }
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/BipInvoiceMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/BipInvoiceMapper.xml
new file mode 100644
index 0000000..0328760
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/resources/mapper/BipInvoiceMapper.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~
+ ~ Copyright (c) 2018-2025, platform All rights reserved.
+ ~
+ ~ Redistribution and use in source and binary forms, with or without
+ ~ modification, are permitted provided that the following conditions are met:
+ ~
+ ~ Redistributions of source code must retain the above copyright notice,
+ ~ this list of conditions and the following disclaimer.
+ ~ Redistributions in binary form must reproduce the above copyright
+ ~ notice, this list of conditions and the following disclaimer in the
+ ~ documentation and/or other materials provided with the distribution.
+ ~ Neither the name of the pig4cloud.com developer nor the names of its
+ ~ contributors may be used to endorse or promote products derived from
+ ~ this software without specific prior written permission.
+ ~ Author: platform
+ ~
+ -->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.by4cloud.platformx.business.invoice.mapper.BipInvoiceMapper">
+
+ <resultMap id="bipInvoiceMap" type="com.by4cloud.platformx.business.entity.invoice.BipInvoice">
+ <id property="id" column="id"/>
+ <result property="compId" column="comp_id"/>
+ <result property="createBy" column="create_by"/>
+ <result property="createTime" column="create_time"/>
+ <result property="delFlag" column="del_flag"/>
+ <result property="updateBy" column="update_by"/>
+ <result property="updateTime" column="update_time"/>
+ <result property="bipNumber" column="bip_number"/>
+ <result property="day" column="day"/>
+ <result property="invoice" column="invoice"/>
+ <result property="returnInvoice" column="return_invoice"/>
+ </resultMap>
+</mapper>
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/FileBipMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/FileBipMapper.xml
new file mode 100644
index 0000000..1d668a2
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/resources/mapper/FileBipMapper.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~
+ ~ Copyright (c) 2018-2025, platform All rights reserved.
+ ~
+ ~ Redistribution and use in source and binary forms, with or without
+ ~ modification, are permitted provided that the following conditions are met:
+ ~
+ ~ Redistributions of source code must retain the above copyright notice,
+ ~ this list of conditions and the following disclaimer.
+ ~ Redistributions in binary form must reproduce the above copyright
+ ~ notice, this list of conditions and the following disclaimer in the
+ ~ documentation and/or other materials provided with the distribution.
+ ~ Neither the name of the pig4cloud.com developer nor the names of its
+ ~ contributors may be used to endorse or promote products derived from
+ ~ this software without specific prior written permission.
+ ~ Author: platform
+ ~
+ -->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.by4cloud.platformx.business.invoice.mapper.FileBipMapper">
+
+ <resultMap id="fileBipMap" type="com.by4cloud.platformx.business.entity.invoice.FileBip">
+ <id property="id" column="id"/>
+ <result property="compId" column="comp_id"/>
+ <result property="createBy" column="create_by"/>
+ <result property="createTime" column="create_time"/>
+ <result property="delFlag" column="del_flag"/>
+ <result property="updateBy" column="update_by"/>
+ <result property="updateTime" column="update_time"/>
+ <result property="fileId" column="file_id"/>
+ <result property="copy" column="copy"/>
+ <result property="fileBipId" column="file_bip_id"/>
+ <result property="filectime" column="filectime"/>
+ <result property="fileExtension" column="file_extension"/>
+ <result property="fileName" column="file_name"/>
+ <result property="filePath" column="file_path"/>
+ <result property="fileSize" column="file_size"/>
+ <result property="fileSizeText" column="file_size_text"/>
+ <result property="fileutime" column="fileutime"/>
+ <result property="name" column="name"/>
+ <result property="railwayEntrustId" column="railway_entrust_id"/>
+ <result property="sign" column="sign"/>
+ <result property="tenantId" column="tenant_id"/>
+ <result property="yhtUserId" column="yht_user_id"/>
+ </resultMap>
+</mapper>
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultItemMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultItemMapper.xml
new file mode 100644
index 0000000..46c2376
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultItemMapper.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~
+ ~ Copyright (c) 2018-2025, platform All rights reserved.
+ ~
+ ~ Redistribution and use in source and binary forms, with or without
+ ~ modification, are permitted provided that the following conditions are met:
+ ~
+ ~ Redistributions of source code must retain the above copyright notice,
+ ~ this list of conditions and the following disclaimer.
+ ~ Redistributions in binary form must reproduce the above copyright
+ ~ notice, this list of conditions and the following disclaimer in the
+ ~ documentation and/or other materials provided with the distribution.
+ ~ Neither the name of the pig4cloud.com developer nor the names of its
+ ~ contributors may be used to endorse or promote products derived from
+ ~ this software without specific prior written permission.
+ ~ Author: platform
+ ~
+ -->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.by4cloud.platformx.business.invoice.mapper.FpInvoiceResultItemMapper">
+
+ <resultMap id="fpInvoiceResultItemMap" type="com.by4cloud.platformx.business.entity.invoice.InvoiceResultItem">
+ <id property="id" column="id"/>
+ <result property="compId" column="comp_id"/>
+ <result property="createBy" column="create_by"/>
+ <result property="createTime" column="create_time"/>
+ <result property="delFlag" column="del_flag"/>
+ <result property="updateBy" column="update_by"/>
+ <result property="updateTime" column="update_time"/>
+ <result property="goodsCode" column="goods_code"/>
+ <result property="goodsLineNature" column="goods_line_nature"/>
+ <result property="goodsLineNo" column="goods_line_no"/>
+ <result property="goodsName" column="goods_name"/>
+ <result property="goodsPrice" column="goods_price"/>
+ <result property="goodsQuantity" column="goods_quantity"/>
+ <result property="goodsSimpleName" column="goods_simple_name"/>
+ <result property="goodsTaxRate" column="goods_tax_rate"/>
+ <result property="goodsTotalPrice" column="goods_total_price"/>
+ <result property="goodsTotalTax" column="goods_total_tax"/>
+ <result property="goodsUnit" column="goods_unit"/>
+ <result property="originalInvoiceDetailNo" column="original_invoice_detail_no"/>
+ <result property="priceTaxMark" column="price_tax_mark"/>
+ <result property="projectName" column="project_name"/>
+ <result property="resultId" column="result_id"/>
+ </resultMap>
+</mapper>
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultMapper.xml
new file mode 100644
index 0000000..d2145d5
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultMapper.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~
+ ~ Copyright (c) 2018-2025, platform All rights reserved.
+ ~
+ ~ Redistribution and use in source and binary forms, with or without
+ ~ modification, are permitted provided that the following conditions are met:
+ ~
+ ~ Redistributions of source code must retain the above copyright notice,
+ ~ this list of conditions and the following disclaimer.
+ ~ Redistributions in binary form must reproduce the above copyright
+ ~ notice, this list of conditions and the following disclaimer in the
+ ~ documentation and/or other materials provided with the distribution.
+ ~ Neither the name of the pig4cloud.com developer nor the names of its
+ ~ contributors may be used to endorse or promote products derived from
+ ~ this software without specific prior written permission.
+ ~ Author: platform
+ ~
+ -->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.by4cloud.platformx.business.invoice.mapper.FpInvoiceResultMapper">
+
+ <resultMap id="fpInvoiceResultMap" type="com.by4cloud.platformx.business.entity.invoice.InvoiceResult">
+ <id property="id" column="id"/>
+ <result property="compId" column="comp_id"/>
+ <result property="createBy" column="create_by"/>
+ <result property="createTime" column="create_time"/>
+ <result property="delFlag" column="del_flag"/>
+ <result property="updateBy" column="update_by"/>
+ <result property="updateTime" column="update_time"/>
+ <result property="eInvoiceUrl" column="e_invoice_url"/>
+ <result property="invoiceCheckCode" column="invoice_check_code"/>
+ <result property="invoiceNo" column="invoice_no"/>
+ <result property="invoiceQrCode" column="invoice_qr_code"/>
+ <result property="invoiceTotalPrice" column="invoice_total_price"/>
+ <result property="invoiceTotalPriceTax" column="invoice_total_price_tax"/>
+ <result property="invoiceTotalTax" column="invoice_total_tax"/>
+ <result property="methodName" column="method_name"/>
+ <result property="requestId" column="request_id"/>
+ <result property="result" column="result"/>
+ <result property="serialNo" column="serial_no"/>
+ <result property="taxControlCode" column="tax_control_code"/>
+ </resultMap>
+</mapper>
--
Gitblit v1.9.1