Merge remote-tracking branch 'origin/master' into dev

This commit is contained in:
2026-10-17 01:12:05 +08:00
403 changed files with 44738 additions and 845 deletions
@@ -73,7 +73,9 @@ public interface ISysClient {
String REGION = API_PREFIX + "/region";
String FEE_ITEMS = API_PREFIX + "/fee-items";
String CARGO_TYPES = API_PREFIX + "/cargo-types";
String MEASUREMENT_UNITS = API_PREFIX + "/measurement-units";
String PERMISSIONS = API_PREFIX + "/permissions";
String INVOICE_ITEMS = API_PREFIX + "/invoice-items";
/**
* 获取菜单
@@ -317,6 +319,14 @@ public interface ISysClient {
@GetMapping(CARGO_TYPES)
R<List<CargoType>> getCargoTypes();
/**
* 获取计量单位档案(金蝶推送按计费单位名称匹配取计量单位编码)
*
* @return 计量单位集合
*/
@GetMapping(MEASUREMENT_UNITS)
R<List<MeasurementUnit>> getMeasurementUnits();
/**
* 获取角色权限标识集合(按钮编号)
*
@@ -326,4 +336,12 @@ public interface ISysClient {
@GetMapping(PERMISSIONS)
R<List<String>> getPermissions(@RequestParam("roleId") String roleId);
/**
* 获取启用的开票项目(含税收分类编码,开票申请推送金蝶按分类+简称匹配取数)
*
* @return 开票项目集合
*/
@GetMapping(INVOICE_ITEMS)
R<List<InvoiceItem>> getInvoiceItems();
}
@@ -174,9 +174,19 @@ public class ISysClientFallback implements ISysClient {
return R.fail("获取数据失败");
}
@Override
public R<List<MeasurementUnit>> getMeasurementUnits() {
return R.fail("获取数据失败");
}
@Override
public R<List<String>> getPermissions(String roleId) {
return R.fail("获取数据失败");
}
@Override
public R<List<InvoiceItem>> getInvoiceItems() {
return R.fail("获取数据失败");
}
}
@@ -4,29 +4,34 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 部门类型枚举
* 组织类型枚举,与业务字典 organization_type 对齐
*
* @author bfhuange
* @date 2024/8/26
*/
@AllArgsConstructor
@Getter
public enum DeptCategory {
/**
* 公司
*/
COMPANY(1, "公司"),
/**
* 部门
*/
DEPT(2, "部门"),
;
/**
* 集团
*/
GROUP(1, "集团"),
/**
* 公司
*/
COMPANY(2, "公司"),
/**
* 部门
*/
DEPT(3, "部门"),
;
/**
* 部门类型编码
*/
private final Integer code;
/**
* 部门类型名称
*/
private final String name;
/**
* 组织类型编码
*/
private final Integer code;
/**
* 组织类型名称
*/
private final String name;
}
@@ -69,4 +69,7 @@ public class OaOrgSyncPageVO implements Serializable {
@Schema(description = "增量同步使用的 OA modified 起始时间,后续分页需原样回传")
private String modifiedSince;
@Schema(description = "全量同步结束后原始数据层级 JSON 文件路径")
private String dumpFilePath;
}
@@ -66,4 +66,7 @@ public class OaPersonSyncPageVO implements Serializable {
@Schema(description = "增量同步使用的 OA modified 起始时间,后续分页需原样回传")
private String modifiedSince;
@Schema(description = "全量同步结束后原始数据层级 JSON 文件路径")
private String dumpFilePath;
}
@@ -32,6 +32,8 @@ public class FormalSettlementSaveRequest implements Serializable {
private String remark;
private List<SummaryFee> summaryFees;
private List<Invoice> invoices;
/** 项目预付核销 */
private List<SettlementProjectAdvanceWriteOffRequest> projectAdvanceWriteOffs;
@Data
public static class DetailAdjustment implements Serializable {
@@ -71,6 +71,7 @@ public class InvoiceApplicationSaveRequest implements Serializable {
@Serial private static final long serialVersionUID = 1L;
private String goodsCategory;
private String goodsName;
private String taxClassificationCode;
private String unit;
private BigDecimal quantity;
private BigDecimal unitPriceNoTax;
@@ -42,7 +42,6 @@ import java.util.List;
public class InvoiceReceiptSaveRequest implements Serializable {
@Serial private static final long serialVersionUID = 1L;
private Long id;
private Long kingdeeInvoicePoolId;
private String invoiceNo;
private LocalDate invoiceDate;
private String invoiceType;
@@ -54,8 +53,6 @@ public class InvoiceReceiptSaveRequest implements Serializable {
private String bankName;
private String bankAccount;
private String issuingBank;
private String kingdeeBillNo;
private String kingdeeStatus;
private String phone;
private String customerEmails;
private String departmentEmails;
@@ -0,0 +1,116 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to the License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package org.springblade.transport.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 金蝶票据池镜像统一查询条件(收票登记选票与正式结算单认领共用,查本地镜像)
*
* @author Chill
*/
@Data
@Schema(description = "金蝶票据池镜像统一查询条件")
public class KingdeeInvoicePoolQueryDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 当前页
*/
@Schema(description = "当前页")
private Long current = 1L;
/**
* 每页条数
*/
@Schema(description = "每页条数")
private Long size = 10L;
/**
* 发票号码,模糊
*/
@Schema(description = "发票号码(模糊)")
private String invoiceNo;
/**
* 开票日期起 yyyy-MM-dd
*/
@Schema(description = "开票日期起 yyyy-MM-dd")
private String invoiceDateStart;
/**
* 开票日期止 yyyy-MM-dd
*/
@Schema(description = "开票日期止 yyyy-MM-dd")
private String invoiceDateEnd;
/**
* 开票单位(销方名称),模糊
*/
@Schema(description = "开票单位(销方名称,模糊)")
private String salerName;
/**
* 受票单位(购方名称),模糊
*/
@Schema(description = "受票单位(购方名称,模糊)")
private String buyerName;
/**
* 发票类型编码(票易通字典,如 26/27,镜像按 invoice_type_code 精确匹配)
*/
@Schema(description = "发票类型编码(票易通字典,如 26/27)")
private String invoiceType;
/**
* 销方税号,精确
*/
@Schema(description = "销方税号")
private String salerTaxNo;
/**
* 购方税号,精确
*/
@Schema(description = "购方税号")
private String buyerTaxNo;
/**
* 认领过滤:true 仅已认领,false 仅未认领,null 不过滤(已认领=存在非作废正式结算单发票行)
*/
@Schema(description = "认领过滤:true已认领/false未认领/null不限")
private Boolean claimed;
/**
* 登记过滤:true 仅已登记,false 仅未登记,null 不过滤(已登记=存在非作废收票登记)
*/
@Schema(description = "登记过滤:true已登记/false未登记/null不限")
private Boolean registered;
}
@@ -76,6 +76,9 @@ public class PreSettlementSaveRequest implements Serializable {
@Schema(description = "结算合计费用")
private List<SummaryFee> summaryFees;
@Schema(description = "项目预付核销")
private List<SettlementProjectAdvanceWriteOffRequest> projectAdvanceWriteOffs;
@Data
@Schema(description = "结算合计费用")
public static class SummaryFee implements Serializable {
@@ -0,0 +1,70 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for their own commercial purposes.
* <p>
* Using this software signifies agreement to this license agreement and terms of use,
* and you expressly agree to be bound by the terms of use of this software.
* <p>
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 收款认领推送金蝶结果(A301-3)
* <p>
* 推送失败不抛异常跨事务边界(保证失败状态落库不被回滚),以本结果对象向调用方报告成败与原因。
*
* @author Chill
*/
@Data
@Schema(description = "收款认领推送金蝶结果")
public class ReceiptClaimPushResult implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "是否推送成功")
private boolean success;
@Schema(description = "金蝶收款单号(成功时返回,可能为空:金蝶响应未返回单号)")
private String kingdeeBillNo;
@Schema(description = "失败原因(成功时为空)")
private String message;
public static ReceiptClaimPushResult success(String kingdeeBillNo) {
ReceiptClaimPushResult result = new ReceiptClaimPushResult();
result.setSuccess(true);
result.setKingdeeBillNo(kingdeeBillNo);
return result;
}
public static ReceiptClaimPushResult fail(String message) {
ReceiptClaimPushResult result = new ReceiptClaimPushResult();
result.setSuccess(false);
result.setMessage(message);
return result;
}
}
@@ -0,0 +1,107 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 导入结算单请求(列表筛选 + 确认/草稿入参)
*
* @author Chill
*/
@Data
@Schema(description = "导入结算单请求")
public class SettlementImportBatchRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "主键")
private Long id;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "项目ID")
private Long projectId;
@Schema(description = "项目名称")
private String projectName;
@Schema(description = "结算类型 receivable/payable")
private String settlementType;
@Schema(description = "结算单类型 formal/pre,应收仅 formal")
private String settlementBillType;
@Schema(description = "客户合同ID")
private Long customerContractId;
@Schema(description = "客户合同名称")
private String customerContractName;
@Schema(description = "客户名称")
private String customerName;
@Schema(description = "承运商合同ID")
private Long carrierContractId;
@Schema(description = "承运商合同名称")
private String carrierContractName;
@Schema(description = "承运商名称")
private String carrierName;
@Schema(description = "运单模式:new=新运单,history=历史运单")
private String waybillMode;
@Schema(description = "导入状态")
private String importStatus;
@Schema(description = "备注")
private String remark;
@Schema(description = "动态费用列名")
private List<String> feeItemNames;
@Schema(description = "导入明细行")
private List<Map<String, Object>> rows;
@Schema(description = "分批追加")
private Boolean append;
@Schema(description = "列表筛选:项目名称")
private String projectNameLike;
@Schema(description = "列表筛选:创建人")
private Long createUser;
}
@@ -0,0 +1,51 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 导入结算单作废请求
*
* @author Chill
*/
@Data
@Schema(description = "导入结算单作废请求")
public class SettlementImportVoidRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "批次主键")
private Long id;
@Schema(description = "作废原因")
private String reason;
}
@@ -0,0 +1,53 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 结算单项目预付核销保存行
*
* @author Chill
*/
@Data
@Schema(description = "结算单项目预付核销保存行")
public class SettlementProjectAdvanceWriteOffRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "项目预付付款申请ID")
private Long paymentApplicationId;
@Schema(description = "本次核销金额")
private BigDecimal writeOffAmount;
}
@@ -161,4 +161,13 @@ public class CustomerArchive extends TenantEntity {
@Schema(description = "审核通过时间")
private LocalDateTime approvedTime;
@Schema(description = "金蝶协同状态:none未推送/exist金蝶已有/synced已推送/failed推送失败")
private String kingdeeStatus;
@Schema(description = "金蝶推送失败原因")
private String kingdeeFailReason;
@Schema(description = "金蝶推送时间")
private LocalDateTime kingdeeSyncTime;
}
@@ -21,6 +21,8 @@ import java.time.LocalDateTime;
/**
* 正式结算单实体类
* <p>
* 结算单主表,明细快照见 {@link FormalSettlementDetail},合计费用见 {@link FormalSettlementSummaryFee}
*
* @author Chill
*/
@@ -30,38 +32,144 @@ import java.time.LocalDateTime;
@Schema(description = "正式结算单")
public class FormalSettlement extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 正式结算单号(同租户唯一)
*/
private String formalSettlementNo;
/**
* 来源类型:预结算合并/应收应付/混合来源
*/
private String sourceType;
/**
* 结算类型:receivable-应收 payable-应付
*/
private String settlementType;
/**
* 所属项目ID
*/
private Long projectId;
/**
* 所属项目名称
*/
private String projectName;
/**
* 所属组织ID
*/
private Long deptId;
/**
* 所属组织名称
*/
private String deptName;
/**
* 结算合同ID
*/
private Long contractId;
/**
* 结算合同编号
*/
private String contractNo;
/**
* 结算合同名称
*/
private String contractName;
/**
* 付款方名称
*/
private String payerName;
/**
* 收款方名称
*/
private String payeeName;
/**
* 结算币种,默认 RMB
*/
private String currency;
/**
* 结算金额(结算币种,含全部合计费用)
*/
private BigDecimal settlementAmount;
/**
* 本位币,默认 RMB
*/
private String localCurrency;
/**
* 本位币结算金额 = 结算金额 × 结算汇率
*/
private BigDecimal localSettlementAmount;
/**
* 已申请付款金额,含来源预结算的预付
*/
private BigDecimal appliedPaymentAmount;
/**
* 已收/已付金额合计,含来源预结算的预付
*/
private BigDecimal paidAmount;
/**
* 剩余可付金额 = 结算金额 - 已收已付合计,最小为 0
*/
private BigDecimal remainingPayableAmount;
/**
* 已开票/已收票金额,取开票申请与收票登记的分摊合计
*/
private BigDecimal invoiceAmount;
/**
* 汇率日期
*/
private LocalDate exchangeRateDate;
/**
* 结算汇率
*/
private BigDecimal exchangeRate;
/**
* 开票状态(应收为开票、应付为收票):unreceived-未开票 partial-部分开票 completed-已开票
*/
private String invoiceStatus;
/**
* 收付款状态:unpaid-未收付款 partial-部分收付款 paid-已收付款
*/
private String paymentStatus;
/**
* 审核状态:draft-草稿 reviewing-审批中 approved-审批通过 returned-已驳回 voided-已作废
*/
private String approvalStatus;
/**
* 当前审批节点,如「草稿」「财务审核」「审批通过」
*/
private String currentNode;
/**
* 当前处理人姓名
*/
private String currentProcessor;
/**
* 金蝶单据编号
*/
private String kingdeeBillNo;
/**
* 金蝶单据id(星瀚内部主键,A902 附件上传定位用)
*/
private String kingdeeBillId;
/**
* 金蝶同步状态:unsynced-未同步 synced-已同步 failed-同步失败
*/
private String kingdeeSyncStatus;
/**
* 附件JSON
*/
private String attachmentsJson;
/**
* 备注
*/
private String remark;
/**
* 审核通过时间
*/
private LocalDateTime approvedTime;
/**
* 同步金蝶时间
*/
private LocalDateTime syncedTime;
/**
* 作废原因,驳回时记录驳回原因
*/
private String voidReason;
}
@@ -27,37 +27,136 @@ import java.time.LocalDateTime;
@TableName("blade_formal_settlement_detail")
public class FormalSettlementDetail extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 正式结算单ID
*/
private Long formalSettlementId;
/**
* 来源预结算单ID
*/
private Long sourcePreSettlementId;
/**
* 来源预结算明细ID
*/
private Long sourcePreSettlementDetailId;
/**
* 来源应收应付明细ID
*/
private Long sourceDetailId;
/**
* 行号
*/
private Integer lineNo;
/**
* 单据编号
*/
private String documentNo;
/**
* 运单ID
*/
private Long waybillId;
/**
* 运单号
*/
private String waybillNo;
/**
* 车牌号
*/
private String vehicleNo;
/**
* 发货地址
*/
private String departureAddress;
/**
* 收货地址
*/
private String arrivalAddress;
/**
* 发货联系人
*/
private String departureContact;
/**
* 发货联系方式
*/
private String departurePhone;
/**
* 收货联系人
*/
private String arrivalContact;
/**
* 收货联系方式
*/
private String arrivalPhone;
/**
* 实际发货时间
*/
private LocalDateTime actualDepartureTime;
/**
* 实际完成时间
*/
private LocalDateTime actualCompletionTime;
/**
* 运输类型
*/
private String transportType;
/**
* 货物名称
*/
private String cargoName;
/**
* 货物类型
*/
private String cargoType;
/**
* 运输总量
*/
private BigDecimal transportQuantity;
/**
* 数量单位
*/
private String quantityUnit;
/**
* 里程
*/
private BigDecimal mileage;
/**
* 批次号
*/
private String batchNo;
/**
* 运输单价
*/
private BigDecimal unitPrice;
/**
* 运费
*/
private BigDecimal freightAmount;
/**
* 费用项JSON
*/
private String feeItemsJson;
/**
* 原金额
*/
private BigDecimal originalAmount;
/**
* 调整金额
*/
private BigDecimal adjustAmount;
/**
* 结算金额(含税)
*/
private BigDecimal settlementAmountTax;
/**
* 结算金额(不含税)
*/
private BigDecimal settlementAmountNoTax;
/**
* 币种
*/
private String currency;
/**
* 备注
*/
private String remark;
}
@@ -26,20 +26,68 @@ import java.math.BigDecimal;
@TableName("blade_formal_settlement_detail_fee")
public class FormalSettlementDetailFee extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 正式结算明细ID
*/
private Long formalSettlementDetailId;
/**
* 源费用行ID
*/
private Long sourceFeeId;
/**
* 行号
*/
private String lineNo;
/**
* 货物名称
*/
private String cargoName;
/**
* 货物类型
*/
private String cargoType;
/**
* 运输量
*/
private BigDecimal transportQuantity;
/**
* 数量单位
*/
private String quantityUnit;
/**
* 里程
*/
private BigDecimal mileage;
/**
* 运输单价
*/
private BigDecimal unitPrice;
/**
* 运费
*/
private BigDecimal freightAmount;
/**
* 费用项JSON
*/
private String feeItemsJson;
/**
* 原金额
*/
private BigDecimal originalAmount;
/**
* 调整金额
*/
private BigDecimal adjustAmount;
/**
* 结算金额(含税)
*/
private BigDecimal settlementAmountTax;
/**
* 结算金额(不含税)
*/
private BigDecimal settlementAmountNoTax;
/**
* 备注
*/
private String remark;
}
@@ -26,12 +26,20 @@ import java.math.BigDecimal;
@TableName("blade_formal_settlement_payment")
public class FormalSettlementPayment extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/** 正式结算单id */
private Long formalSettlementId;
/** 付款单号(租户内唯一) */
private String paymentNo;
/** 付款类型(final:结算尾款) */
private String paymentType;
/** 申请付款金额 */
private BigDecimal appliedAmount;
/** 已付金额 */
private BigDecimal paidAmount;
/** 单据状态(reviewing:审核中,approved:审核通过,returned:已退回,voided:已作废,paid:已付款) */
private String billStatus;
/** 金蝶(星瀚)单据编号 */
private String kingdeeBillNo;
/** 备注 */
private String remark;
}
@@ -28,13 +28,40 @@ import java.math.BigDecimal;
@Schema(description = "正式结算合计费用")
public class FormalSettlementSummaryFee extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 正式结算单ID
*/
private Long formalSettlementId;
/**
* 行号
*/
private Integer lineNo;
/**
* 费用类型
*/
private String feeType;
/**
* 费用项
*/
private String feeItem;
/**
* 原金额
*/
private BigDecimal originalAmount;
/**
* 调整金额
*/
private BigDecimal adjustAmount;
/**
* 结算金额
*/
private BigDecimal settlementAmount;
/**
* 备注
*/
private String remark;
/**
* 是否手工添加
*/
private Integer manualFlag;
}
@@ -47,37 +47,140 @@ import java.time.LocalDateTime;
@Schema(description = "开票申请")
public class InvoiceApplication extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 开票申请单号(同租户唯一,A303-1 billno 幂等候选键)
*/
private String applicationNo;
/**
* 所属项目ID(结算单快照带出)
*/
private Long projectId;
/**
* 所属项目名称(结算单快照带出)
*/
private String projectName;
/**
* 申请部门(所属组织)ID
*/
private Long deptId;
/**
* 申请部门(所属组织)名称
*/
private String deptName;
/**
* 开票单位名称(销方=结算单收款方快照,金蝶 salername 取数来源)
*/
private String issuerName;
/**
* 受票方客商档案ID
*/
private Long receiverCustomerId;
/**
* 受票方单位名称(客商开票信息企业全称快照,金蝶 buyername)
*/
private String receiverName;
/**
* 发票类型:electronic_normal-数电普票 / electronic_special-数电专票
*/
private String invoiceType;
/**
* 可开票金额(关联结算单剩余可开票额度合计)
*/
private BigDecimal availableInvoiceAmount;
/**
* 本次开票金额(商品行价税合计,金蝶 totalamount)
*/
private BigDecimal invoiceAmount;
/**
* 申请日期(提交审批时置当日)
*/
private LocalDate applicationDate;
/**
* 申请人姓名
*/
private String applicantName;
/**
* 承办部门ID(结算单所属组织快照)
*/
private Long undertakingDeptId;
/**
* 承办部门名称(结算单所属组织快照)
*/
private String undertakingDeptName;
/**
* 部门邮箱(发票推送邮箱,多个以分号分隔,最多3个,金蝶 buyeremail)
*/
private String departmentEmails;
/**
* 受票方客商开票信息ID(blade_customer_invoice_info)
*/
private Long receiverInvoiceInfoId;
/**
* 受票方纳税人识别号(开票信息快照,金蝶 buyertaxno)
*/
private String taxpayerNo;
/**
* 受票方开户行(开票信息快照)
*/
private String bankName;
/**
* 受票方开户账号(开票信息快照)
*/
private String bankAccount;
/**
* 受票方注册地址(开票信息快照)
*/
private String registeredAddress;
/**
* 受票方联系人
*/
private String contactName;
/**
* 受票方联系电话
*/
private String contactPhone;
/**
* 受票方邮箱
*/
private String email;
/**
* 审批状态:draft-草稿 reviewing-审批中 approved-审批通过 returned-已驳回 voided-已作废
*/
private String approvalStatus;
/**
* 当前审批节点,如「草稿」「开票审核」「审批通过」
*/
private String currentNode;
/**
* 当前处理人姓名
*/
private String currentProcessor;
/**
* 金蝶开票申请单编号(A303-1 返回,A303-5 查询 serialNo)
*/
private String kingdeeBillNo;
/**
* 金蝶开票申请单id(星瀚内部主键,A902 附件上传定位用)
*/
private String kingdeeBillId;
/**
* 金蝶同步状态:unsynced-未同步 synced-已同步 failed-同步失败 invoiced-开票完成(终态)
*/
private String kingdeeStatus;
/**
* 同步金蝶时间
*/
private LocalDateTime syncedTime;
/**
* 附件JSON
*/
private String attachmentsJson;
/**
* 备注
*/
private String remark;
/**
* 作废原因,驳回时记录驳回原因
*/
private String voidReason;
}
@@ -44,25 +44,88 @@ import java.time.LocalDateTime;
@TableName("blade_invoice_application_detail")
public class InvoiceApplicationDetail extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 开票申请ID
*/
private Long invoiceApplicationId;
/**
* 正式结算单ID
*/
private Long formalSettlementId;
/**
* 来源正式结算明细ID
*/
private Long formalSettlementDetailId;
/**
* 行号
*/
private Integer lineNo;
/**
* 结算明细单据号(快照)
*/
private String documentNo;
/**
* 运单号(快照)
*/
private String waybillNo;
/**
* 车牌号(快照)
*/
private String vehicleNo;
/**
* 起运地(快照)
*/
private String departureAddress;
/**
* 到达地(快照)
*/
private String arrivalAddress;
/**
* 实际发运时间(快照)
*/
private LocalDateTime actualDepartureTime;
/**
* 实际完成时间(快照)
*/
private LocalDateTime actualCompletionTime;
/**
* 运输方式(快照,字典 transport_type)
*/
private String transportType;
/**
* 货物名称(快照)
*/
private String cargoName;
/**
* 货物类型(快照)
*/
private String cargoType;
/**
* 运输数量(快照)
*/
private BigDecimal transportQuantity;
/**
* 数量单位(快照)
*/
private String quantityUnit;
/**
* 里程(快照)
*/
private BigDecimal mileage;
/**
* 批次号(快照)
*/
private String batchNo;
/**
* 运费金额(快照)
*/
private BigDecimal freightAmount;
/**
* 费用项明细JSON(快照)
*/
private String feeItemsJson;
/**
* 结算金额(含税,快照)
*/
private BigDecimal settlementAmountTax;
}
@@ -0,0 +1,80 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments from this software for such purposes.
* Copyright of this software remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 开票申请金蝶发票结果实体类
* <p>
* 定时任务经 A303-5 开票申请发票查询回写的发票明细(发票号唯一键幂等落库),
* 发票文件地址(板式文件/数电PDF/XML/预览图)独立落库供详情页查看下载,
* 原文 JSON 整体留档便于联调与追溯
*
* @author Chill
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_invoice_application_invoice")
@Schema(description = "开票申请金蝶发票结果")
public class InvoiceApplicationInvoice extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "开票申请ID")
private Long invoiceApplicationId;
@Schema(description = "金蝶开票申请单编号(A303-5 serialNo)")
private String serialNo;
@Schema(description = "发票号码")
private String invoiceNo;
@Schema(description = "开票日期")
private LocalDateTime invoiceDate;
@Schema(description = "价税合计")
private BigDecimal invoiceAmount;
@Schema(description = "板式文件下载地址(数电票为OFD,航信百望税盘普通电票为PDF,电子专票/UKey电票为OFD)")
private String invoiceFileUrl;
@Schema(description = "PDF图片预览地址")
private String invoiceImageUrl;
@Schema(description = "数电PDF下载地址(发票云5.0.025版本返回)")
private String invoicePdfFileUrl;
@Schema(description = "数电XML下载地址(发票云5.0.025版本返回)")
private String invoiceXmlFileUrl;
@Schema(description = "A303-5 返回原文JSON留档")
private String rawJson;
}
@@ -43,18 +43,64 @@ import java.math.BigDecimal;
@TableName("blade_invoice_application_line")
public class InvoiceApplicationLine extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 开票申请ID
*/
private Long invoiceApplicationId;
/**
* 所属发票张次ID
*/
private Long invoiceSheetId;
/**
* 行号(张内序号)
*/
private Integer lineNo;
/**
* 商品和服务分类名称(开票项目主数据选择,金蝶 goodssimplename)
*/
private String goodsCategory;
/**
* 货物或服务简称(开票项目主数据选择,金蝶 goodsname)
*/
private String goodsName;
/**
* 税收分类编码(选择开票内容时快照,推送金蝶 A303-1 分录直接取该值)
*/
private String taxClassificationCode;
/**
* 单位
*/
private String unit;
/**
* 数量
*/
private BigDecimal quantity;
/**
* 不含税单价
*/
private BigDecimal unitPriceNoTax;
/**
* 不含税金额
*/
private BigDecimal amountNoTax;
/**
* 含税金额(历史兼容字段,与含税合计同值)
*/
private BigDecimal amountWithTax;
/**
* 税率(0-100 百分比值,推送金蝶时转小数文本)
*/
private BigDecimal taxRate;
/**
* 税额
*/
private BigDecimal taxAmount;
/**
* 价税合计(含税合计,金蝶 taxamount)
*/
private BigDecimal totalAmount;
/**
* 行备注
*/
private String remark;
}
@@ -42,12 +42,36 @@ import java.io.Serial;
@TableName("blade_invoice_application_record")
public class InvoiceApplicationRecord extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 开票申请ID
*/
private Long invoiceApplicationId;
/**
* 操作类型:create/save/submit/approve/return/void/sync 等
*/
private String actionType;
/**
* 操作名称(展示用,如「提交审批」「同步金蝶」)
*/
private String actionName;
/**
* 操作前审批状态
*/
private String fromStatus;
/**
* 操作后审批状态
*/
private String toStatus;
/**
* 操作人姓名
*/
private String operatorName;
/**
* 原因说明(驳回/作废原因等)
*/
private String reason;
/**
* 金蝶单据编号(同步类操作记录)
*/
private String kingdeeBillNo;
}
@@ -43,10 +43,28 @@ import java.math.BigDecimal;
@TableName("blade_invoice_application_settlement")
public class InvoiceApplicationSettlement extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 开票申请ID
*/
private Long invoiceApplicationId;
/**
* 正式结算单ID
*/
private Long formalSettlementId;
/**
* 正式结算单号(关联时快照)
*/
private String formalSettlementNo;
/**
* 结算金额(关联时快照)
*/
private BigDecimal settlementAmount;
/**
* 可开票金额(关联时快照)
*/
private BigDecimal availableInvoiceAmount;
/**
* 本申请分摊开票金额(结算单开票状态按此汇总)
*/
private BigDecimal allocatedInvoiceAmount;
}
@@ -43,7 +43,20 @@ import java.math.BigDecimal;
@TableName("blade_invoice_application_sheet")
public class InvoiceApplicationSheet extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 开票申请ID
*/
private Long invoiceApplicationId;
/**
* 发票张序号(从 1 开始)
*/
private Integer sheetNo;
/**
* 本张开票金额(张内商品行价税合计)
*/
private BigDecimal invoiceAmount;
/**
* 金蝶开票申请单编号(本张发票对应,A303-1 返回,A303-5 查询 serialNo)
*/
private String kingdeeBillNo;
}
@@ -36,6 +36,7 @@ import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 收票登记实体类
@@ -48,36 +49,135 @@ import java.time.LocalDate;
@Schema(description = "收票登记")
public class InvoiceReceipt extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 关联金蝶票据池镜像主键(blade_kingdee_invoice_pool.id)
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long kingdeeInvoicePoolId;
/**
* 发票号码(同租户唯一,一张发票仅可登记一次)
*/
private String invoiceNo;
/**
* 开票日期
*/
private LocalDate invoiceDate;
/**
* 发票类型(如「数电发票(增值税专用发票)」)
*/
private String invoiceType;
/**
* 税率(百分数,13 表示 13%)
*/
private BigDecimal taxRate;
/**
* 开票金额
*/
private BigDecimal invoiceAmount;
/**
* 税额
*/
private BigDecimal taxAmount;
/**
* 受票单位(购方)
*/
private String receiverName;
/**
* 开票单位(销方)
*/
private String issuerName;
/**
* 所属项目id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long projectId;
/**
* 所属项目名称
*/
private String projectName;
/**
* 所属组织id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long deptId;
/**
* 所属组织名称
*/
private String deptName;
/**
* 付款方
*/
private String payerName;
/**
* 收款方
*/
private String payeeName;
/**
* 开票单位开户银行
*/
private String bankName;
/**
* 开票单位银行账号
*/
private String bankAccount;
/**
* 开票单位开户网点
*/
private String issuingBank;
/**
* 联系电话
*/
private String phone;
/**
* 客户邮箱(分号分隔,最多 3 个)
*/
private String customerEmails;
/**
* 部门邮箱(分号分隔,最多 3 个)
*/
private String departmentEmails;
/**
* 审批状态(draft 草稿 / reviewing 审批中 / approved 审批通过 / returned 已驳回 / voided 已作废)
*/
private String approvalStatus;
/**
* 当前审批节点
*/
private String currentNode;
/**
* 当前处理人
*/
private String currentProcessor;
private String kingdeeBillNo;
private String kingdeeStatus;
/**
* 金蝶收票单单据编号(A303-2 批量保存生成/幂等预检命中回填)
*/
private String kingdeeReceivedInvoiceNo;
/**
* 金蝶收票单id(星瀚内部主键,A902 附件上传定位用)
*/
private String kingdeeReceivedInvoiceId;
/**
* 收票单推送状态(unsynced 未推送 / pushed 已保存收票单 / assigned 已指定应付 / failed 推送失败)
*/
private String kingdeePushStatus;
/**
* 收票单推送失败原因(金蝶侧删除/红冲/查验不通过等异常提示人工)
*/
private String kingdeePushMsg;
/**
* 最近一次收票单推送/回写时间
*/
private LocalDateTime kingdeePushTime;
/**
* 附件信息JSON
*/
private String attachmentsJson;
/**
* 备注(最多 200 字)
*/
private String remark;
/**
* 作废原因
*/
private String voidReason;
}
@@ -0,0 +1,84 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 金蝶附件同步实体类(A902 附件上传到指定单据,单附件行级状态)
*
* @author Chill
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_kingdee_attachment_sync")
@Schema(description = "金蝶附件同步")
public class KingdeeAttachmentSync extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 业务单据类型(pay_application/formal_settlement_ap/formal_settlement_ar/invoice_receipt/invoice_application)
*/
private String bizType;
/**
* 业务单据id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long bizId;
/**
* 附件幂等键(用户附件=附件url;发票文件=A801-2 的 path)
*/
private String attachmentKey;
/**
* 附件名称(展示/排查用)
*/
private String attachmentName;
/**
* 金蝶侧文件路径(A902 返回 data.path)
*/
private String kingdeePath;
/**
* 同步状态:1 成功 / 0 失败
*/
private Integer syncStatus;
/**
* 失败原因(超限/下载失败/金蝶报错)
*/
private String failReason;
/**
* 最近上传时间
*/
private LocalDateTime syncTime;
}
@@ -0,0 +1,87 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement obtained after purchasing a license from BladeX.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.time.LocalDateTime;
/**
* 金蝶单据锁定记录实体类
* <p>
* 一行 = 一张金蝶目标单:推送成功后 lockBusiData 锁定(FAILED→LOCKED),金蝶经 unLockNotifyBusiData
* 回调解锁(→UNLOCKED,DELETE 时废除源单并还原关联数据);同时承担当前锁状态(编辑守卫/回调定位)
* 与锁定补偿扫表(FAILED+try_count)、锁定/解锁留痕
*
* @author Chill
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_kingdee_bill_lock")
@Schema(description = "金蝶单据锁定记录")
public class KingdeeBillLock extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* WLTMS 单据类型(SETTLEMENT/INVOICE_APPLY,预留 PAY_APPLY/RECEIVED_INVOICE)
*/
private String sourceBillType;
/**
* WLTMS 业务主键
*/
private Long sourceBillId;
/**
* WLTMS 单号(正式结算单号/开票申请单号)
*/
private String sourceBillNo;
/**
* 金蝶单据类型(ApFin_other_BT_S/arfin_other_BT_S/cdm_paybill_bank_elect_BT_S 等固定值)
*/
private String targetBillType;
/**
* 金蝶单据编号(即业务单 kingdeeBillNo,开票申请按发票张次逐张一行)
*/
private String targetBillNo;
/**
* 锁状态:failed-锁定失败(补偿重试对象)/locked-金蝶锁定中/unlocked-已解锁(终态)
*/
private String lockStatus;
/**
* 最近动作来源操作类型:SAVE-单据新增,DELETE-单据删除(DELETE 回调触发废除还原)
*/
private String operationType;
/**
* 锁定重试次数(补偿任务用,超上限停试)
*/
private Integer tryCount;
/**
* 锁定时间
*/
private LocalDateTime lockTime;
/**
* 解锁时间
*/
private LocalDateTime unlockTime;
/**
* 推单发起人(锁定操作人)
*/
private String lockOperator;
/**
* 回调操作人(金蝶侧操作人)
*/
private String notifyOperator;
/**
* 锁定失败原因
*/
private String failReason;
}
@@ -47,22 +47,108 @@ import java.time.LocalDateTime;
@Schema(description = "金蝶进项发票票据池镜像")
public class KingdeeInvoicePool extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/**
* 发票号码(同租户唯一,A801-1 invoiceNo,镜像 upsert 匹配键)
*/
private String invoiceNo;
/**
* 金蝶发票流水号(票池唯一标识,A801-1 serialNo)
*/
private String serialNo;
/**
* 开票日期
*/
private LocalDate invoiceDate;
/**
* 发票类型(票易通编码转名称后落库,如「数电发票(增值税专用发票)」)
*/
private String invoiceType;
/**
* 票易通原始发票类型编码(A801-1 invoiceType,如 26/27,A303-2 invoicetypef7_number 取数)
*/
private String invoiceTypeCode;
/**
* 税率(百分数,13 表示 13%)
*/
private BigDecimal taxRate;
/**
* 开票金额(A801-1 价税合计 totalAmount)
*/
private BigDecimal invoiceAmount;
/**
* 税额
*/
private BigDecimal taxAmount;
/**
* 受票单位(购方名称,A801-1 buyerName)
*/
private String receiverName;
/**
* 购方税号(A801-1 buyerTaxNo)
*/
private String buyerTaxNo;
/**
* 开票单位(销方名称,A801-1 salerName)
*/
private String issuerName;
/**
* 销方税号(A801-1 salerTaxNo)
*/
private String salerTaxNo;
/**
* 开票单位开户银行
*/
private String bankName;
/**
* 开票单位银行账号
*/
private String bankAccount;
/**
* 开票单位开户网点
*/
private String issuingBank;
/**
* 联系电话
*/
private String phone;
/**
* 客户邮箱(分号分隔,最多 3 个)
*/
private String customerEmails;
/**
* 部门邮箱(分号分隔,最多 3 个)
*/
private String departmentEmails;
/**
* 金蝶单据号(票池发票取发票流水号 serialNo)
*/
private String kingdeeBillNo;
/**
* 金蝶同步状态(unsynced 未同步 / synced 已同步 / failed 同步失败)
*/
private String kingdeeStatus;
/**
* 查验状态(A801-1 checkStatus,0 未查验 / 1 通过 / 2 不通过)
*/
private String checkStatus;
/**
* 附件信息JSON(结构 {"source":"piaozone","path":"A801-2下载path","name":"文件名"})
*/
private String attachmentsJson;
/**
* A801-1 发票明细行JSON(BfiInvoicePoolItemVO 列表,票池存档;收票单分录已改与应付单同源结算费用行)
*/
private String itemsJson;
/**
* 票池数据更新时间(A801-1 billCreateTime,镜像排序字段)
*/
private LocalDateTime sourceUpdatedTime;
/**
* 剩余可用金额(A801-1 availableAmount,金蝶可用税额口径,选票本地过滤用:>0 才可选)
*/
private BigDecimal availableAmount;
/**
* 金额使用状态(A801-1 amountUseStatus,0 未使用可选 / 2 全部使用;选票本地过滤用)
*/
private String amountUseStatus;
}
@@ -26,6 +26,8 @@
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -49,16 +51,105 @@ public class KingdeeReceiptFlow extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 金蝶认领公告id(A301-2 返回 id,认领推送 A301-3 必填)
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long billId;
/**
* 金蝶付款人id(A301-2 公告对应往来单位 id,认领推送 A301-3 用)
*/
private String payerId;
/**
* 公告认领状态(A301-2 claimstatus:0未认领/1已认领)
*/
private String kingdeeClaimStatus;
/**
* 我已认领(A301-2 claimme)
*/
private Boolean claimMe;
/**
* 未认领金额(A301-2 unclaimamount)
*/
private BigDecimal unclaimedAmount;
/**
* 手续费(A301-2 fee)
*/
private BigDecimal fee;
/**
* 收款人(A301-2 recpayee)
*/
private String payeeName;
/**
* 收款通知单号(A301-2 billno)
*/
private String receiptNoticeNo;
/**
* 付款人名称(A301-2 recviewpayer)
*/
private String payerName;
/**
* 收款金额(A301-2 reamount)
*/
private BigDecimal receiptAmount;
/**
* 对方单位名称(A301-2 oppunit)
*/
private String counterpartyName;
/**
* 对方银行账号(A301-2 oppbanknumber)
*/
private String counterpartyAccount;
/**
* 对方开户行(A301-2 oppbank)
*/
private String counterpartyBank;
/**
* 摘要(A301-2 description)
*/
private String summary;
/**
* 交易日期(A301-2 tradetime)
*/
private LocalDateTime transactionTime;
/**
* 明细流水号(A301-2 detailid,回退 tradedetailno / bankdetailno,幂等键)
*/
private String detailSerialNo;
/**
* 已认领金额(本地认领驱动,初始为0)
*/
private BigDecimal claimedAmount;
/**
* 认领状态(unclaimed未认领/partial部分认领/claimed认领完成,累计认领与公告未认领金额对表)
*/
private String claimStatus;
/**
* 推送状态(none未推送/pushed已推送/failed推送失败;已推送为终态闸门,不允许二次推送)
*/
private String pushStatus;
/**
* 最近一次推送失败原因(成功后清空)
*/
private String pushFailReason;
/**
* 首次推送金蝶成功时间
*/
private LocalDateTime pushedTime;
/**
* 金蝶推送来源单据编码(分摊结算单号下划线拼接,推送时生成落库;分摊不变则重试编码不变,A301-1 回写匹配键)
*/
private String awrpSrcCode;
/**
* 金蝶收款单号(推送响应回填 / A301-1 回写推进)
*/
private String kingdeeBillNo;
/**
* 金蝶回写状态(none未推送/pushed已推送/approved审核通过/received已收款/failed失败)
*/
private String kingdeeBillStatus;
/**
* 来源更新时间(取交易日期,同步时刷新)
*/
private LocalDateTime sourceUpdatedTime;
}
@@ -2,18 +2,24 @@
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement obtained after purchasing a license from BladeX.
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license from BladeX.
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party without a commercial license is strictly prohibited.
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments from this software for such purposes.
* Copyright of this software remains with BladeX.
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software must not be used for illegal purposes.
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is not liable for any claims arising from secondary or illegal development.
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
@@ -34,43 +40,84 @@ import java.time.LocalDate;
@TableName("blade_payment_application")
public class PaymentApplication extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
/** 付款申请单号 */
private String paymentNo;
/** 付款类型:project_advance 项目预付 / progress_advance 进度预付 / settlement_payment 结算付款 */
private String paymentType;
/** 正式结算单id */
private Long settlementId;
/** 正式结算单号 */
private String settlementNo;
/** 预结算单id */
private Long preSettlementId;
/** 预结算单号 */
private String preSettlementNo;
/** 项目id */
private Long projectId;
/** 项目名称 */
private String projectName;
/** 所属组织id */
private Long deptId;
/** 所属组织名称 */
private String deptName;
/** 合同id */
private Long contractId;
/** 合同编号 */
private String contractNo;
/** 合同名称 */
private String contractName;
/** 付款方 */
private String payerName;
/** 收款方 */
private String payeeName;
/** 结算金额 */
private BigDecimal settlementAmount;
/** 应付金额 */
private BigDecimal payableAmount;
/** 来源单据类型:项目预付 / 正式结算单 / 预结算单 */
private String billType;
/** 付款比例(%) */
private BigDecimal paymentRatio;
/** 申请付款金额 */
private BigDecimal appliedAmount;
/** 付款方式,业务字典 pay_method */
private String paymentMethod;
/** 汇票台账id(票据付款时关联) */
private Long billLedgerId;
/** 票据号码 */
private String billNo;
/** 收款账户id */
private Long receiptAccountId;
/** 收款账户名称 */
private String receiptAccountName;
/** 收款银行名称 */
private String bankName;
/** 收款账号 */
private String bankAccount;
/** 申请人 */
private String applicantName;
/** 申请日期 */
private LocalDate applyDate;
/** 发票匹配状态:unmatched 未匹配 / matched 已匹配 */
private String invoiceStatus;
/** 匹配发票金额 */
private BigDecimal matchedInvoiceAmount;
/** 已付款金额 */
private BigDecimal paidAmount;
/** 审批状态:draft 草稿 / reviewing 审批中 / approved 审批通过 / returned 已驳回 / voided 已作废 */
private String approvalStatus;
/** 当前审批节点 */
private String currentNode;
/** 当前处理人 */
private String currentProcessor;
/** 金蝶单据号(A103-2 查询回填的星瀚单据编号 billno,如 FKSQ-xxxx) */
private String kingdeeBillNo;
/** 金蝶单据id(A103-1/A103-3 推送返回的星瀚内部主键,附件上传等使用) */
private String kingdeeBillId;
/** 金蝶同步状态:unsynced 未生成 / synced 已生成 / paying 付款中 / paid 已付款 / closed 已关闭 / failed 生成失败 */
private String kingdeeStatus;
/** 附件信息JSON */
private String attachmentsJson;
/** 备注 */
private String remark;
}
@@ -70,10 +70,10 @@ public class ProjectApply extends TenantEntity {
@Schema(description = "业务部门")
private String businessDeptName;
@Schema(description = "承办部门ID")
private Long undertakeDeptId;
@Schema(description = "平台公司ID,多个逗号分隔")
private String undertakeDeptId;
@Schema(description = "承办部门")
@Schema(description = "平台公司,多个顿号分隔")
private String undertakeDeptName;
@Schema(description = "项目由来")
@@ -65,7 +65,13 @@ public class ReceiptClaim extends TenantEntity {
private String attachmentsJson;
private String remark;
private String claimStatus;
/**
* 金蝶收款单号(冗余展示:推送成功/A301-1 回写时由流水级联刷新)
*/
private String kingdeeBillNo;
/**
* 金蝶回写状态(冗余展示:与流水 kingdee_bill_status 同步刷新)
*/
private String kingdeeBillStatus;
@JsonSerialize(using = ToStringSerializer.class)
private Long voidedBy;
@@ -0,0 +1,115 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
/**
* 导入结算单批次
*
* @author Chill
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_settlement_import_batch")
@Schema(description = "导入结算单批次")
public class SettlementImportBatch extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "项目ID")
private Long projectId;
@Schema(description = "项目名称")
private String projectName;
@Schema(description = "结算类型 receivable/payable")
private String settlementType;
@Schema(description = "结算单类型 formal/pre")
private String settlementBillType;
@Schema(description = "客户合同ID")
private Long customerContractId;
@Schema(description = "客户合同名称")
private String customerContractName;
@Schema(description = "客户名称")
private String customerName;
@Schema(description = "承运商合同ID")
private Long carrierContractId;
@Schema(description = "承运商合同名称")
private String carrierContractName;
@Schema(description = "承运商名称")
private String carrierName;
@Schema(description = "运单模式 new")
private String waybillMode;
@Schema(description = "导入状态 draft/completed/voided")
private String importStatus;
@Schema(description = "运单数量")
private Integer waybillCount;
@Schema(description = "明细数量")
private Integer detailCount;
@Schema(description = "正式结算单ID")
private Long formalSettlementId;
@Schema(description = "正式结算单号")
private String formalSettlementNo;
@Schema(description = "预结算单ID")
private Long preSettlementId;
@Schema(description = "预结算单号")
private String preSettlementNo;
@Schema(description = "动态费用列名JSON")
private String feeItemNamesJson;
@Schema(description = "备注")
private String remark;
@Schema(description = "关联运单导入批次ID")
private Long waybillImportBatchId;
}
@@ -0,0 +1,90 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
* 结算单项目预付核销实体类
*
* @author Chill
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_settlement_project_advance_write_off")
@Schema(description = "结算单项目预付核销")
public class SettlementProjectAdvanceWriteOff extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "结算单类型:pre/formal")
private String settlementType;
@JsonSerialize(using = ToStringSerializer.class)
@Schema(description = "预结算/正式结算单ID")
private Long settlementId;
@JsonSerialize(using = ToStringSerializer.class)
@Schema(description = "项目预付付款申请ID")
private Long paymentApplicationId;
@Schema(description = "预付单号")
private String paymentNo;
@Schema(description = "项目预付金额")
private BigDecimal projectAdvanceAmount;
@Schema(description = "本次核销金额")
private BigDecimal writeOffAmount;
@Schema(description = "金蝶预付单号")
private String kingdeeBillNo;
@TableField(exist = false)
@Schema(description = "可核销金额(动态计算)")
private BigDecimal availableWriteOffAmount;
@TableField(exist = false)
@Schema(description = "预付单创建人姓名")
private String createUserName;
@TableField(exist = false)
@Schema(description = "预付单创建时间(展示用)")
private Date paymentCreateTime;
}
@@ -249,6 +249,9 @@ public class Waybill extends TenantEntity {
@Schema(description = "导入批次ID")
private Long importBatchId;
@Schema(description = "导入结算单批次ID")
private Long settlementImportBatchId;
@Schema(description = "关联单号")
private String relationNo;
@@ -9,6 +9,7 @@
package org.springblade.transport.pojo.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.transport.pojo.entity.FormalSettlement;
@@ -18,10 +19,13 @@ import org.springblade.transport.pojo.entity.FormalSettlementInvoice;
import org.springblade.transport.pojo.entity.FormalSettlementSource;
import org.springblade.transport.pojo.entity.FormalSettlementPayment;
import org.springblade.transport.pojo.entity.FormalSettlementSummaryFee;
import org.springblade.transport.pojo.entity.InvoiceApplicationInvoice;
import org.springblade.transport.pojo.entity.SettlementProjectAdvanceWriteOff;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
@@ -31,7 +35,7 @@ import java.util.List;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class FormalSettlementVO extends FormalSettlement {
public class FormalSettlementVO extends FormalSettlement implements KingdeeUnlockMark {
@Serial private static final long serialVersionUID = 1L;
@TableField(exist = false) @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate createStartDate;
@TableField(exist = false) @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate createEndDate;
@@ -39,6 +43,21 @@ public class FormalSettlementVO extends FormalSettlement {
@TableField(exist = false) private String ids;
@TableField(exist = false) private String approvalStatusName;
@TableField(exist = false) private String settlementTypeName;
@TableField(exist = false) private Integer attachmentCount;
@TableField(exist = false) private String attachmentSyncStatus;
@TableField(exist = false) private String attachmentSyncStatusName;
@TableField(exist = false) @Schema(description = "金蝶锁状态:locked-锁定中/failed-锁定失败;unlocked为终态不返回,null=无锁或已解锁")
private String kingdeeLockStatus;
@TableField(exist = false) @Schema(description = "金蝶锁失败原因(仅锁定失败时有值)")
private String kingdeeLockFailReason;
@TableField(exist = false) @Schema(description = "金蝶锁重试次数(达上限5后不再自动补偿,需重推同步金蝶)")
private Integer kingdeeTryCount;
@TableField(exist = false) @Schema(description = "金蝶解锁时间(非空代表该单曾被金蝶解锁/删单)")
private LocalDateTime kingdeeUnlockTime;
@TableField(exist = false) @Schema(description = "金蝶侧解锁操作人(回调报文 operator)")
private String kingdeeUnlockOperator;
@TableField(exist = false) @Schema(description = "解锁动作名称:金蝶删单/金蝶锁单")
private String kingdeeUnlockOperationName;
@TableField(exist = false) private String preSettlementNos;
@TableField(exist = false) private String preSettlementNo;
@TableField(exist = false) private List<FormalSettlementSource> sources;
@@ -46,6 +65,10 @@ public class FormalSettlementVO extends FormalSettlement {
@TableField(exist = false) private List<FormalSettlementSummaryFee> summaryFees;
@TableField(exist = false) private List<FormalSettlementPayment> payments;
@TableField(exist = false) private List<FormalSettlementInvoice> invoices;
@TableField(exist = false) @Schema(description = "项目预付核销")
private List<SettlementProjectAdvanceWriteOff> projectAdvanceWriteOffs;
@TableField(exist = false) @Schema(description = "开票申请经金蝶回写的发票结果(含文件地址,只读展示)")
private List<InvoiceApplicationInvoice> issuedInvoices;
@TableField(exist = false) private List<PaymentApplicationVO> paymentApplications;
@TableField(exist = false) private List<SettlementAdjustmentVO> adjustments;
@TableField(exist = false) private List<FormalSettlementChangeRecord> changeRecords;
@@ -30,10 +30,12 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.transport.pojo.entity.InvoiceApplication;
import org.springblade.transport.pojo.entity.InvoiceApplicationDetail;
import org.springblade.transport.pojo.entity.InvoiceApplicationInvoice;
import org.springblade.transport.pojo.entity.InvoiceApplicationRecord;
import org.springblade.transport.pojo.entity.InvoiceApplicationSettlement;
import java.io.Serial;
import java.time.LocalDateTime;
import java.util.List;
/**
@@ -43,14 +45,27 @@ import java.util.List;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class InvoiceApplicationVO extends InvoiceApplication {
public class InvoiceApplicationVO extends InvoiceApplication implements KingdeeUnlockMark {
@Serial private static final long serialVersionUID = 1L;
@TableField(exist = false) private String settlementNos;
@TableField(exist = false) private String approvalStatusName;
@TableField(exist = false) private String kingdeeStatusName;
@TableField(exist = false) private Integer attachmentCount;
@TableField(exist = false) private String attachmentSyncStatus;
@TableField(exist = false) private String attachmentSyncStatusName;
@TableField(exist = false) private String kingdeeLockStatus;
@TableField(exist = false) private String kingdeeLockFailReason;
@TableField(exist = false) private Integer kingdeeTryCount;
/** 金蝶解锁终态标识(unlocked 锁记录回填):解锁时间非空即代表该单曾被金蝶解锁/删单 */
@TableField(exist = false) private LocalDateTime kingdeeUnlockTime;
/** 金蝶侧解锁操作人(回调报文 operator) */
@TableField(exist = false) private String kingdeeUnlockOperator;
/** 解锁动作名称:金蝶删单/金蝶锁单 */
@TableField(exist = false) private String kingdeeUnlockOperationName;
@TableField(exist = false) private String createUserName;
@TableField(exist = false) private List<InvoiceApplicationSettlement> settlements;
@TableField(exist = false) private List<InvoiceApplicationSheetVO> sheets;
@TableField(exist = false) private List<InvoiceApplicationDetail> details;
@TableField(exist = false) private List<InvoiceApplicationRecord> records;
@TableField(exist = false) private List<InvoiceApplicationInvoice> invoices;
}
@@ -48,7 +48,10 @@ public class InvoiceReceiptVO extends InvoiceReceipt {
@Serial private static final long serialVersionUID = 1L;
@TableField(exist = false) private String settlementNos;
@TableField(exist = false) private String approvalStatusName;
@TableField(exist = false) private String kingdeeStatusName;
@TableField(exist = false) private String kingdeePushStatusName;
@TableField(exist = false) private Integer attachmentCount;
@TableField(exist = false) private String attachmentSyncStatus;
@TableField(exist = false) private String attachmentSyncStatusName;
@TableField(exist = false) private String createUserName;
@TableField(exist = false) private String updateUserName;
@TableField(exist = false) private List<InvoiceReceiptSettlement> settlements;
@@ -0,0 +1,157 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 金蝶票据池镜像统一视图(含本地认领/登记标记;认领口径:可匹配与默认认领金额=价税合计)
*
* @author Chill
*/
@Data
@Schema(description = "金蝶票据池镜像统一视图")
public class KingdeeInvoicePoolVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/** 镜像主键,仅已入镜像(已登记)的票非空 */
@Schema(description = "镜像主键")
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 发票号码 */
@Schema(description = "发票号码")
private String invoiceNo;
/** 金蝶发票流水号(票池唯一标识) */
@Schema(description = "金蝶发票流水号")
private String serialNo;
/** 开票日期 yyyy-MM-dd */
@Schema(description = "开票日期")
private String invoiceDate;
/** 发票类型名称(镜像落库时已由编码转名称) */
@Schema(description = "发票类型名称")
private String invoiceType;
/** 税率百分数,如 13 */
@Schema(description = "税率百分数")
private BigDecimal taxRate;
/** 价税合计 */
@Schema(description = "发票金额(价税合计)")
private BigDecimal invoiceAmount;
/** 税额 */
@Schema(description = "税额")
private BigDecimal taxAmount;
/** 受票单位(购方名称) */
@Schema(description = "受票单位")
private String receiverName;
/** 购方税号 */
@Schema(description = "购方税号")
private String buyerTaxNo;
/** 开票单位(销方名称) */
@Schema(description = "开票单位")
private String issuerName;
/** 销方税号 */
@Schema(description = "销方税号")
private String salerTaxNo;
/** 销方开户行名称 */
@Schema(description = "销方开户行名称")
private String bankName;
/** 销方银行账号 */
@Schema(description = "销方银行账号")
private String bankAccount;
/** 销方开户行及账号 */
@Schema(description = "开户行及账号")
private String issuingBank;
/** 销方电话 */
@Schema(description = "电话")
private String phone;
/** 客户邮箱 JSON 串 */
@Schema(description = "客户邮箱JSON")
private String customerEmails;
/** 部门邮箱 JSON 串 */
@Schema(description = "部门邮箱JSON")
private String departmentEmails;
/** 金蝶流水号(登记侧展示为金蝶单据号) */
@Schema(description = "金蝶单据号")
private String kingdeeBillNo;
/** 同步状态 unsynced/synced/failed */
@Schema(description = "金蝶同步状态")
private String kingdeeStatus;
/** 查验状态 */
@Schema(description = "查验状态")
private String checkStatus;
/** 附件 JSON(票易通下载 path) */
@Schema(description = "附件信息JSON")
private String attachmentsJson;
/** 可认领金额,口径同发票金额 */
@Schema(description = "可认领金额")
private BigDecimal availableInvoiceAmount;
/** 剩余可用金额(金蝶可用税额口径,与可认领金额的价税合计口径不同) */
@Schema(description = "剩余可用金额")
private BigDecimal availableTaxAmount;
/** 默认认领金额,口径同发票金额 */
@Schema(description = "默认认领金额")
private BigDecimal matchedAmount;
/** 是否已被正式结算单认领(实时查询返回行的本地装饰标记,仅展示不作过滤) */
@Schema(description = "是否已认领")
private Boolean claimed;
/** 是否已存在非作废收票登记(实时查询返回行的本地装饰标记,仅展示不作过滤) */
@Schema(description = "是否已登记")
private Boolean registered;
}
@@ -0,0 +1,36 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.vo;
import java.time.LocalDateTime;
/**
* 金蝶解锁终态标识展示契约:需在页面展示「金蝶删单/解锁」标识的 VO 实现之,
* 由 {@code KingdeeBillLockService#fillUnlockMarks} 统一回填(列表/详情共用)
*
* @author Chill
*/
public interface KingdeeUnlockMark {
/**
* 金蝶解锁时间(unlocked 锁记录回填),非空即代表该单曾被金蝶解锁/删单
*/
void setKingdeeUnlockTime(LocalDateTime kingdeeUnlockTime);
/**
* 金蝶侧解锁操作人(回调报文 operator)
*/
void setKingdeeUnlockOperator(String kingdeeUnlockOperator);
/**
* 解锁动作名称:金蝶删单/金蝶锁单
*/
void setKingdeeUnlockOperationName(String kingdeeUnlockOperationName);
}
@@ -29,12 +29,13 @@ import org.springblade.transport.pojo.entity.PaymentApplicationSettlement;
import java.io.Serial;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/** 付款申请视图。 @author Chill */
@Data
@EqualsAndHashCode(callSuper = true)
public class PaymentApplicationVO extends PaymentApplication {
public class PaymentApplicationVO extends PaymentApplication implements KingdeeUnlockMark {
@Serial private static final long serialVersionUID = 1L;
@TableField(exist = false) private LocalDate applyStartDate;
@TableField(exist = false) private LocalDate applyEndDate;
@@ -43,6 +44,18 @@ public class PaymentApplicationVO extends PaymentApplication {
@TableField(exist = false) private String paymentTypeName;
@TableField(exist = false) private String approvalStatusName;
@TableField(exist = false) private String kingdeeStatusName;
@TableField(exist = false) private Integer attachmentCount;
@TableField(exist = false) private String attachmentSyncStatus;
@TableField(exist = false) private String attachmentSyncStatusName;
@TableField(exist = false) private String kingdeeLockStatus;
@TableField(exist = false) private String kingdeeLockFailReason;
@TableField(exist = false) private Integer kingdeeTryCount;
/** 金蝶解锁终态标识(unlocked 锁记录回填):解锁时间非空即代表该单曾被金蝶解锁/删单,供页面展示明显标识 */
@TableField(exist = false) private LocalDateTime kingdeeUnlockTime;
/** 金蝶侧解锁操作人(回调报文 operator) */
@TableField(exist = false) private String kingdeeUnlockOperator;
/** 解锁动作名称:金蝶删单/金蝶锁单 */
@TableField(exist = false) private String kingdeeUnlockOperationName;
@TableField(exist = false) private List<PaymentApplicationInvoice> invoices;
@TableField(exist = false) private List<PaymentApplicationRecord> paymentRecords;
@TableField(exist = false) private List<PaymentApplicationSettlement> settlements;
@@ -35,6 +35,7 @@ import org.springblade.transport.pojo.entity.PreSettlementChangeRecord;
import org.springblade.transport.pojo.entity.PreSettlementDetail;
import org.springblade.transport.pojo.entity.PreSettlementDetailFee;
import org.springblade.transport.pojo.entity.PreSettlementSummaryFee;
import org.springblade.transport.pojo.entity.SettlementProjectAdvanceWriteOff;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
@@ -100,6 +101,10 @@ public class PreSettlementVO extends PreSettlement {
@Schema(description = "预付信息")
private List<PreSettlementAdvance> advances;
@TableField(exist = false)
@Schema(description = "项目预付核销")
private List<SettlementProjectAdvanceWriteOff> projectAdvanceWriteOffs;
@TableField(exist = false)
@Schema(description = "变更记录")
private List<PreSettlementChangeRecord> changeRecords;
@@ -0,0 +1,72 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 可选项目预付核销选项
*
* @author Chill
*/
@Data
@Schema(description = "可选项目预付核销选项")
public class ProjectAdvanceWriteOffOptionVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@JsonSerialize(using = ToStringSerializer.class)
@Schema(description = "付款申请ID")
private Long paymentApplicationId;
@Schema(description = "预付单号")
private String paymentNo;
@Schema(description = "项目预付金额")
private BigDecimal projectAdvanceAmount;
@Schema(description = "可核销金额")
private BigDecimal availableWriteOffAmount;
@Schema(description = "金蝶预付单号")
private String kingdeeBillNo;
@Schema(description = "创建人姓名")
private String createUserName;
@Schema(description = "创建时间")
private Date createTime;
}
@@ -76,6 +76,11 @@ public class ReceiptClaimRecordVO extends ReceiptClaim {
private String claimStatusName;
@TableField(exist = false)
private String kingdeeBillStatusName;
/**
* 关联流水推送状态(none未推送/pushed已推送/failed推送失败,查询条件)
*/
@TableField(exist = false)
private String pushStatus;
@TableField(exist = false)
private List<ReceiptClaimSettlement> settlements;
@TableField(exist = false)
@@ -56,6 +56,12 @@ public class ReceiptFlowVO extends KingdeeReceiptFlow {
@TableField(exist = false)
private String claimStatusName;
@TableField(exist = false)
private String kingdeeClaimStatusName;
@TableField(exist = false)
private String pushStatusName;
@TableField(exist = false)
private String kingdeeBillStatusName;
@TableField(exist = false)
private BigDecimal remainingAmount;
@TableField(exist = false)
private String createUserName;
@@ -73,6 +79,16 @@ public class ReceiptFlowVO extends KingdeeReceiptFlow {
@TableField(exist = false)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime transactionEndTime;
/**
* 收款金额区间-最小值(查询条件)
*/
@TableField(exist = false)
private BigDecimal receiptAmountStart;
/**
* 收款金额区间-最大值(查询条件)
*/
@TableField(exist = false)
private BigDecimal receiptAmountEnd;
@TableField(exist = false)
private List<ReceiptFlowRecord> claimRecords = new ArrayList<>();
}
@@ -0,0 +1,69 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.transport.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.transport.pojo.entity.SettlementImportBatch;
import java.io.Serial;
import java.util.List;
/**
* 导入结算单批次视图
*
* @author Chill
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "导入结算单批次视图")
public class SettlementImportBatchVO extends SettlementImportBatch {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "创建人姓名")
private String createUserName;
@Schema(description = "更新人姓名")
private String updateUserName;
@Schema(description = "导入状态显示名")
private String importStatusName;
@Schema(description = "结算类型显示名")
private String settlementTypeName;
@Schema(description = "结算单类型显示名")
private String settlementBillTypeName;
@Schema(description = "运单模式显示名")
private String waybillModeName;
@Schema(description = "动态费用列名")
private List<String> feeItemNames;
}