From d1f4be00fc8ab2faf990aa0446156b305fc25586 Mon Sep 17 00:00:00 2001
From: 李白 <7387820+wjli_13439841639@user.noreply.gitee.com>
Date: 星期五, 05 六月 2026 08:14:28 +0800
Subject: [PATCH] 新增开票记录和开票项记录
---
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoicePreviewVo.java | 11
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/InvoiceServiceImpl.java | 514 +++++++++++++++
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BIPYsServiceImpl.java | 301 +++++++++
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingItem.java | 106 +++
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BIPYsService.java | 3
platformx-business-finance-biz/src/main/resources/mapper/BillingItemMapper.xml | 34 +
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingInfoController.java | 317 +++++++++
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundVo.java | 7
platformx-business-finance-biz/src/main/resources/mapper/BillingInfoMapper.xml | 50 +
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BillingItemServiceImpl.java | 16
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingInfoMapper.java | 11
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingItemController.java | 119 +++
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingInfo.java | 191 +++++
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingItemMapper.java | 11
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingItemService.java | 8
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BillingInfoServiceImpl.java | 235 +++++++
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingInfoService.java | 11
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/InvoiceService.java | 6
18 files changed, 1,951 insertions(+), 0 deletions(-)
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingInfo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingInfo.java
new file mode 100644
index 0000000..2ea6581
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingInfo.java
@@ -0,0 +1,191 @@
+package com.by4cloud.platformx.business.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Transient;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author lwj
+ * @version 1.0.0
+ * @ClassName BillingInfo.java
+ * @Description TODO
+ * @createTime
+ */
+@Data
+@Entity
+@org.hibernate.annotations.Table(appliesTo="billing_info",comment = "寮�绁ㄤ俊鎭〃")//缁欒〃鍔犳敞閲�
+@jakarta.persistence.Table(name = "billing_info")//寮�鍏峰彂绁ㄨ繑鍥炲��
+@Comment("寮�绁ㄤ俊鎭〃")
+public class BillingInfo extends BaseModel<BillingInfo> {
+
+ @Schema(description = "寮�绁ㄧ紪鍙�")
+ @Column(columnDefinition = "VARCHAR(64) comment '寮�绁ㄧ紪鍙�'")
+ private String entrustCode;
+
+ @Schema(description = "寮�绁ㄧ绫伙紙0-钃濈エ 1-绾㈢エ锛�")
+ @Column(columnDefinition = "tinyint(2) default 0 comment '寮�绁ㄧ绫伙紙0-钃濈エ 1-绾㈢エ锛�'")
+ private Integer billingType;
+
+ @Schema(description = "绾㈢エ鍏宠仈钃濈エId")
+ @Column(columnDefinition = "bigint comment '绾㈢エ鍏宠仈钃濈エId'")
+ private Long blueInvoiceId;
+
+ @Schema(description = "鍏宠仈鍚堝悓ID")
+ @Column(columnDefinition = "bigint not null comment '鍏宠仈鍚堝悓ID'")
+ private Long contractId;
+
+ @Schema(description = "鍚堝悓缂栧彿")
+ @Column(columnDefinition = "VARCHAR(64) comment '鍚堝悓缂栧彿'")
+ private String contractNo;
+
+ @Schema(description = "鍚堝悓鍚嶇О")
+ @Column(columnDefinition = "VARCHAR(64) comment '鍚堝悓鍚嶇О'")
+ private String contractName;
+
+ @Schema(description = "鐢叉柟id")
+ @Column(name = "party_a_id",columnDefinition = "bigint comment '鐢叉柟id'")
+ private Long partyAId;
+
+ @Schema(description = "鐢叉柟鍚嶇О")
+ @Column(name = "party_a",columnDefinition = "VARCHAR(100) comment '鐢叉柟鍚嶇О'")
+ private String partyA;
+
+ @Schema(description = "鐢叉柟缁熶竴绀句細淇$敤浠g爜")
+ @Column(name = "credit_code_a",columnDefinition = "VARCHAR(30) comment '鐢叉柟缁熶竴绀句細淇$敤浠g爜'")
+ private String creditCodeA;
+
+ @Schema(description = "鐢叉柟寮�鎴烽摱琛�")
+ @Column(name = "bank_name_a",columnDefinition = "VARCHAR(20) comment '鐢叉柟寮�鎴烽摱琛�'")
+ private String bankNameA;
+
+ @Schema(description = "鐢叉柟閾惰璐﹀彿")
+ @Column(name = "bank_account_a",columnDefinition = "VARCHAR(50) comment '鐢叉柟閾惰璐﹀彿'")
+ private String bankAccountA;
+
+ @Schema(description = "鐢叉柟鑱旂郴鐢佃瘽")
+ @Column(name = "contact_phone_a",columnDefinition = "VARCHAR(50) comment '鐢叉柟鑱旂郴鐢佃瘽'")
+ private String contactPhoneA;
+
+ @Schema(description = "涔欐柟id")
+ @Column(name = "party_b_id",columnDefinition = "bigint comment '涔欐柟id'")
+ private Long partyBId;
+
+ @Schema(description = "涔欐柟鍚嶇О")
+ @Column(name = "party_b",columnDefinition = "VARCHAR(100) comment '涔欐柟鍚嶇О'")
+ private String partyB;
+
+ @Schema(description = "涔欐柟缁熶竴绀句細淇$敤浠g爜")
+ @Column(name = "credit_code_b",columnDefinition = "VARCHAR(30) comment '涔欐柟缁熶竴绀句細淇$敤浠g爜'")
+ private String creditCodeB;
+
+ @Schema(description = "涔欐柟寮�鎴烽摱琛�")
+ @Column(name = "bank_name_b",columnDefinition = "VARCHAR(20) comment '涔欐柟寮�鎴烽摱琛�'")
+ private String bankNameB;
+
+ @Schema(description = "涔欐柟閾惰璐﹀彿")
+ @Column(name = "bank_account_b",columnDefinition = "VARCHAR(50) comment '涔欐柟閾惰璐﹀彿'")
+ private String bankAccountB;
+
+ @Schema(description = "涔欐柟鑱旂郴鐢佃瘽")
+ @Column(name = "contact_phone_b",columnDefinition = "VARCHAR(50) comment '涔欐柟鑱旂郴鐢佃瘽'")
+ private String contactPhoneB;
+
+ @Schema(description = "鎬婚噾棰�")
+ @Column(columnDefinition = "decimal(10,2) comment '鎬婚噾棰�'")
+ private BigDecimal totalAmount;
+
+ @Schema(description = "绋庨")
+ @Column(columnDefinition = "decimal(10,2) comment '鎬婚噾棰濈◣棰�'")
+ private BigDecimal totalTax;
+
+ @Schema(description = "涓嶅惈绋庨噾棰�")
+ @Column(columnDefinition = "decimal(10,2) comment '涓嶅惈绋庨噾棰�'")
+ private BigDecimal amountNoTax;
+
+ @Schema(description = "鏍囩殑鐗╄鎯�")
+ @Column(columnDefinition = "TEXT comment '鏍囩殑鐗╄鎯�'")
+ private String matterStr;
+
+ @Schema(description = "鐘舵�侊紙0-鐢熸晥 1-澶辨晥锛�")
+ @Column(columnDefinition = "tinyint(2) comment '鐘舵�侊紙0-鐢熸晥 1-澶辨晥锛�'")
+ private Integer status;
+
+ @Schema(description = "鐘舵�侊紙0-鏈彂閫� 1-鍙戦�佸け璐� 200-鍙戦�佹垚鍔燂級")
+ @Column(columnDefinition = "tinyint(2) default 0 comment '鐘舵�侊紙200锛�'")
+ private Integer bipStatus;
+
+ @Schema(description = "寮�钃濈エ缁撴灉鐘舵�� 0鏈紑绁� 1寮�绁ㄦ垚鍔� 2寮�绁ㄥけ璐�")
+ @javax.persistence.Column(columnDefinition="int(1) comment '寮�钃濈エ缁撴灉鐘舵��'")
+ private Integer blueResultStatus;
+
+ @Schema(description = "寮�绾㈢エ缁撴灉鐘舵�� 0鏈紑绁� 1寮�绁ㄦ垚鍔� 2寮�绁ㄥけ璐�")
+ @javax.persistence.Column(columnDefinition="int(1) comment '寮�绾㈢エ缁撴灉鐘舵��'")
+ private Integer redResultStatus;
+
+ @Schema(description = "钃濈エid")
+ @Column(columnDefinition = "bigint default null comment '钃濈エid'")
+ private Long blueInvoiceResultId;
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Schema(description = "钃濈エ寮�绁ㄦ椂闂�")
+ @Column(columnDefinition = "datetime comment '钃濈エ寮�绁ㄦ椂闂�'")
+ private Date blueInvoiceTime;
+
+ @Schema(description = "钃濈エ鍦板潃")
+ @Column(columnDefinition = "varchar(300) comment '钃濈エ鍦板潃'")
+ private String invoicePath;
+
+ @Schema(description = "钃濈エurl")
+ @javax.persistence.Column(columnDefinition="VARCHAR(255) comment '钃濈エurl'")
+ private String invoiceBlueUrl;
+
+ @Schema(description = "绾㈢エ缁撴灉id")
+ @Column(columnDefinition = "bigint default null comment '绾㈢エ缁撴灉id'")
+ private Long redInvoiceResultId;
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Schema(description = "绾㈢エ寮�绁ㄦ椂闂�")
+ @Column(columnDefinition = "datetime comment '绾㈢エ寮�绁ㄦ椂闂�'")
+ private Date redInvoiceTime;
+
+ @Schema(description = "绾㈢エ鍦板潃")
+ @Column(columnDefinition = "varchar(300) comment '绾㈢エ鍦板潃'")
+ private String invoiceRedPath;
+
+ @Schema(description = "绾㈠啿鍙戠エurl")
+ @javax.persistence.Column(columnDefinition="VARCHAR(255) comment '绾㈠啿鍙戠エurl'")
+ private String invoiceRedUrl;
+
+ @Schema(description = "寮�绁ㄨ鎯�")
+ @Column(columnDefinition = "TEXT comment '寮�绁ㄨ鎯�'")
+ private String invoiceRemark;
+
+ /**
+ * 鍑鸿揣鍗曞垪琛�
+ */
+ @Transient
+ @TableField(exist = false)
+ private List<ContractOutBoundVo> contractOutBoundList;
+
+ /**
+ * 寮�绁ㄩ」鍒楄〃
+ */
+ @Transient
+ @TableField(exist = false)
+ private List<BillingItem> billingItems;
+
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingItem.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingItem.java
new file mode 100644
index 0000000..ea28b49
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingItem.java
@@ -0,0 +1,106 @@
+package com.by4cloud.platformx.business.entity;
+
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+import java.math.BigDecimal;
+
+
+/**
+ * @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="billing_item",comment = "寮�绁ㄤ骇鍝佷俊鎭〃")//缁欒〃鍔犳敞閲�
+@jakarta.persistence.Table(name = "billing_item")//寮�鍏峰彂绁ㄨ繑鍥炲��
+@Comment("寮�绁ㄤ骇鍝佷俊鎭〃")
+public class BillingItem extends BaseModel<BillingItem> {
+
+ @Schema(description = "寮�绁ㄤ俊鎭痠d")
+ @Column(columnDefinition = "bigint comment '寮�绁ㄤ俊鎭痠d'")
+ private Long billingInfoId;
+
+ @Schema(description = "瀵瑰簲鍚堝悓鍑哄簱鍗旾ds")
+ @Column(columnDefinition = "VARCHAR(300) comment '瀵瑰簲鍚堝悓鍑哄簱鍗旾ds'")
+ private String contractOutBoundIds;
+
+ @Schema(description = "鍏宠仈鍚堝悓ID")
+ @Column(columnDefinition = "bigint not null comment '鍏宠仈鍚堝悓ID'")
+ private Long contractId;
+
+ @Schema(description = "瀹㈠晢ID")
+ @Column(columnDefinition="bigint comment '瀹㈠晢ID'")
+ private Long busGuestId;
+
+ @Schema(description = "鏍囩殑鐗╁悕绉�")
+ @Column(columnDefinition="VARCHAR(64) comment '鏍囩殑鐗╁悕绉�'")
+ private String subjectMatterName;
+
+ @Schema(description = "鏍囩殑鐗╃紪鐮�")
+ @Column(columnDefinition="VARCHAR(64) comment '鏍囩殑鐗╃紪鐮�'")
+ private String subjectMatterCode;
+
+ @Schema(description = "寮�绁ㄤ骇鍝佹暟閲�")
+ @Column(columnDefinition="decimal(10,2) comment '寮�绁ㄤ骇鍝佹暟閲�'")
+ private BigDecimal productNum;
+
+ @Schema(description = "寮�绁ㄧ姸鎬侊紙0-鏈紑绁� 1-寮�绁ㄤ腑 2-宸插紑绁級")
+ @Column(columnDefinition = "tinyint(2) default 0 comment '寮�绁ㄧ姸鎬侊紙0-鏈紑绁� 1-寮�绁ㄤ腑 2-宸插紑绁級'")
+ private Integer billingStatus;
+
+ @Schema(description = "鎬诲崟浠�")
+ @Column(columnDefinition = "decimal(10,2) comment '鎬诲崟浠�'")
+ private BigDecimal totalPrice;
+
+ @Schema(description = "鎬荤◣棰�")
+ @Column(columnDefinition = "decimal(10,2) comment '鎬荤◣棰�'")
+ private BigDecimal totalTax;
+
+ @Schema(description = "涓嶅惈绋庢�婚")
+ @Column(columnDefinition = "decimal(10,2) comment '涓嶅惈绋庢�婚'")
+ private BigDecimal totalPriceNoTax;
+
+ //浜у搧淇℃伅
+
+ @Schema(description = "浜у搧id")
+ @Column(columnDefinition = "bigint comment '浜у搧id'")
+ private Long productId;
+
+ @Schema(description = "寮�绁ㄤ骇鍝佸悕绉�")
+ @Column(columnDefinition = "VARCHAR(50) comment '寮�绁ㄤ骇鍝佸悕绉�'")
+ private String invoiceName;
+
+ @Schema(description = "绋庣巼锛堢櫨鍒嗘瘮锛屽13琛ㄧず13%锛�")
+ @Column(columnDefinition = "double default 0.00 comment '绋庣巼'")
+ private Double taxRate;
+
+ @Schema(description = "绋庢敹鍒嗙被")
+ @Column(columnDefinition = "VARCHAR(50) comment '绋庢敹鍒嗙被'")
+ private String taxClass;
+
+ @Schema(description = "绋庢敹缂栫爜")
+ @Column(columnDefinition = "VARCHAR(80) comment '绋庢敹缂栫爜'")
+ private String taxCode;
+
+ //鍚堝悓鏍囩殑鐗╀腑淇℃伅
+
+ @Schema(description = "鏍囩殑鐗╄鏍�/鍨嬪彿")
+ @Column(columnDefinition = "VARCHAR(200) comment '鏍囩殑鐗╄鏍�/鍨嬪彿'")
+ private String specification;
+
+ @Schema(description = "璁¢噺鍗曚綅锛堜釜/鍙�/鍚�/椤�/濂楃瓑锛�")
+ @Column(columnDefinition = "VARCHAR(20) comment '璁¢噺鍗曚綅'")
+ private String unit;
+
+ @Schema(description = "鍗曚环")
+ @Column(columnDefinition = "decimal(10,2) comment '鍗曚环'")
+ private BigDecimal unitPrice;
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundVo.java
index 19482ff..6bf25c0 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundVo.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundVo.java
@@ -2,6 +2,7 @@
import com.by4cloud.platformx.business.entity.ContractOutBound;
import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Column;
import lombok.Data;
import java.math.BigDecimal;
@@ -25,6 +26,12 @@
@Schema(description = "绋庢敹缂栫爜")
private String taxCode;
+ @Schema(description = "涓嶅惈绋庢�婚")
+ private BigDecimal totalPriceNoTax;
+
+ @Schema(description = "瀵瑰簲鍚堝悓鍑哄簱鍗旾ds")
+ private String contractOutBoundIds;
+
//鍚堝悓鏍囩殑鐗╀腑淇℃伅
@Schema(description = "鏍囩殑鐗╄鏍�/鍨嬪彿")
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoicePreviewVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoicePreviewVo.java
new file mode 100644
index 0000000..415f131
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoicePreviewVo.java
@@ -0,0 +1,11 @@
+package com.by4cloud.platformx.business.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InvoicePreviewVo {
+ private Long contractId;
+ private List<Long> contractOutBoundIds;
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingInfoController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingInfoController.java
new file mode 100644
index 0000000..2f281fc
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingInfoController.java
@@ -0,0 +1,317 @@
+package com.by4cloud.platformx.business.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.admin.api.entity.SysDept;
+import com.by4cloud.platformx.admin.api.feign.RemoteDeptService;
+import com.by4cloud.platformx.business.entity.*;
+import com.by4cloud.platformx.business.entity.invoice.vo.InvoicingVo;
+import com.by4cloud.platformx.business.invoice.service.BIPYsService;
+import com.by4cloud.platformx.business.entity.invoice.vo.BipResVo;
+import com.by4cloud.platformx.business.invoice.service.FpInvoiceResultService;
+import com.by4cloud.platformx.business.service.*;
+import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
+import com.by4cloud.platformx.business.vo.InvoicePreviewVo;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import com.by4cloud.platformx.common.log.annotation.SysLog;
+import com.by4cloud.platformx.common.security.annotation.Inner;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Column;
+import org.springframework.security.access.prepost.PreAuthorize;
+import com.by4cloud.platformx.common.excel.annotation.ResponseExcel;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 寮�绁ㄤ俊鎭�
+ *
+ * @author wjli
+ * @date 2026-06-04 10:50:20
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/billingInfo" )
+@Tag(description = "billingInfo" , name = "寮�绁ㄤ俊鎭鐞�" )
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class BillingInfoController {
+
+ private final BillingInfoService billingInfoService;
+ private final BillingItemService billingItemService;
+ private final ContractService contractService;
+ private final ContractOutBoundService contractOutBoundService;
+ private final InvoiceService invoiceService;
+ private final BIPYsService bipYsService;
+
+ /**
+ * 閫氳繃id鏌ヨ寮�绁ㄤ俊鎭�
+ * @param id id
+ * @return R
+ */
+ @Operation(summary = "閫氳繃id鏌ヨ" , description = "閫氳繃id鏌ヨ" )
+ @GetMapping("/getById/{id}" )
+ public R getById(@PathVariable("id" ) Long id) {
+ return R.ok(billingInfoService.getById(id));
+ }
+
+ /**
+ * 鎷兼帴鍙戠エ淇℃伅
+ * @param previewVo 鍚堝悓ID鍜屽嚭搴撳崟ID
+ * @return R
+ */
+ @Operation(summary = "鎷兼帴鍙戠エ淇℃伅" , description = "鎷兼帴鍙戠エ淇℃伅" )
+ @SysLog("鎷兼帴鍙戠エ淇℃伅" )
+ @GetMapping("/saveInvoice")
+ @Inner(value = false)
+ public R saveInvoice(@ParameterObject InvoicePreviewVo previewVo) {
+
+ //鍙傛暟鍒ゆ柇
+ if(previewVo.getContractId() == null){
+ return R.failed("鍚堝悓id涓嶈兘涓虹┖");
+ }
+
+ Contract contractTemp = contractService.getById(previewVo.getContractId());
+ if(contractTemp == null){
+ return R.failed("鍚堝悓id閿欒");
+ }
+ BillingInfo billingInfo = billingInfoService.getInviceByContractId(previewVo,contractTemp,1);
+
+ //鎷艰寮�绁ㄩ」鍐呭
+ List<ContractOutBoundVo> contractOutBoundVos = billingInfo.getContractOutBoundList();
+ if(contractOutBoundVos!=null && !contractOutBoundVos.isEmpty()) {
+ for(ContractOutBoundVo vo : contractOutBoundVos){
+
+ BillingItem item = new BillingItem();
+ //寮�绁ㄤ俊鎭痠d
+ item.setBillingInfoId(billingInfo.getId());
+ //鍏宠仈鍚堝悓ID
+ item.setContractId(billingInfo.getContractId());
+ //寮�绁ㄤ骇鍝佸悕绉�
+ item.setInvoiceName(vo.getInvoiceName());
+ //瀹㈠晢ID
+ item.setBusGuestId(vo.getBusGuestId());
+ //浜у搧id
+ item.setProductId(vo.getProductId());
+ //鏍囩殑鐗╄鏍�/鍨嬪彿
+ item.setSpecification(vo.getSpecification());
+ //寮�绁ㄤ骇鍝佹暟閲�
+ item.setProductNum(vo.getOutBoundNum());
+ //鏍囩殑鐗╃紪鐮�
+ item.setSubjectMatterCode(vo.getSubjectMatterCode());
+ //鏍囩殑鐗╁悕绉�
+ item.setSubjectMatterName(vo.getSubjectMatterName());
+ //璁¢噺鍗曚綅锛堜釜/鍙�/鍚�/椤�/濂楃瓑锛�
+ item.setUnit(vo.getUnit());
+ //寮�绁ㄧ姸鎬侊紙0-鏈紑绁� 1-寮�绁ㄤ腑 2-宸插紑绁級
+ item.setBillingStatus(1);
+ //鎬诲崟浠�
+ item.setTotalPrice(vo.getTotalPrice());
+ //鍗曚环
+ item.setUnitPrice(vo.getUnitPrice());
+ //绋庢敹鍒嗙被
+ item.setTaxClass(vo.getTaxClass());
+ //绋庢敹缂栫爜
+ item.setTaxCode(vo.getTaxCode());
+ //鎬荤◣棰�
+ item.setTotalTax(vo.getTotalTax());
+ //绋庣巼锛堢櫨鍒嗘瘮锛屽13琛ㄧず13%锛�
+ item.setTaxRate(vo.getTaxRate());
+ //涓嶅惈绋庢�婚
+ item.setTotalPriceNoTax(vo.getTotalPriceNoTax());
+ //鎵�鍏宠仈鍑哄簱鍗旾D
+ item.setContractOutBoundIds(vo.getContractOutBoundIds());
+ billingItemService.save(item);
+ }
+ }
+
+ //鐢熸垚vo
+ /*InvoicingVo invoicingVo = invoiceService.toGetByCompareByVo1(billingInfo,contractOutBoundVos);
+ 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){
+ billingInfo.setBlueResultStatus(1);
+ billingInfoService.updateById(billingInfo);
+ //鎺╞i'p
+ BipResVo bipResVo = bipYsService.sendBIPYss(billingInfo);
+ if (!bipResVo.getCode().equals("200")) {
+ *//*if (StrUtil.isNotEmpty(errMsg)) {
+ errMsg.append(",");
+ }
+ errMsg.append(saleCredit.getCreditCodeB()+ "搴旀敹鍙戠エ鎺ㄩ�佸け璐�:" + bipResVo.getMessage());*//*
+ billingInfo.setBipStatus(1);
+ billingInfoService.updateById(billingInfo);
+
+ return R.failed("寮�绁ㄦ垚鍔燂紝鎺ㄩ�乥ip澶辫触锛宔rr:" + bipResVo.getMessage());
+ }else{
+ billingInfo.setBipStatus(200);
+ billingInfoService.updateById(billingInfo);
+ return R.ok("寮�绁ㄦ垚鍔�,鎺ㄩ�乥ig鎴愬姛锛�");
+ }
+ }else{
+ billingInfo.setBlueResultStatus(2);
+ billingInfoService.updateById(billingInfo);
+ return R.failed("寮�绁ㄥけ璐ワ紒err锛�" + message);
+ }
+
+ }catch (Exception e){
+ billingInfo.setStatus(3);
+ billingInfoService.updateById(billingInfo);
+ return R.failed("寮�绁ㄥけ璐ワ紒err:" + e.getMessage());
+ }*/
+
+ //鍑哄簱鍗曞凡寮�绁�
+ List<ContractOutBound> contractOutBounds = contractOutBoundService.list(new LambdaQueryWrapper<ContractOutBound>()
+ .eq(ContractOutBound::getSaleCreditId,billingInfo.getId())
+ );
+ for(ContractOutBound contractOutBound : contractOutBounds){
+ contractOutBound.setInvoiceSatus(2);
+ }
+ contractOutBoundService.updateBatchById(contractOutBounds);
+
+ //寮�绁ㄦ垚鍔�
+ //寮�绁ㄨ褰曞崟钃濈エ淇℃伅瀛樺偍
+ billingInfo.setBlueResultStatus(1);
+ billingInfo.setInvoiceRemark("寮�绁ㄦ垚鍔燂紒");
+ billingInfo.setBlueInvoiceTime(DateTime.now());
+ billingInfoService.updateById(billingInfo);
+
+ //鐩稿叧鍚堝悓閲戦鍜屽紑绁ㄧ姸鎬佽繘琛屼慨鏀广��
+ Contract contract = contractService.getById(billingInfo.getContractId());
+ String billingStatus = contract.getBillingStatus();
+
+ if(contract.getBillingAmout()==null){
+ contract.setBillingAmout(billingInfo.getTotalAmount());
+ }else{
+ contract.setBillingAmout(contract.getBillingAmout().add(billingInfo.getTotalAmount()));
+ }
+
+ int res = contract.getAmount().compareTo(contract.getBillingAmout());
+
+ if("2".equals(billingStatus)) {
+ if (res == 0) {
+ contract.setBillingStatus("3");
+ } else if (res > 0) {
+ contract.setBillingStatus("2");
+ } else {
+ return R.failed("宸蹭粯閲戦涓嶈兘澶т簬鎬婚噾棰濓紒");
+ }
+ }
+
+ contractService.updateById(contract);
+ return R.ok("寮�绁ㄦ垚鍔燂紝鎺ㄩ�乥ip鎴愬姛锛�");
+ }
+
+ /**
+ * 鎷兼帴閿�鍞寕璐�
+ * @param billingInfo1 寮�绁ㄤ俊鎭�
+ * @return R
+ */
+ @Operation(summary = "寮�鍙戠エ" , description = "寮�鍙戠エ" )
+ @SysLog("寮�鍙戠エ" )
+ @PostMapping("/toRedStamp")
+ @PreAuthorize("@pms.hasPermission('business_saleCredit_edit')" )
+ public R toRedStamp(@RequestBody BillingInfo billingInfo1) {
+ if(billingInfo1.getId()==null){
+ return R.failed("寮�绁ㄤ俊鎭痠d涓嶈兘涓虹┖锛�");
+ }
+ BillingInfo billingInfo = billingInfoService.getById(billingInfo1.getId());
+ if(billingInfo==null){
+ return R.failed("寮�绁ㄤ俊鎭痠d涓嶈兘閿欒锛�");
+ }
+
+ /* try {
+ Map<String, Object> map = invoiceService.toRedTicket1(billingInfo);
+ 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("绾㈠瓧寮�绁ㄥけ璐�");
+ }*/
+
+
+ //鍑哄簱鍗曟仮澶嶅埌鏈紑绁ㄧ姸鎬�
+ List<ContractOutBound> outBoundList = contractOutBoundService.list(new LambdaQueryWrapper<ContractOutBound>()
+ .eq(ContractOutBound::getSaleCreditId,billingInfo.getId())
+ );
+ for(ContractOutBound outBound : outBoundList){
+ outBound.setInvoiceSatus(0);
+ outBound.setSaleCreditId(0l);
+ }
+ contractOutBoundService.updateBatchById(outBoundList);
+
+ billingInfo.setRedInvoiceTime(DateTime.now());
+ billingInfo.setRedResultStatus(1);
+ billingInfo.setInvoiceRemark("寮�绾㈢エ鎴愬姛锛�");
+ billingInfoService.updateById(billingInfo);
+
+ //鍚堝悓宸插紑绁ㄩ噾棰濆拰鐘舵�佽繕鍘�
+ Contract contract = contractService.getById(billingInfo.getContractId());
+ String billingStatus = contract.getBillingStatus();
+ BigDecimal bill = contract.getBillingAmout() == null ? BigDecimal.ZERO : contract.getBillingAmout();
+ BigDecimal credit = billingInfo.getTotalAmount() == null ? BigDecimal.ZERO : billingInfo.getTotalAmount();
+ BigDecimal diff = bill.subtract(credit);
+ int res = diff.compareTo(BigDecimal.ZERO);
+
+ if("3".equals(billingStatus)){
+ if(res>=0){
+ contract.setBillingStatus("2");
+ contract.setBillingAmout(BigDecimal.ZERO);
+ }else{
+ return R.failed("宸插紑绁ㄩ噾棰濊礋鏁版姤閿欙紒");
+ }
+ }
+ contractService.updateById(contract);
+ return R.ok("绾㈠啿寮�绁ㄦ垚鍔燂紒");
+ }
+
+
+ /**
+ * 鎷兼帴鍙戠エ淇℃伅
+ * @param previewVo 鍚堝悓ID鍜屽嚭搴撳崟ID
+ * @return R
+ */
+ @Operation(summary = "鎷兼帴鍙戠エ淇℃伅" , description = "鎷兼帴鍙戠エ淇℃伅" )
+ @SysLog("鎷兼帴鍙戠エ淇℃伅" )
+ @GetMapping("/generatorInvoice")
+ @Inner(value = false)
+ public R generatorInvoice(@ParameterObject InvoicePreviewVo previewVo) {
+
+ //鍙傛暟鍒ゆ柇
+ if(previewVo.getContractId() == null){
+ return R.failed("鍚堝悓id涓嶈兘涓虹┖");
+ }
+
+ Contract contract = contractService.getById(previewVo.getContractId());
+ if(contract == null){
+ return R.failed("鍚堝悓id閿欒");
+ }
+
+ BillingInfo billingInfo = billingInfoService.getInviceByContractId(previewVo,contract,0);
+
+ return R.ok(billingInfo);
+ }
+
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingItemController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingItemController.java
new file mode 100644
index 0000000..2bb0339
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingItemController.java
@@ -0,0 +1,119 @@
+package com.by4cloud.platformx.business.controller;
+
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.log.annotation.SysLog;
+import com.by4cloud.platformx.business.entity.BillingItem;
+import com.by4cloud.platformx.business.service.BillingItemService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import com.by4cloud.platformx.common.excel.annotation.ResponseExcel;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 寮�绁ㄤ骇鍝佷俊鎭�
+ *
+ * @author wjli
+ * @date 2026-06-04 16:29:33
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/billingItem" )
+@Tag(description = "billingItem" , name = "寮�绁ㄤ骇鍝佷俊鎭鐞�" )
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class BillingItemController {
+
+ private final BillingItemService billingItemService;
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ * @param page 鍒嗛〉瀵硅薄
+ * @param billingItem 寮�绁ㄤ骇鍝佷俊鎭�
+ * @return
+ */
+ @Operation(summary = "鍒嗛〉鏌ヨ" , description = "鍒嗛〉鏌ヨ" )
+ @GetMapping("/page" )
+ @PreAuthorize("@pms.hasPermission('business_billingItem_view')" )
+ public R getBillingItemPage(@ParameterObject Page page, @ParameterObject BillingItem billingItem) {
+ LambdaQueryWrapper<BillingItem> wrapper = Wrappers.lambdaQuery();
+ return R.ok(billingItemService.page(page, wrapper));
+ }
+
+
+ /**
+ * 閫氳繃id鏌ヨ寮�绁ㄤ骇鍝佷俊鎭�
+ * @param id id
+ * @return R
+ */
+ @Operation(summary = "閫氳繃id鏌ヨ" , description = "閫氳繃id鏌ヨ" )
+ @GetMapping("/{id}" )
+ @PreAuthorize("@pms.hasPermission('business_billingItem_view')" )
+ public R getById(@PathVariable("id" ) Long id) {
+ return R.ok(billingItemService.getById(id));
+ }
+
+ /**
+ * 鏂板寮�绁ㄤ骇鍝佷俊鎭�
+ * @param billingItem 寮�绁ㄤ骇鍝佷俊鎭�
+ * @return R
+ */
+ @Operation(summary = "鏂板寮�绁ㄤ骇鍝佷俊鎭�" , description = "鏂板寮�绁ㄤ骇鍝佷俊鎭�" )
+ @SysLog("鏂板寮�绁ㄤ骇鍝佷俊鎭�" )
+ @PostMapping
+ @PreAuthorize("@pms.hasPermission('business_billingItem_add')" )
+ public R save(@RequestBody BillingItem billingItem) {
+ return R.ok(billingItemService.save(billingItem));
+ }
+
+ /**
+ * 淇敼寮�绁ㄤ骇鍝佷俊鎭�
+ * @param billingItem 寮�绁ㄤ骇鍝佷俊鎭�
+ * @return R
+ */
+ @Operation(summary = "淇敼寮�绁ㄤ骇鍝佷俊鎭�" , description = "淇敼寮�绁ㄤ骇鍝佷俊鎭�" )
+ @SysLog("淇敼寮�绁ㄤ骇鍝佷俊鎭�" )
+ @PutMapping
+ @PreAuthorize("@pms.hasPermission('business_billingItem_edit')" )
+ public R updateById(@RequestBody BillingItem billingItem) {
+ return R.ok(billingItemService.updateById(billingItem));
+ }
+
+ /**
+ * 閫氳繃id鍒犻櫎寮�绁ㄤ骇鍝佷俊鎭�
+ * @param ids id鍒楄〃
+ * @return R
+ */
+ @Operation(summary = "閫氳繃id鍒犻櫎寮�绁ㄤ骇鍝佷俊鎭�" , description = "閫氳繃id鍒犻櫎寮�绁ㄤ骇鍝佷俊鎭�" )
+ @SysLog("閫氳繃id鍒犻櫎寮�绁ㄤ骇鍝佷俊鎭�" )
+ @DeleteMapping
+ @PreAuthorize("@pms.hasPermission('business_billingItem_del')" )
+ public R removeById(@RequestBody Long[] ids) {
+ return R.ok(billingItemService.removeBatchByIds(CollUtil.toList(ids)));
+ }
+
+
+ /**
+ * 瀵煎嚭excel 琛ㄦ牸
+ * @param billingItem 鏌ヨ鏉′欢
+ * @param ids 瀵煎嚭鎸囧畾ID
+ * @return excel 鏂囦欢娴�
+ */
+ @ResponseExcel
+ @GetMapping("/export")
+ @PreAuthorize("@pms.hasPermission('business_billingItem_export')" )
+ public List<BillingItem> export(BillingItem billingItem,Long[] ids) {
+ return billingItemService.list(Wrappers.lambdaQuery(billingItem).in(ArrayUtil.isNotEmpty(ids), BillingItem::getId, ids));
+ }
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BIPYsService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BIPYsService.java
index c7f1e81..4bcefc8 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BIPYsService.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BIPYsService.java
@@ -1,5 +1,6 @@
package com.by4cloud.platformx.business.invoice.service;
+import com.by4cloud.platformx.business.entity.BillingInfo;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.entity.invoice.BipInvoice;
import com.by4cloud.platformx.business.entity.invoice.vo.BIPBody;
@@ -32,6 +33,8 @@
BipResVo sendBIPYs(SaleCredit railwayEntrust, String id1, String id2, Boolean focus, String customerCode, String customerAddressCode,String businessType, String fromStation, Integer allId, String contractNum, String number, String jyType, String accountUnitNumber, String deptCode, String userCode, Integer isNd);
BipResVo sendBIPYs(SaleCredit saleCredit);
+
+ BipResVo sendBIPYss(BillingInfo billingInfo);
/**
*
* @param railwayEntrust
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BIPYsServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BIPYsServiceImpl.java
index 88f7a45..ff81604 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BIPYsServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BIPYsServiceImpl.java
@@ -6,6 +6,7 @@
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.by4cloud.platformx.business.entity.BillingInfo;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.entity.invoice.BipInvoice;
import com.by4cloud.platformx.business.entity.invoice.InvoiceResult;
@@ -689,6 +690,306 @@
return bipResVo;
}
+ @Override
+ public BipResVo sendBIPYss(BillingInfo railwayEntrust) {
+ BIPBody bipBody = new BIPBody();
+ BIPYsMxHeader mx = new BIPYsMxHeader();
+ List<BIPYsItem> bipYsItems = new ArrayList<>();
+// mx.(railwayEntrust.getFyCompName());//鍙戣繍鐭�
+ //mx.setMX01_code(fromStation2);//鍙戠珯
+ /*if (accountLedger.getId().equals(80) || accountLedger.getId().equals(81) && !accountLedger.getId().equals(82)) {
+ contractNum = "";
+ }*/
+ if (StrUtil.isNotEmpty(railwayEntrust.getContractNo())) {
+ mx.setHTBMBT(1);
+ } else {
+ mx.setHTBMBT(0);
+ }
+ mx.setContractNo(railwayEntrust.getContractNo());
+ //mx.setMX021_code(customerCode);//鏀惰揣瀹㈡埛
+ //mx.setMX031_code(customerCode);//缁撶畻瀹㈡埛
+ //mx.setMX04(number);//缁撶畻鍗曞彿
+ mx.setMX0401(railwayEntrust.getEntrustCode());//鎵樻敹鍗曞彿
+ //mx.setMX051_code(businessType);//涓氬姟绉嶇被
+ //mx.setMX06(createName);//鍒涘缓浜�
+ //mx.setMX07(railwayEntrust.getUserName());//瀹℃牳浜�
+
+ //mx.setGX08_code(accountUnitNumber);//鏍哥畻鍗曞厓
+ //String remark = getRemark(railwayEntrust, "閿�", customerCode, id2);
+ mx.setRemarks(railwayEntrust.getInvoiceRemark());
+ //String fileUrl = fileUploadService.fileUpload(6, railwayEntrust.getId());
+ mx.setFk_002(3);
+ /*if (StrUtil.isNotEmpty(fileUrl) && "01".equals(jyType)) {
+ mx.setFk_002(3 + fileUrl.split(",").length);
+ }*/
+ /*if (railwayEntrust.getFatherEntrustId() != null) {
+ fileUrl = fileUploadService.fileUpload(6, contractNum);
+ mx.setFk_002(3);
+ if (StrUtil.isNotEmpty(fileUrl) && "01".equals(jyType)) {
+ mx.setFk_002(3 + fileUrl.split(",").length);
+ }
+ }*/
+ bipBody.setBustypeCode("MXysfp");
+ //bipBody.setStaffCode(userCode);
+// bipBody.setFk_038_code(userCode);
+ bipBody.setObjectType("1");
+ //bipBody.setCustomerCode(customerCode);
+ bipBody.setExtVouchCode(railwayEntrust.getEntrustCode());//鐓ら攢绯荤粺鍗曞彿
+
+ //bipBody.setFinanceOrgCode(id2);//寮�绁ㄧ粍缁嘔D
+ bipBody.setDirection("1");//鍗曟嵁鏂瑰悜 1钃� -1绾�
+ bipBody.setBillDate(DateUtil.format(new Date(), "yyyy-MM-dd"));//寮�绁ㄦ棩鏈�
+// bipBody.setBillDate(DateUtil.format(railwayEntrust.getBalanceDate(), "yyyy-MM-dd"));//寮�绁ㄦ棩鏈�
+
+// if ("0101".equals(jyType)){
+//
+// }
+ //bipBody.setContractNo(contractNum);
+ //bipBody.setOrgCode(id2);//涓氬姟缁勭粐id
+ //bipBody.setDeptCode(deptCode);
+ bipBody.setExchangeRateDate(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+// bipBody.setExchangeRateDate(DateUtil.format(railwayEntrust.getBalanceDate(), "yyyy-MM-dd HH:mm:ss"));
+// bipBody.setCustomer();//瀹㈡埛缂栫爜
+
+ //bipBody.setRemarks(remark);
+
+ //琛ㄤ綋
+ //鐓ょ绫荤洰
+ BIPYsItem bipYsItem = new BIPYsItem();
+// bipYsItem.setExchangeRateDate(DateUtil.format(railwayEntrust.getBalanceDate(),"yyyy-MM-dd HH:mm:ss"));
+
+ //bipYsItem.setTaxRate(NumUtils.multiplyDouble(railwayEntrust.getTaxRate(),100d));
+ //bipYsItem.setUnitName("鍚�");
+
+ /*bipYsItem.setMaterialCode("7704000001");
+ bipYsItem.setQuantity(BigDecimal.valueOf(railwayEntrust.getTonnage()));
+ bipYsItem.setCustomerCode(customerCode);//瀹㈡埛缂栫爜
+ Double noTaxPrice = railwayEntrust.getPrice();
+ bipYsItem.setOriTaxAmount(BigDecimal.valueOf(railwayEntrust.getTaxFee()));//绋庨
+ String[] codes = expenseItemCode.get().split(",");
+ bipYsItem.setExpenseItemCode(codes[0]);
+
+ Double allPrice = railwayEntrust.getTotalPrice();
+ bipYsItem.setOriTaxExcludedAmount(BigDecimal.valueOf(railwayEntrust.getCoalFree()));//鍘熷竵鏃犵◣閲戦
+ bipYsItem.setOriTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getTotalPrice()));//鍘熷竵鍚◣閲戦
+ bipYsItem.setLocalTaxExcludedAmount(BigDecimal.valueOf(railwayEntrust.getCoalFree()));//鏈竵鏃犵◣閲戦
+ bipYsItem.setLocalTaxIncludedAmount(BigDecimal.valueOf(railwayEntrust.getTotalPrice()));//鏈竵鍚◣閲戦
+ bipYsItem.setOriTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCoalFree(), railwayEntrust.getTonnage(), 8));//鏃犵◣鍗曚环
+ bipYsItem.setLocalTaxExcludedPrice(NumUtils.divideDouble(railwayEntrust.getCoalFree(), railwayEntrust.getTonnage(), 8));//鏃犵◣鍗曚环
+ Double realPrice = NumUtils.divideDouble(railwayEntrust.getTotalPrice(), railwayEntrust.getTonnage(), 8);
+ bipYsItem.setOriTaxIncludedPrice(realPrice);//鏈竵鍚◣鍗曚环
+ bipYsItem.setLocalTaxIncludedPrice(realPrice);//鏈竵鍚◣鍗曚环
+ //鍒嗗壊鍗曢噾棰�
+ if (CompUtils.isTsCustomer(railwayEntrust.getCustomerId())) {
+ if (railwayEntrust.getFatherEntrustId() == null) {
+
+ Double noTaxMoney = railwayEntrust.getCoalMoney();
+ Double taxMoney = railwayEntrust.getCoalTaxMoney();
+ Double allMoney = NumUtils.addDouble(noTaxMoney, taxMoney, 2);
+ allPrice = allMoney;
+ bipYsItem.setOriTaxAmount(BigDecimal.valueOf(taxMoney));//绋庨
+ bipYsItem.setOriTaxExcludedAmount(BigDecimal.valueOf(noTaxMoney));//鍘熷竵鏃犵◣閲戦
+ bipYsItem.setOriTaxIncludedAmount(BigDecimal.valueOf(allMoney));//鍘熷竵鍚◣閲戦
+ bipYsItem.setLocalTaxExcludedAmount(BigDecimal.valueOf(noTaxMoney));//鏈竵鏃犵◣閲戦
+ bipYsItem.setLocalTaxIncludedAmount(BigDecimal.valueOf(allMoney));//鏈竵鍚◣閲戦
+ bipYsItem.setOriTaxExcludedPrice(railwayEntrust.getPrice());//鏃犵◣鍗曚环
+ bipYsItem.setLocalTaxExcludedPrice(railwayEntrust.getPrice());//鏃犵◣鍗曚环
+ bipYsItem.setOriTaxIncludedPrice(NumUtils.divideDouble(allMoney, railwayEntrust.getTonnage(), 8));//鏈竵鍚◣鍗曚环
+ bipYsItem.setLocalTaxIncludedPrice(NumUtils.divideDouble(allMoney, railwayEntrust.getTonnage(), 8));//鏈竵鍚◣鍗曚环
+ }
+
+ }
+ bipYsItem.setRemarks(remark);*/
+
+ //鐓ょ琛ㄤ綋
+ BIPYsMx bipYsMx = new BIPYsMx();
+ //bipYsMx.setJT12_code(ncCoalNumber);//鐗╂枡缂栫爜
+// bipYsMx.setJT25_code(codes[1]);
+ //bipYsMx.setGX06_code(coalBipCode);//鐗╂枡鍚嶇О
+
+ //bipYsMx.setMX021_code(customerCode);//鏀惰揣瀹㈡埛
+ //bipYsMx.setCustomerCode(customerAddressCode);//瀹㈡埛缂栫爜
+ bipYsMx.setJT06_code("01001001");//娆鹃」鏄庣粏
+ bipYsMx.setYSYF14_code("2");
+ /*if (id2!=null){
+ *//*if (id2 != null && id2.equals("10439") && railwayEntrust.getCoalId() != null && railwayEntrust.getCoalId().equals(45)) {
+ bipYsMx.setJT12_code("0101020401");//鐗╂枡缂栫爜
+ bipYsMx.setGX06_code("01010201043902438");//鐗╂枡鍚嶇О
+ }*//*
+ if (id2.equals("126") || id2.equals("10439") || id2.equals("1045116") || id2.equals("104810210") || id2.equals("1027902")) {
+ bipBody.setYSYF_08("0");
+ bipYsMx.setYSYF_08("0");
+ }
+ if (id2.startsWith("104")) {
+ if (focus) {
+ bipYsMx.setYSYF52("0");
+ } else {
+ bipYsMx.setYSYF52("1");
+ }
+
+ }
+
+ }
+ bipYsMx.setGX08_code(accountUnitNumber);*/
+ /*bipYsMx.setMX09(railwayEntrust.getCoalName());//杩愰攢鐓ょ
+ bipYsMx.setMX10(BigDecimal.valueOf(railwayEntrust.getRealTonnage()));//姘寸叅閲�
+ bipYsMx.setMX11(railwayEntrust.getAshContentMetering());//鐏板垎
+ bipYsMx.setMX13(railwayEntrust.getMoistureMetering());
+ bipYsMx.setMX14(railwayEntrust.getSulFurMetering());
+ bipYsMx.setMX15(railwayEntrust.getCoalName());
+ if (railwayEntrust.getInvoiceResultId() == null && !CompUtils.isKp(accountLedger.getId()) && !accountLedger.getId().equals(165)) {
+ throw new RuntimeException("缁撶畻鍗曟湭寮�绁�");
+ }*/
+ InvoiceResult invoiceResult = fpInvoiceResultService.getById(railwayEntrust.getBlueInvoiceResultId());
+ if (invoiceResult != null) {
+ bipYsMx.setYSYF33(invoiceResult.getInvoiceNo());
+ bipYsItem.setInvoiceNo(invoiceResult.getInvoiceNo());
+// bipYsMx.setInvoiceNo(invoiceResult.getInvoiceNo());
+ }
+ bipYsMx.setZzbkfl_code("01");
+ /*if (StrUtil.isNotEmpty(accountLedger.getZzbkfl())) {
+ bipYsMx.setZzbkfl_code(accountLedger.getZzbkfl());
+ }
+ String jyType1 = jyType;//鐗规畩浜ゆ槗鍗�
+ if (jyType.equals("0101") && railwayEntrust.getCustomerId() != null && railwayEntrust.getCustomerId().equals(203)) {
+ jyType1 = "01020202";
+ }
+
+ if (jyType.equals("0101") && railwayEntrust.getCustomerId() != null && (railwayEntrust.getCustomerId().equals(172) || railwayEntrust.getCustomerId().equals(200) || railwayEntrust.getCustomerId().equals(2002381))) {
+ jyType1 = "010201";
+ }*/
+
+ //bipYsMx.setJT04_code(jyType1);
+ //bipYsMx.setMX16(railwayEntrust.getTonnage());//鎶樺共閲�
+ bipYsItem.setFreeChId(bipYsMx);
+// bipYsMx.setMX18(railwayEntrust.getRealTonnage());//鏍囩叅閲�
+// bipYsMx.setMX18(railwayEntrust.getRealPrice());//鏍囩叅閲忓崟浠�
+ //鏀舵璁″垝
+ /*if (focus) {
+ List<BIPPayPlan> bipPayPlans = this.getBipPayPlan(railwayEntrust, allPrice);
+ bipYsItem.setGrandsonItem(bipPayPlans);
+ }*/
+ bipYsItems.add(bipYsItem);
+ String invoiceNo = invoiceResult == null ? "" : invoiceResult.getInvoiceNo();
+
+ /*if (railwayEntrust.getCustomerId() != null && (railwayEntrust.getCustomerId().equals(618) || railwayEntrust.getCustomerId().equals(608) || railwayEntrust.getCustomerId().equals(1367) || railwayEntrust.getCustomerId().equals(1002134))) {
+ this.getTsBt(railwayEntrust, customerCode, jyType1, focus, bipYsItems, isNd, accountUnitNumber, id2, fromStation, invoiceNo, contractNum);
+ } else {
+ this.getPtBt(railwayEntrust, customerCode, jyType1, focus, bipYsItems, isNd, accountUnitNumber, id2, fromStation, invoiceNo, contractNum);
+ }*/
+
+ bipBody.setBodyItem(bipYsItems);
+
+ /*if (railwayEntrust.getFatherEntrustId() == null && !railwayEntrust.getFyCompId().equals(227) && !order.getFiledId().equals(48)) {
+ List<Contract> contracts = fileUploadService.getContractsByEntrustId(railwayEntrust.getId());
+ System.out.println("閲嶅鍚堝悓锛�" + contracts.size() + "涓婄骇ID锛�" + railwayEntrust.getFatherEntrustId() + "缁撶畻鍗曞彿:" + railwayEntrust.getEntrustCode());
+ if (contracts != null && contracts.size() > 0) {
+ contracts.forEach(e -> {
+ BIPYsMxHeader newMx = new BIPYsMxHeader();
+ BeanUtils.copyProperties(mx, newMx);
+ if (accountLedger.getId().equals(80) || accountLedger.getId().equals(81) || accountLedger.getId().equals(82)) {
+ newMx.setContractNo("");
+ newMx.setHTBMBT(0);
+ } else {
+ newMx.setContractNo(e.getNum());
+ newMx.setHTBMBT(1);
+ }
+
+ bipBody.setFreeChId(newMx);
+ });
+ }
+
+ } else {
+ bipBody.setFreeChId(mx);
+ }*/
+
+
+ String result = bipHttpUtil.post(BipApiEnum.搴旀敹鍙戠エ淇濆瓨鎺ュ彛, new JSONObject().set("data", bipBody));
+ BipResVo resVo = JSONUtil.toBean(result, BipResVo.class);
+ //鏀惧埌鍗曟嵁璁板綍琛�
+ BipInvoice bipInvoice = new BipInvoice();
+ bipInvoice.setDay(DateUtil.date());
+ bipInvoice.setInvoice(JSONUtil.toJsonStr(bipBody));
+ bipInvoice.setType(0);
+ bipInvoice.setInvoiceType(0);
+ bipInvoice.setContractNum(railwayEntrust.getContractNo());
+ bipInvoice.setRailwayEntrustId(railwayEntrust.getId());
+ //bipInvoice.setAllId(Long.parseLong(allId+""));
+ bipInvoice.setBipCompNumber("id2");
+ bipInvoice.setDirection(1);
+ bipInvoice.setCompId(railwayEntrust.getCompId());
+ bipInvoice.setResStatus(resVo.getCode());
+// bipInvoice.setMoney(railwayEntrust.getAllPrice());
+// bipInvoice.setTonnage(railwayEntrust.getTonnage());
+// bipInvoice.setPrice(railwayEntrust.getPrice());
+ //bipInvoice.setTrainType(railwayEntrust.getTrainType());
+ BipResVo bipResVo = new BipResVo<>();
+ bipResVo.setCode(resVo.getCode());
+ BIPBody resBipBody = null;
+ if (resVo.getData() == null) {
+ resBipBody = new BIPBody();
+ } else {
+ resBipBody = JSONUtil.toBean(resVo.getData().toString(), BIPBody.class);
+ }
+
+
+ if (resVo.getCode().equals("200") || (StrUtil.isNotEmpty(resVo.getMessage()) && resVo.getMessage().contains("娲诲姩[璐㈠姟瀹℃牳]涓婃壘涓嶅埌鐢ㄦ埛")) || StrUtil.isNotEmpty(resBipBody.getCode())) {
+ bipInvoice.setResInvoice(resVo.getData().toString());
+
+ bipInvoice.setBipNumber(resBipBody.getId());
+ // bipInvoice.setCode("200");
+ bipInvoice.setCode(resBipBody.getCode());
+ bipInvoice.setMessage(resVo.getMessage());
+ bipInvoiceService.save(bipInvoice);
+ bipResVo.setCode("200");
+
+ } else {
+ if (resVo.getData() != null && StrUtil.isNotEmpty(resVo.getData().toString())) {
+ bipInvoice.setBipNumber(resBipBody.getId());
+ bipInvoice.setCode(resBipBody.getCode());
+ }
+ bipInvoice.setMessage(resVo.getMessage());
+ bipResVo.setMessage(resVo.getMessage());
+ bipInvoiceService.save(bipInvoice);
+
+ }
+ if (resVo.getData() != null && StrUtil.isNotEmpty(resVo.getData().toString())) {
+ if (resBipBody.getId() != null) {
+ try {
+ /*if (railwayEntrust.getTrainType().equals(1)) {
+ if (order != null && order.getCompId() != null && order.getCompId().equals(227) && order.getFiledId() != null && order.getFiledId().equals(48)) {
+ fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(8, allId));
+ } else {
+ fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(0, allId));
+ }
+
+ fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(3, railwayEntrust.getId(), railwayEntrust.getQualityName(), railwayEntrust.getUserCompId()));
+ } else if (railwayEntrust.getTrainType().equals(2)) {
+ fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(1, allId));
+ fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(4, railwayEntrust.getId(), railwayEntrust.getQualityName(), railwayEntrust.getUserCompId()));
+ }
+ if (StrUtil.isNotEmpty(fileUrl)) {
+ for (String s : fileUrl.split(",")) {
+ fileUploadService.uploadUrlToBip(railwayEntrust.getId(), resBipBody.getId(), s);
+ }
+ }*/
+ //鍙戠エ
+ railwayEntrust.setBipStatus(200);
+ fpInvoiceResultService.update(new UpdateWrapper<InvoiceResult>().lambda()
+ .eq(InvoiceResult::getEntrustCode, railwayEntrust.getEntrustCode())
+ .set(InvoiceResult::getPushBip, null));
+ //fpInvoiceResultService.pushBlue(railwayEntrust, 0);
+ //fileUploadService.uploadToBip(railwayEntrust.getId(), resBipBody.getId(), fileUploadService.fileUpload(2, allId));
+ } catch (Exception e) {
+ //railwayEntrust.setBipFileStatus(-1);
+ log.error("缁撶畻鍗曟帹閫侀檮浠堕敊璇�---", e);
+ e.printStackTrace();
+ }
+ }
+ }
+ return bipResVo;
+ }
+
public BipResVo sendBIPYf(SaleCredit railwayEntrust,String id1,String id2,String customerCode,String businessType,String fromStation,Integer allId,String contractNum,String number,String jyType,String accountUnitNumber,String deptCode,String userCode,Integer isNd) {
// BipResVo bipResVo1 = new BipResVo<>();
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingInfoMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingInfoMapper.java
new file mode 100644
index 0000000..404a5c2
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingInfoMapper.java
@@ -0,0 +1,11 @@
+package com.by4cloud.platformx.business.mapper;
+
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+import com.by4cloud.platformx.business.entity.BillingInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface BillingInfoMapper extends PlatformxBaseMapper<BillingInfo> {
+
+
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingItemMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingItemMapper.java
new file mode 100644
index 0000000..a8ed985
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingItemMapper.java
@@ -0,0 +1,11 @@
+package com.by4cloud.platformx.business.mapper;
+
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+import com.by4cloud.platformx.business.entity.BillingItem;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface BillingItemMapper extends PlatformxBaseMapper<BillingItem> {
+
+
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingInfoService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingInfoService.java
new file mode 100644
index 0000000..a9de235
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingInfoService.java
@@ -0,0 +1,11 @@
+package com.by4cloud.platformx.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.by4cloud.platformx.business.entity.BillingInfo;
+import com.by4cloud.platformx.business.entity.Contract;
+import com.by4cloud.platformx.business.vo.InvoicePreviewVo;
+
+public interface BillingInfoService extends IService<BillingInfo> {
+
+ BillingInfo getInviceByContractId(InvoicePreviewVo previewVo, Contract contract,Integer doType);
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingItemService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingItemService.java
new file mode 100644
index 0000000..1bdb034
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingItemService.java
@@ -0,0 +1,8 @@
+package com.by4cloud.platformx.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.by4cloud.platformx.business.entity.BillingItem;
+
+public interface BillingItemService extends IService<BillingItem> {
+
+}
\ No newline at end of file
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
index e0a96d9..a2bdce5 100644
--- 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
@@ -1,6 +1,7 @@
package com.by4cloud.platformx.business.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.by4cloud.platformx.business.entity.BillingInfo;
import com.by4cloud.platformx.business.entity.ContractOutBound;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.entity.invoice.InvoiceResult;
@@ -14,9 +15,13 @@
Map<String, Object> toRedTicket(SaleCredit saleCredit);
+ Map<String, Object> toRedTicket1(BillingInfo billingInfo);
+
InvoicingVo toGetByCompare(SaleCredit saleCredit, List<ContractOutBound> contractOutBoundList);
InvoicingVo toGetByCompareByVo(SaleCredit saleCredit, List<ContractOutBoundVo> contractOutBoundList);
+
+ InvoicingVo toGetByCompareByVo1(BillingInfo saleCredit, List<ContractOutBoundVo> contractOutBoundList);
Map<String, Object> toKaipiao(InvoicingVo invoicingVo);
@@ -24,4 +29,5 @@
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/BillingInfoServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BillingInfoServiceImpl.java
new file mode 100644
index 0000000..76a45d3
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BillingInfoServiceImpl.java
@@ -0,0 +1,235 @@
+package com.by4cloud.platformx.business.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.admin.api.entity.SysDept;
+import com.by4cloud.platformx.admin.api.feign.RemoteDeptService;
+import com.by4cloud.platformx.business.entity.*;
+import com.by4cloud.platformx.business.invoice.service.BIPYsService;
+import com.by4cloud.platformx.business.mapper.BillingInfoMapper;
+import com.by4cloud.platformx.business.service.*;
+import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
+import com.by4cloud.platformx.business.vo.InvoicePreviewVo;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 寮�绁ㄤ俊鎭�
+ *
+ * @author wjli
+ * @date 2026-06-04 10:50:20
+ */
+@Service
+@RequiredArgsConstructor
+public class BillingInfoServiceImpl extends ServiceImpl<BillingInfoMapper, BillingInfo> implements BillingInfoService {
+ private final BillingInfoMapper billingInfoMapper;
+ private final BusinessCustomerService businessCustomerService;
+ private final ContractOutBoundService contractOutBoundService;
+ private final ProductService productService;
+ private final ContractSubjectMatterService contractSubjectMatterService;
+ private final RemoteDeptService remoteDeptService;
+
+ /*
+ * 鎷兼帴寮�绁ㄦ暟鎹�
+ */
+ @Override
+ public BillingInfo getInviceByContractId(InvoicePreviewVo previewVo,Contract contract,Integer doType) {
+
+ Long contractId = previewVo.getContractId();
+
+ int showType = 0; // 0涓烘嫾鎺� 1 涓洪瑙堣绠�
+ if (previewVo.getContractOutBoundIds() != null && !previewVo.getContractOutBoundIds().isEmpty()) {
+ showType = 1;
+ }
+
+ BillingInfo billingInfo = new BillingInfo();
+ billingInfo.setContractId(contractId);
+ billingInfo.setContractName(contract.getContractName());
+ billingInfo.setContractNo(contract.getContractNo());
+
+ BusinessCustomer partA = businessCustomerService.getById(contract.getPartyAId());
+ if (partA != null) {
+ billingInfo.setPartyA(partA.getCompanyName());
+ billingInfo.setCreditCodeA(partA.getCreditCode());
+ billingInfo.setBankAccountA(partA.getBankAccount());
+ billingInfo.setBankNameA(partA.getBankName());
+ }
+ R<SysDept> r = remoteDeptService.getById(contract.getPartyBId());
+
+ SysDept dept = r.getData();
+ if (dept != null) {
+ billingInfo.setPartyB(dept.getOrgName());
+ billingInfo.setCreditCodeB(dept.getOrgCode());
+ billingInfo.setBankAccountB(dept.getOrgBankAccount());
+ billingInfo.setBankNameB(dept.getOrgBank());
+ }
+
+ if(doType==1) {
+ if (billingInfo.getId() == null) {
+ billingInfoMapper.insert(billingInfo);
+ }
+ }
+
+ Long billingInfoId = billingInfo.getId();
+
+ LambdaQueryWrapper<ContractOutBound> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(ContractOutBound::getContractId, contract.getId());
+ lambdaQueryWrapper.eq(ContractOutBound::getInvoiceSatus, 0);
+ if (showType == 1) {
+ lambdaQueryWrapper.in(BaseModel::getId, previewVo.getContractOutBoundIds());
+ }
+ lambdaQueryWrapper.orderByAsc(ContractOutBound::getOutBoundTime);
+ List<ContractOutBound> outBoundList = contractOutBoundService.list(lambdaQueryWrapper);
+
+ if (outBoundList != null) {
+ if (!outBoundList.isEmpty()) {
+ List<ContractOutBoundVo> list = new ArrayList<>();
+ for (ContractOutBound outBound : outBoundList) {
+
+ if(doType==1){
+ outBound.setInvoiceSatus(1);
+ outBound.setSaleCreditId(billingInfoId);
+ }
+
+ ContractOutBoundVo vo = new ContractOutBoundVo();
+ BeanUtil.copyProperties(outBound, vo);
+ Product product = productService.getOne(new LambdaQueryWrapper<Product>().eq(Product::getErpCode, outBound.getSubjectMatterCode()).last("limit 1"));
+ Product productP = productService.getOne(new LambdaQueryWrapper<Product>().eq(Product::getId, product.getParentId()).last("limit 1"));
+
+ if (product != null) {
+ vo.setProductId(product.getId());
+ vo.setInvoiceName("*" + product.getTaxClass() + "*" + (productP != null ? productP.getProductName() : "") + "*");
+ vo.setTaxClass(product.getTaxClass());
+ vo.setTaxCode(product.getTaxCode());
+ vo.setTaxRate(product.getTaxRate());
+ }
+
+ ContractSubjectMatter matter = contractSubjectMatterService.getOne(new LambdaQueryWrapper<ContractSubjectMatter>()
+ .eq(ContractSubjectMatter::getContractId, contract.getId())
+ .eq(ContractSubjectMatter::getMaterialCode, outBound.getSubjectMatterCode())
+ .last("limit 1")
+ );
+
+ if (matter != null) {
+ vo.setSpecification(matter.getSpecification());
+ vo.setUnit(matter.getUnit());
+ vo.setUnitPrice(matter.getUnitPrice());
+ }
+ list.add(vo);
+ }
+
+ billingInfo.setContractOutBoundList(list);
+
+ if (showType == 1) {
+ List<ContractOutBoundVo> result = getListGroupingByProductId(list);
+
+ BigDecimal totalPriceAll = BigDecimal.ZERO;
+ BigDecimal totalTaxAll = BigDecimal.ZERO;
+ BigDecimal totalPriceNoTaxAll = BigDecimal.ZERO;
+ for (ContractOutBoundVo outBoundVo : result) {
+ outBoundVo.setTotalPrice(outBoundVo.getUnitPrice().multiply(outBoundVo.getOutBoundNum()).setScale(2, RoundingMode.HALF_UP));
+ totalPriceAll = totalPriceAll.add(outBoundVo.getTotalPrice());
+
+ outBoundVo.setTotalTax(getTaxAmount(outBoundVo.getTaxRate(), outBoundVo.getTotalPrice()));
+ totalTaxAll = totalTaxAll.add(outBoundVo.getTotalTax());
+
+ outBoundVo.setTotalPriceNoTax(getNoTaxAmount(outBoundVo.getTaxRate(), outBoundVo.getTotalPrice()));
+ totalPriceNoTaxAll = totalPriceNoTaxAll.add(outBoundVo.getTotalPriceNoTax());
+ }
+ billingInfo.setTotalAmount(totalPriceAll);
+ billingInfo.setTotalTax(totalTaxAll);
+ billingInfo.setAmountNoTax(totalPriceNoTaxAll);
+ billingInfo.setContractOutBoundList(result);
+ if(billingInfoId != null){
+ billingInfoMapper.updateById(billingInfo);
+ }else{
+ billingInfoMapper.insert(billingInfo);
+ }
+ }
+ if(doType==1){
+ contractOutBoundService.updateBatchById(outBoundList);
+ }
+ }
+ }
+ return billingInfo;
+ }
+
+ private List<ContractOutBoundVo> getListGroupingByProductId(List<ContractOutBoundVo> list) {
+ //鎻愬彇productId
+ List<Long> productIds = list.stream().map(ContractOutBoundVo::getProductId).collect(Collectors.toList());
+ //鍘婚噸
+ List<Long> result = productIds.stream().distinct().collect(Collectors.toList());
+ List<ContractOutBoundVo> noRest = new ArrayList<>();
+
+ for(Long id : result){
+
+ ContractOutBoundVo newVo = new ContractOutBoundVo();
+
+ int times = 0;
+ String obIds = "";
+ BigDecimal num = BigDecimal.ZERO;
+
+ for(ContractOutBoundVo vo : list){
+ if(vo.getProductId().equals(id)){
+ times++;
+ if(times == 1){
+ BeanUtil.copyProperties(vo,newVo);
+ }
+ num = num.add(vo.getOutBoundNum());
+ if(StrUtil.isEmpty(obIds)){
+ obIds = "" + vo.getId();
+ }else{
+ obIds += "," + vo.getId();
+ }
+ }
+ }
+ newVo.setOutBoundNum(num);
+ newVo.setContractOutBoundIds(obIds);
+ noRest.add(newVo);
+ }
+ return noRest;
+ }
+
+ /* if (showType == 1) {
+ //1.涓嶅惈绋庨噾棰�=鍚◣鎬婚梅(1+绋庣巼)
+ //2.绋庨=鍚◣鎬婚梅(1+绋庣巼)x绋庣巼
+ vo.setTotalPrice(vo.getUnitPrice().multiply(outBound.getOutBoundNum()).setScale(2, RoundingMode.HALF_UP));
+ vo.setTotalTax(getTaxAmount(vo.getTaxRate(), vo.getTotalPrice()));
+ vo.setTotalPriceNoTax(getNoTaxAmount(vo.getTaxRate(), vo.getTotalPrice()));
+ }*/
+
+ public BigDecimal getTaxAmount(double taxRate,BigDecimal totalPrice) {
+ // 1銆佺◣鐜囪浆BigDecimal骞惰浆涓哄皬鏁� 13 鈫� 0.13
+ BigDecimal taxPercent = BigDecimal.valueOf(taxRate).divide(new BigDecimal("100"));
+ // 1+绋庣巼
+ BigDecimal rateSum = BigDecimal.ONE.add(taxPercent);
+ // 涓嶅惈绋庨噾棰濓紝淇濈暀2浣嶃�佸洓鑸嶄簲鍏�
+ BigDecimal noTax = totalPrice.divide(rateSum, 2, RoundingMode.HALF_UP);
+ // 绋庨
+ BigDecimal taxAmount = totalPrice.subtract(noTax);
+
+ return taxAmount;
+ }
+
+ public BigDecimal getNoTaxAmount(double taxRate,BigDecimal totalPrice){
+ // 1銆佺◣鐜囪浆BigDecimal骞惰浆涓哄皬鏁� 13 鈫� 0.13
+ BigDecimal taxPercent = BigDecimal.valueOf(taxRate).divide(new BigDecimal("100"));
+ // 1+绋庣巼
+ BigDecimal rateSum = BigDecimal.ONE.add(taxPercent);
+ // 涓嶅惈绋庨噾棰濓紝淇濈暀2浣嶃�佸洓鑸嶄簲鍏�
+ BigDecimal noTax = totalPrice.divide(rateSum, 2, RoundingMode.HALF_UP);
+ // 绋庨
+ //BigDecimal taxAmount = totalPrice.subtract(noTax);
+ return noTax;
+ }
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BillingItemServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BillingItemServiceImpl.java
new file mode 100644
index 0000000..c42597e
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BillingItemServiceImpl.java
@@ -0,0 +1,16 @@
+package com.by4cloud.platformx.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.business.entity.BillingItem;
+import com.by4cloud.platformx.business.mapper.BillingItemMapper;
+import com.by4cloud.platformx.business.service.BillingItemService;
+import org.springframework.stereotype.Service;
+/**
+ * 寮�绁ㄤ骇鍝佷俊鎭�
+ *
+ * @author wjli
+ * @date 2026-06-04 16:29:33
+ */
+@Service
+public class BillingItemServiceImpl extends ServiceImpl<BillingItemMapper, BillingItem> implements BillingItemService {
+}
\ 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
index 66e012f..98d75c6 100644
--- 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
@@ -9,6 +9,7 @@
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.BillingInfo;
import com.by4cloud.platformx.business.entity.ContractOutBound;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.entity.invoice.*;
@@ -19,6 +20,7 @@
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.BillingInfoService;
import com.by4cloud.platformx.business.service.InvoiceService;
import com.by4cloud.platformx.business.service.SaleCreditService;
import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
@@ -54,6 +56,9 @@
private SaleCreditService saleCreditService;
@Autowired
+ private BillingInfoService billingInfoService;
+
+ @Autowired
private FpInvoiceResultService invoiceResultService;
@Autowired
@@ -61,6 +66,8 @@
@Autowired
private FileUploadService fileUploadService;
+
+
@Value("${BWInvoice.ip}")
private String invoiceIp;
@@ -86,6 +93,11 @@
}
@Override
+ public Map<String, Object> toRedTicket1(BillingInfo billingInfo) {
+ return redTicket1(billingInfo);
+ }
+
+ @Override
public InvoicingVo toGetByCompare(SaleCredit saleCredit, List<ContractOutBound> contractOutBoundList) {
return getByCompare(saleCredit,contractOutBoundList);
}
@@ -93,6 +105,11 @@
@Override
public InvoicingVo toGetByCompareByVo(SaleCredit saleCredit, List<ContractOutBoundVo> contractOutBoundList) {
return getByCompareVo(saleCredit,contractOutBoundList);
+ }
+
+ @Override
+ public InvoicingVo toGetByCompareByVo1(BillingInfo saleCredit, List<ContractOutBoundVo> contractOutBoundList) {
+ return getByCompareVo1(saleCredit,contractOutBoundList);
}
/**
@@ -416,6 +433,62 @@
return invoicingVo;
}
+ private InvoicingVo getByCompareVo1(BillingInfo saleCredit, List<ContractOutBoundVo> contractOutBoundList){
+ InvoicingVo invoicingVo = new InvoicingVo();
+ invoicingVo.setSaleCreditId(saleCredit.getId());
+ invoicingVo.setEntrustCode(saleCredit.getEntrustCode());
+ //閿�鏂�
+ invoicingVo.setTaxNo(saleCredit.getCreditCodeB());
+ invoicingVo.setLedgerName(saleCredit.getPartyB());
+ invoicingVo.setOrgCode(saleCredit.getCreditCodeB());
+ invoicingVo.setFormatGenerate(false);
+ invoicingVo.setIsSplit(false);
+ invoicingVo.setFormatPushType(false);
+ invoicingVo.setTaxUserName(saleCredit.getContactPhoneB());
+ InvoicingVo.InvoicingVoInfo invoicingVoInfo = new InvoicingVo.InvoicingVoInfo();
+
+
+ invoicingVoInfo.setInvoiceTypeCode("01");
+ invoicingVoInfo.setSerialNo("MX_ZPP_" + System.currentTimeMillis());
+ invoicingVoInfo.setDrawer(saleCredit.getContactPhoneB());
+
+ Map<String, Object> ext = new HashMap<>();
+ ext.put("htbh",saleCredit.getContractNo());
+ invoicingVoInfo.setExt(ext);
+
+ invoicingVoInfo.setSystemName("xx閿�鍞鐞嗕俊鎭郴缁�");
+
+ List<InvoicingVo.InvoiceDetail> details = new ArrayList<>();
+
+ int i = 0;
+ for (ContractOutBound outBoundVo : contractOutBoundList){
+ i++;
+ InvoicingVo.InvoiceDetail invoiceDetail = new InvoicingVo.InvoiceDetail();
+ invoiceDetail.setGoodsLineNo(i);
+ invoiceDetail.setGoodsTaxRate(outBoundVo.getTaxRate());
+ invoiceDetail.setGoodsType(outBoundVo.getSubjectMatterName());
+ invoiceDetail.setGoodsUnit(outBoundVo.getUnit());
+ invoiceDetail.setGoodsQuantity(outBoundVo.getOutBoundNum());
+ invoiceDetail.setGoodsPrice(outBoundVo.getUnitPrice());
+ invoiceDetail.setGoodsTotalPrice(outBoundVo.getTotalPrice());
+ invoiceDetail.setGoodsTotalTax(outBoundVo.getTotalTax());
+ details.add(invoiceDetail);
+ }
+ //璐柟
+ invoicingVoInfo.setBuyerTaxNo(saleCredit.getCreditCodeA());
+ invoicingVoInfo.setBuyerName(saleCredit.getPartyA());
+ invoicingVoInfo.setInvoiceTotalPrice(saleCredit.getTotalAmount());
+ //invoicingVoInfo.setInvoiceTotalTax(new BigDecimal(allTax).setScale(2,BigDecimal.ROUND_HALF_UP));
+ invoicingVoInfo.setInvoiceTotalPriceTax(saleCredit.getTotalTax());
+ invoicingVoInfo.setBuyerBankName(saleCredit.getBankNameB());
+ invoicingVoInfo.setBuyerBankNumber(saleCredit.getBankAccountB());
+ //invoicingVoInfo.setBuyerAddress(.getBuyerAddress());
+ invoicingVoInfo.setBuyerTelphone(saleCredit.getContactPhoneA());
+ invoicingVoInfo.setInvoiceDetailsList(details);
+ invoicingVo.setData(invoicingVoInfo);
+ return invoicingVo;
+ }
+
private InvoicingVo getByCompareVo(SaleCredit saleCredit, List<ContractOutBoundVo> contractOutBoundList){
InvoicingVo invoicingVo = new InvoicingVo();
invoicingVo.setSaleCreditId(saleCredit.getId());
@@ -515,6 +588,81 @@
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;
+ }
+
+ public Map<String, Object> redTicket1(BillingInfo saleCredit) {
+ System.out.println("杩涘叆寮傛鏂规硶");
+ System.out.println("褰撳墠绾跨▼鍚嶇О锛�" + Thread.currentThread().getName());
+
+ try {
+ //绾㈠瓧纭鍗�
+ InvoiceResult result = invoiceResultService.getById(saleCredit.getBlueInvoiceResultId());
+ Map<String, Object> objectMap = redTicketConfirm1(result,saleCredit);
+ Boolean success = (Boolean) objectMap.get("success");
+ if(success){
+ InvoiceResult obj = (InvoiceResult) objectMap.get("obj");
+ //绾㈠瓧纭鍗曠‘璁ゆ帴鍙�
+ Map<String, Object> stringObjectMap = redTicketConfirmSearch1(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.setRedResultStatus(1);
+ billingInfoService.updateById(saleCredit);
return stringObjectMap;
}else {
@@ -1185,6 +1333,152 @@
}
/**
+ * 鏁扮數绾㈠瓧纭鍗曟柊澧炴帴鍙�
+ */
+ Map<String,Object> redTicketConfirm1(InvoiceResult invoiceResult,BillingInfo 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"));
+ billingInfoService.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紓甯�");
+ billingInfoService.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紓甯�");
+ billingInfoService.updateById(saleCredit);
+ return res;
+ }
+ }
+
+ /**
* 鏁扮數绾㈠瓧纭鍗曟煡璇㈡帴鍙�
*/
Map<String,Object> redTicketConfirmSearch(InvoiceResult invoiceResult,SaleCredit saleCredit){
@@ -1405,6 +1699,226 @@
}
/**
+ * 鏁扮數绾㈠瓧纭鍗曟煡璇㈡帴鍙�
+ */
+ Map<String,Object> redTicketConfirmSearch1(InvoiceResult invoiceResult,BillingInfo 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紓甯�");
+ billingInfoService.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());
+ billingInfoService.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紓甯�");
+ billingInfoService.updateById(saleCredit);
+ return res;
+ }
+
+ }
+
+ /**
* 绾㈠瓧纭鍗昮orm
* @param result
* @return
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/BillingInfoMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/BillingInfoMapper.xml
new file mode 100644
index 0000000..8a990db
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/resources/mapper/BillingInfoMapper.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.by4cloud.platformx.business.mapper.BillingInfoMapper">
+
+ <resultMap id="billingInfoMap" type="com.by4cloud.platformx.business.entity.BillingInfo">
+ <id property="id" column="id"/>
+ <result property="contractId" column="contract_id"/>
+ <result property="contractName" column="contract_name"/>
+ <result property="contractNo" column="contract_no"/>
+ <result property="partyAId" column="party_a_id"/>
+ <result property="partyA" column="party_a"/>
+ <result property="creditCodeA" column="credit_code_a"/>
+ <result property="bankNameA" column="bank_name_a"/>
+ <result property="bankAccountA" column="bank_account_a"/>
+ <result property="contactPhoneA" column="contact_phone_a"/>
+ <result property="partyBId" column="party_b_id"/>
+ <result property="partyB" column="party_b"/>
+ <result property="creditCodeB" column="credit_code_b"/>
+ <result property="bankNameB" column="bank_name_b"/>
+ <result property="bankAccountB" column="bank_account_b"/>
+ <result property="contactPhoneB" column="contact_phone_b"/>
+ <result property="entrustCode" column="entrust_code"/>
+ <result property="billingType" column="billing_type"/>
+ <result property="matterStr" column="matter_str"/>
+ <result property="blueInvoiceId" column="blue_invoice_id"/>
+ <result property="blueInvoiceResultId" column="blue_invoice_result_id"/>
+ <result property="blueInvoiceTime" column="blue_invoice_time"/>
+ <result property="invoicePath" column="invoice_path"/>
+ <result property="invoiceBlueUrl" column="invoice_blue_url"/>
+ <result property="bipStatus" column="bip_status"/>
+ <result property="blueResultStatus" column="blue_result_status"/>
+ <result property="invoiceRedPath" column="invoice_red_path"/>
+ <result property="invoiceRedUrl" column="invoice_red_url"/>
+ <result property="invoiceRemark" column="invoice_remark"/>
+ <result property="redInvoiceResultId" column="red_invoice_result_id"/>
+ <result property="redInvoiceTime" column="red_invoice_time"/>
+ <result property="redResultStatus" column="red_result_status"/>
+ <result property="status" column="status"/>
+ <result property="totalAmount" column="total_amount"/>
+ <result property="totalTax" column="total_tax"/>
+ <result property="amountNoTax" column="amount_no_tax"/>
+ <result property="compId" column="comp_id"/>
+ <result property="createBy" column="create_by"/>
+ <result property="createTime" column="create_time"/>
+ <result property="updateBy" column="update_by"/>
+ <result property="updateTime" column="update_time"/>
+ <result property="delFlag" column="del_flag"/>
+ </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/BillingItemMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/BillingItemMapper.xml
new file mode 100644
index 0000000..0727d9d
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/resources/mapper/BillingItemMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.by4cloud.platformx.business.mapper.BillingItemMapper">
+
+ <resultMap id="billingItemMap" type="com.by4cloud.platformx.business.entity.BillingItem">
+ <id property="id" column="id"/>
+ <result property="compId" column="comp_id"/>
+ <result property="billingInfoId" column="billing_info_id"/>
+ <result property="billingStatus" column="billing_status"/>
+ <result property="busGuestId" column="bus_guest_id"/>
+ <result property="contractId" column="contract_id"/>
+ <result property="contractOutBoundIds" column="contract_out_bound_ids"/>
+ <result property="invoiceName" column="invoice_name"/>
+ <result property="productId" column="product_id"/>
+ <result property="productNum" column="product_num"/>
+ <result property="specification" column="specification"/>
+ <result property="subjectMatterCode" column="subject_matter_code"/>
+ <result property="subjectMatterName" column="subject_matter_name"/>
+ <result property="taxClass" column="tax_class"/>
+ <result property="taxCode" column="tax_code"/>
+ <result property="taxRate" column="tax_rate"/>
+ <result property="totalPrice" column="total_price"/>
+ <result property="totalTax" column="total_tax"/>
+ <result property="totalPriceNoTax" column="total_price_no_tax"/>
+ <result property="unit" column="unit"/>
+ <result property="unitPrice" column="unit_price"/>
+ <result property="createBy" column="create_by"/>
+ <result property="createTime" column="create_time"/>
+ <result property="updateBy" column="update_by"/>
+ <result property="updateTime" column="update_time"/>
+ <result property="delFlag" column="del_flag"/>
+ </resultMap>
+</mapper>
\ No newline at end of file
--
Gitblit v1.9.1