Browse Source

2023年2月15日17:34:32

纪新园 2 years ago
parent
commit
8430237e8f
28 changed files with 1270 additions and 283 deletions
  1. 5 0
      blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java
  2. 14 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/dto/intelligenceData.java
  3. 11 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/dto/intelligenceDetails.java
  4. 6 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/Archives.java
  5. 12 2
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/ArchivesTrajectory.java
  6. 6 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBox.java
  7. 15 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBoxFees.java
  8. 50 14
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBoxItem.java
  9. 15 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TransportItemFees.java
  10. 13 0
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Acc.java
  11. 14 0
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Items.java
  12. 141 136
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Settlement.java
  13. 125 2
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/ArchivesController.java
  14. 46 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/ArchivesTrajectoryController.java
  15. 37 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxItemController.java
  16. 26 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxRentController.java
  17. 26 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransportController.java
  18. 4 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/ITradingBoxService.java
  19. 4 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/ITransportService.java
  20. 386 24
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java
  21. 14 29
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransferServiceImpl.java
  22. 199 29
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransportServiceImpl.java
  23. 10 0
      blade-service/trade-finance/src/main/java/org/springblade/finance/controller/AccController.java
  24. 0 1
      blade-service/trade-finance/src/main/java/org/springblade/finance/controller/ProfitStatisticsController.java
  25. 3 0
      blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java
  26. 8 1
      blade-service/trade-finance/src/main/java/org/springblade/finance/excel/AccProfitStatisticsExcel.java
  27. 39 17
      blade-service/trade-finance/src/main/java/org/springblade/finance/mapper/AccMapper.xml
  28. 41 28
      blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

+ 5 - 0
blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java

@@ -104,4 +104,9 @@ public interface TenantConstant {
 	 */
 	String RETURN_APPROVAL_NAME_CG = "return.approval.name.CG";
 
+	/**
+	 * 智能大数据token
+	 */
+	String BIGDATA_TOKEN = "bigData-token";
+
 }

+ 14 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/dto/intelligenceData.java

@@ -0,0 +1,14 @@
+package org.springblade.box.tube.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class intelligenceData {
+
+	private Integer total;
+
+	private List<intelligenceDetails> data;
+
+}

+ 11 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/dto/intelligenceDetails.java

@@ -0,0 +1,11 @@
+package org.springblade.box.tube.dto;
+
+import lombok.Data;
+
+@Data
+public class intelligenceDetails {
+
+	//箱号
+	private String XH;
+
+}

+ 6 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/Archives.java

@@ -265,5 +265,11 @@ public class Archives implements Serializable {
 	@TableField(exist = false)
 	private List<String> updateTimeList;
 
+	/**
+	 * 提单号
+	 */
+	@TableField(exist = false)
+	private String billNO;
+
 
 }

+ 12 - 2
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/ArchivesTrajectory.java

@@ -149,16 +149,26 @@ public class ArchivesTrajectory implements Serializable {
 	/**
 	 * 应付
 	 */
-	@ApiModelProperty(value = "应付")
 	@TableField(exist = false)
 	private BigDecimal pay;
 
 	/**
 	 * 应收
 	 */
-	@ApiModelProperty(value = "应收")
 	@TableField(exist = false)
 	private BigDecimal collect;
 
+	/**
+	 * 付款对象
+	 */
+	@TableField(exist = false)
+	private String corpNamePay;
+
+	/**
+	 * 收款对象
+	 */
+	@TableField(exist = false)
+	private String corpNameCollect;
+
 
 }

+ 6 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBox.java

@@ -168,6 +168,12 @@ public class TradingBox implements Serializable {
 	private  List<TradingBoxFees> tradingBoxFeesList;
 
 	/**
+	 * 费用明细(进出口)
+	 */
+	@TableField(exist = false)
+	private List<TransportItemFees> transportItemFeesList;
+
+	/**
 	 * 文件
 	 */
 	@TableField(exist = false)

+ 15 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBoxFees.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.box.tube.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -178,6 +179,7 @@ public class TradingBoxFees implements Serializable {
 	 * 结算时间
 	 */
 	@ApiModelProperty(value = "结算时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date settlementDate;
 
 	/**
@@ -220,5 +222,18 @@ public class TradingBoxFees implements Serializable {
 	@ApiModelProperty(value = "业务类型(出口装运 CK/进口返程JK)")
 	private String billType;
 
+	/**
+	 * 对账金额
+	 */
+	@ApiModelProperty(value = "对账金额")
+	private BigDecimal reconciliationAmount;
+
+	/**
+	 * 对账时间
+	 */
+	@ApiModelProperty(value = "对账时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date reconciliationDate;
+
 
 }

+ 50 - 14
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBoxItem.java

@@ -55,16 +55,6 @@ public class TradingBoxItem implements Serializable {
 	@ApiModelProperty(value = "箱号")
 	private String code;
 	/**
-	 * 币别
-	 */
-	@ApiModelProperty(value = "币别")
-	private String currency;
-	/**
-	 * 金额
-	 */
-	@ApiModelProperty(value = "金额")
-	private BigDecimal amount;
-	/**
 	 * 箱类型
 	 */
 	@ApiModelProperty(value = "箱类型")
@@ -134,6 +124,12 @@ public class TradingBoxItem implements Serializable {
 	 */
 	@ApiModelProperty(value = "起租日期")
 	private Date leaseCommencementDate;
+
+	/**
+	 * 起租日期
+	 */
+	@TableField(exist = false)
+	private List<String> leaseCommencementDateList;
 	/**
 	 * 箱龄
 	 */
@@ -215,6 +211,12 @@ public class TradingBoxItem implements Serializable {
 	private Date rentEndDate;
 
 	/**
+	 * 租金计算截止日期
+	 */
+	@TableField(exist = false)
+	private List<String> rentEndDateList;
+
+	/**
 	 * 租金计算起始时间
 	 */
 	@ApiModelProperty(value = "租金计算起始时间")
@@ -227,12 +229,11 @@ public class TradingBoxItem implements Serializable {
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date rentingOutDate;
 
-
 	/**
-	 * 租金/天
+	 * 退租日期
 	 */
-	@ApiModelProperty(value = "租金/天")
-	private BigDecimal price;
+	@TableField(exist = false)
+	private List<String> rentingOutDateList;
 
 	/**
 	 * 是否计算过租金
@@ -264,4 +265,39 @@ public class TradingBoxItem implements Serializable {
 	@ApiModelProperty(value = "来源id")
 	private Long srcId;
 
+	/**
+	 * 超期租金/天
+	 */
+	@ApiModelProperty(value = "超期租金/天")
+	private BigDecimal overduePrice;
+
+	/**
+	 * 超期金额
+	 */
+	@ApiModelProperty(value = "超期金额")
+	private BigDecimal overdueAmount;
+
+	/**
+	 * 天数
+	 */
+	@ApiModelProperty(value = "天数")
+	private Integer overdueDays;
+
+	/**
+	 * 币别
+	 */
+	@ApiModelProperty(value = "币别")
+	private String currency;
+	/**
+	 * 金额
+	 */
+	@ApiModelProperty(value = "金额")
+	private BigDecimal amount;
+
+	/**
+	 * 租金/天
+	 */
+	@ApiModelProperty(value = "租金/天")
+	private BigDecimal price;
+
 }

+ 15 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TransportItemFees.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.box.tube.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -156,6 +157,7 @@ public class TransportItemFees implements Serializable {
 	 * 结算时间
 	 */
 	@ApiModelProperty(value = "结算时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date settlementDate;
 
 	/**
@@ -194,5 +196,18 @@ public class TransportItemFees implements Serializable {
 	@ApiModelProperty(value = "业务类型(出口装运 CK/进口返程JK)")
 	private String billType;
 
+	/**
+	 * 对账金额
+	 */
+	@ApiModelProperty(value = "对账金额")
+	private BigDecimal reconciliationAmount;
+
+	/**
+	 * 对账时间
+	 */
+	@ApiModelProperty(value = "对账时间")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date reconciliationDate;
+
 
 }

+ 13 - 0
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Acc.java

@@ -448,6 +448,13 @@ public class Acc implements Serializable {
 	 */
 	@ApiModelProperty(value = "租金结束时间")
 	private Date rentEndDate;
+
+	/**
+	 * 租金开始时间
+	 */
+	@TableField(exist = false)
+	private List<String> rentEndDateList;
+
 	/**
 	 * 租金开始时间
 	 */
@@ -455,6 +462,12 @@ public class Acc implements Serializable {
 	private Date rentStartDate;
 
 	/**
+	 * 租金开始时间
+	 */
+	@TableField(exist = false)
+	private List<String> rentStartDateList;
+
+	/**
 	 * 来源业务模块
 	 */
 	@ApiModelProperty(value = "来源业务模块")

+ 14 - 0
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Items.java

@@ -376,4 +376,18 @@ public class Items implements Serializable {
 	@ApiModelProperty(value = "结算金额")
 	private BigDecimal settlementAmount;
 
+	/**
+	 * 箱号
+	 */
+	@ApiModelProperty(value = "箱号")
+	@TableField("Src_refno")
+	private String SrcRefno;
+
+	/**
+	 * 对账金额
+	 */
+	@ApiModelProperty(value = "对账金额")
+	@TableField("Check_Amount")
+	private BigDecimal checkAmount;
+
 }

+ 141 - 136
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Settlement.java

@@ -16,23 +16,22 @@
  */
 package org.springblade.finance.vojo;
 
-import java.math.BigDecimal;
-
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
 import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springblade.finance.entity.InvoiceItem;
 
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 结算表实体类
  *
@@ -42,151 +41,151 @@ import org.springblade.finance.entity.InvoiceItem;
 @Data
 @TableName("finance_settlement")
 @ApiModel(value = "Settlement对象", description = "结算表")
-public class Settlement  implements Serializable {
+public class Settlement implements Serializable {
 
 	private static final long serialVersionUID = 1L;
-    @TableId
+	@TableId
 	private Long id;
 	/**
-	* 系统编号
-	*/
-		@ApiModelProperty(value = "系统编号")
-		@TableField("Sys_No")
+	 * 系统编号
+	 */
+	@ApiModelProperty(value = "系统编号")
+	@TableField("Sys_No")
 	private String sysNo;
 	/**
-	* 来源订单号
-	*/
-		@ApiModelProperty(value = "来源订单号")
-		@TableField("Src_OrderNo")
+	 * 来源订单号
+	 */
+	@ApiModelProperty(value = "来源订单号")
+	@TableField("Src_OrderNo")
 	private String srcOrderno;
 	/**
-	* 收费 、付费
-	*/
-		@ApiModelProperty(value = "收费 、付费")
-		@TableField("Bill_type")
+	 * 收费 、付费
+	 */
+	@ApiModelProperty(value = "收费 、付费")
+	@TableField("Bill_type")
 	private String billType;
 	/**
-	* 客户id
-	*/
-		@ApiModelProperty(value = "客户id")
-		@TableField("Corp_id")
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	@TableField("Corp_id")
 	private Long corpId;
 	/**
-	* 客户名称
-	*/
-		@ApiModelProperty(value = "客户名称")
-		@TableField("Corp_name")
+	 * 客户名称
+	 */
+	@ApiModelProperty(value = "客户名称")
+	@TableField("Corp_name")
 	private String corpName;
 	/**
-	* 预计结算日期
-	*/
-		@ApiModelProperty(value = "预计结算日期")
-		@TableField("Plan_settlement_date")
+	 * 预计结算日期
+	 */
+	@ApiModelProperty(value = "预计结算日期")
+	@TableField("Plan_settlement_date")
 	private Date planSettlementDate;
 	/**
-	* 结算日期
-	*/
-		@ApiModelProperty(value = "结算日期")
-		private Date settlementDate;
-	/**
-	* 币别
-	*/
-		@ApiModelProperty(value = "币别")
-		private String currency;
-	/**
-	* 汇率
-	*/
-		@ApiModelProperty(value = "汇率")
-		private BigDecimal exchangeRate;
-	/**
-	* 金额
-	*/
-		@ApiModelProperty(value = "金额")
-		private BigDecimal amount;
-	/**
-	* 手续费
-	*/
-		@ApiModelProperty(value = "手续费")
-		private BigDecimal serviceCharge;
-	/**
-	* 账户名称
-	*/
-		@ApiModelProperty(value = "账户名称")
-		@TableField("ACCOUNT_NAME")
+	 * 结算日期
+	 */
+	@ApiModelProperty(value = "结算日期")
+	private Date settlementDate;
+	/**
+	 * 币别
+	 */
+	@ApiModelProperty(value = "币别")
+	private String currency;
+	/**
+	 * 汇率
+	 */
+	@ApiModelProperty(value = "汇率")
+	private BigDecimal exchangeRate;
+	/**
+	 * 金额
+	 */
+	@ApiModelProperty(value = "金额")
+	private BigDecimal amount;
+	/**
+	 * 手续费
+	 */
+	@ApiModelProperty(value = "手续费")
+	private BigDecimal serviceCharge;
+	/**
+	 * 账户名称
+	 */
+	@ApiModelProperty(value = "账户名称")
+	@TableField("ACCOUNT_NAME")
 	private String accountName;
 	/**
-	* 开户银行
-	*/
-		@ApiModelProperty(value = "开户银行")
-		@TableField("ACCOUNT_bank")
+	 * 开户银行
+	 */
+	@ApiModelProperty(value = "开户银行")
+	@TableField("ACCOUNT_bank")
 	private String accountBank;
 	/**
-	* 银行账号
-	*/
-		@ApiModelProperty(value = "银行账号")
-		@TableField("ACCOUNT_no")
+	 * 银行账号
+	 */
+	@ApiModelProperty(value = "银行账号")
+	@TableField("ACCOUNT_no")
 	private String accountNo;
 	/**
-	* 备注
-	*/
-		@ApiModelProperty(value = "备注")
-		private String remark;
-	/**
-	* 特别提醒
-	*/
-		@ApiModelProperty(value = "特别提醒")
-		private String specialRemarks;
-	/**
-	* 版本
-	*/
-		@ApiModelProperty(value = "版本")
-		private String version;
-	/**
-	* 创建人
-	*/
-		@ApiModelProperty(value = "创建人")
-		private Long createUser;
-	/**
-	* 创建部门
-	*/
-		@ApiModelProperty(value = "创建部门")
-		private Long createDept;
-	/**
-	* 创建时间
-	*/
-		@ApiModelProperty(value = "创建时间")
-		private Date createTime;
-	/**
-	* 修改人
-	*/
-		@ApiModelProperty(value = "修改人")
-		private Long updateUser;
-	/**
-	* 修改时间
-	*/
-		@ApiModelProperty(value = "修改时间")
-		private Date updateTime;
-	/**
-	* 状态(0 正常 1停用)
-	*/
-		@ApiModelProperty(value = "状态(0 正常 1停用)")
-		private Integer status;
-	/**
-	* 是否已删除(0 否 1是)
-	*/
-		@ApiModelProperty(value = "是否已删除(0 否 1是)")
-		@TableLogic
-		private Integer isDeleted;
-	/**
-	* 创建人姓名
-	*/
-		@ApiModelProperty(value = "创建人姓名")
-		private String createUserName;
-	/**
-	* 修改人姓名
-	*/
-		@ApiModelProperty(value = "修改人姓名")
-		private String updateUserName;
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remark;
+	/**
+	 * 特别提醒
+	 */
+	@ApiModelProperty(value = "特别提醒")
+	private String specialRemarks;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	@TableLogic
+	private Integer isDeleted;
+	/**
+	 * 创建人姓名
+	 */
+	@ApiModelProperty(value = "创建人姓名")
+	private String createUserName;
+	/**
+	 * 修改人姓名
+	 */
+	@ApiModelProperty(value = "修改人姓名")
+	private String updateUserName;
 
 	/**
 	 * 收付款状态
@@ -208,7 +207,7 @@ public class Settlement  implements Serializable {
 
 	@ApiModelProperty(value = "回显客户中文名")
 	@TableField(exist = false)
-	private List<Map<String,Object>> customerModel;
+	private List<Map<String, Object>> customerModel;
 
 	@ApiModelProperty(value = "清核状态")
 	private String checkStatus;
@@ -293,20 +292,20 @@ public class Settlement  implements Serializable {
 	private String account;
 
 	/**
-	 *	单据完成日期
+	 * 单据完成日期
 	 */
 	@ApiModelProperty(value = "单据完成日期")
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date completionTime;
 
 	/**
-	 *	单据完成开始日期
+	 * 单据完成开始日期
 	 */
 	@TableField(exist = false)
 	private String completionTimeStart;
 
 	/**
-	 *	单据完成结束日期
+	 * 单据完成结束日期
 	 */
 	@TableField(exist = false)
 	private String completionTimeEnd;
@@ -317,4 +316,10 @@ public class Settlement  implements Serializable {
 	@ApiModelProperty(value = "应付金额合计")
 	private String payAmount;
 
+	/**
+	 * 收费 、付费
+	 */
+	@ApiModelProperty(value = "收费 、付费")
+	private String type;
+
 }

+ 125 - 2
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/ArchivesController.java

@@ -16,17 +16,25 @@
  */
 package org.springblade.box.tube.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
 import org.springblade.box.tube.dto.ArchivesExcelEnter;
 import org.springblade.box.tube.dto.ArchivesExcelOut;
+import org.springblade.box.tube.dto.intelligenceData;
+import org.springblade.box.tube.dto.intelligenceDetails;
 import org.springblade.box.tube.entity.Archives;
 import org.springblade.box.tube.entity.ArchivesFiles;
 import org.springblade.box.tube.service.IArchivesFilesService;
@@ -39,15 +47,23 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.jackson.JsonUtil;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.system.cache.ParamCache;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+
+import static org.springblade.common.constant.TenantConstant.BIGDATA_TOKEN;
+import static org.springblade.common.constant.TenantConstant.PAYMENT_PARAMETER;
 
 /**
  * 控制器
@@ -190,8 +206,8 @@ public class ArchivesController extends BladeController {
 			String[] arrs = ids.split(",");
 			for (String arr : arrs) {
 				Archives archives = archivesService.getById(Long.parseLong(arr));
-				if (ObjectUtils.isNotNull(archives)){
-					if ("使用".equals(archives.getStatus())){
+				if (ObjectUtils.isNotNull(archives)) {
+					if ("使用".equals(archives.getStatus())) {
 						throw new RuntimeException("该箱正在使用中无法删除");
 					}
 				}
@@ -312,5 +328,112 @@ public class ArchivesController extends BladeController {
 		return R.data(list);
 	}
 
+	/**
+	 * 分页(吉永-买、卖箱)
+	 */
+	@GetMapping("/intelligenceData")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入archives")
+	public R<IPage<Archives>> intelligenceData(Archives archives, Query query) {
+
+		OkHttpClient client = new OkHttpClient();
+		Map<String, Object> map = new HashMap<>();
+		map.put("token", ParamCache.getValue(BIGDATA_TOKEN));
+		map.put("param", archives.getBillNO());
+		map.put("size", query.getSize());
+		map.put("page", query.getCurrent());
+		Request request = new Request.Builder().url("https://crawler.tubaosoft.com/prod-api/crawler/data")
+//		Request request = new Request.Builder().url("http://127.0.0.1:9002/crawler/data")
+			.method("post", okhttp3.RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), JsonUtil.toJson(map)))
+			.post(okhttp3.RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), JsonUtil.toJson(map)))
+			.build();
+		String xh = "";
+		try {
+			Response response = client.newCall(request).execute();
+			//如果请求成功,解析数据
+			if (response.isSuccessful()) {
+				String body = response.body().string();
+				System.out.println("智能大数据=====" + body);
+				//得到一个JSON对象
+				JSONObject object = JSON.parseObject(body);
+				String firstData = object.getString("data");
+				if (ObjectUtils.isNotNull(firstData)) {
+					List<intelligenceData> list = JSONObject.parseArray(firstData, intelligenceData.class);
+					if (ObjectUtils.isNotNull(list.get(0)) && ObjectUtils.isNotNull(list.get(0).getData()) && list.get(0).getData().size() > 0) {
+						StringBuilder code = new StringBuilder();
+						for (intelligenceDetails intelligenceDetails_ : list.get(0).getData()) {
+							code.append(intelligenceDetails_.getXH()).append(",");
+							System.out.println("箱号=====" + intelligenceDetails_.getXH());
+						}
+						xh = code.substring(0, code.length() - 1);
+					}
+				} else {
+					throw new RuntimeException("获取数据失败");
+				}
+			} else {
+				throw new RuntimeException("获取数据失败");
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		LambdaQueryWrapper<Archives> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Archives::getTenantId, AuthUtil.getTenantId())
+			.eq(Archives::getIsDeleted, 0)
+			.like(ObjectUtils.isNotNull(archives.getContractNo()), Archives::getContractNo, archives.getContractNo())//合同号
+			.like(ObjectUtils.isNotNull(archives.getName()), Archives::getName, archives.getName())//箱型
+			.eq(ObjectUtils.isNotNull(archives.getTypeId()), Archives::getTypeId, archives.getTypeId())//箱型id
+			.eq(ObjectUtils.isNotNull(archives.getAddressId()), Archives::getAddressId, archives.getAddressId())//最新地点id
+			.eq(ObjectUtils.isNotNull(archives.getLeasingCompanyId()), Archives::getLeasingCompanyId, archives.getLeasingCompanyId())//租赁公司
+			.eq(ObjectUtils.isNotNull(archives.getBoxSource()), Archives::getBoxSource, archives.getBoxSource())//箱来源
+			.eq(ObjectUtils.isNotNull(archives.getStatus()), Archives::getStatus, archives.getStatus())//状态
+			.eq(ObjectUtils.isNotNull(archives.getBoxMakingCompany()), Archives::getBoxMakingCompany, archives.getBoxMakingCompany())//造箱公司
+			.eq(ObjectUtils.isNotNull(archives.getCreateUser()), Archives::getCreateUser, archives.getCreateUser())//制单人
+			.eq(ObjectUtils.isNotNull(archives.getUpdateUser()), Archives::getUpdateUser, archives.getUpdateUser())//修改人
+			.eq(ObjectUtils.isNotNull(archives.getBoxStatus()), Archives::getBoxStatus, archives.getBoxStatus());//箱状态
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(archives.getBoxMakingCompanyId()), Archives::getBoxMakingCompanyId, archives.getBoxMakingCompanyId());//造箱公司
+		if (ObjectUtils.isNotNull(xh)) {//最新日期
+			lambdaQueryWrapper.apply("find_in_set(code,'" + xh + "')");//箱号
+		} else {
+			IPage<Archives> pages = new Page<>();
+			pages.setRecords(new ArrayList<>());
+			return R.data(pages);
+		}
+		if (archives.getNewDateList() != null && archives.getNewDateList().size() > 1) {//最新日期
+			lambdaQueryWrapper.ge(Archives::getNewDate, archives.getNewDateList().get(0));
+			lambdaQueryWrapper.le(Archives::getNewDate, archives.getNewDateList().get(1));
+		}
+		if (archives.getBoxMakingDateList() != null && archives.getBoxMakingDateList().size() > 1) {//造箱时间
+			lambdaQueryWrapper.ge(Archives::getBoxMakingDate, archives.getBoxMakingDateList().get(0));
+			lambdaQueryWrapper.le(Archives::getBoxMakingDate, archives.getBoxMakingDateList().get(1));
+		}
+		if (archives.getLeaseCommencementDateList() != null && archives.getLeaseCommencementDateList().size() > 1) {//起租日期
+			lambdaQueryWrapper.ge(Archives::getLeaseCommencementDate, archives.getLeaseCommencementDateList().get(0));
+			lambdaQueryWrapper.le(Archives::getLeaseCommencementDate, archives.getLeaseCommencementDateList().get(1));
+		}
+		if (archives.getCreateTimeList() != null && archives.getCreateTimeList().size() > 1) {//创建日期
+			lambdaQueryWrapper.ge(Archives::getCreateTime, archives.getCreateTimeList().get(0));
+			lambdaQueryWrapper.le(Archives::getCreateTime, archives.getCreateTimeList().get(1));
+		}
+		if (archives.getUpdateTimeList() != null && archives.getUpdateTimeList().size() > 1) {//修改日期
+			lambdaQueryWrapper.ge(Archives::getUpdateTime, archives.getUpdateTimeList().get(0));
+			lambdaQueryWrapper.le(Archives::getUpdateTime, archives.getUpdateTimeList().get(1));
+		}
+		lambdaQueryWrapper.orderByDesc(Archives::getCreateTime);
+		IPage<Archives> pages = archivesService.page(Condition.getPage(query), lambdaQueryWrapper);
+		for (Archives archives_ : pages.getRecords()) {
+			//获取箱图片  循环处理图片名,地址
+			LambdaQueryWrapper<ArchivesFiles> filesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			filesLambdaQueryWrapper.eq(ArchivesFiles::getPid, archives_.getId()).eq(ArchivesFiles::getIsDeleted, 0);
+			List<ArchivesFiles> archivesFilesList = archivesFilesService.list(filesLambdaQueryWrapper);
+			for (ArchivesFiles archivesFiles : archivesFilesList) {
+				archivesFiles.setLabel(archivesFiles.getFileName());
+				archivesFiles.setValue(archivesFiles.getUrl());
+			}
+			archives_.setFilesList(archivesFilesList);
+		}
+		return R.data(pages);
+	}
+
 
 }

+ 46 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/ArchivesTrajectoryController.java

@@ -31,6 +31,8 @@ import org.springblade.box.tube.service.IArchivesTrajectoryService;
 import org.springblade.box.tube.service.ITradingBoxFeesService;
 import org.springblade.box.tube.service.ITransportItemFeesService;
 import org.springblade.box.tube.vo.ArchivesTrajectoryVO;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
@@ -46,6 +48,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 箱轨迹表 控制器
@@ -65,6 +68,8 @@ public class ArchivesTrajectoryController extends BladeController {
 
 	private final ITransportItemFeesService transportItemFeesService;
 
+	private final ICorpsDescClient corpsDescClient;
+
 	/**
 	 * 详情
 	 */
@@ -107,7 +112,27 @@ public class ArchivesTrajectoryController extends BladeController {
 					.eq(TransportItemFees::getPid, archivesTrajectory_.getSrcId());
 				transportItemFeesList = transportItemFeesService.list(transportItemFeesLambdaQueryWrapper);
 				if (ObjectUtils.isNotNull(transportItemFeesList) && transportItemFeesList.size() > 0) {
+					//应付
+					List<String> payCorpId = new ArrayList<>();
+					List<Long> payCorpIds = transportItemFeesList.stream().filter(e -> e.getFeesType() == 1).map(TransportItemFees::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+					for (Long str : payCorpIds) {
+						payCorpId.add(str.toString());
+					}
+					List<CorpsDesc> payCorpsDescList = corpsDescClient.selectByCorpIds(String.join(",", payCorpId));
+					if (ObjectUtils.isNotNull(payCorpsDescList) && payCorpsDescList.size()>0){
+						archivesTrajectory_.setCorpNamePay(payCorpsDescList.stream().map(CorpsDesc::getCname).collect(Collectors.joining()));
+					}
 					archivesTrajectory_.setPay(transportItemFeesList.stream().filter(e -> e.getFeesType() == 1).map(TransportItemFees::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+					//应收
+					List<String> collectCorpId = new ArrayList<>();
+					List<Long> collectCorpIds = transportItemFeesList.stream().filter(e -> e.getFeesType() == 2).map(TransportItemFees::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+					for (Long str : collectCorpIds) {
+						collectCorpId.add(str.toString());
+					}
+					List<CorpsDesc> collectCorpsDescList = corpsDescClient.selectByCorpIds(String.join(",", collectCorpId));
+					if (ObjectUtils.isNotNull(collectCorpsDescList) && collectCorpsDescList.size()>0){
+						archivesTrajectory_.setCorpNameCollect(collectCorpsDescList.stream().map(CorpsDesc::getCname).collect(Collectors.joining()));
+					}
 					archivesTrajectory_.setCollect(transportItemFeesList.stream().filter(e -> e.getFeesType() == 2).map(TransportItemFees::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				} else {
 					archivesTrajectory_.setPay(new BigDecimal("0.00"));
@@ -120,7 +145,28 @@ public class ArchivesTrajectoryController extends BladeController {
 					.eq(TradingBoxFees::getPid, archivesTrajectory_.getSrcId());
 				tradingBoxFeesList = tradingBoxFeesService.list(tradingBoxFeesLambdaQueryWrapper);
 				if (ObjectUtils.isNotNull(tradingBoxFeesList) && tradingBoxFeesList.size() > 0) {
+					//应付
+					List<String> payCorpId = new ArrayList<>();
+					List<Long> payCorpIds = tradingBoxFeesList.stream().filter(e -> e.getFeesType() == 1).map(TradingBoxFees::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+					for (Long str : payCorpIds) {
+						payCorpId.add(str.toString());
+					}
+					List<CorpsDesc> payCorpsDescList = corpsDescClient.selectByCorpIds(String.join(",", payCorpId));
+					if (ObjectUtils.isNotNull(payCorpsDescList) && payCorpsDescList.size()>0){
+						archivesTrajectory_.setCorpNamePay(payCorpsDescList.stream().map(CorpsDesc::getCname).collect(Collectors.joining()));
+					}
 					archivesTrajectory_.setPay(tradingBoxFeesList.stream().filter(e -> e.getFeesType() == 1).map(TradingBoxFees::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+					//应收
+					List<String> collectCorpId = new ArrayList<>();
+					List<Long> collectCorpIds = tradingBoxFeesList.stream().filter(e -> e.getFeesType() == 2).map(TradingBoxFees::getCorpId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+					for (Long str : collectCorpIds) {
+						collectCorpId.add(str.toString());
+					}
+					List<CorpsDesc> collectCorpsDescList = corpsDescClient.selectByCorpIds(String.join(",", collectCorpId));
+					if (ObjectUtils.isNotNull(collectCorpsDescList) && collectCorpsDescList.size()>0){
+						archivesTrajectory_.setCorpNameCollect(collectCorpsDescList.stream().map(CorpsDesc::getCname).collect(Collectors.joining()));
+					}
+
 					archivesTrajectory_.setCollect(tradingBoxFeesList.stream().filter(e -> e.getFeesType() == 2).map(TradingBoxFees::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				} else {
 					archivesTrajectory_.setPay(new BigDecimal("0.00"));

+ 37 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxItemController.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.box.tube.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -23,9 +25,11 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.springblade.box.tube.entity.TradingBox;
 import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
@@ -35,6 +39,8 @@ import org.springblade.box.tube.vo.TradingBoxItemVO;
 import org.springblade.box.tube.service.ITradingBoxItemService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 买(卖)箱明细表 控制器
  *
@@ -72,6 +78,37 @@ public class TradingBoxItemController extends BladeController {
 	}
 
 	/**
+	 * 分页 买(卖)箱明细表
+	 */
+	@GetMapping("/listAll")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入tradingBoxItem")
+	public R<List<TradingBoxItem>> list(TradingBoxItem tradingBoxItem) {
+		LambdaQueryWrapper<TradingBoxItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
+			.eq(TradingBoxItem::getIsDeleted, 0)
+			.eq(ObjectUtils.isNotNull(tradingBoxItem.getPid()),TradingBoxItem::getPid, tradingBoxItem.getPid())
+			.like(ObjectUtils.isNotNull(tradingBoxItem.getCode()), TradingBoxItem::getCode, tradingBoxItem.getCode())//箱号
+			.eq(ObjectUtils.isNotNull(tradingBoxItem.getStatus()), TradingBoxItem::getStatus, tradingBoxItem.getStatus())//状态
+			.eq(ObjectUtils.isNotNull(tradingBoxItem.getBoxTypeId()), TradingBoxItem::getBoxTypeId, tradingBoxItem.getBoxTypeId());//箱类型
+		if (tradingBoxItem.getLeaseCommencementDateList() != null && tradingBoxItem.getLeaseCommencementDateList().size() > 1) {//起租时间
+			lambdaQueryWrapper.ge(TradingBoxItem::getLeaseCommencementDate, tradingBoxItem.getLeaseCommencementDateList().get(0));
+			lambdaQueryWrapper.le(TradingBoxItem::getLeaseCommencementDate, tradingBoxItem.getLeaseCommencementDateList().get(1));
+		}
+		if (tradingBoxItem.getRentingOutDateList() != null && tradingBoxItem.getRentingOutDateList().size() > 1) {//退租日期
+			lambdaQueryWrapper.ge(TradingBoxItem::getRentingOutDate, tradingBoxItem.getRentingOutDateList().get(0));
+			lambdaQueryWrapper.le(TradingBoxItem::getRentingOutDate, tradingBoxItem.getRentingOutDateList().get(1));
+		}
+		if (tradingBoxItem.getRentEndDateList() != null && tradingBoxItem.getRentEndDateList().size() > 1) {//当前租金日期
+			lambdaQueryWrapper.ge(TradingBoxItem::getRentEndDate, tradingBoxItem.getRentEndDateList().get(0));
+			lambdaQueryWrapper.le(TradingBoxItem::getRentEndDate, tradingBoxItem.getRentEndDateList().get(1));
+		}
+		lambdaQueryWrapper.orderByDesc(TradingBoxItem::getCreateTime);
+		List<TradingBoxItem> pages = tradingBoxItemService.list(lambdaQueryWrapper);
+		return R.data(pages);
+	}
+
+	/**
 	 * 自定义分页 买(卖)箱明细表
 	 */
 	@GetMapping("/page")

+ 26 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxRentController.java

@@ -30,6 +30,7 @@ import org.springblade.box.tube.entity.Archives;
 import org.springblade.box.tube.entity.TradingBox;
 import org.springblade.box.tube.entity.TradingBoxFiles;
 import org.springblade.box.tube.entity.TradingBoxItem;
+import org.springblade.box.tube.ocean.entity.ShippingBill;
 import org.springblade.box.tube.service.ITradingBoxFilesService;
 import org.springblade.box.tube.service.ITradingBoxItemService;
 import org.springblade.box.tube.service.ITradingBoxService;
@@ -327,4 +328,29 @@ public class TradingBoxRentController extends BladeController {
 		return R.data(tradingBoxService.revokeRentingOut(tradingBox));
 	}
 
+
+	/**
+	 * 生成账单
+	 *
+	 * @param tradingBox
+	 * @return
+	 */
+	@PostMapping("/generateBill")
+	@RepeatSubmit
+	public R generateBill(@RequestBody TradingBox tradingBox) {
+		return tradingBoxService.generateBill(tradingBox);
+	}
+
+	/**
+	 * 撤销账单
+	 *
+	 * @param tradingBox
+	 * @return
+	 */
+	@PostMapping("/revokeBill")
+	@RepeatSubmit
+	public R revokeBill(@RequestBody TradingBox tradingBox) {
+		return tradingBoxService.revokeBill(tradingBox);
+	}
+
 }

+ 26 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransportController.java

@@ -329,5 +329,31 @@ public class TransportController extends BladeController {
 		return R.data(detail);
 	}
 
+	/**
+	 * 生成账单
+	 *
+	 * @param transport
+	 * @return
+	 */
+	@PostMapping("/generateBill")
+	@RepeatSubmit
+	public R generateBill(@RequestBody Transport transport) {
+		Transport generateBill = transportService.generateBill(transport);
+		return R.data(generateBill);
+	}
+
+	/**
+	 * 撤销账单
+	 *
+	 * @param transport
+	 * @return
+	 */
+	@PostMapping("/revokeBill")
+	@RepeatSubmit
+	public R revokeBill(@RequestBody Transport transport) {
+		Transport generateBill = transportService.revokeBill(transport);
+		return R.data(generateBill);
+	}
+
 
 }

+ 4 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/ITradingBoxService.java

@@ -70,4 +70,8 @@ public interface ITradingBoxService extends IService<TradingBox> {
     TradingBox copyDocument(TradingBox tradingBox);
 
 	Object revokeRentingOut(TradingBox tradingBox);
+
+	R generateBill(TradingBox tradingBox);
+
+	R revokeBill(TradingBox tradingBox);
 }

+ 4 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/ITransportService.java

@@ -63,4 +63,8 @@ public interface ITransportService extends IService<Transport> {
 	R importTransportInfo(List<TransportItemExcelEnter> excelList, boolean b, Long corpId, String corpName,String billType);
 
     Transport copyDocument(Transport transport);
+
+	Transport generateBill(Transport transport);
+
+	Transport revokeBill(Transport transport);
 }

+ 386 - 24
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java

@@ -28,6 +28,8 @@ import lombok.AllArgsConstructor;
 import org.springblade.box.tube.dto.TradingBoxItemRentExcelEnter;
 import org.springblade.box.tube.entity.*;
 import org.springblade.box.tube.mapper.*;
+import org.springblade.box.tube.ocean.entity.ShippingBill;
+import org.springblade.box.tube.ocean.entity.ShippingFees;
 import org.springblade.box.tube.service.ITradingBoxService;
 import org.springblade.box.tube.service.ITransferService;
 import org.springblade.box.tube.vo.TradingBoxVO;
@@ -107,6 +109,10 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 	private final RedisTemplate<String, Object> redisTemplate;
 	private IRedisClient redisClient;
 
+	private final TransportItemFeesMapper transportItemFeesMapper;
+
+	private final TransportMapper transportMapper;
+
 	@Override
 	public IPage<TradingBoxVO> selectTradingBoxPage(IPage<TradingBoxVO> page, TradingBoxVO tradingBox) {
 		return page.setRecords(baseMapper.selectTradingBoxPage(page, tradingBox));
@@ -131,7 +137,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			LambdaQueryWrapper<TradingBoxItem> tradingBoxItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			tradingBoxItemLambdaQueryWrapper.eq(TradingBoxItem::getIsDeleted, 0)
 				.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
-				.eq(TradingBoxItem::getPid, details.getId());
+				.eq(TradingBoxItem::getPid, details.getId())
+				.orderByDesc(TradingBoxItem::getCreateTime);
 			List<TradingBoxItem> tradingBoxItemList = tradingBoxItemMapper.selectList(tradingBoxItemLambdaQueryWrapper);
 			/*for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
 				//获取费用信息
@@ -156,7 +163,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			LambdaQueryWrapper<TradingBoxFees> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getIsDeleted, 0)
 				.eq(TradingBoxFees::getTenantId, AuthUtil.getTenantId())
-				.eq(TradingBoxFees::getPid, details.getId());
+				.eq(TradingBoxFees::getPid, details.getId())
+				.orderByDesc(TradingBoxFees::getCreateTime);
 			List<TradingBoxFees> tradingBoxFeesList = tradingBoxFeesMapper.selectList(tradingBoxFeesLambdaQueryWrapper);
 			for (TradingBoxFees tradingBoxFees : tradingBoxFeesList) {
 				//品名
@@ -182,7 +190,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxFilesLambdaQueryWrapper.eq(TradingBoxFiles::getIsDeleted, 0)
 				.eq(TradingBoxFiles::getTenantId, AuthUtil.getTenantId())
 				.eq(TradingBoxFiles::getType, "1")
-				.eq(TradingBoxFiles::getPid, details.getId());
+				.eq(TradingBoxFiles::getPid, details.getId())
+				.orderByDesc(TradingBoxFiles::getCreateTime);
 			List<TradingBoxFiles> tradingBoxFilesList = tradingBoxFilesMapper.selectList(tradingBoxFilesLambdaQueryWrapper);
 			details.setTradingBoxFilesList(tradingBoxFilesList);
 		}
@@ -247,7 +256,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					}
 				}
 			}
-			if (ObjectUtils.isNotNull(boxTypeNumber)){
+			if (ObjectUtils.isNotNull(boxTypeNumber)) {
 				tradingBox.setBoxTypeNumber(boxTypeNumber.substring(0, boxTypeNumber.length() - 1));
 			}
 			for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
@@ -303,6 +312,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				String updateChar = tradingBoxItem.getCode() + tradingBoxItem.getBoxType() + tradingBoxItem.getAddress() + tradingBoxItem.getNewDate() + tradingBoxItem.getStatus();
 				if (ObjectUtils.isNull(tradingBoxItem.getUpdateChar()) || !updateChar.equals(tradingBoxItem.getUpdateChar())) {
 					tradingBoxItem.setUpdateChar(updateChar);
+					tradingBoxItemMapper.updateById(tradingBoxItem);
 					if (ObjectUtils.isNotNull(tradingBoxItem.getCode())) {
 						//更新箱档案信息
 						Archives archivesR = archivesMapper.selectOne(new LambdaQueryWrapper<Archives>().eq(Archives::getIsDeleted, 0).eq(Archives::getTenantId, AuthUtil.getTenantId()).eq(Archives::getCode, tradingBoxItem.getCode()));
@@ -491,7 +501,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					}
 				}
 			}
-			if (ObjectUtils.isNotNull(boxTypeNumber)){
+			if (ObjectUtils.isNotNull(boxTypeNumber)) {
 				tradingBox.setBoxTypeNumber(boxTypeNumber.substring(0, boxTypeNumber.length() - 1));
 			}
 			for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
@@ -504,6 +514,16 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					tradingBoxItem.setRentStartDate(tradingBoxItem.getLeaseCommencementDate());
 				}
 				if (tradingBoxItem.getId() == null) {
+
+					LambdaQueryWrapper<TradingBoxItem> tradingBoxItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
+					tradingBoxItemLambdaQueryWrapper.eq(TradingBoxItem::getIsDeleted,0)
+						.eq(TradingBoxItem::getTenantId,AuthUtil.getTenantId())
+						.eq(TradingBoxItem::getPid,tradingBox.getId())
+						.eq(TradingBoxItem::getCode,tradingBoxItem.getCode());
+					List<TradingBoxItem> tradingBoxItemList1 = tradingBoxItemMapper.selectList(tradingBoxItemLambdaQueryWrapper);
+					if (ObjectUtils.isNotNull(tradingBoxItemList1) && tradingBoxItemList1.size()>0){
+						throw new RuntimeException("箱号:"+tradingBoxItem.getCode()+"已存在,保存失败");
+					}
 					if (tradingBox.getType().equals("ZR")) {
 						if (ObjectUtils.isNotNull(tradingBoxItem.getLeaseCommencementDate())) {
 							tradingBoxItem.setStatus("待使用");
@@ -526,6 +546,47 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					tradingBoxItem.setCreateUserName(AuthUtil.getUserName());
 					tradingBoxItem.setTenantId(AuthUtil.getTenantId());
 					tradingBoxItem.setPid(tradingBox.getId());
+
+					//计算租金费用
+					TradingBoxFees tradingBoxFees = new TradingBoxFees();
+					tradingBoxFees.setCorpId(tradingBox.getPurchaseCompanyId());
+					tradingBoxFees.setCorpName(tradingBox.getPurchaseCompanyName());
+					tradingBoxFees.setAmount(tradingBoxItem.getAmount());
+					tradingBoxFees.setPrice(tradingBoxItem.getAmount());
+					tradingBoxFees.setQuantity(BigDecimal.valueOf(tradingBoxItem.getOverdueDays()));
+					tradingBoxFees.setCurrency(tradingBoxItem.getCurrency());
+					tradingBoxFees.setCode(tradingBoxItem.getCode());
+					tradingBoxFees.setCorpName(tradingBox.getPurchaseCompanyName());
+					//获取费用id
+					R<FeesDesc> fees = feesDescClient.getFeesByName("租金");
+					if (fees.isSuccess() && fees.getData() != null) {
+						tradingBoxFees.setItemId(fees.getData().getId());
+					}
+					if ("ZR".equals(tradingBox.getType())) {
+						tradingBoxFees.setFeesType(2);
+						tradingBoxFees.setBillType("租入");
+					} else {
+						tradingBoxFees.setFeesType(1);
+						tradingBoxFees.setBillType("租出");
+					}
+					tradingBoxFees.setPid(tradingBox.getId());
+					tradingBoxFees.setSrcOrderNo(tradingBox.getContractNo());
+					tradingBoxFees.setUnit(tradingBoxItem.getBoxType());
+					tradingBoxFees.setExchangeRate(new BigDecimal(1));
+					if (ObjectUtils.isNotNull(tradingBoxItem.getLeaseCommencementDate()) && ObjectUtils.isNotNull(tradingBoxItem.getOverdueDays())) {
+						Calendar calendar = new GregorianCalendar();
+						calendar.setTime(tradingBoxItem.getLeaseCommencementDate());
+						calendar.add(Calendar.DATE, tradingBoxItem.getOverdueDays());
+						tradingBoxFees.setRentStartDate(calendar.getTime());
+						tradingBoxItem.setRentEndDate(calendar.getTime());
+					}
+					tradingBoxFees.setRentEndDate(tradingBox.getRentCalculationDate());
+					tradingBoxFees.setCreateUser(AuthUtil.getUserId());
+					tradingBoxFees.setCreateTime(new Date());
+					tradingBoxFees.setTenantId(AuthUtil.getTenantId());
+					tradingBoxFees.setSubmitPay(0);
+					tradingBoxFeesMapper.insert(tradingBoxFees);
+
 					tradingBoxItemMapper.insert(tradingBoxItem);
 				} else {
 					if (tradingBox.getType().equals("ZR") && "录入".equals(tradingBoxItem.getStatus())) {
@@ -576,6 +637,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				String updateChar = tradingBoxItem.getCode() + tradingBoxItem.getBoxType() + tradingBoxItem.getAddress() + tradingBoxItem.getNewDate() + tradingBoxItem.getStatus();
 				if (ObjectUtils.isNull(tradingBoxItem.getUpdateChar()) || !updateChar.equals(tradingBoxItem.getUpdateChar())) {
 					tradingBoxItem.setUpdateChar(updateChar);
+					tradingBoxItemMapper.updateById(tradingBoxItem);
 					if (ObjectUtils.isNotNull(tradingBoxItem.getCode())) {
 						//更新箱档案信息
 						Archives archivesR = archivesMapper.selectOne(new LambdaQueryWrapper<Archives>().eq(Archives::getIsDeleted, 0).eq(Archives::getTenantId, AuthUtil.getTenantId()).eq(Archives::getCode, tradingBoxItem.getCode()));
@@ -758,7 +820,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 			auditProecessDTO.setProcessType("租入审批");
 
-		}else if ("ZC".equals(tradingBox.getType()) && checkFlag == 4) {
+		} else if ("ZC".equals(tradingBox.getType()) && checkFlag == 4) {
 			if (tradingBox.getCheckFlag() == 4 && selectTradingBox.getStatus() != 0) {
 				throw new SecurityException("订单已开启审核,请勿重复提交");
 			}
@@ -769,7 +831,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 			auditProecessDTO.setProcessType("租出审批");
 
-		}else {
+		} else {
 			throw new SecurityException("请核失败:请核标识设置不正确");
 		}
 
@@ -826,6 +888,12 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			BigDecimal payAmount = new BigDecimal("0.00");
 			if (ObjectUtils.isNotNull(receivableOrderFeesList)) {
 				for (TradingBoxFees tradingBoxFees : receivableOrderFeesList) {
+					if (ObjectUtils.isNull(tradingBoxFees.getCorpId())) {
+						throw new RuntimeException("箱号:" + tradingBoxFees.getCode() + "付费对象不能为空");
+					}
+					if (0 == tradingBoxFees.getSubmitPay()) {
+						throw new RuntimeException("箱号:" + tradingBoxFees.getCode() + "应付费用未生成账单,操作失败");
+					}
 					payAmount = payAmount.add(tradingBoxFees.getPrice().multiply(tradingBoxFees.getExchangeRate(), MathContext.DECIMAL32));
 				}
 			}
@@ -840,6 +908,12 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			BigDecimal receivableAmount = new BigDecimal("0.00");
 			if (ObjectUtils.isNotNull(payOrderFeesList)) {
 				for (TradingBoxFees tradingBoxFees : payOrderFeesList) {
+					if (ObjectUtils.isNull(tradingBoxFees.getCorpId())) {
+						throw new RuntimeException("箱号:" + tradingBoxFees.getCode() + "收款对象不能为空");
+					}
+					if (0 == tradingBoxFees.getSubmitPay()) {
+						throw new RuntimeException("箱号:" + tradingBoxFees.getCode() + "应收费用未生成账单,操作失败");
+					}
 					receivableAmount = receivableAmount.add(tradingBoxFees.getPrice().multiply(tradingBoxFees.getExchangeRate(), MathContext.DECIMAL32));
 				}
 			}
@@ -881,7 +955,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		baseMapper.updateById(tradingBox);
 
 		//入库生成账单
-		this.paymentApply(tradingBox, tradingBox.getType(), tradingBox.getType());
+//		this.paymentApply(tradingBox, tradingBox.getType(), tradingBox.getType());
 
 		return R.success("审核通过");
 	}
@@ -920,7 +994,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		if (selectTradingBox == null) {
 			throw new SecurityException("撤销审核失败");
 		}
-		//获取账单信息
+		/*//获取账单信息
 		Acc acc = new Acc();
 		acc.setSrcParentId(selectTradingBox.getId());
 		if ("BUY".equals(selectTradingBox.getType())) {
@@ -940,14 +1014,14 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					financeClient.remove(acc_.getId() + "");
 				}
 			}
-		}
+		}*/
 		selectTradingBox.setStatus(0);
 		selectTradingBox.setApprovalStatus("审核已撤销");
 		selectTradingBox.setUpdateTime(new Date());
 		selectTradingBox.setUpdateUser(AuthUtil.getUserId());
 		baseMapper.updateById(selectTradingBox);
 		//获取订单费用信息
-		LambdaQueryWrapper<TradingBoxFees> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		/*LambdaQueryWrapper<TradingBoxFees> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getIsDeleted, 0);
 		tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getPid, selectTradingBox.getId());
 		tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getTenantId, AuthUtil.getTenantId());
@@ -956,7 +1030,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		for (TradingBoxFees tradingBoxFees : tradingBoxFeesList) {
 			tradingBoxFees.setSubmitPay(0);
 			tradingBoxFeesMapper.updateById(tradingBoxFees);
-		}
+		}*/
 		iCheckClient.deteleByBillId(tradingBox.getId());
 		return selectTradingBox;
 	}
@@ -1080,6 +1154,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 						throw new RuntimeException("未查到箱信息");
 					}
 					if (tradingBox.getType().equals("ZR")) {
+						if (archivesR.getStatus().equals("使用")) {
+							throw new RuntimeException("箱号:" + archivesR.getCode() + "状态为使用中,退租失败!");
+						}
 						archivesR.setStatus("退租");
 						archivesR.setBoxAccessStatus("空箱离场");
 						archivesR.setUpdateTime(new Date());
@@ -1247,7 +1324,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		if (ObjectUtils.isNotNull(tradingBox.getRentCalculationDate()) && ObjectUtils.isNotNull(tradingBox.getRentStartDate())) {
 			days = (int) ((tradingBox.getRentCalculationDate().getTime() - tradingBox.getRentStartDate().getTime()) / (1000 * 3600 * 24)) + 1;
 		}
-		Long pid = tradingBox.getId();
+		/*Long pid = tradingBox.getId();
 
 		//账单数据
 		ApplyDTO applyDTO = new ApplyDTO();
@@ -1259,7 +1336,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		applyDTO.setTradeType("BOX");
 		applyDTO.setBelongCompany(tradingBox.getPurchaseCompanyName());
 		//账单明细
-		List<Items> itemsList = new ArrayList<>();
+		List<Items> itemsList = new ArrayList<>();*/
 		List<TradingBoxFees> tradingBoxFeesList = new ArrayList<>();
 		for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
 			TradingBoxFees tradingBoxFees = new TradingBoxFees();
@@ -1272,7 +1349,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxFees.setCode(tradingBoxItem.getCode());
 			tradingBoxFees.setCorpName(tradingBox.getPurchaseCompanyName());
 			//获取费用id
-			R<FeesDesc> fees = feesDescClient.getFeesByName("租金");
+			R<FeesDesc> fees = feesDescClient.getFeesByName("超期租金");
 			if (fees.isSuccess() && fees.getData() != null) {
 				tradingBoxFees.setItemId(fees.getData().getId());
 			}
@@ -1292,10 +1369,10 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxFees.setCreateUser(AuthUtil.getUserId());
 			tradingBoxFees.setCreateTime(new Date());
 			tradingBoxFees.setTenantId(AuthUtil.getTenantId());
-			tradingBoxFees.setSubmitPay(1);
+			tradingBoxFees.setSubmitPay(0);
 			tradingBoxFeesMapper.insert(tradingBoxFees);
 			tradingBoxFeesList.add(tradingBoxFees);
-			tradingBoxItem.setAmount(tradingBoxItem.getPrice().multiply(BigDecimal.valueOf(days)));
+			tradingBoxItem.setOverdueAmount(tradingBoxItem.getPrice().multiply(BigDecimal.valueOf(days)));
 			tradingBoxItem.setUpdateTime(new Date());
 			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
 			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
@@ -1304,7 +1381,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxItem.setCount(tradingBoxItem.getCount() + 1);
 			tradingBoxItemMapper.updateById(tradingBoxItem);
 
-			Items items = new Items();
+			/*Items items = new Items();
 			if (1 == tradingBoxFees.getFeesType()) {
 				items.setSrcFeesType("收费");
 			} else {
@@ -1337,9 +1414,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			}
 			items.setSrcFeesId(tradingBoxFees.getId());
 			itemsList.add(items);
-			applyDTO.setItemsList(itemsList);
+			applyDTO.setItemsList(itemsList);*/
 		}
-		if (CollectionUtils.isNotEmpty(itemsList)) {
+		/*if (CollectionUtils.isNotEmpty(itemsList)) {
 			//生成账单
 			R paymentApply = financeClient.paymentApplyBoxTube(applyDTO);
 			if (!paymentApply.isSuccess()) {
@@ -1373,7 +1450,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					}
 				}
 			}
-		}
+		}*/
 		tradingBox.setTradingBoxFeesList(tradingBoxFeesList);
 		return tradingBox;
 	}
@@ -1396,7 +1473,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getCode, tradingBoxItem.getCode());
 			tradingBoxFeesLambdaQueryWrapper.orderByDesc(TradingBoxFees::getCreateTime);
 			List<TradingBoxFees> tradingBoxFeesList = tradingBoxFeesMapper.selectList(tradingBoxFeesLambdaQueryWrapper);
-			if (tradingBoxFeesList.size() > 0) {
+			if (tradingBoxFeesList.size() > 1) {
 				tradingBoxFeesMapper.deleteById(tradingBoxFeesList.get(0).getId());
 				//获取账单信息
 				Acc acc = new Acc();
@@ -1722,6 +1799,291 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		return tradingBox;
 	}
 
+	@Override
+	public R generateBill(TradingBox tradingBoxs) {
+		if (tradingBoxs.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		if ("JK".equals(tradingBoxs.getType()) || "CK".equals(tradingBoxs.getType())){
+			Transport transport = transportMapper.selectById(tradingBoxs.getId());
+			Long pid = tradingBoxs.getId();
+
+			//账单数据
+			ApplyDTO applyDTO = new ApplyDTO();
+			if ("JKFC".equals(transport.getBillType())) {
+				applyDTO.setBillType("申请");
+			} else {
+				applyDTO.setBillType("收费");
+			}
+			applyDTO.setTradeType("BOX");
+			applyDTO.setBelongCompany(transport.getCorpName());
+
+			BigDecimal amount = BigDecimal.ZERO;//对账金额   销售订单生成的金额  销售金额-本次使用返利金额+费用明细
+			BigDecimal quantity = new BigDecimal("1");//对账数量 数量为 就是轮胎条数的和
+			BigDecimal price = BigDecimal.ZERO;//对账单价
+
+			//获取订单费用信息
+			List<TransportItemFees> transportItemFeesList = tradingBoxs.getTransportItemFeesList();
+			if (CollectionUtils.isNotEmpty(transportItemFeesList)) {
+				//账单明细
+				List<Items> itemsList = new ArrayList<>();
+				for (TransportItemFees tradingBoxFees : transportItemFeesList) {
+					Items items = new Items();
+					amount = tradingBoxFees.getAmount();
+					//计算单价
+					if (quantity.compareTo(BigDecimal.ZERO) > 0) {
+						price = amount.divide(quantity, 5, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+					}
+					if (1 == tradingBoxFees.getFeesType()) {
+						items.setSrcFeesType("收费");
+					} else {
+						items.setSrcFeesType("申请");
+					}
+					items.setSrcBoxBillType(tradingBoxFees.getBillType());
+					items.setItemType(transport.getBillType());
+					items.setPrice(price);
+					//账单数据
+					items.setAmount(amount);
+					items.setQuantity(quantity);
+					items.setCorpId(tradingBoxFees.getCorpId());
+					items.setSrcParentId(pid);
+					items.setCurrency(tradingBoxFees.getCurrency());
+					items.setSrcType(6);
+					items.setTradeType("BOX");
+					items.setUnit(tradingBoxFees.getUnit());
+					items.setRemarks(tradingBoxFees.getRemarks());
+					items.setStatusJT(0);
+					items.setStockTime(transport.getStartingRentDate());
+					//获取费用id
+					if (ObjectUtils.isNotNull(tradingBoxFees.getItemId())) {
+						items.setCostType(tradingBoxFees.getItemId().toString());
+					}
+					items.setSrcFeesId(tradingBoxFees.getId());
+
+					items.setSrcOrderno(transport.getContractNo());//合同号
+					items.setBillNo(transport.getSysNo());//系统号
+					items.setSrcSysNo(tradingBoxFees.getCode());//箱号
+					items.setSrcBillNo(transport.getBillNo());//提单号
+
+					itemsList.add(items);
+					applyDTO.setItemsList(itemsList);
+					//修改费用明细
+					tradingBoxFees.setSubmitPay(1);
+					transportItemFeesMapper.updateById(tradingBoxFees);
+				}
+				if (CollectionUtils.isNotEmpty(itemsList)) {
+					//生成账单
+					R paymentApply = financeClient.paymentApplyBoxTube(applyDTO);
+					if (!paymentApply.isSuccess()) {
+						throw new RuntimeException(paymentApply.getMsg());
+					}
+					//给角色为财务的人发送消息
+					R<String> clientDeptIds = sysClient.getRoleIds(SecureUtil.getTenantId(), "财务");
+					if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
+						R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()));
+						if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
+							for (User datum : userList.getData()) {
+								//循环发送消息
+								Message sendMessage = new Message();
+								sendMessage.setParameter(String.valueOf(pid));
+								sendMessage.setUserName(AuthUtil.getUserName());
+								sendMessage.setUserId(AuthUtil.getUserId());
+								sendMessage.setToUserId(datum.getId());
+								sendMessage.setToUserName(datum.getName());
+								sendMessage.setMessageType(1);
+								sendMessage.setTenantId(AuthUtil.getTenantId());
+								sendMessage.setCreateUser(AuthUtil.getUserId());
+								sendMessage.setCreateTime(new Date());
+								sendMessage.setUrl(transport.getUrl());
+								sendMessage.setPageLabel(transport.getPageLabel());
+								sendMessage.setPageStatus(transport.getPageStatus());
+								sendMessage.setMessageBody("您订单" + transport.getSysNo() + "审核通过,请查看");
+								R save = messageClient.save(sendMessage);
+								if (!save.isSuccess()) {
+									throw new SecurityException("发送消息失败");
+								}
+							}
+						}
+					}
+				}
+			}
+			return R.data(transport);
+		}else{
+			TradingBox tradingBox = baseMapper.selectById(tradingBoxs.getId());
+			Long pid = tradingBoxs.getId();
+
+			//账单数据
+			ApplyDTO applyDTO = new ApplyDTO();
+			if ("ZR".equals(tradingBox.getType()) || "ZC".equals(tradingBox.getType())) {
+				applyDTO.setBillType("");
+			} else if ("BUY".equals(tradingBox.getType())) {
+				applyDTO.setBillType("申请");
+			} else if ("SELL".equals(tradingBox.getType())) {
+				applyDTO.setBillType("收费");
+			} else if ("DCF".equals(tradingBox.getType())) {
+				applyDTO.setBillType("申请");
+			}
+			applyDTO.setTradeType("BOX");
+			applyDTO.setBelongCompany(tradingBox.getPurchaseCompanyName());
+
+			BigDecimal amount = BigDecimal.ZERO;//对账金额   销售订单生成的金额  销售金额-本次使用返利金额+费用明细
+			BigDecimal quantity = new BigDecimal("1");//对账数量 数量为 就是轮胎条数的和
+			BigDecimal price = BigDecimal.ZERO;//对账单价
+
+			//获取订单费用信息
+			List<TradingBoxFees> tradingBoxFeesList = tradingBoxs.getTradingBoxFeesList();
+			if (CollectionUtils.isNotEmpty(tradingBoxFeesList)) {
+				//账单明细
+				List<Items> itemsList = new ArrayList<>();
+				for (TradingBoxFees tradingBoxFees : tradingBoxFeesList) {
+					Items items = new Items();
+					amount = tradingBoxFees.getAmount();
+					//计算单价
+					if (quantity.compareTo(BigDecimal.ZERO) > 0) {
+						price = amount.divide(quantity, 5, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+					}
+					if (1 == tradingBoxFees.getFeesType()) {
+						items.setSrcFeesType("收费");
+					} else {
+						items.setSrcFeesType("申请");
+					}
+					items.setSrcBoxBillType(tradingBoxFees.getBillType());
+					items.setItemType(tradingBox.getType());
+					items.setPrice(price);
+					//账单数据
+					items.setAmount(amount);
+					items.setQuantity(quantity);
+					items.setCorpId(tradingBoxFees.getCorpId());
+					items.setSrcParentId(pid);
+					items.setCurrency(tradingBoxFees.getCurrency());
+					items.setSrcType(5);
+					items.setTradeType("BOX");
+					items.setUnit(tradingBoxFees.getUnit());
+					items.setRemarks(tradingBoxFees.getRemarks());
+					items.setStatusJT(0);
+					items.setStockTime(tradingBox.getPurchaseDate());
+					//获取费用id
+					if (ObjectUtils.isNotNull(tradingBoxFees.getItemId())) {
+						items.setCostType(tradingBoxFees.getItemId().toString());
+					}
+					items.setSrcFeesId(tradingBoxFees.getId());
+					items.setSrcOrderno(tradingBox.getContractNo());//合同号
+					items.setBillNo(tradingBox.getSysNo());//系统号
+					items.setSrcSysNo(tradingBoxFees.getCode());//箱号
+					items.setSrcBillNo(null);//提单号
+					itemsList.add(items);
+					applyDTO.setItemsList(itemsList);
+					//修改费用明细
+					tradingBoxFees.setSubmitPay(1);
+					tradingBoxFeesMapper.updateById(tradingBoxFees);
+				}
+				if (CollectionUtils.isNotEmpty(itemsList)) {
+					//生成账单
+					R paymentApply = financeClient.paymentApplyBoxTube(applyDTO);
+					if (!paymentApply.isSuccess()) {
+						throw new RuntimeException(paymentApply.getMsg());
+					}
+					//给角色为财务的人发送消息
+					R<String> clientDeptIds = sysClient.getRoleIds(SecureUtil.getTenantId(), "财务");
+					if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
+						R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()));
+						if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
+							for (User datum : userList.getData()) {
+								//循环发送消息
+								Message sendMessage = new Message();
+								sendMessage.setParameter(String.valueOf(pid));
+								sendMessage.setUserName(AuthUtil.getUserName());
+								sendMessage.setUserId(AuthUtil.getUserId());
+								sendMessage.setToUserId(datum.getId());
+								sendMessage.setToUserName(datum.getName());
+								sendMessage.setMessageType(1);
+								sendMessage.setTenantId(AuthUtil.getTenantId());
+								sendMessage.setCreateUser(AuthUtil.getUserId());
+								sendMessage.setCreateTime(new Date());
+								sendMessage.setUrl(tradingBox.getUrl());
+								sendMessage.setPageLabel(tradingBox.getPageLabel());
+								sendMessage.setPageStatus(tradingBox.getPageStatus());
+								sendMessage.setMessageBody("您订单" + tradingBox.getSysNo() + "审核通过,请查看");
+								R save = messageClient.save(sendMessage);
+								if (!save.isSuccess()) {
+									throw new SecurityException("发送消息失败");
+								}
+							}
+						}
+					}
+				}
+			}
+			return R.data(tradingBox);
+		}
+	}
+
+	@Override
+	public R revokeBill(TradingBox tradingBox) {
+		if ("JKFC".equals(tradingBox.getType()) || "CKZY".equals(tradingBox.getType())){
+			Transport selectTransport = transportMapper.selectById(tradingBox.getId());
+			if (selectTransport == null) {
+				throw new SecurityException("撤销失败,未找到主表信息");
+			}
+			//获取账单信息
+			Acc acc = new Acc();
+			acc.setTradeType("BOX");
+			acc.setSrcType(6);
+			acc.setSrcParentId(tradingBox.getId());
+			if (ObjectUtils.isNotNull(tradingBox.getTransportItemFeesList()) && tradingBox.getTransportItemFeesList().size() > 0) {
+				for (TransportItemFees transportItemFees : tradingBox.getTransportItemFeesList()) {
+					acc.setSrcFeesId(transportItemFees.getId());
+					R<List<Acc>> r = financeClient.getAccListByCondition(acc);
+					if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+						for (Acc acc_ : r.getData()) {
+							//判断账单是否已有结算  true 不允许撤销审核  false 删除账单并撤销审核
+							if (!acc_.getSettlementAmount().equals(new BigDecimal("0.00"))) {
+								throw new SecurityException("订单已结算,不允许撤销");
+							} else {
+								financeClient.remove(acc_.getId() + "");
+							}
+						}
+					}
+					transportItemFees.setSubmitPay(0);
+					transportItemFeesMapper.updateById(transportItemFees);
+				}
+			} else {
+				throw new SecurityException("撤销失败,请选择费用明细");
+			}
+			return R.data(selectTransport);
+		}else{
+			TradingBox selectTradingBox = baseMapper.selectById(tradingBox.getId());
+			if (selectTradingBox == null) {
+				throw new SecurityException("撤销失败,未找到主表信息");
+			}
+			//获取账单信息
+			Acc acc = new Acc();
+			acc.setTradeType("BOX");
+			acc.setSrcType(5);
+			acc.setSrcParentId(selectTradingBox.getId());
+			if (ObjectUtils.isNotNull(tradingBox.getTradingBoxFeesList()) && tradingBox.getTradingBoxFeesList().size() > 0) {
+				for (TradingBoxFees tradingBoxFees : tradingBox.getTradingBoxFeesList()) {
+					acc.setSrcFeesId(tradingBoxFees.getId());
+					R<List<Acc>> r = financeClient.getAccListByCondition(acc);
+					if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+						for (Acc acc_ : r.getData()) {
+							//判断账单是否已有结算  true 不允许撤销审核  false 删除账单并撤销审核
+							if (!acc_.getSettlementAmount().equals(new BigDecimal("0.00"))) {
+								throw new SecurityException("订单已结算,不允许撤销");
+							} else {
+								financeClient.remove(acc_.getId() + "");
+							}
+						}
+					}
+					tradingBoxFees.setSubmitPay(0);
+					tradingBoxFeesMapper.updateById(tradingBoxFees);
+				}
+			} else {
+				throw new SecurityException("撤销失败,请选择费用明细");
+			}
+			return R.data(selectTradingBox);
+		}
+	}
+
 	/**
 	 * 订单生成账单 并且推送财务消息
 	 *
@@ -1735,9 +2097,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 		//账单数据
 		ApplyDTO applyDTO = new ApplyDTO();
-		if ("ZR".equals(billType) || "ZC".equals(billType)){
+		if ("ZR".equals(billType) || "ZC".equals(billType)) {
 			applyDTO.setBillType("");
-		}else{
+		} else {
 			if ("BUY".equals(billType)) {
 				applyDTO.setBillType("申请");
 			} else {

+ 14 - 29
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransferServiceImpl.java

@@ -64,14 +64,10 @@ public class TransferServiceImpl implements ITransferService {
 
 	private final TradingBoxItemMapper tradingBoxItemMapper;
 
-	private final TradingBoxFilesMapper tradingBoxFilesMapper;
-
 	private final TradingBoxMapper tradingBoxMapper;
 
 	private final TransportItemMapper transportItemMapper;
 
-	private final ICheckClient iCheckClient;
-
 	private final IFinanceClient financeClient;//财务
 
 	private final ISysClient sysClient;
@@ -86,16 +82,6 @@ public class TransferServiceImpl implements ITransferService {
 
 	private IFeesDescClient feesDescClient;//费用
 
-	private ICorpsDescClient corpsDescClient;//公司
-
-	private final ArchivesTrajectoryMapper archivesTrajectoryMapper;
-
-	private final ArchivesFilesMapper archivesFilesMapper;
-
-	private final IContainerDescClient containerDescClient;
-
-	private final IPortClient portClient;
-
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -204,7 +190,7 @@ public class TransferServiceImpl implements ITransferService {
 		}
 		tradingBox.setBoxNumber(tradingBoxItemList.size());
 		tradingBoxMapper.updateById(tradingBox);
-		//费用明细
+		/*//费用明细
 		List<TradingBoxFees> tradingBoxFeesList = tradingBox.getTradingBoxFeesList();
 		if (ObjectUtils.isNotNull(tradingBoxFeesList) && tradingBoxFeesList.size() > 0) {
 			for (TradingBoxFees tradingBoxFees : tradingBoxFeesList) {
@@ -248,7 +234,7 @@ public class TransferServiceImpl implements ITransferService {
 				}
 			}
 			tradingBox.setTradingBoxFilesList(tradingBoxFilesList);
-		}
+		}*/
 		return tradingBox;
 	}
 
@@ -266,13 +252,13 @@ public class TransferServiceImpl implements ITransferService {
 		}
 		Long pid = tradingBox.getId();
 
-		//账单数据
+		/*//账单数据
 		ApplyDTO applyDTO = new ApplyDTO();
 		applyDTO.setBillType("申请");
 		applyDTO.setTradeType("BOX");
 		applyDTO.setBelongCompany(tradingBox.getPurchaseCompanyName());
 		//账单明细
-		List<Items> itemsList = new ArrayList<>();
+		List<Items> itemsList = new ArrayList<>();*/
 		List<TradingBoxFees> tradingBoxFeesList = new ArrayList<>();
 		for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
 			TradingBoxFees tradingBoxFees = new TradingBoxFees();
@@ -316,10 +302,7 @@ public class TransferServiceImpl implements ITransferService {
 			tradingBoxItem.setCount(tradingBoxItem.getCount() + 1);
 			tradingBoxItemMapper.updateById(tradingBoxItem);
 
-			Items items = new Items();
-			/*if (1 == tradingBoxFees.getFeesType()) {
-				items.setSrcFeesType("收费");
-			} else {*/
+			/*Items items = new Items();
 			items.setSrcFeesType("申请");
 //			}
 			items.setSrcBoxBillType(tradingBoxFees.getBillType());
@@ -328,18 +311,14 @@ public class TransferServiceImpl implements ITransferService {
 			//账单数据
 			items.setAmount(tradingBoxFees.getAmount());
 			items.setQuantity(tradingBoxFees.getQuantity());
-			items.setSrcOrderno(tradingBox.getContractNo());
 			items.setCorpId(tradingBoxFees.getCorpId());
 			items.setSrcParentId(pid);
 			items.setCurrency(tradingBoxFees.getCurrency());
 			items.setSrcType(5);
 			items.setTradeType("BOX");
 			items.setUnit(tradingBoxFees.getUnit());
-			items.setSrcSysNo(tradingBoxFees.getCode());
 			items.setRemarks(tradingBoxFees.getRemarks());
-			items.setSrcBillNo(tradingBox.getSysNo());
 			items.setStatusJT(0);
-			items.setBillNo(tradingBox.getSysNo());
 			items.setStockTime(tradingBox.getPurchaseDate());
 			items.setRentStartDate(tradingBox.getRentStartDate());
 			items.setRentEndDate(tradingBox.getRentCalculationDate());
@@ -348,10 +327,16 @@ public class TransferServiceImpl implements ITransferService {
 				items.setCostType(tradingBoxFees.getItemId().toString());
 			}
 			items.setSrcFeesId(tradingBoxFees.getId());
+
+			items.setSrcOrderno(tradingBox.getContractNo());//合同号
+			items.setBillNo(tradingBox.getSysNo());//系统号
+			items.setSrcSysNo(tradingBoxFees.getCode());//箱号
+			items.setSrcBillNo(null);//提单号
+
 			itemsList.add(items);
-			applyDTO.setItemsList(itemsList);
+			applyDTO.setItemsList(itemsList);*/
 		}
-		if (CollectionUtils.isNotEmpty(itemsList)) {
+		/*if (CollectionUtils.isNotEmpty(itemsList)) {
 			//生成账单
 			R paymentApply = financeClient.paymentApplyBoxTube(applyDTO);
 			if (!paymentApply.isSuccess()) {
@@ -385,7 +370,7 @@ public class TransferServiceImpl implements ITransferService {
 					}
 				}
 			}
-		}
+		}*/
 		tradingBox.setTradingBoxFeesList(tradingBoxFeesList);
 		return tradingBox;
 	}

+ 199 - 29
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransportServiceImpl.java

@@ -121,7 +121,8 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 			LambdaQueryWrapper<TransportItem> transportItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			transportItemLambdaQueryWrapper.eq(TransportItem::getIsDeleted, 0)
 				.eq(TransportItem::getTenantId, AuthUtil.getTenantId())
-				.eq(TransportItem::getPid, detail.getId());
+				.eq(TransportItem::getPid, detail.getId())
+				.orderByDesc(TransportItem::getCreateTime);
 			List<TransportItem> transportItemList = transportItemMapper.selectList(transportItemLambdaQueryWrapper);
 			/*for (TransportItem transportItem : transportItemList) {
 				//获取箱轨迹
@@ -138,7 +139,8 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 			LambdaQueryWrapper<TransportItemFees> transportItemFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			transportItemFeesLambdaQueryWrapper.eq(TransportItemFees::getIsDeleted, 0)
 				.eq(TransportItemFees::getTenantId, AuthUtil.getTenantId())
-				.eq(TransportItemFees::getPid, detail.getId());
+				.eq(TransportItemFees::getPid, detail.getId())
+				.orderByDesc(TransportItemFees::getCreateTime);
 			List<TransportItemFees> transportItemFeesList = transportItemFeesMapper.selectList(transportItemFeesLambdaQueryWrapper);
 			for (TransportItemFees transportItemFees : transportItemFeesList) {
 				R<FeesDesc> r = feesDescClient.detail(transportItemFees.getItemId());
@@ -156,7 +158,8 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 			LambdaQueryWrapper<TransportFiles> tradingBoxFilesLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			tradingBoxFilesLambdaQueryWrapper.eq(TransportFiles::getIsDeleted, 0)
 				.eq(TransportFiles::getTenantId, AuthUtil.getTenantId())
-				.eq(TransportFiles::getPid, detail.getId());
+				.eq(TransportFiles::getPid, detail.getId())
+				.orderByDesc(TransportFiles::getCreateTime);
 			List<TransportFiles> tradingBoxFilesList = transportFilesMapper.selectList(tradingBoxFilesLambdaQueryWrapper);
 			detail.setTransportFilesList(tradingBoxFilesList);
 		}
@@ -220,7 +223,7 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 					}
 				}
 			}
-			if (ObjectUtils.isNotNull(boxTypeNumber)){
+			if (ObjectUtils.isNotNull(boxTypeNumber)) {
 				transport.setBoxTypeNumber(boxTypeNumber.substring(0, boxTypeNumber.length() - 1));
 			}
 			for (TransportItem transportItem : transportItemList) {
@@ -426,28 +429,39 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 			archivesMapper.updateCode(archives);
 
 			//添加箱轨迹信息
-			ArchivesTrajectory archivesTrajectory = new ArchivesTrajectory();
-			if (ObjectUtils.isNotNull(transport.getCorpId())) {
-				archivesTrajectory.setCorpId(transport.getCorpId());
-				archivesTrajectory.setCorpName(transport.getCorpName());
+			LambdaQueryWrapper<ArchivesTrajectory> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(ArchivesTrajectory::getNewDate, newDate)
+				.eq(ArchivesTrajectory::getAddress, address)
+				.eq(ArchivesTrajectory::getCode, transportItem.getCode())
+				.eq(ArchivesTrajectory::getBillType, transport.getBillType())
+				.eq(ArchivesTrajectory::getStatus, type)
+				.eq(ArchivesTrajectory::getIsDeleted, 0);
+			ArchivesTrajectory selectOne = archivesTrajectoryMapper.selectOne(lambdaQueryWrapper);
+			if (ObjectUtils.isNotNull(selectOne)) {
+				throw new RuntimeException("箱号:" + transportItem.getCode() + "轨迹信息已存在,请重新操作!");
 			} else {
-				archivesTrajectory.setCorpId(transport.getShippingCompanyId());
-				archivesTrajectory.setCorpName(transport.getShippingCompany());
-			}
-
-			archivesTrajectory.setStatus(type);
-			archivesTrajectory.setBillType(transport.getBillType());
-			archivesTrajectory.setCode(transportItem.getCode());
-			archivesTrajectory.setAddress(address);
-			archivesTrajectory.setNewDate(newDate);
-			archivesTrajectory.setCreateTime(new Date());
-			archivesTrajectory.setCreateUser(AuthUtil.getUserId());
-			archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
-			archivesTrajectory.setTenantId(AuthUtil.getTenantId());
-			archivesTrajectory.setContractNo(transport.getContractNo());
-			archivesTrajectory.setSrcId(transport.getId());
-			archivesTrajectoryMapper.insert(archivesTrajectory);
+				ArchivesTrajectory archivesTrajectory = new ArchivesTrajectory();
+				if (ObjectUtils.isNotNull(transport.getCorpId())) {
+					archivesTrajectory.setCorpId(transport.getCorpId());
+					archivesTrajectory.setCorpName(transport.getCorpName());
+				} else {
+					archivesTrajectory.setCorpId(transport.getShippingCompanyId());
+					archivesTrajectory.setCorpName(transport.getShippingCompany());
+				}
 
+				archivesTrajectory.setStatus(type);
+				archivesTrajectory.setBillType(transport.getBillType());
+				archivesTrajectory.setCode(transportItem.getCode());
+				archivesTrajectory.setAddress(address);
+				archivesTrajectory.setNewDate(newDate);
+				archivesTrajectory.setCreateTime(new Date());
+				archivesTrajectory.setCreateUser(AuthUtil.getUserId());
+				archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
+				archivesTrajectory.setTenantId(AuthUtil.getTenantId());
+				archivesTrajectory.setContractNo(transport.getContractNo());
+				archivesTrajectory.setSrcId(transport.getId());
+				archivesTrajectoryMapper.insert(archivesTrajectory);
+			}
 			transportItemList.add(transportItem);
 		}
 		return transportItemList;
@@ -552,6 +566,12 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 					if (ObjectUtils.isNull(transportItemFees.getExchangeRate())) {
 						throw new RuntimeException("箱号:" + transportItemFees.getCode() + ",汇率不能为空");
 					}
+					if (ObjectUtils.isNull(transportItemFees.getCorpId())) {
+						throw new RuntimeException("箱号:" + transportItemFees.getCode() + "付费对象不能为空");
+					}
+					if (0 == transportItemFees.getSubmitPay()) {
+						throw new RuntimeException("箱号:" + transportItemFees.getCode() + "应付费用未生成账单,操作失败");
+					}
 					payAmount = payAmount.add(transportItemFees.getPrice().multiply(transportItemFees.getExchangeRate(), MathContext.DECIMAL32));
 				}
 			}
@@ -569,6 +589,12 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 					if (ObjectUtils.isNull(transportItemFees.getExchangeRate())) {
 						throw new RuntimeException("箱号:" + transportItemFees.getCode() + ",汇率不能为空");
 					}
+					if (ObjectUtils.isNull(transportItemFees.getCorpId())) {
+						throw new RuntimeException("箱号:" + transportItemFees.getCode() + "收款对象不能为空");
+					}
+					if (0 == transportItemFees.getSubmitPay()) {
+						throw new RuntimeException("箱号:" + transportItemFees.getCode() + "应收费用未生成账单,操作失败");
+					}
 					receivableAmount = receivableAmount.add(transportItemFees.getPrice().multiply(transportItemFees.getExchangeRate(), MathContext.DECIMAL32));
 				}
 			}
@@ -610,7 +636,7 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 		baseMapper.updateById(transport);
 
 		//入库生成账单
-		this.paymentApply(transport, transport.getBillType(), transport.getBillType());
+//		this.paymentApply(transport, transport.getBillType(), transport.getBillType());
 		return R.success("操作成功");
 	}
 
@@ -648,7 +674,7 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 		if (selectTransport == null) {
 			throw new SecurityException("撤销审核失败");
 		}
-		//获取账单信息
+		/*//获取账单信息
 		Acc acc = new Acc();
 		acc.setSrcParentId(selectTransport.getId());
 		if ("JKFC".equals(selectTransport.getBillType())) {
@@ -668,13 +694,13 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 					financeClient.remove(acc_.getId() + "");
 				}
 			}
-		}
+		}*/
 		selectTransport.setStatus(0);
 		selectTransport.setApprovalStatus("审核已撤销");
 		selectTransport.setUpdateTime(new Date());
 		selectTransport.setUpdateUser(AuthUtil.getUserId());
 		baseMapper.updateById(selectTransport);
-		//获取订单费用信息
+		/*//获取订单费用信息
 		LambdaQueryWrapper<TransportItemFees> transportItemFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		transportItemFeesLambdaQueryWrapper.eq(TransportItemFees::getIsDeleted, 0);
 		transportItemFeesLambdaQueryWrapper.eq(TransportItemFees::getPid, selectTransport.getId());
@@ -684,7 +710,7 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 		for (TransportItemFees transportItemFees : transportItemFeesList) {
 			transportItemFees.setSubmitPay(0);
 			transportItemFeesMapper.updateById(transportItemFees);
-		}
+		}*/
 		iCheckClient.deteleByBillId(selectTransport.getId());
 		return selectTransport;
 	}
@@ -843,6 +869,150 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 		return detail;
 	}
 
+	@Override
+	public Transport generateBill(Transport transports) {
+		if (transports.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Transport transport = baseMapper.selectById(transports.getId());
+		Long pid = transports.getId();
+
+		//账单数据
+		ApplyDTO applyDTO = new ApplyDTO();
+		if ("JKFC".equals(transport.getBillType())) {
+			applyDTO.setBillType("申请");
+		} else {
+			applyDTO.setBillType("收费");
+		}
+		applyDTO.setTradeType("BOX");
+		applyDTO.setBelongCompany(transport.getCorpName());
+
+		BigDecimal amount = BigDecimal.ZERO;//对账金额   销售订单生成的金额  销售金额-本次使用返利金额+费用明细
+		BigDecimal quantity = new BigDecimal("1");//对账数量 数量为 就是轮胎条数的和
+		BigDecimal price = BigDecimal.ZERO;//对账单价
+
+		//获取订单费用信息
+		List<TransportItemFees> transportItemFeesList = transports.getTransportItemFeesList();
+		if (CollectionUtils.isNotEmpty(transportItemFeesList)) {
+			//账单明细
+			List<Items> itemsList = new ArrayList<>();
+			for (TransportItemFees tradingBoxFees : transportItemFeesList) {
+				Items items = new Items();
+				amount = tradingBoxFees.getAmount();
+				//计算单价
+				if (quantity.compareTo(BigDecimal.ZERO) > 0) {
+					price = amount.divide(quantity, 5, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+				}
+				if (1 == tradingBoxFees.getFeesType()) {
+					items.setSrcFeesType("收费");
+				} else {
+					items.setSrcFeesType("申请");
+				}
+				items.setSrcBoxBillType(tradingBoxFees.getBillType());
+				items.setItemType(transport.getBillType());
+				items.setPrice(price);
+				//账单数据
+				items.setAmount(amount);
+				items.setQuantity(quantity);
+				items.setCorpId(tradingBoxFees.getCorpId());
+				items.setSrcParentId(pid);
+				items.setCurrency(tradingBoxFees.getCurrency());
+				items.setSrcType(6);
+				items.setTradeType("BOX");
+				items.setUnit(tradingBoxFees.getUnit());
+				items.setRemarks(tradingBoxFees.getRemarks());
+				items.setStatusJT(0);
+				items.setStockTime(transport.getStartingRentDate());
+				//获取费用id
+				if (ObjectUtils.isNotNull(tradingBoxFees.getItemId())) {
+					items.setCostType(tradingBoxFees.getItemId().toString());
+				}
+				items.setSrcFeesId(tradingBoxFees.getId());
+
+				items.setSrcOrderno(transport.getContractNo());//合同号
+				items.setBillNo(transport.getSysNo());//系统号
+				items.setSrcSysNo(tradingBoxFees.getCode());//箱号
+				items.setSrcBillNo(transport.getBillNo());//提单号
+
+				itemsList.add(items);
+				applyDTO.setItemsList(itemsList);
+				//修改费用明细
+				tradingBoxFees.setSubmitPay(1);
+				transportItemFeesMapper.updateById(tradingBoxFees);
+			}
+			if (CollectionUtils.isNotEmpty(itemsList)) {
+				//生成账单
+				R paymentApply = financeClient.paymentApplyBoxTube(applyDTO);
+				if (!paymentApply.isSuccess()) {
+					throw new RuntimeException(paymentApply.getMsg());
+				}
+				//给角色为财务的人发送消息
+				R<String> clientDeptIds = sysClient.getRoleIds(SecureUtil.getTenantId(), "财务");
+				if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
+					R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()));
+					if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
+						for (User datum : userList.getData()) {
+							//循环发送消息
+							Message sendMessage = new Message();
+							sendMessage.setParameter(String.valueOf(pid));
+							sendMessage.setUserName(AuthUtil.getUserName());
+							sendMessage.setUserId(AuthUtil.getUserId());
+							sendMessage.setToUserId(datum.getId());
+							sendMessage.setToUserName(datum.getName());
+							sendMessage.setMessageType(1);
+							sendMessage.setTenantId(AuthUtil.getTenantId());
+							sendMessage.setCreateUser(AuthUtil.getUserId());
+							sendMessage.setCreateTime(new Date());
+							sendMessage.setUrl(transport.getUrl());
+							sendMessage.setPageLabel(transport.getPageLabel());
+							sendMessage.setPageStatus(transport.getPageStatus());
+							sendMessage.setMessageBody("您订单" + transport.getSysNo() + "审核通过,请查看");
+							R save = messageClient.save(sendMessage);
+							if (!save.isSuccess()) {
+								throw new SecurityException("发送消息失败");
+							}
+						}
+					}
+				}
+			}
+		}
+		return transport;
+	}
+
+	@Override
+	public Transport revokeBill(Transport transport) {
+		Transport selectTransport = baseMapper.selectById(transport.getId());
+		if (selectTransport == null) {
+			throw new SecurityException("撤销失败,未找到主表信息");
+		}
+		//获取账单信息
+		Acc acc = new Acc();
+		acc.setTradeType("BOX");
+		acc.setSrcType(6);
+		acc.setSrcParentId(transport.getId());
+		if (ObjectUtils.isNotNull(transport.getTransportItemFeesList()) && transport.getTransportItemFeesList().size() > 0) {
+			for (TransportItemFees transportItemFees : transport.getTransportItemFeesList()) {
+				acc.setSrcFeesId(transportItemFees.getId());
+				R<List<Acc>> r = financeClient.getAccListByCondition(acc);
+				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+					for (Acc acc_ : r.getData()) {
+						//判断账单是否已有结算  true 不允许撤销审核  false 删除账单并撤销审核
+						if (!acc_.getSettlementAmount().equals(new BigDecimal("0.00"))) {
+							throw new SecurityException("订单已结算,不允许撤销");
+						} else {
+							financeClient.remove(acc_.getId() + "");
+						}
+					}
+				}
+				transportItemFees.setSubmitPay(0);
+				transportItemFeesMapper.updateById(transportItemFees);
+			}
+		} else {
+			throw new SecurityException("撤销失败,请选择费用明细");
+		}
+		return selectTransport;
+	}
+
 	/**
 	 * 订单生成账单 并且推送财务消息
 	 *

+ 10 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/AccController.java

@@ -28,6 +28,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.box.tube.entity.TradingBox;
 import org.springblade.box.tube.entity.Transport;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.FeesDesc;
@@ -151,6 +152,7 @@ public class AccController extends BladeController {
 			.like(StringUtils.isNotBlank(acc.getBillType()), Acc::getBillType, acc.getBillType())
 			.like(StringUtils.isNotBlank(acc.getAccSysNo()), Acc::getAccSysNo, acc.getAccSysNo())
 			.like(StringUtils.isNotBlank(acc.getSrcBillNo()), Acc::getSrcBillNo, acc.getSrcBillNo())
+			.like(StringUtils.isNotBlank(acc.getSysno()), Acc::getSysno, acc.getSysno())
 			.eq(acc.getCorpId() != null, Acc::getCorpId, acc.getCorpId())
 			.eq(StringUtils.isNotBlank(acc.getItemType()), Acc::getItemType, acc.getItemType())
 			.eq(StringUtils.isNotBlank(acc.getCostType()), Acc::getCostType, acc.getCostType())
@@ -175,6 +177,14 @@ public class AccController extends BladeController {
 		} else if (acc.getSettlementStatus() != null && acc.getSettlementStatus() == 2) {
 			accLambdaQueryWrapper.apply("Amount != Settlement_Amount");
 		}
+		if (acc.getRentEndDateList() != null && acc.getRentEndDateList().size() > 1) {//创建日期
+			accLambdaQueryWrapper.ge(Acc::getRentEndDate, acc.getRentEndDateList().get(0));
+			accLambdaQueryWrapper.le(Acc::getRentEndDate, acc.getRentEndDateList().get(1));
+		}
+		if (acc.getRentStartDateList() != null && acc.getRentStartDateList().size() > 1) {//修改日期
+			accLambdaQueryWrapper.ge(Acc::getRentStartDate, acc.getRentStartDateList().get(0));
+			accLambdaQueryWrapper.le(Acc::getRentStartDate, acc.getRentStartDateList().get(1));
+		}
 		if ("673511".equals(AuthUtil.getTenantId())) {
 			accLambdaQueryWrapper.ge(ObjectUtils.isNotNull(acc.getCreateStartDate()), Acc::getSrcDate, acc.getCreateStartDate())
 				.le(ObjectUtils.isNotNull(acc.getCreateEndDate()), Acc::getSrcDate, acc.getCreateEndDate());

+ 0 - 1
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/ProfitStatisticsController.java

@@ -87,7 +87,6 @@ public class ProfitStatisticsController {
 				accOne.setAlreadyPayAmount(new BigDecimal("0.00"));
 			}
 			accOne.setProfitAmount(accOne.getReceivableAmount().subtract(accOne.getAnswerPayAmount()));
-			accOne.setDate(accProfitStatisticsExcel.getDate());
 		}
 		return R.data(pages);
 	}

+ 3 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java

@@ -317,6 +317,9 @@ public class SettlementController extends BladeController {
 		} else if (settlement.getBillType().equals("收费")) {
 			ExcelUtil.export(response, "收款结算", "收费结算", excelList, ExpenseExcel.class);
 		}
+		else if (settlement.getBillType().equals("对账")) {
+			ExcelUtil.export(response, "对账", "对账", excelList, ExpenseExcel.class);
+		}
 	}
 
 	/**

+ 8 - 1
blade-service/trade-finance/src/main/java/org/springblade/finance/excel/AccProfitStatisticsExcel.java

@@ -26,6 +26,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 财务账单实体类
@@ -69,7 +70,13 @@ public class AccProfitStatisticsExcel implements Serializable {
 	 * 日期
 	 */
 	@ExcelProperty(value = "日期")
-	private Date date;
+	private String date;
+
+	/**
+	 * 日期
+	 */
+	@TableField(exist = false)
+	private List<String> dateList;
 
 	/**
 	 * 应收今额

+ 39 - 17
blade-service/trade-finance/src/main/java/org/springblade/finance/mapper/AccMapper.xml

@@ -577,7 +577,8 @@
             GROUP_CONCAT( DISTINCT fa.Src_Bill_NO SEPARATOR ',' ) AS srcBillNo,
             GROUP_CONCAT( DISTINCT fa.Src_SysNo SEPARATOR ',' ) AS srcSysno,
             GROUP_CONCAT( DISTINCT bcd.cname SEPARATOR ',' ) AS corpName,
-            GROUP_CONCAT( DISTINCT bcd1.cname SEPARATOR ',' ) AS company
+            GROUP_CONCAT( DISTINCT bcd1.cname SEPARATOR ',' ) AS company,
+        group_concat( DISTINCT DATE_FORMAT( fa.create_time, '%Y-%m' ) SEPARATOR ',' ) AS date
         FROM
             finance_acc fa
             LEFT JOIN basic_corps_desc bcd ON fa.Corpid = bcd.id
@@ -598,8 +599,11 @@
         <if test="accProfitStatisticsExcel.srcSysno !=null and accProfitStatisticsExcel.srcSysno !=''">
             AND fa.Src_SysNo = #{accProfitStatisticsExcel.srcSysno}
         </if>
-        <if test="accProfitStatisticsExcel.date != null">
-            AND DATE_FORMAT(fa.create_time,'%Y-%m') = DATE_FORMAT(#{accProfitStatisticsExcel.date},'%Y-%m')
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[0] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &gt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[0]},'%Y-%m')
+        </if>
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[1] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &lt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[1]},'%Y-%m')
         </if>
             GROUP BY fa.AccSysNo
 
@@ -610,7 +614,8 @@
         GROUP_CONCAT( DISTINCT fa.Src_Bill_NO SEPARATOR ',' ) AS srcBillNo,
         fa.Src_SysNo AS srcSysno,
         GROUP_CONCAT( DISTINCT bcd.cname SEPARATOR ',' ) AS corpName,
-        GROUP_CONCAT( DISTINCT bcd1.cname SEPARATOR ',' ) AS company
+        GROUP_CONCAT( DISTINCT bcd1.cname SEPARATOR ',' ) AS company,
+        group_concat( DISTINCT DATE_FORMAT( fa.create_time, '%Y-%m' ) SEPARATOR ',' ) AS date
         FROM
         finance_acc fa
         LEFT JOIN basic_corps_desc bcd ON fa.Corpid = bcd.id
@@ -631,8 +636,11 @@
         <if test="accProfitStatisticsExcel.srcSysno !=null and accProfitStatisticsExcel.srcSysno !=''">
             AND fa.Src_SysNo = #{accProfitStatisticsExcel.srcSysno}
         </if>
-        <if test="accProfitStatisticsExcel.date != null">
-            AND DATE_FORMAT(fa.create_time,'%Y-%m') = DATE_FORMAT(#{accProfitStatisticsExcel.date},'%Y-%m')
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[0] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &gt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[0]},'%Y-%m')
+        </if>
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[1] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &lt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[1]},'%Y-%m')
         </if>
             GROUP BY fa.Src_SysNo
 
@@ -664,8 +672,11 @@
         <if test="accProfitStatisticsExcel.srcSysno !=null and accProfitStatisticsExcel.srcSysno !=''">
             AND fa.Src_SysNo = #{accProfitStatisticsExcel.srcSysno}
         </if>
-        <if test="accProfitStatisticsExcel.date != null">
-            AND DATE_FORMAT(fa.create_time,'%Y-%m') = DATE_FORMAT(#{accProfitStatisticsExcel.date},'%Y-%m')
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[0] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &gt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[0]},'%Y-%m')
+        </if>
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[1] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &lt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[1]},'%Y-%m')
         </if>
         <if test="accProfitStatisticsExcel.show != null and accProfitStatisticsExcel.show !='' and accProfitStatisticsExcel.show == 0">
             AND fa.Amount > 0
@@ -678,7 +689,8 @@
         GROUP_CONCAT( DISTINCT fa.Src_Bill_NO SEPARATOR ',' ) AS srcBillNo,
         GROUP_CONCAT( DISTINCT fa.Src_SysNo SEPARATOR ',' ) AS srcSysno,
         GROUP_CONCAT( DISTINCT bcd.cname SEPARATOR ',' ) AS corpName,
-        GROUP_CONCAT( DISTINCT bcd1.cname SEPARATOR ',' ) AS company
+        GROUP_CONCAT( DISTINCT bcd1.cname SEPARATOR ',' ) AS company,
+        group_concat( DISTINCT DATE_FORMAT( fa.create_time, '%Y-%m' ) SEPARATOR ',' ) AS date
         FROM
         finance_acc fa
         LEFT JOIN basic_corps_desc bcd ON fa.Corpid = bcd.id
@@ -699,8 +711,11 @@
         <if test="accProfitStatisticsExcel.srcSysno !=null and accProfitStatisticsExcel.srcSysno !=''">
             AND fa.Src_SysNo = #{accProfitStatisticsExcel.srcSysno}
         </if>
-        <if test="accProfitStatisticsExcel.date != null">
-            AND DATE_FORMAT(fa.create_time,'%Y-%m') = DATE_FORMAT(#{accProfitStatisticsExcel.date},'%Y-%m')
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[0] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &gt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[0]},'%Y-%m')
+        </if>
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[1] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &lt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[1]},'%Y-%m')
         </if>
             GROUP BY fa.AccSysNo
     </select>
@@ -711,7 +726,8 @@
         GROUP_CONCAT( DISTINCT fa.Src_Bill_NO SEPARATOR ',' ) AS srcBillNo,
         fa.Src_SysNo AS srcSysno,
         GROUP_CONCAT( DISTINCT bcd.cname SEPARATOR ',' ) AS corpName,
-        GROUP_CONCAT( DISTINCT bcd1.cname SEPARATOR ',' ) AS company
+        GROUP_CONCAT( DISTINCT bcd1.cname SEPARATOR ',' ) AS company,
+        group_concat( DISTINCT DATE_FORMAT( fa.create_time, '%Y-%m' ) SEPARATOR ',' ) AS date
         FROM
         finance_acc fa
         LEFT JOIN basic_corps_desc bcd ON fa.Corpid = bcd.id
@@ -732,8 +748,11 @@
         <if test="accProfitStatisticsExcel.srcSysno !=null and accProfitStatisticsExcel.srcSysno !=''">
             AND fa.Src_SysNo = #{accProfitStatisticsExcel.srcSysno}
         </if>
-        <if test="accProfitStatisticsExcel.date != null">
-            AND DATE_FORMAT(fa.create_time,'%Y-%m') = DATE_FORMAT(#{accProfitStatisticsExcel.date},'%Y-%m')
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[0] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &gt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[0]},'%Y-%m')
+        </if>
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[1] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &lt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[1]},'%Y-%m')
         </if>
        GROUP BY fa.Src_SysNo
     </select>
@@ -744,7 +763,7 @@
         sum( ifnull( fa.Amount, 0 ) ) AS receivableAmount,
         sum( ifnull( fa.Settlement_Amount, 0 ) ) AS receivedAmount,
         sum( ifnull( fa.Amount, 0 ) ) AS answerPayAmount,
-        sum( ifnull( fa.Settlement_Amount, 0 ) ) AS alreadyPayAmount
+        sum( ifnull( fa.Settlement_Amount, 0 ) ) AS alreadyPayAmount,
         FROM
         finance_acc fa
         LEFT JOIN basic_corps_desc bcd ON fa.Corpid = bcd.id
@@ -765,8 +784,11 @@
         <if test="accProfitStatisticsExcel.srcSysno !=null and accProfitStatisticsExcel.srcSysno !=''">
             AND fa.Src_SysNo = #{accProfitStatisticsExcel.srcSysno}
         </if>
-        <if test="accProfitStatisticsExcel.date != null">
-            AND DATE_FORMAT(fa.create_time,'%Y-%m') = DATE_FORMAT(#{accProfitStatisticsExcel.date},'%Y-%m')
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[0] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &gt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[0]},'%Y-%m')
+        </if>
+        <if test="accProfitStatisticsExcel.dateList != null and accProfitStatisticsExcel.dateList[1] != ''">
+            AND DATE_FORMAT(fa.create_time,'%Y-%m') &lt;= DATE_FORMAT(#{accProfitStatisticsExcel.dateList[1]},'%Y-%m')
         </if>
         <if test="accProfitStatisticsExcel.show != null and accProfitStatisticsExcel.show !='' and accProfitStatisticsExcel.show == 0">
             AND fa.Amount > 0

+ 41 - 28
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -520,15 +520,28 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		if (acc == null) {
 			throw new SecurityException("撤销账单失败,无对应明细信息");
 		}
-		//取消结算后,更新回退acc表金额,采购收费 销售付费
-		if (acc.getSettlementAmount() == null) {
-			throw new SecurityException("撤销账单失败,结算金额为空");
-		}
-		acc.setSettlementAmount(acc.getSettlementAmount().subtract(items.getThisAmount()));
-		//判断是否退款,已收金额为负数
-		BigDecimal settlementAmount = acc.getSettlementAmount();
-		if (settlementAmount.compareTo(new BigDecimal("0")) < 0) {
-			throw new SecurityException("撤销账单失败,已结算金额为负数");
+		if ("对账".equals(settlementDTO.getBillType())){
+			//取消结算后,更新回退acc表金额,采购收费 销售付费
+			if (acc.getCheckAmount() == null) {
+				throw new SecurityException("撤销账单失败,对账金额为空");
+			}
+			acc.setCheckAmount(acc.getCheckAmount().subtract(items.getThisAmount()));
+			//判断是否退款,对账金额为负数
+			BigDecimal checkAmount = acc.getCheckAmount();
+			if (checkAmount.compareTo(new BigDecimal("0")) < 0) {
+				throw new SecurityException("撤销账单失败,对账金额为负数");
+			}
+		}else{
+			//取消结算后,更新回退acc表金额,采购收费 销售付费
+			if (acc.getSettlementAmount() == null) {
+				throw new SecurityException("撤销账单失败,结算金额为空");
+			}
+			acc.setSettlementAmount(acc.getSettlementAmount().subtract(items.getThisAmount()));
+			//判断是否退款,已收金额为负数
+			BigDecimal settlementAmount = acc.getSettlementAmount();
+			if (settlementAmount.compareTo(new BigDecimal("0")) < 0) {
+				throw new SecurityException("撤销账单失败,已结算金额为负数");
+			}
 		}
 		accMapper.updateById(acc);
 
@@ -657,15 +670,15 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 				throw new SecurityException("修改原单据失败");
 			}
 			//回退原业务表数据
-			if (tradingBoxFeesR.getData().getSettlementAmount() == null) {
-				throw new SecurityException("撤销账单失败,原业务表已收金额为空");
+			if (tradingBoxFeesR.getData().getReconciliationAmount() == null) {
+				throw new SecurityException("撤销账单失败,原业务表对账金额为空");
 			}
-			BigDecimal decimal = tradingBoxFeesR.getData().getSettlementAmount().subtract(items.getThisAmount());
+			BigDecimal decimal = tradingBoxFeesR.getData().getReconciliationAmount().subtract(items.getThisAmount());
 			if (decimal.compareTo(BigDecimal.ZERO) < 0) {
 				throw new SecurityException("撤销账单失败,剩余已收金额不够本次扣款");
 			}
-			tradingBoxFeesR.getData().setSettlementAmount(decimal);
-			tradingBoxFeesR.getData().setSettlementDate(null);
+			tradingBoxFeesR.getData().setReconciliationAmount(decimal);
+			tradingBoxFeesR.getData().setReconciliationDate(null);
 			tradingBoxClient.updateTradingBoxFees(tradingBoxFeesR.getData());
 		}
 		//修改费用明细
@@ -680,15 +693,15 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 				throw new SecurityException("修改原单据失败");
 			}
 			//回退原业务表数据
-			if (transportItemFeesR.getData().getSettlementAmount() == null) {
+			if (transportItemFeesR.getData().getReconciliationAmount() == null) {
 				throw new SecurityException("撤销账单失败,原业务表已收金额为空");
 			}
-			BigDecimal decimal = transportItemFeesR.getData().getSettlementAmount().subtract(items.getThisAmount());
+			BigDecimal decimal = transportItemFeesR.getData().getReconciliationAmount().subtract(items.getThisAmount());
 			if (decimal.compareTo(BigDecimal.ZERO) < 0) {
 				throw new SecurityException("撤销账单失败,剩余已收金额不够本次扣款");
 			}
-			transportItemFeesR.getData().setSettlementAmount(decimal);
-			transportItemFeesR.getData().setSettlementDate(null);
+			transportItemFeesR.getData().setReconciliationAmount(decimal);
+			transportItemFeesR.getData().setReconciliationDate(null);
 			transportClient.updateTransportItemFees(transportItemFeesR.getData());
 		} else if (type == 7) {
 			Long srcFeesId = acc.getSrcFeesId();
@@ -938,12 +951,12 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			if (!tradingBoxFeesR.isSuccess() && ObjectUtils.isNull(tradingBoxFeesR.getData())) {
 				throw new SecurityException("修改原单据失败");
 			}
-			acc.setSettlementAmount(acc.getSettlementAmount() != null ? acc.getSettlementAmount().add(items.getThisAmount()) : new BigDecimal("0").add(items.getThisAmount()));
-			tradingBoxFeesR.getData().setSettlementAmount(tradingBoxFeesR.getData().getSettlementAmount() != null ? tradingBoxFeesR.getData().getSettlementAmount().add(items.getThisAmount()) : new BigDecimal("0").add(items.getThisAmount()));
+			acc.setCheckAmount(acc.getCheckAmount() != null ? acc.getCheckAmount().add(items.getThisAmount()) : new BigDecimal("0").add(items.getThisAmount()));
+			tradingBoxFeesR.getData().setReconciliationAmount(tradingBoxFeesR.getData().getSettlementAmount() != null ? tradingBoxFeesR.getData().getSettlementAmount().add(items.getThisAmount()) : new BigDecimal("0").add(items.getThisAmount()));
 			accMapper.updateById(acc);
 			TradingBoxFees tradingBoxFees = new TradingBoxFees();
 			BeanUtils.copyProperties(tradingBoxFeesR.getData(), tradingBoxFees);
-			tradingBoxFees.setSettlementDate(new Date());
+			tradingBoxFees.setReconciliationDate(new Date());
 			tradingBoxClient.updateTradingBoxFees(tradingBoxFees);
 		} else if (type == 6) {
 			Long srcFeesId = acc.getSrcFeesId();
@@ -955,10 +968,10 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			if (!transportItemFeesR.isSuccess() && ObjectUtils.isNull(transportItemFeesR.getData())) {
 				throw new SecurityException("修改原单据失败");
 			}
-			acc.setSettlementAmount(acc.getSettlementAmount() != null ? acc.getSettlementAmount().add(items.getThisAmount()) : new BigDecimal("0").add(items.getThisAmount()));
-			transportItemFeesR.getData().setSettlementAmount(transportItemFeesR.getData().getSettlementAmount() != null ? transportItemFeesR.getData().getSettlementAmount().add(items.getThisAmount()) : new BigDecimal("0").add(items.getThisAmount()));
+			acc.setCheckAmount(acc.getCheckAmount() != null ? acc.getCheckAmount().add(items.getThisAmount()) : new BigDecimal("0").add(items.getThisAmount()));
+			transportItemFeesR.getData().setReconciliationAmount(transportItemFeesR.getData().getSettlementAmount() != null ? transportItemFeesR.getData().getSettlementAmount().add(items.getThisAmount()) : new BigDecimal("0").add(items.getThisAmount()));
 			accMapper.updateById(acc);
-			transportItemFeesR.getData().setSettlementDate(new Date());
+			transportItemFeesR.getData().setReconciliationDate(new Date());
 			transportClient.updateTransportItemFees(transportItemFeesR.getData());
 		} else if (type == 7) {
 			Long srcFeesId = acc.getSrcFeesId();
@@ -2827,13 +2840,13 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 				acc.setDc("c");
 			}
 			acc.setItemType(e.getItemType());
-			acc.setAccSysNo(e.getSrcOrderno());
-			acc.setSrcRefno(e.getSrcOrderno());
+			acc.setAccSysNo(e.getSrcOrderno());//合同号
+			acc.setSrcRefno(e.getBillNo());//系统号
 			acc.setSrcParentId(e.getSrcParentId());
-			acc.setSrcBillNo(e.getBillNo());
+			acc.setSrcBillNo(e.getSrcBillNo());//提单号
 			acc.setCreateTime(new Date());
 			acc.setTradeType(e.getTradeType());
-			acc.setSrcSysno(e.getSrcSysNo());
+			acc.setSrcSysno(e.getSrcSysNo());//箱号
 			if (ObjectUtils.isNotNull(e.getStatusJT())) {
 				acc.setStatus(e.getStatusJT());
 			} else {