package com.ruoyi.cwgl.domain.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * 应收账单API接口数据传输对象 */ @Data public class ReceivableBillApiDto { /** * 应收账单管理信息 */ @NotNull(message = "应收账单信息不能为空") private ReceivableBillDto bill; /** * 应收费用管理信息 */ @NotNull(message = "应收费用信息不能为空") private List fees; /** * 应收账单数据传输对象 */ @Data public static class ReceivableBillDto { /** 账单名称 */ @NotBlank(message = "账单名称不能为空") private String billName; /** 客户名称 */ @NotBlank(message = "客户名称不能为空") private String customerName; /** 收款人 */ private String payee; /** 责任人 */ private String responsiblePerson; /** 责任领导 */ private String responsibleLeader; /** 结算方式 */ private String settlementMethod; /** 业务类型 */ private String businessType; /** 推进要求 */ private String promotionRequirement; /** 是否内部结算 */ private String isInternalSettlement; /** 内部结算单位 */ private String internalSettlementUnit; /** 单据数量 */ private Integer documentCount; /** 应结算金额 */ @NotNull(message = "应结算金额不能为空") private BigDecimal totalAmount; /** 币制 */ @NotBlank(message = "币制不能为空") private String currency; /** 减免金额 */ private BigDecimal discountAmount; /** 已收金额 */ private BigDecimal receivedAmount; /** 待收金额 */ private BigDecimal pendingAmount; /** 汇率(港币兑人民币) */ private BigDecimal exchangeRate; /** 人民币金额 */ private BigDecimal cnyAmount; /** 周期类型 */ private String periodType; /** 业务期间开始日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date businessStartDate; /** 业务期间结束日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date businessEndDate; /** 账期开始日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date billingStartDate; /** 账期结束日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date billingEndDate; /** 账单生成日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date billGenerateDate; /** 账单发送日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date billSendDate; /** 账单到期日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date billDueDate; /** 结算种类 */ private String settlementCategory; /** 结算期 */ private String settlementPeriod; /** 状态(draft:草稿;generated:已生成;sent:已发送;pending_review:待审核;partial_paid:部分收款;paid:已收款;cancelled:已取消) */ private String status; /** 审核状态(0:未审核;1:审核通过;2:审核不通过) */ private Integer auditStatus; /** 备注 */ private String remark; /** 来源系统ID(用于审核推送时识别目标TMS系统) */ private Integer sourceSystemId; } /** * 应收费用数据传输对象 */ @Data public static class ReceivableFeeDto { /** 序号(用于与明细表关联) */ private String serialNumber; /** 关联账单编号 */ private String relatedBillNo; /** 来源系统 */ @NotBlank(message = "来源系统不能为空") private String sourceSystem; /** 业务板块 */ private String businessSector; /** 单据类型 */ private String documentType; /** 单据编号 */ @NotBlank(message = "单据编号不能为空") private String documentNo; /** 是否内部结算 */ private String isInternalSettlement; /** 内部结算单位 */ private String internalSettlementUnit; /** 客户名称 */ @NotBlank(message = "客户名称不能为空") private String customerName; /** 项目名称 */ private String projectName; /** 业务发生时间 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date businessTime; /** 应收确认时间 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date receivableConfirmTime; /** 应收金额 */ @NotNull(message = "应收金额不能为空") private BigDecimal receivableAmount; private String receivableAmountStr; /** 状态 */ private String status; /** 备注 */ private String remark; /** 应收费用明细列表 */ private List feeDetails; } /** * 应收费用明细数据传输对象 */ @Data public static class ReceivableFeeDetailDto { /** 序号(用于与主表关联) */ private String serialNumber; /** 费用类型 */ @NotBlank(message = "费用类型不能为空") private String feeType; /** 费用名称 */ @NotBlank(message = "费用名称不能为空") private String feeName; /** 计费单位 */ private String billingUnit; /** 计费单价 */ @NotNull(message = "计费单价不能为空") private BigDecimal unitPrice; /** 计费数量 */ @NotNull(message = "计费数量不能为空") private BigDecimal billingQuantity; /** 计费金额 */ @NotNull(message = "计费金额不能为空") private BigDecimal billingAmount; /** 实收金额 */ private BigDecimal actualAmount; /** 币制 */ private String currency; /** 费用登记时间 */ @JsonFormat(pattern = "yyyy-MM-dd") private Date feeRegTime; /** 备注 */ private String remark; } }