platformx-boot/src/main/resources/application-dev.yml
@@ -2,7 +2,6 @@ data: redis: host: 127.0.0.1 #password: 123456 database: 0 # 数据库相关配置 datasource: @@ -45,23 +44,15 @@ #bip 配置 bip: url: '' flag: false url: https://bip01.res.jzeg.cn 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= flag: false url: https://einv01.res.jzeg.cn/post? # 5家单位id dept: platformx-boot/src/main/resources/application.yml
@@ -1,10 +1,10 @@ server: port: 8888 # 项目端口 port: 8899 # 项目端口 servlet: context-path: /business # 项目访问路径 servers: main-url: http://127.0.0.1:9999/admin business-url: http://127.0.0.1:8888/business business-url: http://127.0.0.1:8899/business spring: application: platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/constant/FlowNameEnum.java
@@ -12,7 +12,8 @@ @AllArgsConstructor public enum FlowNameEnum { 合同审批("合同审批"), 排产计划审批("排产计划审批"); 排产计划审批("排产计划审批"), 销售挂账审批("销售挂账审批"); private String name; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java
@@ -87,6 +87,61 @@ @Schema(description = "执行日期后多少天生成应收") private Integer execDay; @Schema(description = "环境") private String environment; @Schema(description = "标准") private String standard; @Schema(description = "质保期 使用月数") private BigDecimal useMonth; @Schema(description = "质保期 发货后月数") private BigDecimal afterShipMonth; @Schema(description = "货运方式") private String shipMethod; @Schema(description = "货运地址") private String shipAddress; @Schema(description = "包装") private String packaging; @Schema(description = "维修或换货期限") private BigDecimal repairPeriod; @Schema(description = "维修或换货 违约金") private BigDecimal repairBreachAmount; @Schema(description = "货物数量不足 补货天数") private BigDecimal goodsShort; @Schema(description = "货物数量不足 违约金") private BigDecimal goodsShortBreachAmount; @Schema(description = "每逾期一日,承担本合同总额 违约金") private BigDecimal overdueBreachAmount; @Schema(description = "逾期 日以上的,甲方有权解除合同") private BigDecimal terminateContract; @Schema(description = "双方均可向 人民法院") private String court; @Schema(description = "本合同附件包括:") private String contractAttchment; @Schema(description = "合同签订市") private String city; @Schema(description = "合同签订区") private String region; @Schema(description = "开票通知在 个工作日内") private BigDecimal invoiceNotice; private List<ContractPaymentScheduleAddDTO> contractPaymentSchedule; private List<ContractSubjectMatterAddDTO> contractSubjectMatter; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractSubjectMatterAddDTO.java
@@ -1,15 +1,17 @@ package com.by4cloud.platformx.business.dto; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.util.Date; @Data public class ContractSubjectMatterAddDTO { @Column(columnDefinition = "VARCHAR(200) comment '标的物名称'") @Schema(description = "标的物名称") private String materialName; @Schema(description = "标的物编码(内部唯一编码)") @@ -48,4 +50,12 @@ @Schema(description = "总重") private BigDecimal totalWight; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "计划交付日期") private Date plannedDeliveryDate; @Schema(description = "备注") private String remarks; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/GenInvoiceInfoDTO.java
New file @@ -0,0 +1,12 @@ package com.by4cloud.platformx.business.dto; import lombok.Data; import java.util.List; @Data public class GenInvoiceInfoDTO { private List<Long> contractOutBoundIds; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingInfo.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BillingItem.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BwRequestRecord.java
New file @@ -0,0 +1,39 @@ 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.Table; /** * 时间 * syt */ @Data @Entity//加了才能自动生成表 @Table(appliesTo="bw_request_record",comment = "bw请求记录")//给表加注释 @jakarta.persistence.Table(name = "bw_request_record")//数据库创建的表明 public class BwRequestRecord extends BaseModel<BwRequestRecord> { @Schema(description = "接口名称") @Column(columnDefinition="VARCHAR(128) comment '接口名称'") private String interfaceName; @Schema(description = "接口名称") @Column(columnDefinition="VARCHAR(128) comment '接口名称'") private String requestId; @Schema(description = "请求唯一标识") @Column(columnDefinition="VARCHAR(64) comment '请求唯一标识'") private String requestParams; @Schema(description = "回参") @Column(columnDefinition="text comment '回参'") private String responseParams; @Schema(description = "结果码") @Column(columnDefinition="VARCHAR(32) comment '结果码'") private String responseCode; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java
@@ -175,6 +175,78 @@ @Column(columnDefinition = "int comment '执行日期后多少天生成应收'") private Integer execDay; @Schema(description = "环境") @Column(columnDefinition = "VARCHAR(128) comment '环境 一煤机采购合同用'") private String environment; @Schema(description = "标准") @Column(columnDefinition = "VARCHAR(128) comment '标准 一煤机采购合同用'") private String standard; @Schema(description = "质保期 使用月数") @Column(columnDefinition = "decimal(10,0) comment '质保期 使用月数 一煤机采购合同用'") private BigDecimal useMonth; @Schema(description = "质保期 发货后月数") @Column(columnDefinition = "decimal(10,0) comment '质保期 发货后月数 一煤机采购合同用'") private BigDecimal afterShipMonth; @Schema(description = "货运方式") @Column(columnDefinition = "VARCHAR(128) comment '货运方式 一煤机采购合同用'") private String shipMethod; @Schema(description = "货运地址") @Column(columnDefinition = "VARCHAR(128) comment '货运地址 一煤机采购合同用'") private String shipAddress; @Schema(description = "包装") @Column(columnDefinition = "VARCHAR(128) comment '包装 一煤机采购合同用'") private String packaging; @Schema(description = "维修或换货期限") @Column(columnDefinition = "decimal(10,0) comment '维修或换货期限 一煤机采购合同用'") private BigDecimal repairPeriod; @Schema(description = "维修或换货 违约金") @Column(columnDefinition = "decimal(10,2) comment '维修或换货 违约金 一煤机采购合同用'") private BigDecimal repairBreachAmount; @Schema(description = "货物数量不足 补货天数") @Column(columnDefinition = "decimal(10,0) comment '货物数量不足 补货天数 一煤机采购合同用'") private BigDecimal goodsShort; @Schema(description = "货物数量不足 违约金") @Column(columnDefinition = "decimal(10,2) comment '货物数量不足 补货天数 一煤机采购合同用'") private BigDecimal goodsShortBreachAmount; @Schema(description = "每逾期一日,承担本合同总额 违约金") @Column(columnDefinition = "decimal(10,2) comment '每逾期一日,承担本合同总额违约金 补货天数 一煤机采购合同用'") private BigDecimal overdueBreachAmount; @Schema(description = "逾期 日以上的,甲方有权解除合同") @Column(columnDefinition = "decimal(10,0) comment '逾期 日以上的,甲方有权解除合同 一煤机采购合同用'") private BigDecimal terminateContract; @Schema(description = "双方均可向 人民法院") @Column(columnDefinition = "VARCHAR(128) comment '双方均可向 人民法院 一煤机采购合同用'") private String court; @Schema(description = "本合同附件包括:") @Column(columnDefinition = "VARCHAR(128) comment '本合同附件包括: 一煤机采购合同用'") private String contractAttchment; @Schema(description = "合同签订市") @Column(columnDefinition = "VARCHAR(128) comment '合同签订市 一煤机采购合同用'") private String city; @Schema(description = "合同签订区") @Column(columnDefinition = "VARCHAR(128) comment '合同签订区 一煤机采购合同用'") private String region; @Schema(description = "开票通知在 个工作日内") @Column(columnDefinition = "decimal(10,0) comment '开票通知在 个工作日内 一煤机采购合同用'") private BigDecimal invoiceNotice; /** * 临时字段 - 用于接收审批人名称等关联查询结果 */ platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java
New file @@ -0,0 +1,108 @@ package com.by4cloud.platformx.business.entity; 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 lombok.Data; import org.hibernate.annotations.Table; import java.math.BigDecimal; import java.util.Date; /** * 2026年6月5日 10:59:02 * syt */ @Data @Entity//加了才能自动生成表 @Table(appliesTo="contract_invoice",comment = "合同发票")//给表加注释 @jakarta.persistence.Table(name = "contract_invoice")//数据库创建的表明 public class ContractInvoice extends BaseModel<ContractInvoice> { @Schema(description = "关联合同ID") @Column(columnDefinition = "bigint not null comment '关联合同ID'") private Long contractId; @Schema(description = "发票类型") @Column(columnDefinition="char comment '发票类型 1/蓝 2/红'") private String invoiceCategory; @Schema(description = "开票金额(不含税)") @Column(columnDefinition="decimal(10,2) comment '开票金额(含税'") private BigDecimal invoiceTotalPrice; @Schema(description = "开票税额") @Column(columnDefinition="decimal(10,2) comment '开票税额'") private BigDecimal invoiceTotalTax; @Schema(description = "开票金额(含税)") @Column(columnDefinition="decimal(10,2) comment '开票金额(含税)'") private BigDecimal invoiceTotalPriceTax; @Schema(description = "开票时间") @Column(columnDefinition="datetime comment '开票时间'") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date invoiceTime; @Schema(description = "发票状态") @Column(columnDefinition="char comment '发票状态 1/开票中 2/已开票'") private String invoiceStatus; @Schema(description = "发票地址") @Column(columnDefinition="varchar(256) comment '开票时间'") private String invoicePath; @Schema(description = "合同出库单ID") @Column(columnDefinition="text comment '合同出库单ID'") private String outBoundId; @Schema(description = "红冲标识") @Column(columnDefinition="char comment '红冲标识 1/是 0/否 2/审核中 3/红冲待确认'") private String redReversal; @Schema(description = "发票号码") @Column(columnDefinition="varchar(64) comment '开票流水号'") private String invoiceNo; @Schema(description = "开票流水号") @Column(columnDefinition="varchar(64) comment '开票流水号'") private String serialNo; @Schema(description = "机构税号") @Column(columnDefinition="varchar(64) comment '机构税号'") private String texNo; @Schema(description = "销售方名称") @Column(columnDefinition="varchar(128) comment '销售方名称'") private String sellerTaxName; @Schema(description = "购买方名称") @Column(columnDefinition="varchar(128) comment '购买方名称'") private String buyerTaxName; @Schema(description = "发票预览信息") @Column(columnDefinition="text comment '发票预览信息'") private String invoicePreview; @Schema(description = "审批状态") @Column(columnDefinition="char comment '审批状态 1/审批通过 0/审批中 2/审批失败'") private String approvalStatus; @Schema(description = "关联蓝票ID") @Column(columnDefinition = "bigint comment '关联蓝票ID'") private Long blueInvoiceId; @Schema(description = "bip推送标识") @Column(columnDefinition="char comment 'bip推送标识 1/已推送 0/未推送'") private String bipPush; @Schema(description = "bip推送成功后返回数据ID") @Column(columnDefinition="bigint comment 'bip推送标识 1/已推送 0/未推送'") private Long bipId; @Schema(description = "发票预览bip推送成功后返回的数据结构") @Column(columnDefinition="text comment '发票预览信息'") private String bipBody; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractOutBound.java
@@ -79,58 +79,59 @@ @Column(columnDefinition="text comment '到货单据路径'") private String arrivalAttPaths; //以下开票相关 @Schema(description = "结算id") @Column(columnDefinition = "bigint default null comment '结算id'") private Long saleCreditId; @Schema(description = "开票状态(0-未开票 1-开票中 2-已开票)") @Column(columnDefinition = "tinyint(2) default 0 comment '开票状态(0-未开票 1-开票中 2-已开票)'") private Integer invoiceSatus; @Column(columnDefinition = "char default 0 comment '开票状态(0-未开票 1-开票中 2-已开票)'") private String invoiceStatus; @Schema(description = "总单价") @Column(columnDefinition = "decimal(10,0) comment '总单价'") private BigDecimal totalPrice; // //以下开票相关 // // @Schema(description = "结算id") // @Column(columnDefinition = "bigint default null comment '结算id'") // private Long saleCreditId; // @Schema(description = "总税额") @Column(columnDefinition = "decimal(10,0) comment '总税额'") private BigDecimal totalTax; //产品信息 @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; // // @Schema(description = "总单价") // @Column(columnDefinition = "decimal(10,0) comment '总单价'") // private BigDecimal totalPrice; // // @Schema(description = "总税额") // @Column(columnDefinition = "decimal(10,0) comment '总税额'") // private BigDecimal totalTax; // // //产品信息 // // @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; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java
@@ -100,11 +100,11 @@ @Column(columnDefinition = "VARCHAR(500) comment '交货/交付地点'") private String deliveryPlace; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "计划交付日期") @Column(columnDefinition = "VARCHAR(64) comment '计划交付日期'") private String plannedDeliveryDate; @Column(columnDefinition = "date comment '计划交付日期'") private Date plannedDeliveryDate; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @@ -181,4 +181,9 @@ @Schema(description = "总重") @Column(columnDefinition = "decimal(10,2) comment '总重 /kg'") private BigDecimal totalWight; @Schema(description = "备注") @Column(columnDefinition="text comment '备注'") private String remarks; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/SaleCredit.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/BipInvoice.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/FileBip.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResult.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/InvoiceResultItem.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPBody.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPPayPlan.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYs.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYsItem.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYsMx.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BIPYsMxHeader.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BipResVo.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/BipTokenVo.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/InvoicingVo.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/invoice/vo/RedConfirmVo.java
File was deleted platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
@@ -17,12 +17,18 @@ @Schema(description = "合同名称") private String contractName; @Schema(description = "合同名称") private String contractNo; @Schema(description = "甲方id") private Long partyAId; @Schema(description = "甲方名称") private String partyA; @Schema(description = "甲方税号") private String partyAOrgCode; @Schema(description = "乙方id") private Long partyBId; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoiceOutBoundVo.java
New file @@ -0,0 +1,33 @@ package com.by4cloud.platformx.business.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import lombok.Data; import java.math.BigDecimal; @Data public class ContractInvoiceOutBoundVo { private Long id; @Schema(description = "标的物名称") private String subjectMatterName; @Schema(description = "标的物编码") private String subjectMatterCode; @Schema(description = "标的物编码(内部唯一名称)") private String materialInternalName; @Schema(description = "出库数量") @Column(columnDefinition="decimal(10,0) comment '出库数量'") private BigDecimal outBoundNum; @Schema(description = "单价") private BigDecimal unitPrice; @Schema(description = "开票状态(0-未开票 1-开票中 2-已开票)") private String invoiceStatus; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundMergeVo.java
New file @@ -0,0 +1,42 @@ package com.by4cloud.platformx.business.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import lombok.Data; import java.math.BigDecimal; @Data public class ContractOutBoundMergeVo { @Schema(description = "税收分类") private String taxClass; @Schema(description = "税收分类拼接") private String itemName; private String materialName; @Schema(description = "标的物编码(内部唯一编码)") private String materialCode; @Schema(description = "标的物编码(内部唯一名称)") private String materialInternalName; private String specification; @Schema(description = "计量单位") private String unit; @Schema(description = "数量") private BigDecimal quantity; @Schema(description = "单价") private BigDecimal unitPrice; @Schema(description = "税率(百分比,如13表示13%)") private BigDecimal taxRate; @Schema(description = "税收分类编码") private String taxCode; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundVo.java
@@ -8,7 +8,7 @@ import java.math.BigDecimal; @Data public class ContractOutBoundVo extends ContractOutBound { public class ContractOutBoundVo { //产品中信息 @Schema(description = "产品id") platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/GenInvoiceInfoVo.java
New file @@ -0,0 +1,43 @@ package com.by4cloud.platformx.business.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class GenInvoiceInfoVo { @Schema(description = "甲方名称") private String partyA; @Schema(description = "甲方税号") private String partyAOrgCode; @Schema(description = "乙方名称") private String partyB; @Schema(description = "乙方税号") private String partyBOrgCode; @Schema(description = "甲方开户行") private String partyAOpenBank; @Schema(description = "甲方银行账号") private String partyABankAccount; @Schema(description = "乙方开户行") private String partyBOpenBank; @Schema(description = "乙方银行账号") private String partyBBankAccount; @Schema(description = "开票金额(含税)") private BigDecimal totalPrice; @Schema(description = "大写开票金额") private String priceWords; private List<InvoiceItemVo> invoiceItemList; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoiceItemVo.java
New file @@ -0,0 +1,38 @@ package com.by4cloud.platformx.business.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import lombok.Data; import java.math.BigDecimal; @Data public class InvoiceItemVo { private String erpCode; private String itemName; private String specification; @Schema(description = "计量单位") private String unit; @Schema(description = "数量") private BigDecimal quantity; @Schema(description = "单价") private BigDecimal unitPrice; @Schema(description = "金额(不含税)") private BigDecimal priceNoTax; @Schema(description = "税率(百分比,如13表示13%)") private BigDecimal taxRate; @Schema(description = "税额") private BigDecimal priceTax; @Schema(description = "税收分类编码") private String taxCode; } platformx-business-finance-biz/pom.xml
@@ -141,23 +141,6 @@ <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> platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingInfoController.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BillingItemController.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BusinessCustomerController.java
@@ -52,7 +52,8 @@ wrapper.eq(businessCustomer.getIndustryId()!=null,BusinessCustomer::getIndustryId,businessCustomer.getIndustryId()); wrapper.eq(businessCustomer.getAreaId()!=null,BusinessCustomer::getAreaId,businessCustomer.getAreaId()); wrapper.like(StrUtil.isNotEmpty(businessCustomer.getCompanyName()),BusinessCustomer::getCompanyName,businessCustomer.getCompanyName()); return R.ok(businessCustomerService.page(page, wrapper)); wrapper.orderByDesc(BusinessCustomer::getCreateTime); return R.ok(businessCustomerService.pageByScope(page, wrapper)); } /** @@ -66,7 +67,7 @@ public R getBusinessCustomerList(@ParameterObject BusinessCustomer businessCustomer) { LambdaQueryWrapper<BusinessCustomer> wrapper = Wrappers.lambdaQuery(); wrapper.like(StrUtil.isNotEmpty(businessCustomer.getCompanyName()),BusinessCustomer::getCompanyName,businessCustomer.getCompanyName()); return R.ok(businessCustomerService.list(wrapper)); return R.ok(businessCustomerService.listByScope(wrapper)); } /** platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractBillingController.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractController.java
@@ -195,4 +195,37 @@ public void exportContractYMJJGCLWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractYMJJGCLWord(id,response); } /** * 根据模版生成word一煤机工业品买卖合同 * @param id id * @return R */ @Operation(summary = "根据模版生成word合同" , description = "根据模版生成word合同" ) @GetMapping("/exportContractYMJGYPMMWord/{id}" ) public void exportContractYMJGYPMMWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractYMJGYPMMWord(id,response); } /** * 根据模版生成word一煤机工矿产品买卖合同 * @param id id * @return R */ @Operation(summary = "根据模版生成word合同" , description = "根据模版生成word合同" ) @GetMapping("/exportContractYMJGKCPMMWord/{id}" ) public void exportContractYMJGKCPMMWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractYMJGKCPMMWord(id,response); } /** * 根据模版生成word一煤机采购合同 * @param id id * @return R */ @Operation(summary = "根据模版生成word合同" , description = "根据模版生成word合同" ) @GetMapping("/exportContractYMJCGWord/{id}" ) public void exportContractYMJCGWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractYMJCGWord(id,response); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractInvoiceController.java
New file @@ -0,0 +1,126 @@ package com.by4cloud.platformx.business.controller; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.by4cloud.platformx.business.dto.GenInvoiceInfoDTO; import com.by4cloud.platformx.business.entity.Contract; import com.by4cloud.platformx.business.service.ContractInvoiceService; import com.by4cloud.platformx.business.service.ContractService; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.mybatis.BaseModel; import com.by4cloud.platformx.common.security.annotation.Inner; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.HttpHeaders; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; /** * 合同开票 * * @author syt * @date 2026年6月5日 08:13:55 */ @RestController @RequiredArgsConstructor @RequestMapping("/contractInvoice" ) @Tag(description = "contract" , name = "合同开票" ) @SecurityRequirement(name = HttpHeaders.AUTHORIZATION) public class ContractInvoiceController { private final ContractService contractService; private final ContractInvoiceService contractInvoiceService; /** * 分页查询 * @param page 分页对象 * @param contract 合同管理 * @return */ @Operation(summary = "分页查询" , description = "分页查询" ) @GetMapping("/page" ) public R getContractPage(@ParameterObject Page page, @ParameterObject Contract contract) { LambdaQueryWrapper<Contract> wrapper = Wrappers.lambdaQuery(); wrapper.like(StringUtils.isNotBlank(contract.getContractName()),Contract::getContractName,contract.getContractName()); wrapper.like(StringUtils.isNotBlank(contract.getPartyA()),Contract::getPartyA,contract.getPartyA()); wrapper.eq(Contract::getBillingStatus,contract.getBillingStatus()); if (StrUtil.equals(contract.getBillingStatus(),"1")){ wrapper.orderByDesc(BaseModel::getCreateTime); }else { wrapper.orderByAsc(BaseModel::getCreateTime); } return R.ok(contractService.pageByScope(page, wrapper)); } /** * 获取合同出库信息 * @return */ @GetMapping("/getContractOutBound/{contractId}" ) public R getContractOutBound(@PathVariable("contractId")Long contractId) { return contractInvoiceService.getContractOutBound(contractId); } /** * 生成开票预览信息 * @return */ @PostMapping("/genInvoiceInfo" ) public R genInvoiceInfo(@RequestBody GenInvoiceInfoDTO genInvoiceInfoDTO) { return contractInvoiceService.genInvoiceInfo(genInvoiceInfoDTO); } /** * 开蓝票 * @return */ @PostMapping("/toInvoice" ) public R toInvoice(@RequestBody GenInvoiceInfoDTO genInvoiceInfoDTO) { return contractInvoiceService.toInvoice(genInvoiceInfoDTO); } /** * 获取已开发票 * @return */ @GetMapping("/getContractInvoiceList/{contractId}" ) public R getContractInvoiceList(@PathVariable("contractId")Long contractId) { return contractInvoiceService.getContractInvoiceList(contractId); } /** * 蓝票查询 * @return */ @Inner(value = false) @GetMapping("/queryBlueInvoice") public R queryBlueInvoice() { return contractInvoiceService.queryBlueInvoice(); } /** * 开红票 * @return */ @GetMapping("/toRedInvoice/{invoiceId}") public R toRedInvoice(@PathVariable("invoiceId")Long invoiceId) { return contractInvoiceService.toRedInvoice(invoiceId); } /** * 红票查询 * @return */ @Inner(value = false) @GetMapping("/queryRedInvoice") public R queryRedInvoice() { return contractInvoiceService.queryRedInvoice(); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/FlowCallBackController.java
@@ -1,6 +1,7 @@ package com.by4cloud.platformx.business.controller; import com.by4cloud.platformx.business.constant.FlowNameEnum; import com.by4cloud.platformx.business.service.ContractInvoiceService; import com.by4cloud.platformx.business.service.ContractService; import com.by4cloud.platformx.flow.task.constant.TaskStatusEnum; import com.by4cloud.platformx.flow.task.dto.ProcessInstanceParamDto; @@ -26,6 +27,7 @@ public class FlowCallBackController { private final ContractService contractService; private final ContractInvoiceService contractInvoiceService; /** * 开始节点事件 @@ -35,6 +37,9 @@ @PostMapping("/startNodeEvent") public void startNodeEvent(@RequestBody ProcessNodeRecordParamDto recordParamDto){ if (recordParamDto.getFlowName().equals(FlowNameEnum.合同审批.getName())) { } if (recordParamDto.getFlowName().equals(FlowNameEnum.销售挂账审批.getName())) { } } @@ -55,6 +60,16 @@ contractService.refuseApproval(Long.valueOf(processInstanceParamDto.getParamMap().get("id")+"")); } } if (processInstanceParamDto.getFlowName().equals(FlowNameEnum.销售挂账审批.getName())) { //通过后更新主表状态 if (processInstanceParamDto.getTaskStatus()== TaskStatusEnum.YJS.getCode()){ contractInvoiceService.takeEffect(Long.valueOf(processInstanceParamDto.getParamMap().get("id")+"")); } //拒绝后回退主表状态 if (processInstanceParamDto.getTaskStatus()== TaskStatusEnum.JJ.getCode()){ contractInvoiceService.refuseApproval(Long.valueOf(processInstanceParamDto.getParamMap().get("id")+"")); } } } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/InvoiceResultController.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductController.java
@@ -54,7 +54,8 @@ wrapper.like(StrUtil.isNotEmpty(product.getProductName()),Product::getProductName,product.getProductName()); wrapper.like(StrUtil.isNotEmpty(product.getMainCode()),Product::getMainCode,product.getMainCode()); wrapper.like(StrUtil.isNotEmpty(product.getErpCode()),Product::getErpCode,product.getErpCode()); Page<Product> page1 = productService.page(page, wrapper); wrapper.orderByDesc(Product::getCreateTime); Page<Product> page1 = productService.pageByScope(page, wrapper); List<Product> list = page1.getRecords(); for(Product product1 : list){ Product parent = productService.getById(product1.getParentId()); @@ -81,7 +82,7 @@ LambdaQueryWrapper<Product> wrapper = Wrappers.lambdaQuery(); wrapper.like(StrUtil.isNotEmpty(product.getProductName()),Product::getProductName,product.getProductName()); wrapper.last("limit 20"); return R.ok(productService.list(wrapper)); return R.ok(productService.listByScope(wrapper)); } /** @@ -98,7 +99,7 @@ wrapper.like(StrUtil.isNotEmpty(product.getProductName()),Product::getProductName,product.getProductName()); wrapper.eq(product.getParentId()!=null,Product::getParentId,product.getParentId()); wrapper.last("limit 30"); return R.ok(productService.list(wrapper)); return R.ok(productService.listByScope(wrapper)); } /** platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/controller/FpInvoiceResultController.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/BipInvoiceMapper.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FileBipMapper.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultItemMapper.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/mapper/FpInvoiceResultMapper.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BIPYsService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/BipInvoiceService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileBipService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FileUploadService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultItemService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/FpInvoiceResultService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BIPYsServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/BipInvoiceServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileBipServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FileUploadServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultItemServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/service/impl/FpInvoiceResultServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipApiEnum.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/BipHttpUtil.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/invoice/utils/NumUtils.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingInfoMapper.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BillingItemMapper.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BwRequestRecordMapper.java
New file @@ -0,0 +1,10 @@ package com.by4cloud.platformx.business.mapper; import com.by4cloud.platformx.business.entity.BusinessCustomer; import com.by4cloud.platformx.business.entity.BwRequestRecord; import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface BwRequestRecordMapper extends PlatformxBaseMapper<BwRequestRecord> { } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/ContractInvoiceMapper.java
New file @@ -0,0 +1,9 @@ package com.by4cloud.platformx.business.mapper; import com.by4cloud.platformx.business.entity.ContractInvoice; import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface ContractInvoiceMapper extends PlatformxBaseMapper<ContractInvoice> { } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/SaleCreditMapper.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingInfoService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BillingItemService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BusinessCustomerService.java
@@ -2,7 +2,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.by4cloud.platformx.business.entity.BusinessCustomer; import com.by4cloud.platformx.common.data.mybatis.IIService; public interface BusinessCustomerService extends IService<BusinessCustomer> { public interface BusinessCustomerService extends IIService<BusinessCustomer> { } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractInvoiceService.java
New file @@ -0,0 +1,24 @@ package com.by4cloud.platformx.business.service; import com.by4cloud.platformx.business.dto.GenInvoiceInfoDTO; import com.by4cloud.platformx.common.core.util.R; public interface ContractInvoiceService { R getContractOutBound(Long contractId); R genInvoiceInfo(GenInvoiceInfoDTO genInvoiceInfoDTO); R toInvoice(GenInvoiceInfoDTO genInvoiceInfoDTO); R getContractInvoiceList(Long contractId); R toRedInvoice(Long invoiceId); R queryBlueInvoice(); R queryRedInvoice(); void takeEffect(Long id); void refuseApproval(Long id); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractService.java
@@ -38,4 +38,10 @@ void exportContractYMJJGCLWord(Long id,HttpServletResponse response); R genCycleReceiced(); void exportContractYMJGYPMMWord(Long id, HttpServletResponse response); void exportContractYMJGKCPMMWord(Long id, HttpServletResponse response); void exportContractYMJCGWord(Long id, HttpServletResponse response); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/InvoiceService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/PaymentConfirmService.java
@@ -1,5 +1,6 @@ package com.by4cloud.platformx.business.service; import com.alibaba.fastjson.JSONObject; import com.by4cloud.platformx.business.dto.PaymentConfirmAddDTO; import com.by4cloud.platformx.business.entity.PaymentConfirm; import com.by4cloud.platformx.common.core.util.R; @@ -10,4 +11,8 @@ R add(PaymentConfirmAddDTO addDTO); R syncPaymentRecepit(); String getAccessToken(String accessToken); void saveBipRequestRecord(JSONObject params,String methodName, String result); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ProductService.java
@@ -3,10 +3,11 @@ import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.extension.service.IService; import com.by4cloud.platformx.business.entity.Product; import com.by4cloud.platformx.common.data.mybatis.IIService; import java.util.List; public interface ProductService extends IService<Product> { public interface ProductService extends IIService<Product> { List<Tree<Long>> treeList(Long parentId, String productName); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/SaleCreditService.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BillingInfoServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BillingItemServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java
New file @@ -0,0 +1,649 @@ package com.by4cloud.platformx.business.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.api.feign.RemoteFlowProcessService; import com.by4cloud.platformx.business.constant.FlowNameEnum; import com.by4cloud.platformx.business.dto.GenInvoiceInfoDTO; import com.by4cloud.platformx.business.entity.*; import com.by4cloud.platformx.business.mapper.*; import com.by4cloud.platformx.business.service.ContractInvoiceService; import com.by4cloud.platformx.business.service.PaymentConfirmService; import com.by4cloud.platformx.business.vo.ContractInvoiceOutBoundVo; import com.by4cloud.platformx.business.vo.ContractOutBoundMergeVo; import com.by4cloud.platformx.business.vo.GenInvoiceInfoVo; import com.by4cloud.platformx.business.vo.InvoiceItemVo; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.mybatis.BaseModel; import com.by4cloud.platformx.common.security.util.SecurityUtils; import com.by4cloud.platformx.flow.task.dto.ProcessInstanceParamDto; import com.github.yulichang.wrapper.MPJLambdaWrapper; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springdoc.core.annotations.ParameterObject; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @Slf4j @Service @RequiredArgsConstructor public class ContractInvoiceServiceImpl extends ServiceImpl<ContractInvoiceMapper, ContractInvoice> implements ContractInvoiceService { private final ContractMapper contractMapper; private final BusinessCustomerMapper businessCustomerMapper; private final ContractOutBoundMapper contractOutBoundMapper; private final ContractSubjectMatterMapper subjectMatterMapper; private final ProductMapper productMapper; private final BwRequestRecordMapper bwRequestRecordMapper; private final RemoteDeptService remoteDeptService; private final RemoteFlowProcessService remoteFlowProcessService; private final PaymentConfirmService paymentConfirmService; private final RedisTemplate redisTemplate; @Value("${BWInvoice.url}") private String bwUrl; @Value("${BWInvoice.flag}") private Boolean bwFlag; @Value("${bip.url}") private String url; @Value("${bip.appKey}") private String appKey; @Value("${bip.appSecret}") private String appSecret; @Override public R getContractOutBound(Long contractId) { MPJLambdaWrapper<ContractOutBound> wrapper = new MPJLambdaWrapper<ContractOutBound>() .selectAll(ContractOutBound.class) .eq(ContractOutBound::getContractId, contractId); List<ContractInvoiceOutBoundVo> invoiceOutBoundVoList = contractOutBoundMapper.selectJoinList(ContractInvoiceOutBoundVo.class, wrapper); return R.ok(invoiceOutBoundVoList); } @Override public R genInvoiceInfo(GenInvoiceInfoDTO genInvoiceInfoDTO) { if (ArrayUtil.isEmpty(genInvoiceInfoDTO.getContractOutBoundIds())) { return R.failed("请选择开票出库单后再操作"); } ContractOutBound outBound = contractOutBoundMapper.selectById(genInvoiceInfoDTO.getContractOutBoundIds().get(0)); Contract contract = contractMapper.selectById(outBound.getContractId()); if (ObjUtil.isNull(contract)) { return R.failed("合同信息异常,请联系技术人员"); } R<SysDept> r = remoteDeptService.getById(contract.getPartyBId()); if (!r.isOk()) { return R.failed("获取开票单位异常"); } SysDept b = r.getData(); GenInvoiceInfoVo vo = genInvoiceInfoVo(genInvoiceInfoDTO, contract, b); return R.ok(vo); } private GenInvoiceInfoVo genInvoiceInfoVo(GenInvoiceInfoDTO genInvoiceInfoDTO, Contract contract, SysDept b) { GenInvoiceInfoVo vo = new GenInvoiceInfoVo(); BusinessCustomer a = businessCustomerMapper.selectById(contract.getPartyAId()); vo.setPartyA(a.getCompanyName()); vo.setPartyAOrgCode(a.getCreditCode()); vo.setPartyAOpenBank(a.getBankName()); vo.setPartyABankAccount(a.getBankAccount()); vo.setPartyB(b.getOrgName()); vo.setPartyBOrgCode(b.getOrgCode()); vo.setPartyBOpenBank(b.getOrgBank()); vo.setPartyBBankAccount(b.getOrgBankAccount()); List<InvoiceItemVo> invoiceItemVoList = new ArrayList<>(); List<String> erpCode = new ArrayList<>(); List<ContractOutBoundMergeVo> mergeOutBounds = new ArrayList<>(); List<ContractOutBound> outBounds = contractOutBoundMapper.selectList(Wrappers.<ContractOutBound>lambdaQuery() .in(ContractOutBound::getId, genInvoiceInfoDTO.getContractOutBoundIds())); if (ArrayUtil.isNotEmpty(outBounds.toArray())) { outBounds.stream().forEach(contractOutBound -> { if (!ArrayUtil.contains(erpCode.toArray(), contractOutBound.getSubjectMatterCode())) { erpCode.add(contractOutBound.getSubjectMatterCode()); ContractOutBoundMergeVo mergeVo = new ContractOutBoundMergeVo(); mergeVo.setMaterialCode(contractOutBound.getSubjectMatterCode()); mergeVo.setMaterialInternalName(contractOutBound.getSubjectMatterName()); mergeVo.setQuantity(contractOutBound.getOutBoundNum()); Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, contractOutBound.getSubjectMatterCode()) .eq(Product::getCompId, SecurityUtils.getUser().getCompId()).last("limit 1")); if (ObjUtil.isNotNull(product)) { mergeVo.setTaxClass(product.getTaxClass()); mergeVo.setSpecification(product.getProductType()); mergeVo.setTaxRate(new BigDecimal(product.getTaxRate())); mergeVo.setTaxCode(product.getTaxCode()); Product productClass = productMapper.selectById(product.getParentId()); if (ObjUtil.isNotNull(product)) { mergeVo.setItemName("*" + product.getTaxClass() + "*" + productClass.getProductName()); } } ContractSubjectMatter subjectMatter = subjectMatterMapper.selectOne(Wrappers.<ContractSubjectMatter>lambdaQuery() .eq(ContractSubjectMatter::getMaterialCode, contractOutBound.getSubjectMatterCode()) .eq(ContractSubjectMatter::getContractId, contract.getId()).last("limit 1")); if (ObjUtil.isNotNull(subjectMatter)) { mergeVo.setUnitPrice(subjectMatter.getUnitPrice()); mergeVo.setUnit(subjectMatter.getUnit()); } mergeOutBounds.add(mergeVo); } else { List<ContractOutBoundMergeVo> filteredList = mergeOutBounds.stream() .filter(item -> contractOutBound.getSubjectMatterCode().equals(item.getMaterialCode())) // 防止空指针,建议常量在前 .collect(Collectors.toList()); if (ArrayUtil.isNotEmpty(filteredList.toArray())) { filteredList.get(0).setQuantity(filteredList.get(0).getQuantity().add(contractOutBound.getOutBoundNum())); } } }); if (ArrayUtil.isNotEmpty(mergeOutBounds.toArray())) { invoiceItemVoList = BeanUtil.copyToList(mergeOutBounds, InvoiceItemVo.class); invoiceItemVoList.stream().forEach(invoiceItemVo -> { // for (InvoiceItemVo invoiceItemVo:invoiceItemVoList) { BigDecimal itemPrice = invoiceItemVo.getUnitPrice().multiply(invoiceItemVo.getQuantity()); BigDecimal itemPriceTax = itemPrice.divide(new BigDecimal("100").add(invoiceItemVo.getTaxRate()), 2, RoundingMode.HALF_UP).multiply(invoiceItemVo.getTaxRate()); invoiceItemVo.setPriceTax(itemPriceTax); invoiceItemVo.setPriceNoTax(itemPrice.subtract(itemPriceTax)); }); vo.setTotalPrice(invoiceItemVoList.stream().map(item -> item.getPriceTax().add(item.getPriceNoTax())).reduce(BigDecimal.ZERO, BigDecimal::add)); vo.setInvoiceItemList(invoiceItemVoList); vo.setPriceWords(Convert.digitToChinese(vo.getTotalPrice())); } } return vo; } @Override public R toInvoice(GenInvoiceInfoDTO genInvoiceInfoDTO) { if (ArrayUtil.isEmpty(genInvoiceInfoDTO.getContractOutBoundIds().toArray())) { return R.failed("请选择开票出库单后再操作"); } ContractOutBound outBound = contractOutBoundMapper.selectById(genInvoiceInfoDTO.getContractOutBoundIds().get(0)); Contract contract = contractMapper.selectById(outBound.getContractId()); if (ObjUtil.isNull(contract)) { return R.failed("合同信息异常,请联系技术人员"); } R<SysDept> r = remoteDeptService.getById(contract.getPartyBId()); if (!r.isOk()) { return R.failed("获取开票单位异常"); } SysDept b = r.getData(); GenInvoiceInfoVo vo = genInvoiceInfoVo(genInvoiceInfoDTO, contract, b); //发票保存 ContractInvoice invoice = saveContractInvoice(vo, contract, genInvoiceInfoDTO.getContractOutBoundIds(), DateUtil.current() + ""); //启动流程 ProcessInstanceParamDto dto = new ProcessInstanceParamDto(); Map<String, Object> map = BeanUtil.beanToMap(invoice); dto.setParamMap(map); dto.setFlowName(FlowNameEnum.销售挂账审批.name()); R r1 = remoteFlowProcessService.startProcessInstance(dto); if (r1.getCode() == 1) { return R.failed("流程启动失败"); } //更新合同出库单状态 genInvoiceInfoDTO.getContractOutBoundIds().stream().forEach(outBoundId -> { ContractOutBound bound = contractOutBoundMapper.selectById(outBoundId); bound.setInvoiceStatus("1"); contractOutBoundMapper.updateById(bound); }); return R.ok(); } private void saveBwRequestRecord(String method, String requestId, String toJSONString, String result) { BwRequestRecord bwRequestRecord = new BwRequestRecord(); bwRequestRecord.setRequestId(requestId); bwRequestRecord.setRequestParams(toJSONString); bwRequestRecord.setResponseParams(result); bwRequestRecord.setResponseCode(JSONObject.parseObject(result).getString("success")); bwRequestRecord.setInterfaceName(method); bwRequestRecordMapper.insert(bwRequestRecord); } private JSONObject genBlueInvoice(GenInvoiceInfoVo vo, String serialNo) { JSONObject jsonObject = new JSONObject(); //销方 jsonObject.put("taxNo", vo.getPartyBOrgCode());//税号 jsonObject.put("isSplit", false);//超过发票单张限额是否需要拆分开具,默认不拆分(拆分只支持发票类型代码为 专票 004 普票 007 电子票 026的 jsonObject.put("taxUserName", "");//登录名为税局页面登 录名 jsonObject.put("formatGenerate", false);//是否需要生成版式返回版式链接(true / false) jsonObject.put("formatPushType", false);//版式生成是否推送(true / false) //data JSONObject data = new JSONObject(); data.put("invoiceTypeCode", "01"); data.put("serialNo", serialNo); //data.invoiceDetailsList JSONArray invoiceDetailsList = new JSONArray(); Integer lineNo = 1; for (InvoiceItemVo invoiceItemVo : vo.getInvoiceItemList()) { JSONObject invoiceDetail = new JSONObject(); invoiceDetail.put("goodsLineNo", lineNo); invoiceDetail.put("goodsCode", invoiceItemVo.getTaxCode()); invoiceDetail.put("goodsTaxRate", invoiceItemVo.getTaxRate().divide(new BigDecimal("100"))); invoiceDetail.put("goodsUnit", invoiceItemVo.getUnit()); invoiceDetail.put("goodsQuantity", invoiceItemVo.getQuantity()); invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice()); invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getUnitPrice().multiply(invoiceItemVo.getQuantity())); invoiceDetail.put("goodsTotalTax", invoiceItemVo.getPriceTax()); invoiceDetailsList.add(invoiceDetail); lineNo++; } jsonObject.put("invoiceDetailsList", invoiceDetailsList); //购方 data.put("buyerTaxNo", vo.getPartyAOrgCode()); data.put("buyerName", vo.getPartyA()); data.put("invoiceTotalPrice", vo.getTotalPrice().subtract(vo.getInvoiceItemList().stream().map(item -> item.getPriceTax()).reduce(BigDecimal.ZERO, BigDecimal::add))); data.put("invoiceTotalTax", vo.getInvoiceItemList().stream().map(item -> item.getPriceTax()).reduce(BigDecimal.ZERO, BigDecimal::add)); data.put("invoiceTotalPriceTax", vo.getTotalPrice()); data.put("buyerBankName", vo.getPartyAOpenBank()); data.put("buyerBankNumber", vo.getPartyABankAccount()); jsonObject.put("data", data); return jsonObject; } private ContractInvoice saveContractInvoice(GenInvoiceInfoVo genInvoiceInfoVo, Contract contract, List<Long> outBoundIds, String serialNo) { ContractInvoice invoice = new ContractInvoice(); invoice.setContractId(contract.getId()); invoice.setInvoiceCategory("1"); invoice.setRedReversal("0"); invoice.setSerialNo(serialNo); invoice.setTexNo(genInvoiceInfoVo.getPartyBOrgCode()); invoice.setSellerTaxName(genInvoiceInfoVo.getPartyB()); invoice.setBuyerTaxName(genInvoiceInfoVo.getPartyA()); invoice.setInvoiceTotalTax(genInvoiceInfoVo.getInvoiceItemList().stream().map(item -> item.getPriceTax()).reduce(BigDecimal.ZERO, BigDecimal::add)); invoice.setInvoiceTotalPrice(genInvoiceInfoVo.getTotalPrice().subtract(invoice.getInvoiceTotalTax())); invoice.setInvoiceTotalPriceTax(genInvoiceInfoVo.getTotalPrice()); invoice.setInvoicePreview(JSONObject.toJSONString(genInvoiceInfoVo)); invoice.setInvoiceStatus("1"); invoice.setApprovalStatus("0"); invoice.setOutBoundId(outBoundIds.stream() .map(String::valueOf) // 或者 .map(Object::toString) .collect(Collectors.joining(","))); baseMapper.insert(invoice); return invoice; } @Override public R getContractInvoiceList(Long contractId) { List<ContractInvoice> invoiceList = baseMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery() .eq(ContractInvoice::getContractId, contractId) .orderByDesc(ContractInvoice::getCreateTime)); return R.ok(invoiceList); } @Override public R toRedInvoice(Long invoiceId) { ContractInvoice blueInvoice = baseMapper.selectById(invoiceId); blueInvoice.setRedReversal("2"); baseMapper.updateById(blueInvoice); ContractInvoice invoice = new ContractInvoice(); invoice.setContractId(blueInvoice.getContractId()); invoice.setTexNo(blueInvoice.getTexNo()); invoice.setSellerTaxName(blueInvoice.getSellerTaxName()); invoice.setBuyerTaxName(blueInvoice.getBuyerTaxName()); invoice.setInvoiceTotalTax(blueInvoice.getInvoiceTotalTax()); invoice.setInvoiceTotalPrice(blueInvoice.getInvoiceTotalPrice()); invoice.setInvoiceTotalPriceTax(blueInvoice.getInvoiceTotalPriceTax()); invoice.setInvoicePreview(blueInvoice.getInvoicePreview()); invoice.setInvoiceTotalTax(blueInvoice.getInvoiceTotalTax()); invoice.setInvoiceTotalPrice(blueInvoice.getInvoiceTotalPrice()); invoice.setInvoiceTotalPriceTax(blueInvoice.getInvoiceTotalPriceTax()); invoice.setOutBoundId(blueInvoice.getOutBoundId()); invoice.setInvoiceTime(new Date()); invoice.setInvoiceCategory("2"); invoice.setRedReversal("0"); invoice.setInvoiceStatus("0"); invoice.setSerialNo(DateUtil.current() + ""); invoice.setBlueInvoiceId(invoiceId); invoice.setApprovalStatus("0"); baseMapper.insert(invoice); //启动流程 ProcessInstanceParamDto dto = new ProcessInstanceParamDto(); Map<String, Object> map = BeanUtil.beanToMap(invoice); dto.setParamMap(map); dto.setFlowName(FlowNameEnum.销售挂账审批.name()); R r1 = remoteFlowProcessService.startProcessInstance(dto); if (r1.getCode() == 1) { return R.failed("流程启动失败"); } return R.ok(); } private JSONObject genRedInvoice(ContractInvoice blueInvoice, String redConfirmSerialNo) { JSONObject jsonObject = new JSONObject(); jsonObject.put("taxNo", blueInvoice.getTexNo()); jsonObject.put("redConfirmSerialNo", redConfirmSerialNo); jsonObject.put("entryIdentity", "01"); jsonObject.put("sellerTaxNo", blueInvoice.getTexNo()); jsonObject.put("sellerTaxName", blueInvoice.getSellerTaxName()); jsonObject.put("buyerTaxName", blueInvoice.getBuyerTaxName()); jsonObject.put("originalInvoiceNo", blueInvoice.getInvoiceNo()); jsonObject.put("originInvoiceIsPaper", "N"); jsonObject.put("originInvoiceDate", blueInvoice.getInvoiceTime()); jsonObject.put("originInvoiceTotalPrice", blueInvoice.getInvoiceTotalPrice()); jsonObject.put("originInvoiceTotalTax", blueInvoice.getInvoiceTotalPrice()); jsonObject.put("originInvoiceType", "01"); jsonObject.put("invoiceTotalPrice", blueInvoice.getInvoiceTotalPrice()); jsonObject.put("invoiceTotalTax", blueInvoice.getInvoiceTotalPrice()); jsonObject.put("redInvoiceLabel", "2"); GenInvoiceInfoVo vo = BeanUtil.copyProperties(JSONObject.parseObject(blueInvoice.getInvoicePreview()), GenInvoiceInfoVo.class); JSONArray invoiceDetailsList = new JSONArray(); Integer lineNo = 1; for (InvoiceItemVo invoiceItemVo : vo.getInvoiceItemList()) { JSONObject invoiceDetail = new JSONObject(); invoiceDetail.put("originalInvoiceDetailNo", lineNo); invoiceDetail.put("goodsLineNo", lineNo); invoiceDetail.put("goodsCode", invoiceItemVo.getTaxCode()); invoiceDetail.put("goodsTaxRate", invoiceItemVo.getTaxRate().divide(new BigDecimal("100"))); invoiceDetail.put("goodsUnit", invoiceItemVo.getUnit()); invoiceDetail.put("goodsQuantity", invoiceItemVo.getQuantity()); invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice()); invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getUnitPrice().multiply(invoiceItemVo.getQuantity())); invoiceDetail.put("goodsTotalTax", invoiceItemVo.getPriceTax()); invoiceDetailsList.add(invoiceDetail); lineNo++; } jsonObject.put("redConfirmDetailReqEntityList", invoiceDetailsList); return jsonObject; } @Override public R queryBlueInvoice() { if (bwFlag) { List<ContractInvoice> contractInvoices = baseMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery() .eq(ContractInvoice::getInvoiceCategory, "1").eq(ContractInvoice::getInvoiceStatus, "1")); if (ArrayUtil.isNotEmpty(contractInvoices.toArray())) { contractInvoices.stream().forEach(contractInvoice -> { JSONObject request = new JSONObject(); request.put("tax_no", contractInvoice.getTexNo()); JSONObject data = new JSONObject(); data.put("serial_no", contractInvoice.getSerialNo()); data.put("return_type", "1"); String requestId = IdUtil.fastUUID(); log.info("serial_no:{},发票查询入参:{},", contractInvoice.getSerialNo(), request.toJSONString()); String result = HttpUtil.post("method=baiwang.output.format.query&version=1.0&request_id=" + requestId, request.toJSONString()); log.info("serial_no:{},发票查询回参:{},", contractInvoice.getSerialNo(), result); saveBwRequestRecord("baiwang.output.format.query", requestId, request.toJSONString(), result); JSONObject resultObj = JSONObject.parseObject(result); if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && resultObj.getBoolean("success")) { JSONObject model = resultObj.getJSONObject("model"); contractInvoice.setInvoicePath(model.getString("query_data")); contractInvoice.setInvoiceStatus("2"); baseMapper.updateById(contractInvoice); } //推送BIP pushBipInvoice(contractInvoice); }); } } return R.ok(); } private void pushBipInvoice(ContractInvoice contractInvoice) { String accessToken = ""; if (redisTemplate.hasKey("BIP_TOKEN")) { accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN"); } else { paymentConfirmService.getAccessToken(accessToken); } if (StrUtil.isEmpty(accessToken)) { log.error("bip accessToken 获取异常"); return; } //蓝票 if (StrUtil.equals(contractInvoice.getInvoiceCategory(),"1")) { JSONObject params = genBlueReceiveParams(contractInvoice); String finalAccessToken = accessToken; log.info("XSJZ_YS_DJ_INSERT Request:", params.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/receivable/save?access_token=" + finalAccessToken, params.toJSONString()); log.info("XSJZ_YS_DJ_INSERT Response:{}", result); //保存请求记录 paymentConfirmService.saveBipRequestRecord(params, "< XSJZ_YS_DJ_001>-应收发票保存接口", result); JSONObject resultJson = JSONObject.parseObject(result); if (resultJson.containsKey("code") && resultJson.getString("code").equals("200")) { JSONObject data = resultJson.getJSONObject("data"); contractInvoice.setBipPush("1"); contractInvoice.setBipId(data.getLong("id")); contractInvoice.setBipBody(resultJson.getString("data")); baseMapper.updateById(contractInvoice); } } //红票 if (StrUtil.equals(contractInvoice.getInvoiceCategory(),"2")) { JSONObject params = genRedReceiveParams(contractInvoice); String finalAccessToken = accessToken; log.info("XSJZ_YS_DJ_DELETE Request:", params.toJSONString()); String result = HttpUtil.post(url + "/yonbip/EFI/receivable/delete?access_token=" + finalAccessToken, params.toJSONString()); log.info("XSJZ_YS_DJ_DELETE Response:{}", result); //保存请求记录 paymentConfirmService.saveBipRequestRecord(params, "< XSJZ_YS_DJ_002>-应收发票删除接口", result); JSONObject resultJson = JSONObject.parseObject(result); if (resultJson.containsKey("code") && resultJson.getString("code").equals("200")) { contractInvoice.setBipPush("1"); baseMapper.updateById(contractInvoice); } } } private JSONObject genRedReceiveParams(ContractInvoice contractInvoice) { JSONObject jsonObject = new JSONObject(); JSONObject data = new JSONObject(); data.put("id",contractInvoice.getBipId()); jsonObject.put("data",data); return jsonObject; } private JSONObject genBlueReceiveParams(ContractInvoice contractInvoice) { JSONObject jsonObject = new JSONObject(); JSONObject data = new JSONObject(); if (contractInvoice.getInvoiceCategory().equals("1")){ data.put("direction","1"); }else { data.put("direction","-1"); } data.put("billDate",DateUtil.format(contractInvoice.getInvoiceTime(),DatePattern.NORM_DATETIME_FORMAT)); data.put("objectType","1"); data.put("exchangeRate","1"); data.put("exchangeRate",DateUtil.now()); data.put("_status","Insert"); GenInvoiceInfoVo vo = BeanUtil.copyProperties(JSONObject.parseObject(contractInvoice.getInvoicePreview()), GenInvoiceInfoVo.class); JSONArray bodyItem = new JSONArray(); for (InvoiceItemVo invoiceItemVo : vo.getInvoiceItemList()) { JSONObject item = new JSONObject(); item.put("invoiceNo",contractInvoice.getInvoiceNo()); item.put("materialCode",invoiceItemVo.getErpCode()); item.put("taxRate", invoiceItemVo.getTaxRate()); item.put("oriTaxAmount", invoiceItemVo.getPriceTax()); item.put("oriTaxIncludedAmount", invoiceItemVo.getUnitPrice().multiply(invoiceItemVo.getQuantity())); item.put("_status","Insert"); bodyItem.add(item); } data.put("bodyItem",bodyItem); jsonObject.put("data",data); return jsonObject; } @Override public R queryRedInvoice() { if (bwFlag) { List<ContractInvoice> contractInvoices = baseMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery() .eq(ContractInvoice::getInvoiceCategory, "2").eq(ContractInvoice::getInvoiceStatus, "3")); if (ArrayUtil.isNotEmpty(contractInvoices.toArray())) { contractInvoices.stream().forEach(contractInvoice -> { JSONObject request = new JSONObject(); request.put("taxNo", contractInvoice.getTexNo()); JSONObject data = new JSONObject(); data.put("redConfirmSerialNo", contractInvoice.getSerialNo()); data.put("buySelSelector", "1"); String requestId = IdUtil.fastUUID(); log.info("serial_no:{},红字确认单查询入参:{},", contractInvoice.getSerialNo(), request.toJSONString()); String result = HttpUtil.post("method=baiwang.output.redinvoice.formlist&&version=1.0&request_id=" + requestId, request.toJSONString()); log.info("serial_no:{},红字确认单查询回参:{},", contractInvoice.getSerialNo(), result); JSONObject resultObj = JSONObject.parseObject(result); saveBwRequestRecord("baiwang.output.redinvoice.formlist", requestId, request.toJSONString(), result); if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && resultObj.getBoolean("success")) { JSONArray models = JSONArray.parseArray(resultObj.getString("model")); if (ArrayUtil.isNotEmpty(models.toArray())) { contractInvoice.setInvoiceStatus("2"); contractInvoice.setRedReversal("1"); baseMapper.updateById(contractInvoice); } } }); } } return R.ok(); } @Override public void takeEffect(Long id) { ContractInvoice invoice = baseMapper.selectById(id); Contract contract = contractMapper.selectById(invoice.getContractId()); GenInvoiceInfoVo vo = BeanUtil.copyProperties(JSONObject.parseObject(invoice.getInvoicePreview()), GenInvoiceInfoVo.class); //蓝票 if (invoice.getInvoiceCategory().equals("1")) { // TODO 开蓝票接口 JSONObject request = genBlueInvoice(vo, invoice.getSerialNo()); if (bwFlag) { String requestId = IdUtil.fastUUID(); log.info("蓝票请求接口入参", request.toJSONString()); String result = HttpUtil.post(bwUrl + "method=baiwang.output.invoice.issue&version=1.0&requestId=" + requestId, request.toJSONString()); log.info("蓝票请求接口回参", result); saveBwRequestRecord("baiwang.output.invoice.issue", requestId, request.toJSONString(), result); JSONObject resultObj = JSONObject.parseObject(result); if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && !resultObj.getBoolean("success")) { } JSONArray models = JSONArray.parseArray(resultObj.getString("success")); if (ArrayUtil.isNotEmpty(models.toArray())) { JSONObject model = (JSONObject) models.get(0); Date invoiceDate = DateUtil.parse(model.getString("invoiceDate"), DatePattern.PURE_DATETIME_PATTERN); invoice.setInvoiceTime(invoiceDate); invoice.setInvoiceNo(model.getString("invoiceNo")); } } //合同状态 if (StrUtil.equals(contract.getBillingStatus(), "2")) { if (ObjUtil.isNull(contract.getBillingAmout())) { contract.setBillingAmout(vo.getTotalPrice()); if (contract.getBillingAmout().compareTo(contract.getAmount()) == 0) { contract.setBillingStatus("3"); } contractMapper.updateById(contract); } else { contract.setBillingAmout(vo.getTotalPrice().add(contract.getBillingAmout())); if (contract.getBillingAmout().compareTo(contract.getAmount()) == 0) { contract.setBillingStatus("3"); } contractMapper.updateById(contract); } } else { if (ObjUtil.isNull(contract.getBillingAmout())) { contract.setBillingAmout(vo.getTotalPrice()); contractMapper.updateById(contract); } else { contract.setBillingAmout(vo.getTotalPrice().add(contract.getBillingAmout())); contractMapper.updateById(contract); } } } //红票 if (invoice.getInvoiceCategory().equals("2")) { // TODO 开红票接口 ContractInvoice blueInvoice = baseMapper.selectById(invoice.getBlueInvoiceId()); JSONObject request = genRedInvoice(blueInvoice, invoice.getSerialNo()); String requestId = IdUtil.fastUUID(); if (bwFlag) { log.info("红字确认单请求接口入参", request.toJSONString()); String result = HttpUtil.post(bwUrl + "method=baiwang.output.redinvoice.add&version=1.0&requestId=" + requestId, request.toJSONString()); log.info("红字确认单请求接口回参", result); saveBwRequestRecord("baiwang.output.redinvoice.add", requestId, request.toJSONString(), result); JSONObject resultObj = JSONObject.parseObject(result); if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && !resultObj.getBoolean("success")) { JSONArray models = JSONArray.parseArray(resultObj.getString("success")); if (ArrayUtil.isNotEmpty(models.toArray())) { JSONObject model = (JSONObject) models.get(0); if (StrUtil.isEmpty(model.getString("confirmBillingMark"))||StrUtil.equals(model.getString("confirmBillingMark"),"N")) { //等待确认 invoice.setRedReversal("3"); }else if (StrUtil.equals(model.getString("confirmBillingMark"),"Y")) { //确认即开 invoice.setInvoiceNo(model.getString("redInvoiceNo")); invoice.setRedReversal("1"); pushBipInvoice(invoice); } } } } //更新合同开票状态 contract.setBillingStatus("2"); contract.setBillingAmout(contract.getAmount().subtract(invoice.getInvoiceTotalPriceTax())); contractMapper.updateById(contract); //更新合同出库单状态 String[] outBoundIds = blueInvoice.getOutBoundId().split(","); Arrays.stream(outBoundIds).forEach(outBoundId -> { ContractOutBound bound = contractOutBoundMapper.selectById(outBoundId); bound.setInvoiceStatus("0"); contractOutBoundMapper.updateById(bound); }); } invoice.setApprovalStatus("1"); baseMapper.updateById(invoice); } @Override public void refuseApproval(Long id) { ContractInvoice invoice = baseMapper.selectById(id); //更新合同出库单状态 String[] outBoundIds = invoice.getOutBoundId().split(","); Arrays.stream(outBoundIds).forEach(outBoundId -> { ContractOutBound bound = contractOutBoundMapper.selectById(outBoundId); bound.setInvoiceStatus("0"); contractOutBoundMapper.updateById(bound); }); invoice.setApprovalStatus("2"); baseMapper.updateById(invoice); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
@@ -36,6 +36,7 @@ import java.io.IOException; import java.io.OutputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @@ -58,7 +59,7 @@ private final MeterReadRecordMapper meterReadRecordMapper; private final ContractExecDateMapper contractExecDateMapper; private final RemoteFlowProcessService remoteFlowProcessService; private final ContractTemplateMapper contractTemplateMapper; private final ProductMapper productMapper; private final RemoteDeptService remoteDeptService; @Value("${file.local.base-path}") @@ -235,6 +236,10 @@ detailVo.setContractSubjectMatter(subjectMatterList); List<ContractPaymentSchedule> paymentScheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery().eq(ContractPaymentSchedule::getContractId, contract.getId())); detailVo.setContractPaymentSchedule(paymentScheduleList); BusinessCustomer a = businessCustomerMapper.selectById(contract.getPartyAId()); if (ObjUtil.isNotNull(a)){ detailVo.setPartyAOrgCode(a.getCreditCode()); } return detailVo; } @@ -657,7 +662,7 @@ try { // 1. 加载模版 // 假设模版在 resources/templates/template.docx ClassPathResource resource = new ClassPathResource("template/ymjjgclht.docx"); ClassPathResource resource = new ClassPathResource("template/ymj/ymjjgclht.docx"); // 配置列表策略 Configure config = Configure.builder() .bind("items", new LoopRowTableRenderPolicy()) // 将 items 绑定到行循环策略 @@ -760,4 +765,312 @@ } return R.ok(); } @Override public void exportContractYMJGYPMMWord(Long id, HttpServletResponse response) { Contract contract = baseMapper.selectById(id); List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery() .eq(ContractSubjectMatter::getContractId, id).orderByAsc(ContractSubjectMatter::getCreateTime)); Map<String, Object> map = new HashMap<>(); //合同基本信息 map.put("partyA", contract.getPartyA()); map.put("partyB", contract.getPartyB()); map.put("contractNo", contract.getContractNo()); map.put("signPlace", contract.getSignPlace()); map.put("signDate", DateUtil.formatDate(contract.getSignDate())); map.put("signDateYMD", DateUtil.format(contract.getSignDate(), DatePattern.CHINESE_DATE_PATTERN)); map.put("total", contract.getAmount()); map.put("amountWords", Convert.digitToChinese(contract.getAmount())); //标的物 List<Map<String, Object>> items = new ArrayList<>(); List<RowRenderData> dataList = new ArrayList<>(); AtomicReference<Integer> no = new AtomicReference<>(0); subjectMatterList.stream().forEach(contractSubjectMatter -> { Map<String, Object> item = new HashMap<>(); item.put("no", no); item.put("materialName", contractSubjectMatter.getMaterialName()); item.put("guige", contractSubjectMatter.getSpecification()); item.put("unit", contractSubjectMatter.getUnit()); item.put("quantity", contractSubjectMatter.getQuantity()); item.put("danzhong", contractSubjectMatter.getSingleWight()); item.put("zongzhong", contractSubjectMatter.getTotalWight()); item.put("unitPrice", contractSubjectMatter.getUnitPrice()); item.put("price", contractSubjectMatter.getTotalAmount()); if (no.get().equals(Integer.valueOf(0))){ item.put("deliveryCycle",contract.getDeliveryCycle()); } items.add(item); no.updateAndGet(v -> v + 1); }); map.put("items", items); //定制方 BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId()); map.put("companyName", customer.getCompanyName()); map.put("legalPerson", customer.getLegalPerson()); map.put("contactPhone", customer.getContactPhone()); map.put("bankName", customer.getBankName()); map.put("bankAccount", customer.getBankAccount()); //承揽方 R<SysDept> r = remoteDeptService.getById(contract.getPartyBId()); SysDept dept = r.getData(); map.put("orgName", dept.getOrgName()); map.put("legalPerson1", StrUtil.isNotEmpty(dept.getLegalPerson()) ? dept.getLegalPerson() : ""); map.put("entrustedAgent", StrUtil.isNotEmpty(dept.getLegalPerson()) ? "" : dept.getEntrustedAgent()); map.put("orgContact", dept.getOrgContact()); map.put("orgBank", dept.getOrgBank()); map.put("orgBankAccount", dept.getOrgBankAccount()); //生成文件名 Long time = new Date().getTime(); // 生成的word格式 String formatSuffix = ".docx"; // 拼接后的文件名 String fileName = time + formatSuffix;//文件名 带后缀 //导出word try { // 1. 加载模版 // 假设模版在 resources/templates/template.docx ClassPathResource resource = new ClassPathResource("template/ymj/ymjgypmmht.docx"); // 配置列表策略 Configure config = Configure.builder() .bind("items", new LoopRowTableRenderPolicy()) // 将 items 绑定到行循环策略 .build(); // 2. 编译并渲染数据 XWPFTemplate xwpfTemplate = XWPFTemplate.compile(resource.getInputStream(), config).render(map); // 3. 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".docx"); // 4. 写入输出流 OutputStream out = response.getOutputStream(); xwpfTemplate.write(out); out.flush(); out.close(); xwpfTemplate.close(); // 重要:关闭模版释放资源 } catch (IOException e) { e.printStackTrace(); } } @Override public void exportContractYMJGKCPMMWord(Long id, HttpServletResponse response) { Contract contract = baseMapper.selectById(id); List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery() .eq(ContractSubjectMatter::getContractId, id).orderByAsc(ContractSubjectMatter::getCreateTime)); Map<String, Object> map = new HashMap<>(); //合同基本信息 map.put("partyA", contract.getPartyA()); map.put("partyB", contract.getPartyB()); map.put("contractNo", contract.getContractNo()); map.put("signPlace", contract.getSignPlace()); map.put("signDate", DateUtil.formatDate(contract.getSignDate())); map.put("signDateYMD", DateUtil.format(contract.getSignDate(), DatePattern.CHINESE_DATE_PATTERN)); map.put("total", contract.getAmount()); map.put("amountWords", Convert.digitToChinese(contract.getAmount())); map.put("deliveryCycle",contract.getDeliveryCycle()); //标的物 List<Map<String, Object>> items = new ArrayList<>(); AtomicReference<Integer> no = new AtomicReference<>(0); subjectMatterList.stream().forEach(contractSubjectMatter -> { Map<String, Object> item = new HashMap<>(); item.put("no", no); item.put("materialName", contractSubjectMatter.getMaterialName()); item.put("guige", contractSubjectMatter.getSpecification()); item.put("unit", contractSubjectMatter.getUnit()); item.put("quantity", contractSubjectMatter.getQuantity()); item.put("danzhong", contractSubjectMatter.getSingleWight()); item.put("zongzhong", contractSubjectMatter.getTotalWight()); item.put("unitPrice", contractSubjectMatter.getUnitPrice()); item.put("price", contractSubjectMatter.getTotalAmount()); items.add(item); no.updateAndGet(v -> v + 1); }); map.put("items", items); //定制方 BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId()); map.put("companyName", customer.getCompanyName()); map.put("legalPerson", customer.getLegalPerson()); map.put("contactPhone", customer.getContactPhone()); map.put("bankName", customer.getBankName()); map.put("bankAccount", customer.getBankAccount()); //承揽方 R<SysDept> r = remoteDeptService.getById(contract.getPartyBId()); SysDept dept = r.getData(); map.put("orgName", dept.getOrgName()); map.put("legalPerson1", StrUtil.isNotEmpty(dept.getLegalPerson()) ? dept.getLegalPerson() : ""); map.put("entrustedAgent", StrUtil.isNotEmpty(dept.getLegalPerson()) ? "" : dept.getEntrustedAgent()); map.put("orgContact", dept.getOrgContact()); map.put("orgBank", dept.getOrgBank()); map.put("orgBankAccount", dept.getOrgBankAccount()); //生成文件名 Long time = new Date().getTime(); // 生成的word格式 String formatSuffix = ".docx"; // 拼接后的文件名 String fileName = time + formatSuffix;//文件名 带后缀 //导出word try { // 1. 加载模版 // 假设模版在 resources/templates/template.docx ClassPathResource resource = new ClassPathResource("template/ymj/ymjgkcpmmht.docx"); // 配置列表策略 Configure config = Configure.builder() .bind("items", new LoopRowTableRenderPolicy()) // 将 items 绑定到行循环策略 .build(); // 2. 编译并渲染数据 XWPFTemplate xwpfTemplate = XWPFTemplate.compile(resource.getInputStream(), config).render(map); // 3. 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".docx"); // 4. 写入输出流 OutputStream out = response.getOutputStream(); xwpfTemplate.write(out); out.flush(); out.close(); xwpfTemplate.close(); // 重要:关闭模版释放资源 } catch (IOException e) { e.printStackTrace(); } } @Override public void exportContractYMJCGWord(Long id, HttpServletResponse response) { Contract contract = baseMapper.selectById(id); List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery() .eq(ContractSubjectMatter::getContractId, id).orderByAsc(ContractSubjectMatter::getCreateTime)); Map<String, Object> map = new HashMap<>(); //合同基本信息 map.put("partyA", contract.getPartyA()); map.put("partyB", contract.getPartyB()); map.put("contractNo", contract.getContractNo()); map.put("signPlace", contract.getSignPlace()); map.put("signDate", DateUtil.formatDate(contract.getSignDate())); map.put("signDateYMD", DateUtil.format(contract.getSignDate(), DatePattern.CHINESE_DATE_PATTERN)); map.put("total", contract.getAmount()); map.put("amountWords", Convert.digitToChinese(contract.getAmount())); map.put("environment",contract.getEnvironment()); map.put("standard",contract.getStandard()); map.put("useMonth",contract.getUseMonth()); map.put("afterShipMonth",contract.getAfterShipMonth()); map.put("shipMethod",contract.getShipMethod()); map.put("shipAddress",contract.getShipAddress()); map.put("packaging",contract.getPackaging()); map.put("repairPeriod",contract.getRepairPeriod()); map.put("repairBreachAmount",contract.getRepairBreachAmount()); map.put("goodsShort",contract.getGoodsShort()); map.put("goodsShortBreachAmount",contract.getGoodsShortBreachAmount()); map.put("overdueBreachAmount",contract.getOverdueBreachAmount()); map.put("terminateContract",contract.getTerminateContract()); map.put("court",contract.getCourt()); map.put("contractAttchment",contract.getContractAttchment()); map.put("invoiceNotice",contract.getInvoiceNotice()); //标的物 List<Map<String, Object>> items = new ArrayList<>(); AtomicReference<Integer> no = new AtomicReference<>(0); subjectMatterList.stream().forEach(contractSubjectMatter -> { Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode,contractSubjectMatter.getMaterialCode()).last("limit 1")); Map<String, Object> item = new HashMap<>(); item.put("no", no); item.put("materialName", contractSubjectMatter.getMaterialName()); item.put("guige", contractSubjectMatter.getSpecification()); item.put("unit", contractSubjectMatter.getUnit()); item.put("quantity", contractSubjectMatter.getQuantity()); item.put("unitPrice", contractSubjectMatter.getUnitPrice()); item.put("priceTax", contractSubjectMatter.getUnitPrice().multiply(contractSubjectMatter.getQuantity()).setScale(2, RoundingMode.HALF_UP)); item.put("priceNoTax", contractSubjectMatter.getUnitPrice().multiply(contractSubjectMatter.getQuantity()) .subtract(contractSubjectMatter.getUnitPrice().multiply(contractSubjectMatter.getQuantity()) .divide(new BigDecimal("100").add(new BigDecimal(product.getTaxRate())),2, RoundingMode.HALF_UP).multiply(new BigDecimal(product.getTaxRate()))) .setScale(2, RoundingMode.HALF_UP)); item.put("deliveryDate", DateUtil.formatDate(contractSubjectMatter.getPlannedDeliveryDate())); item.put("remarks", contractSubjectMatter.getRemarks()); map.put("taxRate",product.getTaxRate()); items.add(item); no.updateAndGet(v -> v + 1); }); //付款 List<ContractPaymentSchedule> scheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery() .eq(ContractPaymentSchedule::getContractId, id).orderByAsc(ContractPaymentSchedule::getCreateTime)); scheduleList.stream().forEach(contractPaymentSchedule -> { if (contractPaymentSchedule.getStageName().equals("合同签订")){ map.put("htqdbl",contractPaymentSchedule.getPaymentRatio()); map.put("htqdje",contractPaymentSchedule.getPlannedAmount()); map.put("htqdjr",contractPaymentSchedule.getAgreedDays()); } if (contractPaymentSchedule.getStageName().equals("发货前")){ map.put("fhqbl",contractPaymentSchedule.getPaymentRatio()); map.put("fhqje",contractPaymentSchedule.getPlannedAmount()); } if (contractPaymentSchedule.getStageName().equals("调试完成或验收")){ map.put("ysbl",contractPaymentSchedule.getPaymentRatio()); map.put("ysje",contractPaymentSchedule.getPlannedAmount()); map.put("ysjr",contractPaymentSchedule.getAgreedDays()); } if (contractPaymentSchedule.getStageName().equals("质保金")){ map.put("zbjbl",contractPaymentSchedule.getPaymentRatio()); map.put("zbjje",contractPaymentSchedule.getPlannedAmount()); map.put("zbjjr",contractPaymentSchedule.getAgreedDays()); } }); map.put("items", items); //定制方 BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId()); map.put("companyName", customer.getCompanyName()); map.put("legalPerson", customer.getLegalPerson()); map.put("contactPhone", customer.getContactPhone()); map.put("bankName", customer.getBankName()); map.put("bankAccount", customer.getBankAccount()); //承揽方 R<SysDept> r = remoteDeptService.getById(contract.getPartyBId()); SysDept dept = r.getData(); map.put("orgName", dept.getOrgName()); map.put("legalPerson1", StrUtil.isNotEmpty(dept.getLegalPerson()) ? dept.getLegalPerson() : ""); map.put("entrustedAgent", StrUtil.isNotEmpty(dept.getLegalPerson()) ? "" : dept.getEntrustedAgent()); map.put("orgContact", dept.getOrgContact()); map.put("orgBank", dept.getOrgBank()); map.put("orgBankAccount", dept.getOrgBankAccount()); //生成文件名 Long time = new Date().getTime(); // 生成的word格式 String formatSuffix = ".docx"; // 拼接后的文件名 String fileName = time + formatSuffix;//文件名 带后缀 //导出word try { // 1. 加载模版 // 假设模版在 resources/templates/template.docx ClassPathResource resource = new ClassPathResource("template/ymj/ymjcght.docx"); // 配置列表策略 Configure config = Configure.builder() .bind("items", new LoopRowTableRenderPolicy()) // 将 items 绑定到行循环策略 .build(); // 2. 编译并渲染数据 XWPFTemplate xwpfTemplate = XWPFTemplate.compile(resource.getInputStream(), config).render(map); // 3. 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".docx"); // 4. 写入输出流 OutputStream out = response.getOutputStream(); xwpfTemplate.write(out); out.flush(); out.close(); xwpfTemplate.close(); // 重要:关闭模版释放资源 } catch (IOException e) { e.printStackTrace(); } } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/InvoiceServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
@@ -384,6 +384,7 @@ contractOutBound.setOutBoundAttNames(addDTO.getOutBoundAttNames()); contractOutBound.setOutBoundAttPaths(addDTO.getOutBoundAttPaths()); contractOutBound.setOutBoundId(outBoundId); contractOutBound.setInvoiceStatus("0"); contractOutBoundMapper.insert(contractOutBound); if (StrUtil.isEmpty(contract.getContractCategory())){ if (DateUtil.compare(addDTO.getOutBoundTime(),contract.getExpirationDate())>0){ platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
@@ -465,7 +465,7 @@ String result = HttpUtil.post(url + "/yonbip/EFI/collection/list?access_token=" + finalAccessToken, params.toJSONString()); log.info("SK_CX Response:{}", result); //保存请求记录 saveBipRequestRecord(params, result); saveBipRequestRecord(params,"<XSJZ_SK_CX_001>-收款单查询接口", result); JSONObject resultJson = JSONObject.parseObject(result); if (resultJson.containsKey("code") && resultJson.getString("code").equals("200")) { handleAndSave(bipCode, resultJson); @@ -493,7 +493,8 @@ return params; } private void getAccessToken(String accessToken) { @Override public String getAccessToken(String accessToken) { long timestamp = System.currentTimeMillis(); Map<String, Object> paramMap = new HashMap<>(); paramMap.put("appKey", appKey); @@ -514,20 +515,22 @@ JSONObject tokenJson = JSONObject.parseObject(getTokenResult); if (!tokenJson.containsKey("code") || !tokenJson.getString("code").equals("200")) { log.error("Get access_token ERROR"); return; return ""; } if (ObjUtil.isNull(tokenJson.get("data")) || ObjUtil.isNull(JSONObject.parseObject(tokenJson.getString("data")))) { log.error("access_token value exception"); return; return ""; } accessToken = JSONObject.parseObject(tokenJson.getString("data")).getString("access_token"); log.info("access_token value:", accessToken); redisTemplate.opsForValue().set("BIP_TOKEN", accessToken, tokenJson.getIntValue("expire") - 10, TimeUnit.SECONDS); return accessToken; } private void saveBipRequestRecord(JSONObject params, String result) { @Override public void saveBipRequestRecord(JSONObject params, String methodName, String result) { BipRequestRecord record = new BipRequestRecord(); record.setInterfaceName("<XSJZ_SK_CX_001>-收款单查询接口"); record.setInterfaceName(methodName); record.setRequestParams(params.toJSONString()); record.setResponseParams(result); record.setResponseCode(JSONObject.parseObject(result).getString("code")); platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java
@@ -9,6 +9,7 @@ import com.by4cloud.platformx.business.entity.Product; import com.by4cloud.platformx.business.mapper.ProductMapper; import com.by4cloud.platformx.business.service.ProductService; import com.by4cloud.platformx.common.data.datascope.DataScope; import jakarta.validation.constraints.NotNull; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -32,9 +33,9 @@ Long parent = parentId == null ? 0l : parentId; List<TreeNode<Long>> collect = baseMapper .selectList(Wrappers.<Product>lambdaQuery() .selectListByScope(Wrappers.<Product>lambdaQuery() .like(StrUtil.isNotBlank(productName), Product::getProductName, productName) .orderByAsc(Product::getCreateTime)) .orderByAsc(Product::getCreateTime), DataScope.of("comp_id")) .stream().map(getNodeFunction()).collect(Collectors.toList()); // 模糊查询 不组装树结构 直接返回 表格方便编辑 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/SaleCreditServiceImpl.java
File was deleted platformx-business-finance-biz/src/main/resources/mapper/BillingInfoMapper.xml
File was deleted platformx-business-finance-biz/src/main/resources/mapper/BillingItemMapper.xml
File was deleted platformx-business-finance-biz/src/main/resources/mapper/BipInvoiceMapper.xml
File was deleted platformx-business-finance-biz/src/main/resources/mapper/BwRequestRecordMapper.xml
New file @@ -0,0 +1,20 @@ <?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.BwRequestRecordMapper"> <resultMap id="bipRequestRecordMap" type="com.by4cloud.platformx.business.entity.BwRequestRecord"> <id property="id" column="id"/> <result property="compId" column="comp_id"/> <result property="interfaceName" column="interface_name"/> <result property="requestId" column="request_id"/> <result property="requestParams" column="request_params"/> <result property="responseCode" column="response_code"/> <result property="responseParams" column="response_params"/> <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> platformx-business-finance-biz/src/main/resources/mapper/ContractInvoiceMapper.xml
New file @@ -0,0 +1,21 @@ <?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.ContractInvoiceMapper"> <resultMap id="ContractInvoiceMap" type="com.by4cloud.platformx.business.entity.ContractInvoice"> <id property="id" column="id"/> <result property="compId" column="comp_id"/> <result property="contractId" column="contract_id"/> <result property="invoicePrice" column="invoice_price"/> <result property="invoiceTime" column="invoice_time"/> <result property="invoicePath" column="invoice_path"/> <result property="invoiceCategory" column="invoice_category"/> <result property="redReversal" column="red_reversal"/> <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> platformx-business-finance-biz/src/main/resources/mapper/FileBipMapper.xml
File was deleted platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultItemMapper.xml
File was deleted platformx-business-finance-biz/src/main/resources/mapper/FpInvoiceResultMapper.xml
File was deleted platformx-business-finance-biz/src/main/resources/mapper/SaleCreditMapper.xml
File was deleted platformx-business-finance-biz/src/main/resources/template/ymj/ymjcght.docxBinary files differ
platformx-business-finance-biz/src/main/resources/template/ymj/ymjgkcpmmht.docxBinary files differ
platformx-business-finance-biz/src/main/resources/template/ymj/ymjgypmmht.docxBinary files differ
platformx-business-finance-biz/src/main/resources/template/ymj/ymjjgclht.docxBinary files differ