1、新增结算调整单

2、新增运输对账
This commit is contained in:
2026-08-19 06:53:39 +08:00
parent 8bb18c6f6a
commit df6d417e40
37 changed files with 1843 additions and 43 deletions
@@ -52,6 +52,9 @@ public class PreSettlementSaveRequest implements Serializable {
@Schema(description = "合同ID")
private Long contractId;
@Schema(description = "结算类型:receivable/payable")
private String settlementType;
@Schema(description = "汇率日期")
private LocalDate exchangeRateDate;
@@ -67,6 +70,9 @@ public class PreSettlementSaveRequest implements Serializable {
@Schema(description = "应收应付明细ID")
private List<Long> sourceDetailIds;
@Schema(description = "是否允许批量转结算兼容历史来源明细的项目、所属组织或客商差异")
private Boolean allowSourceMismatch;
@Schema(description = "结算合计费用")
private List<SummaryFee> summaryFees;
@@ -0,0 +1,28 @@
package org.springblade.transport.pojo.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
public class SettlementAdjustmentSaveRequest implements Serializable {
@Serial private static final long serialVersionUID = 1L;
private Long id;
private Long formalSettlementId;
private String remark;
private List<Detail> details;
@Data
public static class Detail implements Serializable {
@Serial private static final long serialVersionUID = 1L;
private Long formalSettlementDetailId;
private Long formalSettlementDetailFeeId;
private String feeType;
private String feeItem;
private BigDecimal adjustmentAmountTax;
private BigDecimal adjustmentAmountNoTax;
private String remark;
}
}
@@ -0,0 +1,12 @@
package org.springblade.transport.pojo.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
@Data
public class SettlementAdjustmentStatusRequest implements Serializable {
@Serial private static final long serialVersionUID = 1L;
private Long id;
private String reason;
}
@@ -0,0 +1,15 @@
/** BladeX Commercial License Agreement. Copyright (c) 2018-2099, https://bladex.cn. Author: Chill Zhuang. */
package org.springblade.transport.pojo.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/** 运输对账人工匹配请求。 @author Chill */
@Data
public class TransportReconciliationManualMatchRequest implements Serializable {
@Serial private static final long serialVersionUID = 1L;
private Long reconciliationId;
private Long internalId;
private Long externalId;
}
@@ -0,0 +1,18 @@
/** BladeX Commercial License Agreement. Copyright (c) 2018-2099, https://bladex.cn. Author: Chill Zhuang. */
package org.springblade.transport.pojo.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
/** 运输对账单保存请求。 @author Chill */
@Data
public class TransportReconciliationSaveRequest implements Serializable {
@Serial private static final long serialVersionUID = 1L;
private Long id;
private Long formalSettlementId;
private String reconciliationMode;
private LocalDate reconciliationDate;
private String remark;
}
@@ -0,0 +1,35 @@
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
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;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_settlement_adjustment")
public class SettlementAdjustment extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
private String adjustmentNo;
private Long formalSettlementId;
private String formalSettlementNo;
private String settlementType;
private String projectName;
private String deptName;
private String customerName;
private String contractNo;
private String contractName;
private BigDecimal adjustmentAmount;
private BigDecimal originalSettlementAmount;
private BigDecimal adjustedSettlementAmount;
private String approvalStatus;
private String currentNode;
private String currentProcessor;
private String kingdeeSyncStatus;
private String remark;
private LocalDateTime approvedTime;
}
@@ -0,0 +1,25 @@
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.math.BigDecimal;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_settlement_adjustment_detail")
public class SettlementAdjustmentDetail extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
private Long adjustmentId;
private Long formalSettlementDetailId;
private Long formalSettlementDetailFeeId;
private String feeType;
private String feeItem;
private BigDecimal originalAmountTax;
private BigDecimal adjustmentAmountTax;
private BigDecimal adjustmentAmountNoTax;
private String remark;
}
@@ -0,0 +1,68 @@
/**
* 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>
* <p>Author: Chill Zhuang (bladejava@qq.com)</p>
*/
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.LocalDate;
import java.time.LocalDateTime;
/**
* 运输对账单实体类
*
* @author Chill
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_transport_reconciliation")
@Schema(description = "运输对账单")
public class TransportReconciliation extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
private String reconciliationNo;
private Long formalSettlementId;
private String formalSettlementNo;
private String preSettlementNos;
private String settlementType;
private String reconciliationMode;
private Long projectId;
private String projectName;
private Long deptId;
private String deptName;
private Long contractId;
private String contractNo;
private String contractName;
private String payerName;
private String payeeName;
private String currency;
private BigDecimal settlementAmount;
private BigDecimal paidAmount;
private Long reconcilerId;
private String reconcilerName;
private LocalDate reconciliationDate;
private String reconciliationStatus;
private String matchStatus;
private Integer internalBillCount;
private Integer externalBillCount;
private Integer differenceCount;
private BigDecimal internalQuantity;
private BigDecimal externalQuantity;
private BigDecimal differenceQuantity;
private BigDecimal internalAmount;
private BigDecimal externalAmount;
private BigDecimal differenceAmount;
private Integer matchedCount;
private Integer unmatchedCount;
private Boolean billUpdated;
private LocalDateTime completedTime;
private String remark;
}
@@ -0,0 +1,39 @@
/**
* 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>
* <p>Author: Chill Zhuang (bladejava@qq.com)</p>
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
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;
/** 运输对账账单变更记录。 @author Chill */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_transport_reconciliation_change_record")
public class TransportReconciliationChangeRecord extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
private Long reconciliationId;
private Long internalDetailId;
private Long formalSettlementId;
private Long formalSettlementDetailId;
private Long sourceDetailId;
private String documentNo;
private String cargoName;
private BigDecimal beforeAmount;
private BigDecimal afterAmount;
private String beforeDataJson;
private String afterDataJson;
private Long operatorId;
private String operatorName;
private LocalDateTime changeTime;
private String changeReason;
}
@@ -0,0 +1,49 @@
/**
* 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>
* <p>Author: Chill Zhuang (bladejava@qq.com)</p>
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
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;
/** 运输对账外部账单行。 @author Chill */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_transport_reconciliation_external")
public class TransportReconciliationExternal extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
private Long reconciliationId;
private Integer externalLineNo;
private String vehicleNo;
private String departureAddress;
private String arrivalAddress;
private LocalDateTime actualDepartureTime;
private LocalDateTime actualCompletionTime;
private String transportType;
private String cargoName;
private String cargoType;
private String specification;
private String model;
private BigDecimal transportQuantity;
private String quantityUnit;
private BigDecimal mileage;
private String batchNo;
private BigDecimal unitPrice;
private BigDecimal freightAmount;
private String feeItemsJson;
private BigDecimal settlementAmount;
private Boolean suspectedDuplicate;
private String matchStatus;
private Long matchedInternalId;
private String errorMessage;
private String rawDataJson;
}
@@ -0,0 +1,55 @@
/**
* 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>
* <p>Author: Chill Zhuang (bladejava@qq.com)</p>
*/
package org.springblade.transport.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
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;
/** 运输对账内部账单快照。 @author Chill */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("blade_transport_reconciliation_internal")
public class TransportReconciliationInternal extends TenantEntity {
@Serial private static final long serialVersionUID = 1L;
private Long reconciliationId;
private Long formalSettlementDetailId;
private Long formalSettlementDetailFeeId;
private Long sourceDetailId;
private Long sourceCargoFeeId;
private Integer lineNo;
private String documentNo;
private String waybillNo;
private String vehicleNo;
private String departureAddress;
private String arrivalAddress;
private LocalDateTime actualDepartureTime;
private LocalDateTime actualCompletionTime;
private String transportType;
private String cargoName;
private String cargoType;
private String specification;
private String model;
private BigDecimal transportQuantity;
private String quantityUnit;
private BigDecimal mileage;
private String batchNo;
private BigDecimal unitPrice;
private BigDecimal freightAmount;
private String feeItemsJson;
private BigDecimal settlementAmount;
private Long matchedExternalId;
private Integer matchedExternalLineNo;
private String matchResult;
private String updateResult;
private String updateMessage;
}
@@ -0,0 +1,22 @@
package org.springblade.transport.pojo.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.transport.pojo.entity.SettlementAdjustment;
import org.springblade.transport.pojo.entity.SettlementAdjustmentDetail;
import org.springblade.transport.pojo.entity.FormalSettlementDetail;
import java.time.LocalDate;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
public class SettlementAdjustmentVO extends SettlementAdjustment {
private LocalDate createStartDate;
private LocalDate createEndDate;
private String approvalStatusName;
private String settlementTypeName;
private String createUserName;
private List<SettlementAdjustmentDetail> details;
private List<FormalSettlementDetail> formalDetails;
}
@@ -0,0 +1,28 @@
/** BladeX Commercial License Agreement. Copyright (c) 2018-2099, https://bladex.cn. Author: Chill Zhuang. */
package org.springblade.transport.pojo.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.transport.pojo.entity.TransportReconciliation;
import org.springblade.transport.pojo.entity.TransportReconciliationChangeRecord;
import org.springblade.transport.pojo.entity.TransportReconciliationExternal;
import org.springblade.transport.pojo.entity.TransportReconciliationInternal;
import java.io.Serial;
import java.util.List;
/** 运输对账单视图实体类。 @author Chill */
@Data
@EqualsAndHashCode(callSuper = true)
public class TransportReconciliationVO extends TransportReconciliation {
@Serial private static final long serialVersionUID = 1L;
@TableField(exist = false) private String createUserName;
@TableField(exist = false) private String updateUserName;
@TableField(exist = false) private String reconciliationModeName;
@TableField(exist = false) private String reconciliationStatusName;
@TableField(exist = false) private String matchStatusName;
@TableField(exist = false) private List<TransportReconciliationInternal> internalDetails;
@TableField(exist = false) private List<TransportReconciliationExternal> externalDetails;
@TableField(exist = false) private List<TransportReconciliationChangeRecord> changeRecords;
}
@@ -0,0 +1,23 @@
package org.springblade.transport.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.transport.pojo.dto.SettlementAdjustmentSaveRequest;
import org.springblade.transport.pojo.dto.SettlementAdjustmentStatusRequest;
import org.springblade.transport.pojo.entity.SettlementAdjustment;
import org.springblade.transport.pojo.vo.SettlementAdjustmentVO;
import java.util.List;
import java.util.Map;
public interface ISettlementAdjustmentService {
IPage<SettlementAdjustmentVO> selectPage(IPage<SettlementAdjustment> page, SettlementAdjustmentVO query);
SettlementAdjustmentVO detail(Long id);
List<Map<String, Object>> candidateFormalSettlements(String keyword);
List<Map<String, Object>> formalDetails(Long formalSettlementId);
Long saveDraft(SettlementAdjustmentSaveRequest request);
void removeDraft(Long id);
void submit(SettlementAdjustmentStatusRequest request);
void approve(SettlementAdjustmentStatusRequest request);
void returnBill(SettlementAdjustmentStatusRequest request);
String repush(Long adjustmentId);
}