浏览代码

2022年12月5日18:10:13

纪新园 2 年之前
父节点
当前提交
25140720c4
共有 17 个文件被更改,包括 1455 次插入86 次删除
  1. 99 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/dto/ExportRepairOut.java
  2. 100 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/dto/ExportTradingBoxOut.java
  3. 156 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/dto/ExportTransportOut.java
  4. 129 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/dto/TradingBoxItemRentExcelEnter.java
  5. 81 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/dto/TransportItemExcelEnter.java
  6. 7 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBox.java
  7. 12 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/TradingBoxItem.java
  8. 47 10
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/RepairController.java
  9. 41 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxController.java
  10. 57 1
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxRentController.java
  11. 80 3
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransportController.java
  12. 10 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/ITradingBoxService.java
  13. 7 4
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/ITransportService.java
  14. 1 1
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/RepairServiceImpl.java
  15. 518 47
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java
  16. 104 20
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransportServiceImpl.java
  17. 6 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java

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

@@ -0,0 +1,99 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.box.tube.dto;
+
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springblade.common.execl.ExcelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 修,洗箱信息表实体类
+ *
+ * @author BladeX
+ * @since 2022-11-18
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ExportRepairOut implements Serializable {
+
+	/**
+	 * 业务编号
+	 */
+	@ExcelProperty(value = "业务编号")
+	private String sysNo;
+	/**
+	 * 箱号
+	 */
+	@ExcelProperty(value = "箱号")
+	private String code;
+	/**
+	 * 地点
+	 */
+	@ExcelProperty(value = "地点")
+	private String address;
+	/**
+	 * 公司
+	 */
+	@ExcelProperty(value = "公司")
+	private String company;
+	/**
+	 * 支出
+	 */
+	@ExcelProperty(value = "支出")
+	private BigDecimal expenditure;
+	/**
+	 * 费用
+	 */
+	@ExcelProperty(value = "费用")
+	private BigDecimal totalAmount;
+	/**
+	 * 业务类型
+	 */
+	@ExcelProperty(value = "业务类型")
+	private String billType;
+	/**
+	 * 备注
+	 */
+	@ExcelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 最新时间
+	 */
+	@ExcelProperty(value = "最新时间")
+	private Date newDate;
+	/**
+	 * 审核状态
+	 */
+	@ExcelProperty(value = "审核状态")
+	private String approvalStatus;
+
+	/**
+	 * 审核时间
+	 */
+	@ExcelProperty(value = "审核时间")
+	private Date approvalDate;
+}

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

@@ -0,0 +1,100 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.box.tube.dto;
+
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+import org.springblade.common.execl.ExcelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 买(卖)箱表实体类
+ *
+ * @author BladeX
+ * @since 2022-11-14
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ExportTradingBoxOut implements Serializable {
+
+	/**
+	 * 系统号
+	 */
+	@ExcelProperty(value = "系统号")
+	private String sysNo;
+	/**
+	 * 合同号
+	 */
+	@ExcelProperty(value = "合同号")
+	private String contractNo;
+
+	/**
+	 * 合同生效日期
+	 */
+	@ExcelProperty(value = "合同生效日期")
+	private Date effectiveDate;
+
+	/**
+	 * 合同失效日期
+	 */
+	@ExcelProperty(value = "合同失效日期")
+	private Date expiryDate;
+	/**
+	 * 买入公司名称
+	 */
+	@ExcelProperty(value = "买入公司名称")
+	private String purchaseCompanyName;
+	/**
+	 * 买入时间
+	 */
+	@ExcelProperty(value = "买入时间")
+	private Date purchaseDate;
+	/**
+	 * 备注
+	 */
+	@ExcelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 类别(buy 买箱 ,sell卖箱)
+	 */
+	@ExcelProperty(value = "类别(buy 买箱 ,sell卖箱)")
+	private String type;
+
+	/**
+	 * 审核状态
+	 */
+	@ExcelProperty(value = "审核状态")
+	private String approvalStatus;
+
+	/**
+	 * 审核时间
+	 */
+	@ExcelProperty(value = "审核时间")
+	private Date approvalDate;
+
+	/**
+	 * 箱数
+	 */
+	@ExcelProperty(value = "箱数")
+	private int boxNumber;
+}

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

@@ -0,0 +1,156 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.box.tube.dto;
+
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+import org.springblade.common.execl.ExcelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 出口装运/进口返程信息表实体类
+ *
+ * @author BladeX
+ * @since 2022-11-16
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ExportTransportOut implements Serializable {
+
+	/**
+	 * 业务编号
+	 */
+	@ExcelProperty(value = "业务编号")
+	private String sysNo;
+	/**
+	 * 合同号
+	 */
+	@ExcelProperty(value = "合同号")
+	private String contractNo;
+	/**
+	 * 业务类型(出口装运 CK/进口返程JK)
+	 */
+	@ExcelProperty(value = "业务类型(出口装运 CK/进口返程JK)")
+	private String billType;
+
+	/**
+	 * 明细箱号集合
+	 */
+	@ExcelProperty(value = "明细箱号集合")
+	private String code;
+	/**
+	 * 客户名称
+	 */
+	@ExcelProperty(value = "客户名称")
+	private String corpName;
+	/**
+	 * 船公司名称
+	 */
+	@ExcelProperty(value = "船公司名称")
+	private String shippingCompany;
+	/**
+	 * 合同生效日期
+	 */
+	@ExcelProperty(value = "合同生效日期")
+	private Date effectiveDate;
+	/**
+	 * 合同失效日期
+	 */
+	@ExcelProperty(value = "合同失效日期")
+	private Date expiryDate;
+	/**
+	 * 起运港
+	 */
+	@ExcelProperty(value = "起运港")
+	private String departureHarbor;
+	/**
+	 * 目的港
+	 */
+	@ExcelProperty(value = "目的港")
+	private String objectiveHarbor;
+	/**
+	 * 起租日期
+	 */
+	@ExcelProperty(value = "起租日期")
+	private Date startingRentDate;
+	/**
+	 * 出场时间
+	 */
+	@ExcelProperty(value = "出场时间")
+	private Date exitDate;
+	/**
+	 * 入场时间
+	 */
+	@ExcelProperty(value = "入场时间")
+	private Date admissionDate;
+	/**
+	 * 订单合计金额
+	 */
+	@ExcelProperty(value = "订单合计金额")
+	private BigDecimal totalAmount;
+	/**
+	 * 订单超期合计金额
+	 */
+	@ExcelProperty(value = "订单超期合计金额")
+	private BigDecimal overdueAmount;
+	/**
+	 * 备注
+	 */
+	@ExcelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 船名
+	 */
+	@ExcelProperty(value = "船名")
+	private String shipName;
+
+	/**
+	 * 航次
+	 */
+	@ExcelProperty(value = "航次")
+	private String voyageNumber;
+
+	/**
+	 * 开船日期
+	 */
+	@ExcelProperty(value = "开船日期")
+	private Date sailDate;
+	/**
+	 * 审核状态
+	 */
+	@ExcelProperty(value = "审核状态")
+	private String approvalStatus;
+
+	/**
+	 * 审核时间
+	 */
+	@ExcelProperty(value = "审核时间")
+	private Date approvalDate;
+	/**
+	 * 提单号
+	 */
+	@ExcelProperty(value = "提单号")
+	private String billNo;
+
+}

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

@@ -0,0 +1,129 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.box.tube.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 买(卖)箱明细表实体类
+ *
+ * @author BladeX
+ * @since 2022-11-14
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class TradingBoxItemRentExcelEnter implements Serializable {
+
+	/**
+	 * 箱号
+	 */
+	@ExcelProperty(value = "箱号")
+	private String code;
+	/**
+	 * 箱类型
+	 */
+	@ExcelProperty(value = "箱类型")
+	private String boxType;
+	/**
+	 * 租金
+	 */
+	@ExcelProperty(value = "租金")
+	private BigDecimal price;
+	/**
+	 * 币别
+	 */
+	@ExcelProperty(value = "币别")
+	private String currency;
+	/**
+	 * 最新地点
+	 */
+	@ExcelProperty(value = "最新地点")
+	private String address;
+	/**
+	 * 最新日期
+	 */
+	@ExcelProperty(value = "最新日期")
+	private Date newDate;
+	/**
+	 * 容积
+	 */
+	@ExcelProperty(value = "容积")
+	private BigDecimal volume;
+	/**
+	 * 箱来源
+	 */
+	@ExcelProperty(value = "箱来源")
+	private String boxSource;
+	/**
+	 * 箱状态
+	 */
+	@ExcelProperty(value = "箱状态")
+	private String boxStatus;
+	/**
+	 * 空重
+	 */
+	@ExcelProperty(value = "空重")
+	private BigDecimal emptyWeight;
+	/**
+	 * 皮重
+	 */
+	@ExcelProperty(value = "皮重")
+	private BigDecimal tare;
+	/**
+	 * 装载重量
+	 */
+	@ExcelProperty(value = "装载重量")
+	private BigDecimal loadingWeight;
+
+	/**
+	 * 造箱公司
+	 */
+	@ExcelProperty(value = "造箱公司")
+	private String boxMakingCompany;
+	/**
+	 * 造箱日期
+	 */
+	@ExcelProperty(value = "造箱日期")
+	private Date boxMakingDate;
+
+	/**
+	 * 箱龄
+	 */
+	@ExcelProperty(value = "箱龄")
+	private Integer boxAge;
+	/**
+	 * 毛重
+	 */
+	@ExcelProperty(value = "毛重")
+	private BigDecimal grossWeight;
+
+	/**
+	 * 备注
+	 */
+	@ExcelProperty(value = "备注")
+	private String remarks;
+}

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

@@ -0,0 +1,81 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.box.tube.dto;
+
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+import com.alibaba.excel.annotation.ExcelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 进出口返程明细表实体类
+ *
+ * @author BladeX
+ * @since 2022-11-16
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class TransportItemExcelEnter implements Serializable {
+
+	/**
+	 * 箱号
+	 */
+	@ExcelProperty(value = "箱号")
+	private String code;
+	/**
+	 * 箱型
+	 */
+	@ExcelProperty(value = "箱型")
+	private String boxType;
+	/**
+	 * 币别
+	 */
+	@ExcelProperty(value = "币别")
+	private String currency;
+	/**
+	 * 租金
+	 */
+	@ExcelProperty(value = "租金")
+	private BigDecimal amount;
+	/**
+	 * 超期每天单价
+	 */
+	@ExcelProperty(value = "超期每天单价")
+	private BigDecimal overduePrice;
+	/**
+	 * 地点
+	 */
+	@ExcelProperty(value = "地点")
+	private String address;
+	/**
+	 * 最新时间
+	 */
+	@ExcelProperty(value = "最新时间")
+	private Date newDate;
+	/**
+	 * 备注
+	 */
+	@ExcelProperty(value = "备注")
+	private String remarks;
+}

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

@@ -217,5 +217,12 @@ public class TradingBox implements Serializable {
 	@TableField(exist = false)
 	private Date rentDate;
 
+	/**
+	 * 租金计费日期
+	 */
+	@TableField(exist = false)
+	private List<Date> rentCalculationDateList;
+
+
 
 }

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

@@ -214,4 +214,16 @@ public class TradingBoxItem implements Serializable {
 	private Date rentEndDate;
 
 
+	/**
+	 * 租金/天
+	 */
+	@ApiModelProperty(value = "租金/天")
+	private BigDecimal price;
+
+	/**
+	 * 是否计算过租金
+	 */
+	@TableField(exist = false)
+	private int count;
+
 }

+ 47 - 10
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/RepairController.java

@@ -17,28 +17,31 @@
 package org.springblade.box.tube.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-import javax.validation.Valid;
-
-import org.springblade.box.tube.entity.TradingBox;
-import org.springblade.box.tube.entity.Transport;
+import org.springblade.box.tube.dto.ExportRepairOut;
+import org.springblade.box.tube.entity.Repair;
+import org.springblade.box.tube.service.IRepairService;
+import org.springblade.box.tube.vo.RepairVO;
 import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 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.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.box.tube.entity.Repair;
-import org.springblade.box.tube.vo.RepairVO;
-import org.springblade.box.tube.service.IRepairService;
-import org.springblade.core.boot.ctrl.BladeController;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 修,洗箱信息表 控制器
@@ -202,5 +205,39 @@ public class RepairController extends BladeController {
 		return R.data(check);
 	}
 
+	/**
+	 * 导出 修,洗箱信息表
+	 */
+	@GetMapping("/exportRepairOut")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入repair")
+	public void exportRepairOut(Repair repair, HttpServletResponse response) {
+		LambdaQueryWrapper<Repair> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Repair::getTenantId, AuthUtil.getTenantId())
+			.eq(Repair::getIsDeleted, 0)
+			.like(ObjectUtils.isNotNull(repair.getSysNo()), Repair::getSysNo, repair.getSysNo())//业务编号
+			.like(ObjectUtils.isNotNull(repair.getCode()), Repair::getCode, repair.getCode())//箱号
+			.like(ObjectUtils.isNotNull(repair.getCompanyId()), Repair::getCompanyId, repair.getCompanyId())//公司id
+			.eq(ObjectUtils.isNotNull(repair.getStatus()), Repair::getStatus, repair.getStatus())//状态
+			.eq(ObjectUtils.isNotNull(repair.getAddressId()), Repair::getAddressId, repair.getAddressId())//地点
+			.eq(ObjectUtils.isNotNull(repair.getBillType()), Repair::getBillType, repair.getBillType());//业务类型
+		if (repair.getNewDateList() != null && repair.getNewDateList().size() > 1) {//最新时间
+			lambdaQueryWrapper.ge(Repair::getNewDate, repair.getNewDateList().get(0));
+			lambdaQueryWrapper.le(Repair::getNewDate, repair.getNewDateList().get(1));
+		}
+		List<Repair> repairList = repairService.list(lambdaQueryWrapper);
+		for (Repair repair_ : repairList) {
+			if (repair_.getBillType().equals("REPAIR")) {
+				repair_.setBillType("修箱");
+			} else if (repair_.getBillType().equals("WASH")) {
+				repair_.setBillType("洗箱");
+			} else {
+				repair_.setBillType("无");
+			}
+		}
+		ExcelUtil.export(response, "导出订单信息", "导出数据表", BeanUtil.copy(repairList, ExportRepairOut.class), ExportRepairOut.class);
+
+	}
+
 
 }

+ 41 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxController.java

@@ -24,19 +24,24 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.box.tube.dto.ArchivesExcelOut;
 import org.springblade.box.tube.entity.TradingBox;
 import org.springblade.box.tube.service.ITradingBoxService;
 import org.springblade.box.tube.vo.TradingBoxVO;
 import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 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.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 买(卖)箱表 控制器
@@ -200,5 +205,41 @@ public class TradingBoxController extends BladeController {
 		return R.data(check);
 	}
 
+	/**
+	 * 导出 买(卖)箱表
+	 */
+	@GetMapping("/exportTradingBoxOut")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入tradingBox")
+	public void exportTradingBoxOut(TradingBox tradingBox, HttpServletResponse response) {
+		LambdaQueryWrapper<TradingBox> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 
+		lambdaQueryWrapper.eq(TradingBox::getTenantId, AuthUtil.getTenantId())
+			.eq(TradingBox::getIsDeleted, 0)
+			.like(ObjectUtils.isNotNull(tradingBox.getSysNo()), TradingBox::getSysNo, tradingBox.getSysNo())//业务编号
+			.like(ObjectUtils.isNotNull(tradingBox.getContractNo()), TradingBox::getContractNo, tradingBox.getContractNo())//合同号
+			.like(ObjectUtils.isNotNull(tradingBox.getPurchaseCompanyId()), TradingBox::getPurchaseCompanyId, tradingBox.getPurchaseCompanyId())//买入公司id
+			.eq(ObjectUtils.isNotNull(tradingBox.getStatus()), TradingBox::getStatus, tradingBox.getStatus())//状态
+			.eq(ObjectUtils.isNotNull(tradingBox.getType()), TradingBox::getType, tradingBox.getType());//业务类型
+		if (tradingBox.getPurchaseDateList() != null && tradingBox.getPurchaseDateList().size() > 1) {//买入时间
+			lambdaQueryWrapper.ge(TradingBox::getPurchaseDate, tradingBox.getPurchaseDateList().get(0));
+			lambdaQueryWrapper.le(TradingBox::getPurchaseDate, tradingBox.getPurchaseDateList().get(1));
+		}
+		lambdaQueryWrapper.orderByDesc(TradingBox::getCreateTime);
+		List<TradingBox> tradingBoxList = tradingBoxService.list(lambdaQueryWrapper);
+		for (TradingBox tradingBox_ : tradingBoxList) {
+			if (tradingBox_.getType().equals("BUY")) {
+				tradingBox_.setType("买箱");
+			} else if (tradingBox_.getType().equals("SELL")) {
+				tradingBox_.setType("卖箱");
+			} else if (tradingBox_.getType().equals("ZR")) {
+				tradingBox_.setType("租入");
+			} else if (tradingBox_.getType().equals("ZC")) {
+				tradingBox_.setType("租出");
+			} else {
+				tradingBox_.setType("无");
+			}
+		}
+		ExcelUtil.export(response, "导出订单信息", "导出数据表", BeanUtil.copy(tradingBoxList, ArchivesExcelOut.class), ArchivesExcelOut.class);
+	}
 }

+ 57 - 1
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxRentController.java

@@ -18,24 +18,32 @@ package org.springblade.box.tube.controller;
 
 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.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.box.tube.dto.TradingBoxItemRentExcelEnter;
 import org.springblade.box.tube.entity.TradingBox;
 import org.springblade.box.tube.service.ITradingBoxService;
 import org.springblade.box.tube.vo.TradingBoxVO;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 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.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 箱租入,出表 控制器
@@ -198,7 +206,7 @@ public class TradingBoxRentController extends BladeController {
 	}
 
 	/**
-	 * 起租
+	 * 起租,退租
 	 */
 	@PostMapping("/startingRent")
 	@ApiOperationSupport(order = 6)
@@ -207,5 +215,53 @@ public class TradingBoxRentController extends BladeController {
 		return R.data(tradingBoxService.startingRent(tradingBox));
 	}
 
+	/**
+	 * 租金计算
+	 */
+	@PostMapping("/rentCalculation")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入tradingBox")
+	public R rentCalculation(@Valid @RequestBody TradingBox tradingBox) {
+		return R.data(tradingBoxService.rentCalculation(tradingBox));
+	}
+
+	/**
+	 * 撤销租金计算
+	 */
+	@PostMapping("/revokeRentCalculation")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入tradingBox")
+	public R revokeRentCalculation(@Valid @RequestBody TradingBox tradingBox) {
+		return R.data(tradingBoxService.revokeRentCalculation(tradingBox));
+	}
+
+	/**
+	 * 导出模板
+	 */
+	@GetMapping("/export-tradingBox-info")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "导出模板")
+	public void exportTradingBoxInfo(HttpServletResponse response) {
+		List<TradingBoxItemRentExcelEnter> list = new ArrayList<>();
+		ExcelUtil.export(response, "导入模板-箱明细信息", "导出数据表", list, TradingBoxItemRentExcelEnter.class);
+	}
+
+	/**
+	 * 导入箱明细信息
+	 */
+	@PostMapping("/import-tradingBox-info")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "导入箱明细", notes = "传入excel")
+	public R importTradingBoxInfo(MultipartFile file,
+								  @RequestParam(value = "corpId",required = false) Long corpId,
+								  @RequestParam(value = "corpName",required = false) String corpName,
+								  @RequestParam(value = "billType",required = false) String billType) {
+		List<TradingBoxItemRentExcelEnter> excelList = ExcelUtil.read(file, TradingBoxItemRentExcelEnter.class);
+		if (CollectionUtils.isEmpty(excelList)) {
+			throw new SecurityException("数据不能为空");
+		}
+		return tradingBoxService.importTradingBoxInfo(excelList, false, corpId, corpName, billType);
+	}
+
 
 }

+ 80 - 3
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransportController.java

@@ -18,26 +18,35 @@ package org.springblade.box.tube.controller;
 
 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.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 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.dto.ExportTransportOut;
+import org.springblade.box.tube.dto.TransportItemExcelEnter;
 import org.springblade.box.tube.entity.Transport;
 import org.springblade.box.tube.service.ITransportService;
 import org.springblade.box.tube.vo.TransportVO;
 import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 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.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 出口装运/进口返程信息表 控制器
@@ -168,8 +177,8 @@ public class TransportController extends BladeController {
 						  @RequestParam("addressId") String addressId,
 						  @RequestParam("status") String status,
 						  @RequestParam("transportId") String transportId
-	)throws Exception {
-		return R.data(transportService.statusUpdate(ids,type,date,address,addressId,status,transportId));
+	) throws Exception {
+		return R.data(transportService.statusUpdate(ids, type, date, address, addressId, status, transportId));
 	}
 
 	/**
@@ -226,5 +235,73 @@ public class TransportController extends BladeController {
 		return R.data(check);
 	}
 
+	/**
+	 * 导出 出口装运/进口返程信息表
+	 */
+	@GetMapping("/exportTransportOut")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入transport")
+	public void exportTransportOut(Transport transport, HttpServletResponse response) {
+		LambdaQueryWrapper<Transport> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Transport::getTenantId, AuthUtil.getTenantId())
+			.eq(Transport::getIsDeleted, 0)
+			.like(ObjectUtils.isNotNull(transport.getSysNo()), Transport::getSysNo, transport.getSysNo())//业务编号
+			.like(ObjectUtils.isNotNull(transport.getContractNo()), Transport::getContractNo, transport.getContractNo())//合同号
+			.like(ObjectUtils.isNotNull(transport.getCode()), Transport::getCode, transport.getCode())//箱号
+			.eq(ObjectUtils.isNotNull(transport.getStatus()), Transport::getStatus, transport.getStatus())//审核状态
+			.eq(ObjectUtils.isNotNull(transport.getCorpId()), Transport::getCorpId, transport.getCorpId())//客户id
+			.eq(ObjectUtils.isNotNull(transport.getDepartureHarborId()), Transport::getDepartureHarborId, transport.getDepartureHarborId())//起运港
+			.eq(ObjectUtils.isNotNull(transport.getObjectiveHarborId()), Transport::getObjectiveHarborId, transport.getObjectiveHarborId())//目的港
+			.eq(ObjectUtils.isNotNull(transport.getShippingCompanyId()), Transport::getShippingCompanyId, transport.getShippingCompanyId())//船公司
+			.eq(ObjectUtils.isNotNull(transport.getBillType()), Transport::getBillType, transport.getBillType());//业务类型
+		if (transport.getEffectiveDateList() != null && transport.getEffectiveDateList().size() > 1) {//合同生效-失效日期
+			lambdaQueryWrapper.ge(Transport::getEffectiveDate, transport.getEffectiveDateList().get(0));
+			lambdaQueryWrapper.le(Transport::getEffectiveDate, transport.getEffectiveDateList().get(1));
+		}
+		if (transport.getStartingRentDateList() != null && transport.getStartingRentDateList().size() > 1) {//起租日期
+			lambdaQueryWrapper.ge(Transport::getStartingRentDate, transport.getStartingRentDateList().get(0));
+			lambdaQueryWrapper.le(Transport::getStartingRentDate, transport.getStartingRentDateList().get(1));
+		}
+		lambdaQueryWrapper.orderByDesc(Transport::getCreateTime);
+
+		List<Transport> transportList = transportService.list(lambdaQueryWrapper);
+		for (Transport transport_ : transportList) {
+			if (transport_.getBillType().equals("CKZY")) {
+				transport_.setBillType("出口装运");
+			} else if (transport_.getBillType().equals("JKFC")) {
+				transport_.setBillType("进口返程");
+			} else {
+				transport_.setBillType("无");
+			}
+		}
+		ExcelUtil.export(response, "导出订单信息", "导出数据表", BeanUtil.copy(transportList, ExportTransportOut.class), ExportTransportOut.class);
+
+	}
+
+	/**
+	 * 导出模板
+	 */
+	@GetMapping("/export-transport-info")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "导出模板")
+	public void exportTransportInfo(HttpServletResponse response) {
+		List<TransportItemExcelEnter> list = new ArrayList<>();
+		ExcelUtil.export(response, "导入模板-箱明细信息", "导出数据表", list, TransportItemExcelEnter.class);
+	}
+
+	/**
+	 * 导入箱明细信息
+	 */
+	@PostMapping("/import-transport-info")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "导入箱明细", notes = "传入excel")
+	public R importTransportInfo(MultipartFile file, @RequestParam("corpId") Long corpId, @RequestParam("corpName") String corpName, @RequestParam("billType") String billType) {
+		List<TransportItemExcelEnter> excelList = ExcelUtil.read(file, TransportItemExcelEnter.class);
+		if (CollectionUtils.isEmpty(excelList)) {
+			throw new SecurityException("数据不能为空");
+		}
+		return transportService.importTransportInfo(excelList, false,corpId,corpName,billType);
+	}
+
 
 }

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

@@ -16,11 +16,15 @@
  */
 package org.springblade.box.tube.service;
 
+import org.springblade.box.tube.dto.TradingBoxItemRentExcelEnter;
 import org.springblade.box.tube.entity.TradingBox;
 import org.springblade.box.tube.vo.TradingBoxVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
 
 /**
  * 买(卖)箱表 服务类
@@ -56,4 +60,10 @@ public interface ITradingBoxService extends IService<TradingBox> {
 	TradingBox withdrawTradingBox(TradingBox tradingBox);
 
 	TradingBox startingRent(TradingBox tradingBox);
+
+	TradingBox rentCalculation(TradingBox tradingBox);
+
+	TradingBox revokeRentCalculation(TradingBox tradingBox);
+
+	R importTradingBoxInfo(List<TradingBoxItemRentExcelEnter> excelList, boolean b, Long corpId, String corpName, String billType);
 }

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

@@ -16,11 +16,12 @@
  */
 package org.springblade.box.tube.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.box.tube.dto.TransportItemExcelEnter;
 import org.springblade.box.tube.entity.Transport;
 import org.springblade.box.tube.entity.TransportItem;
 import org.springblade.box.tube.vo.TransportVO;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
 
 import java.text.ParseException;
@@ -43,11 +44,11 @@ public interface ITransportService extends IService<Transport> {
 	 */
 	IPage<TransportVO> selectTransportPage(IPage<TransportVO> page, TransportVO transport);
 
-    Transport getDetail(Transport transport);
+	Transport getDetail(Transport transport);
 
 	Transport add(Transport transport);
 
-	List<TransportItem> statusUpdate(String ids, String type, String date, String address, String addressId,String status,String transportId) throws ParseException;
+	List<TransportItem> statusUpdate(String ids, String type, String date, String address, String addressId, String status, String transportId) throws ParseException;
 
 	Transport checkTransport(Transport transport);
 
@@ -58,4 +59,6 @@ public interface ITransportService extends IService<Transport> {
 	R passCancel(Long id);
 
 	Transport withdrawTransport(Transport transport);
+
+	R importTransportInfo(List<TransportItemExcelEnter> excelList, boolean b, Long corpId, String corpName,String billType);
 }

+ 1 - 1
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/RepairServiceImpl.java

@@ -573,8 +573,8 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
 				//获取费用id
 				if (ObjectUtils.isNotNull(repairFees.getItemId())) {
 					items.setCostType(repairFees.getItemId().toString());
-					items.setSrcFeesId(repairFees.getId());
 				}
+				items.setSrcFeesId(repairFees.getId());
 				itemsList.add(items);
 				applyDTO.setItemsList(itemsList);
 			}

+ 518 - 47
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.seata.spring.annotation.GlobalTransactional;
 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.service.ITradingBoxService;
@@ -32,13 +33,8 @@ import org.springblade.check.dto.AuditProecessDTO;
 import org.springblade.check.entity.AuditPathsActs;
 import org.springblade.check.entity.AuditPathsLevels;
 import org.springblade.check.feign.ICheckClient;
-import org.springblade.client.entity.CorpsDesc;
-import org.springblade.client.entity.FeesDesc;
-import org.springblade.client.entity.Message;
-import org.springblade.client.feign.ICorpsDescClient;
-import org.springblade.client.feign.IFeesDescClient;
-import org.springblade.client.feign.IMessageClient;
-import org.springblade.client.feign.ISerialClient;
+import org.springblade.client.entity.*;
+import org.springblade.client.feign.*;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
@@ -58,10 +54,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -102,6 +95,10 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 	private final ArchivesFilesMapper archivesFilesMapper;
 
+	private final IContainerDescClient containerDescClient;
+
+	private final IPortClient portClient;
+
 	@Override
 	public IPage<TradingBoxVO> selectTradingBoxPage(IPage<TradingBoxVO> page, TradingBoxVO tradingBox) {
 		return page.setRecords(baseMapper.selectTradingBoxPage(page, tradingBox));
@@ -113,6 +110,14 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			throw new RuntimeException("缺少必要参数");
 		}
 		TradingBox details = baseMapper.selectById(tradingBox.getId());
+
+		Long feesId = null;
+
+		//获取费用id
+		R<FeesDesc> fees = feesDescClient.getFeesByName("租金");
+		if (fees.isSuccess() && fees.getData() != null) {
+			feesId = fees.getData().getId();
+		}
 		if (ObjectUtils.isNotNull(details)) {
 			//获取明细信息
 			LambdaQueryWrapper<TradingBoxItem> tradingBoxItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -121,6 +126,15 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				.eq(TradingBoxItem::getPid, details.getId());
 			List<TradingBoxItem> tradingBoxItemList = tradingBoxItemMapper.selectList(tradingBoxItemLambdaQueryWrapper);
 			for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+				//获取费用信息
+				LambdaQueryWrapper<TradingBoxFees> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getIsDeleted, 0)
+					.eq(TradingBoxFees::getTenantId, AuthUtil.getTenantId())
+					.eq(TradingBoxFees::getCode, tradingBoxItem.getCode())
+					.eq(ObjectUtils.isNotNull(feesId), TradingBoxFees::getItemId, feesId)
+					.eq(TradingBoxFees::getPid, details.getId());
+				int count = tradingBoxFeesMapper.selectCount(tradingBoxFeesLambdaQueryWrapper);
+				tradingBoxItem.setCount(count);
 				//获取明细图片
 				LambdaQueryWrapper<TradingBoxFiles> tradingBoxFilesLambdaQueryWrapper = new LambdaQueryWrapper<>();
 				tradingBoxFilesLambdaQueryWrapper.eq(TradingBoxFiles::getIsDeleted, 0)
@@ -394,6 +408,12 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		List<TradingBoxItem> tradingBoxItemList = tradingBox.getTradingBoxItemsList();
 		if (ObjectUtils.isNotNull(tradingBoxItemList) && tradingBoxItemList.size() > 0) {
 			for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+				if (tradingBox.getType().equals("ZR")) {
+					tradingBoxItem.setStatus("待使用");
+					tradingBoxItem.setBoxSource("租入");
+				} else if (tradingBox.getType().equals("ZC")) {
+					tradingBoxItem.setStatus("使用中");
+				}
 				if (tradingBoxItem.getId() == null) {
 					tradingBoxItem.setCreateUser(AuthUtil.getUserId());
 					tradingBoxItem.setCreateTime(new Date());
@@ -794,17 +814,33 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public TradingBox startingRent(TradingBox tradingBox) {
-		if ("1".equals(tradingBox.getRentType())) {
-			List<TradingBoxItem> tradingBoxItemList = tradingBox.getTradingBoxItemsList();
-			if (tradingBoxItemList.size() < 1) {
-				throw new RuntimeException("明细不能为空");
-			}
-			for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+		List<TradingBoxItem> tradingBoxItemList = tradingBox.getTradingBoxItemsList();
+		if (tradingBoxItemList.size() < 1) {
+			throw new RuntimeException("明细不能为空");
+		}
+		Long pid = tradingBox.getId();
+
+		//账单数据
+		ApplyDTO applyDTO = new ApplyDTO();
+		if ("ZR".equals(tradingBox.getType())) {
+			applyDTO.setBillType("申请");
+		} else {
+			applyDTO.setBillType("收费");
+		}
+		applyDTO.setTradeType("BOX");
+		applyDTO.setBelongCompany(tradingBox.getPurchaseCompanyName());
+		//账单明细
+		List<Items> itemsList = new ArrayList<>();
+		List<TradingBoxFees> tradingBoxFeesList = new ArrayList<>();
+		for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+			ArchivesTrajectory archivesTrajectory = new ArchivesTrajectory();
+			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
+			tradingBoxItem.setUpdateTime(new Date());
+			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
+			if ("1".equals(tradingBox.getRentType())) {
 				tradingBoxItem.setLeaseCommencementDate(tradingBox.getRentDate());
-				tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
-				tradingBoxItem.setUpdateTime(new Date());
-				tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
-				tradingBoxItemMapper.updateById(tradingBoxItem);
+				tradingBoxItem.setBoxStatus("租入");
+				tradingBoxItem.setStatus("待使用");
 				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()));
@@ -812,8 +848,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					if (ObjectUtils.isNotNull(archivesR)) {
 						BeanUtil.copy(archivesR, archives);
 					}
-
-					if (tradingBox.getType().equals("ZR")){
+					if (tradingBox.getType().equals("ZR")) {
 						archives.setCode(tradingBoxItem.getCode());
 						archives.setName(tradingBoxItem.getBoxType());
 						archives.setVolume(tradingBoxItem.getVolume());
@@ -833,8 +868,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 						archives.setBoxAge(tradingBoxItem.getBoxAge());
 						archives.setPurchaseDate(tradingBox.getPurchaseDate());
 						archives.setContractNo(tradingBox.getContractNo());
+						archives.setBoxAccessStatus("空箱入场");
 						archives.setBoxSource("租入");
-						archives.setBoxStatus("待使用");
+						archives.setStatus("待使用");
 						archives.setLeasingCompanyId(tradingBox.getPurchaseCompanyId());
 						archives.setLeasingCompany(tradingBox.getPurchaseCompanyName());
 						if (ObjectUtils.isNotNull(archivesR)) {
@@ -842,7 +878,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 							archives.setUpdateUserName(AuthUtil.getUserName());
 							archives.setUpdateUser(AuthUtil.getUserId());
 							archivesMapper.updateById(archives);
-
 						} else {
 							archives.setBoxSource(tradingBoxItem.getBoxSource());
 							archives.setBoxStatus(tradingBoxItem.getBoxStatus());
@@ -862,39 +897,475 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 								archivesFilesMapper.insert(archivesFiles);
 							}
 						}
-					}else{
-
-					}
-
-
-
-					//记录箱轨迹信息
-					ArchivesTrajectory archivesTrajectory = new ArchivesTrajectory();
-					if ("ZR".equals(tradingBox.getType())) {
 						archivesTrajectory.setStatus("租入");
-					} else if ("ZC".equals(tradingBox.getType())) {
+					} else {
+						archives.setBoxAccessStatus("空箱离场");
+						archives.setStatus("使用");
+						archives.setLeasingCompanyId(tradingBox.getPurchaseCompanyId());
+						archives.setLeasingCompany(tradingBox.getPurchaseCompanyName());
+						archives.setUpdateTime(new Date());
+						archives.setUpdateUserName(AuthUtil.getUserName());
+						archives.setUpdateUser(AuthUtil.getUserId());
+						archivesMapper.updateById(archives);
 						archivesTrajectory.setStatus("租出");
 					}
-					archivesTrajectory.setContractNo(tradingBox.getContractNo());
-					archivesTrajectory.setBillType(tradingBox.getType());
-					archivesTrajectory.setCode(tradingBoxItem.getCode());
-					archivesTrajectory.setAddress(tradingBoxItem.getAddress());
-					archivesTrajectory.setNewDate(tradingBoxItem.getNewDate());
-					archivesTrajectory.setCreateTime(new Date());
-					archivesTrajectory.setCreateUser(AuthUtil.getUserId());
-					archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
-					archivesTrajectory.setTenantId(AuthUtil.getTenantId());
-					archivesTrajectoryMapper.insert(archivesTrajectory);
+				} else {
+					throw new RuntimeException("箱号不能为空");
+				}
+			} else {
+				tradingBoxItem.setRentEndDate(tradingBox.getRentDate());
+				tradingBoxItem.setStatus("退租");
+				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()));
+					if (ObjectUtils.isNull(archivesR)) {
+						throw new RuntimeException("未查到箱信息");
+					}
+					if (tradingBox.getType().equals("ZR")) {
+						archivesR.setStatus("退租");
+						archivesR.setBoxAccessStatus("空箱离场");
+						archivesR.setUpdateTime(new Date());
+						archivesR.setUpdateUserName(AuthUtil.getUserName());
+						archivesR.setUpdateUser(AuthUtil.getUserId());
+						archivesR.setAddress(tradingBoxItem.getAddress());
+						archivesR.setAddressId(tradingBoxItem.getAddressId());
+						archivesMapper.updateById(archivesR);
+					} else {
+						archivesR.setBoxAccessStatus("空箱入场");
+						archivesR.setStatus("待使用");
+						archivesR.setUpdateTime(new Date());
+						archivesR.setUpdateUserName(AuthUtil.getUserName());
+						archivesR.setUpdateUser(AuthUtil.getUserId());
+						archivesR.setAddress(tradingBoxItem.getAddress());
+						archivesR.setAddressId(tradingBoxItem.getAddressId());
+						archivesMapper.updateById(archivesR);
+					}
+					archivesTrajectory.setStatus("退租");
 				} else {
 					throw new RuntimeException("箱号不能为空");
 				}
 
+				int days = 0;
+				if (ObjectUtils.isNotNull(tradingBoxItem.getRentEndDate()) && ObjectUtils.isNotNull(tradingBox.getRentDate())) {
+					days = (int) ((tradingBox.getRentDate().getTime() - tradingBoxItem.getRentEndDate().getTime()) / (1000 * 3600 * 24)) + 1;
+				}
+				tradingBoxItem.setPrice(tradingBoxItem.getPrice() == null ? new BigDecimal(0) : tradingBoxItem.getPrice());
+				TradingBoxFees tradingBoxFees = new TradingBoxFees();
+				tradingBoxFees.setCorpId(tradingBox.getPurchaseCompanyId());
+				tradingBoxFees.setCorpName(tradingBox.getPurchaseCompanyName());
+				tradingBoxFees.setAmount(tradingBoxItem.getPrice().multiply(BigDecimal.valueOf(days)));
+				tradingBoxFees.setPrice(tradingBoxItem.getPrice());
+				tradingBoxFees.setQuantity(BigDecimal.valueOf(days));
+				tradingBoxFees.setCurrency(tradingBoxItem.getCurrency());
+				tradingBoxFees.setCode(tradingBoxItem.getCode());
+				//获取费用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);
+				} else {
+					tradingBoxFees.setFeesType(1);
+				}
+				tradingBoxFees.setPid(tradingBox.getId());
+				tradingBoxFees.setSrcOrderNo(tradingBox.getContractNo());
+				tradingBoxFees.setUnit(tradingBoxItem.getBoxType());
+				tradingBoxFees.setExchangeRate(new BigDecimal(1));
+				tradingBoxFees.setRentStartDate(tradingBoxItem.getRentEndDate());
+				tradingBoxFees.setRentEndDate(tradingBox.getRentDate());
+				tradingBoxFees.setCreateUser(AuthUtil.getUserId());
+				tradingBoxFees.setCreateTime(new Date());
+				tradingBoxFees.setTenantId(AuthUtil.getTenantId());
+				tradingBoxFees.setSubmitPay(1);
+				tradingBoxFeesMapper.insert(tradingBoxFees);
+				tradingBoxFeesList.add(tradingBoxFees);
+
+				Items items = new Items();
+				if (1 == tradingBoxFees.getFeesType()) {
+					items.setSrcFeesType("收费");
+				} else {
+					items.setSrcFeesType("付费");
+				}
+				items.setItemType(tradingBox.getType());
+				items.setPrice(tradingBoxFees.getPrice());
+				//账单数据
+				items.setAmount(tradingBoxFees.getAmount());
+				items.setQuantity(tradingBoxFees.getQuantity());
+				items.setSrcOrderno(tradingBox.getSysNo());
+				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.getContractNo());
+				items.setStatusJT(0);
+				items.setBillNo(tradingBox.getContractNo());
+				items.setStockTime(tradingBox.getPurchaseDate());
+				//获取费用id
+				if (ObjectUtils.isNotNull(tradingBoxFees.getItemId())) {
+					items.setCostType(tradingBoxFees.getItemId().toString());
+				}
+				items.setSrcFeesId(tradingBoxFees.getId());
+				itemsList.add(items);
+				applyDTO.setItemsList(itemsList);
 			}
+			tradingBoxItemMapper.updateById(tradingBoxItem);
+			//记录箱轨迹信息
+			archivesTrajectory.setContractNo(tradingBox.getContractNo());
+			archivesTrajectory.setBillType(tradingBox.getType());
+			archivesTrajectory.setCode(tradingBoxItem.getCode());
+			archivesTrajectory.setCreateTime(new Date());
+			archivesTrajectory.setCreateUser(AuthUtil.getUserId());
+			archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
+			archivesTrajectory.setTenantId(AuthUtil.getTenantId());
+			archivesTrajectoryMapper.insert(archivesTrajectory);
+		}
+		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("发送消息失败");
+						}
+					}
+				}
+			}
+		}
+		tradingBox.setTradingBoxItemsList(tradingBoxItemList);
+		return tradingBox;
+	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public TradingBox rentCalculation(TradingBox tradingBox) {
+		List<TradingBoxItem> tradingBoxItemList = tradingBox.getTradingBoxItemsList();
+		if (tradingBoxItemList.size() < 1) {
+			throw new RuntimeException("明细不能为空");
+		}
+		int days = 0;
+		if (tradingBox.getRentCalculationDateList().size() > 0) {
+			days = (int) ((tradingBox.getRentCalculationDateList().get(1).getTime() - tradingBox.getRentCalculationDateList().get(0).getTime()) / (1000 * 3600 * 24)) + 1;
+		}
+		Long pid = tradingBox.getId();
+
+		//账单数据
+		ApplyDTO applyDTO = new ApplyDTO();
+		if ("ZR".equals(tradingBox.getType())) {
+			applyDTO.setBillType("申请");
 		} else {
+			applyDTO.setBillType("收费");
+		}
+		applyDTO.setTradeType("BOX");
+		applyDTO.setBelongCompany(tradingBox.getPurchaseCompanyName());
+		//账单明细
+		List<Items> itemsList = new ArrayList<>();
+		List<TradingBoxFees> tradingBoxFeesList = new ArrayList<>();
+		for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+			TradingBoxFees tradingBoxFees = new TradingBoxFees();
+			tradingBoxFees.setCorpId(tradingBox.getPurchaseCompanyId());
+			tradingBoxFees.setCorpName(tradingBox.getPurchaseCompanyName());
+			tradingBoxFees.setAmount(tradingBoxItem.getPrice().multiply(BigDecimal.valueOf(days)));
+			tradingBoxFees.setPrice(tradingBoxItem.getPrice());
+			tradingBoxFees.setQuantity(BigDecimal.valueOf(days));
+			tradingBoxFees.setCurrency(tradingBoxItem.getCurrency());
+			tradingBoxFees.setCode(tradingBoxItem.getCode());
+			//获取费用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);
+			} else {
+				tradingBoxFees.setFeesType(1);
+			}
+			tradingBoxFees.setPid(tradingBox.getId());
+			tradingBoxFees.setSrcOrderNo(tradingBox.getContractNo());
+			tradingBoxFees.setUnit(tradingBoxItem.getBoxType());
+			tradingBoxFees.setExchangeRate(new BigDecimal(1));
+			tradingBoxFees.setRentStartDate(tradingBox.getRentCalculationDateList().get(0));
+			tradingBoxFees.setRentEndDate(tradingBox.getRentCalculationDateList().get(1));
+			tradingBoxFees.setCreateUser(AuthUtil.getUserId());
+			tradingBoxFees.setCreateTime(new Date());
+			tradingBoxFees.setTenantId(AuthUtil.getTenantId());
+			tradingBoxFees.setSubmitPay(1);
+			tradingBoxFeesMapper.insert(tradingBoxFees);
+			tradingBoxFeesList.add(tradingBoxFees);
+			tradingBoxItem.setAmount(tradingBoxItem.getPrice().multiply(BigDecimal.valueOf(days)));
+			tradingBoxItem.setUpdateTime(new Date());
+			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
+			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
+			tradingBoxItem.setRentEndDate(tradingBox.getRentCalculationDateList().get(1));
+			tradingBoxItemMapper.updateById(tradingBoxItem);
+
+			Items items = new Items();
+			if (1 == tradingBoxFees.getFeesType()) {
+				items.setSrcFeesType("收费");
+			} else {
+				items.setSrcFeesType("付费");
+			}
+			items.setItemType(tradingBox.getType());
+			items.setPrice(tradingBoxFees.getPrice());
+			//账单数据
+			items.setAmount(tradingBoxFees.getAmount());
+			items.setQuantity(tradingBoxFees.getQuantity());
+			items.setSrcOrderno(tradingBox.getSysNo());
+			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.getContractNo());
+			items.setStatusJT(0);
+			items.setBillNo(tradingBox.getContractNo());
+			items.setStockTime(tradingBox.getPurchaseDate());
+			//获取费用id
+			if (ObjectUtils.isNotNull(tradingBoxFees.getItemId())) {
+				items.setCostType(tradingBoxFees.getItemId().toString());
+			}
+			items.setSrcFeesId(tradingBoxFees.getId());
+			itemsList.add(items);
+			applyDTO.setItemsList(itemsList);
+		}
+		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("发送消息失败");
+						}
+					}
+				}
+			}
+		}
+		tradingBox.setTradingBoxFeesList(tradingBoxFeesList);
+		return tradingBox;
+	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public TradingBox revokeRentCalculation(TradingBox tradingBox) {
+		List<TradingBoxItem> tradingBoxItemList = tradingBox.getTradingBoxItemsList();
+		if (tradingBoxItemList.size() < 1) {
+			throw new RuntimeException("明细不能为空");
+		}
+		for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
+			//获取订单费用信息
+			LambdaQueryWrapper<TradingBoxFees> tradingBoxFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getIsDeleted, 0);
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getPid, tradingBox.getId());
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getTenantId, AuthUtil.getTenantId());
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getSubmitPay, 1);
+			tradingBoxFeesLambdaQueryWrapper.eq(TradingBoxFees::getCode, tradingBoxItem.getCode());
+			tradingBoxFeesLambdaQueryWrapper.orderByDesc(TradingBoxFees::getCreateTime);
+			List<TradingBoxFees> tradingBoxFeesList = tradingBoxFeesMapper.selectList(tradingBoxFeesLambdaQueryWrapper);
+			if (tradingBoxFeesList.size() > 0) {
+				tradingBoxFeesMapper.deleteById(tradingBoxFeesList.get(0).getId());
+				//获取账单信息
+				Acc acc = new Acc();
+				acc.setSrcParentId(tradingBox.getId());
+				acc.setSrcFeesId(tradingBoxFeesList.get(0).getId());
+				if ("ZR".equals(tradingBox.getType())) {
+					acc.setBillType("申请");
+				} else {
+					acc.setBillType("收费");
+				}
+				acc.setTradeType("BOX");
+				acc.setSrcType(5);
+				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() + "");
+						}
+					}
+				}
+			} else {
+				throw new SecurityException("箱号:" + tradingBoxItem.getCode() + "未计算租金,撤销失败");
+			}
+			tradingBoxItem.setUpdateTime(new Date());
+			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
+			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
+			tradingBoxItem.setRentEndDate(tradingBoxFeesList.get(0).getRentStartDate());
+			tradingBoxItemMapper.updateById(tradingBoxItem);
+		}
+		tradingBox.setTradingBoxItemsList(tradingBoxItemList);
+		return tradingBox;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R importTradingBoxInfo(List<TradingBoxItemRentExcelEnter> excelList, boolean b, Long corpId, String corpName, String billType) {
+		List<TradingBoxItem> tradingBoxItemList = new ArrayList<>();
+		List<TradingBoxFees> tradingBoxFeesList = new ArrayList<>();
+		for (TradingBoxItemRentExcelEnter tradingBoxItemExcelEnter : excelList) {
+			TradingBoxItem tradingBoxItem = new TradingBoxItem();
+			BeanUtil.copy(tradingBoxItemExcelEnter, tradingBoxItem);
+			if (ObjectUtils.isNull(tradingBoxItem.getCode())) {
+				throw new RuntimeException("箱号不能为空");
+			}
+			if ("SELL".equals(billType) || "ZC".equals(billType)) {
+				LambdaQueryWrapper<Archives> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+				lambdaQueryWrapper.eq(Archives::getIsDeleted, 0)
+					.eq(Archives::getTenantId, AuthUtil.getTenantId())
+					.eq(Archives::getCode, tradingBoxItem.getCode());
+				Archives archives = archivesMapper.selectOne(lambdaQueryWrapper);
+				if (ObjectUtils.isNull(archives)) {
+					throw new RuntimeException("箱号:" + tradingBoxItem.getCode() + "不存在,请修改后再进行操作!");
+				}
+				BeanUtil.copy(archives, tradingBoxItem);
+			}
+			if (ObjectUtils.isNull(tradingBoxItem.getAddress())) {
+				throw new RuntimeException("最新地点不能为空");
+			}
+			if (ObjectUtils.isNull(tradingBoxItem.getNewDate())) {
+				throw new RuntimeException("最新时间不能为空");
+			}
+			//箱类型
+			if (ObjectUtils.isNotNull(tradingBoxItemExcelEnter.getBoxType())) {
+				R<BasicContainerDesc> detail = containerDescClient.getContainer(tradingBoxItemExcelEnter.getBoxType());
+				if (detail.isSuccess() && ObjectUtils.isNotNull(detail.getData())) {
+					tradingBoxItem.setBoxType(detail.getData().getName());
+					tradingBoxItem.setBoxTypeId(detail.getData().getId());
+				} else {
+					throw new RuntimeException("箱型不存在");
+				}
+			} else {
+				throw new RuntimeException("箱型不能为空");
+			}
+			//最新地点
+			if (ObjectUtils.isNotNull(tradingBoxItem.getAddress())) {
+				BasicPortDesc basicPortDesc = new BasicPortDesc();
+				basicPortDesc.setName(tradingBoxItem.getAddress());
+				BasicPortDesc detail = portClient.getPortData(basicPortDesc);
+				if (ObjectUtils.isNotNull(detail)) {
+					tradingBoxItem.setAddress(detail.getName());
+					tradingBoxItem.setAddressId(detail.getId());
+
+				} else {
+					tradingBoxItem.setAddress(null);
+					tradingBoxItem.setAddressId(null);
+				}
+			}
+			//租赁公司
+			if (ObjectUtils.isNotNull(tradingBoxItemExcelEnter.getBoxMakingCompany())) {
+				CorpsDesc detail = corpsDescClient.getCorpsDesc(tradingBoxItemExcelEnter.getBoxMakingCompany(), "KH");
+				if (ObjectUtils.isNotNull(detail)) {
+					tradingBoxItem.setBoxMakingCompany(detail.getCname());
+					tradingBoxItem.setBoxMakingCompanyId(detail.getId());
+				} else {
+					tradingBoxItem.setBoxMakingCompany(null);
+					tradingBoxItem.setBoxMakingCompanyId(null);
+				}
+			}
+			if ("SELL".equals(billType) || "BUY".equals(billType)){
+				tradingBoxItem.setAmount(tradingBoxItem.getPrice());
+				TradingBoxFees tradingBoxFees = new TradingBoxFees();
+				tradingBoxFees.setCorpId(corpId);
+				tradingBoxFees.setCorpName(corpName);
+				tradingBoxFees.setAmount(tradingBoxItem.getPrice());
+				if ("SELL".equals(billType)){
+					//获取费用id
+					R<FeesDesc> fees = feesDescClient.getFeesByName("卖箱费");
+					if (fees.isSuccess() && fees.getData() != null) {
+						tradingBoxFees.setItemId(fees.getData().getId());
+						tradingBoxFees.setItemName("卖箱费");
+					}
+					tradingBoxFees.setFeesType(1);
+				}else{
+					//获取费用id
+					R<FeesDesc> fees = feesDescClient.getFeesByName("买箱费");
+					if (fees.isSuccess() && fees.getData() != null) {
+						tradingBoxFees.setItemId(fees.getData().getId());
+						tradingBoxFees.setItemName("买箱费");
+					}
+					tradingBoxFees.setFeesType(2);
+				}
+				tradingBoxFees.setUnit(tradingBoxItem.getBoxType());
+				tradingBoxFees.setCurrency(tradingBoxItem.getCurrency());
+				if ("CYN".equals(tradingBoxItem.getCurrency())){
+					tradingBoxFees.setExchangeRate(new BigDecimal(1));
+				}else{
+					tradingBoxFees.setExchangeRate(new BigDecimal(6.30));
+				}
+				tradingBoxFees.setAutoGenerate("1");
+				tradingBoxFees.setGenerationSource(tradingBoxItem.getCode());
+				tradingBoxFees.setQuantity(new BigDecimal(1));
+				tradingBoxFees.setPrice(tradingBoxItem.getPrice());
+				tradingBoxFees.setCode(tradingBoxItem.getCode());
+				tradingBoxFeesList.add(tradingBoxFees);
+			}
+			tradingBoxItemList.add(tradingBoxItem);
+		}
+		if ("SELL".equals(billType) || "BUY".equals(billType)){
+			Map<String, Object> map = new HashMap<>();
+			map.put("tradingBoxItemList",tradingBoxItemList);
+			map.put("tradingBoxFeesList",tradingBoxFeesList);
+			return R.data(map);
+		}else{
+			return R.data(tradingBoxItemList);
 		}
-		return null;
 	}
 
 	/**
@@ -965,8 +1436,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				//获取费用id
 				if (ObjectUtils.isNotNull(tradingBoxFees.getItemId())) {
 					items.setCostType(tradingBoxFees.getItemId().toString());
-					items.setSrcFeesId(tradingBoxFees.getId());
 				}
+				items.setSrcFeesId(tradingBoxFees.getId());
 				itemsList.add(items);
 				applyDTO.setItemsList(itemsList);
 			}

+ 104 - 20
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransportServiceImpl.java

@@ -18,15 +18,14 @@ package org.springblade.box.tube.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 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.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
+import org.springblade.box.tube.dto.TransportItemExcelEnter;
 import org.springblade.box.tube.entity.*;
 import org.springblade.box.tube.mapper.*;
 import org.springblade.box.tube.service.ITransportService;
@@ -35,14 +34,8 @@ import org.springblade.check.dto.AuditProecessDTO;
 import org.springblade.check.entity.AuditPathsActs;
 import org.springblade.check.entity.AuditPathsLevels;
 import org.springblade.check.feign.ICheckClient;
-import org.springblade.client.entity.CorpsDesc;
-import org.springblade.client.entity.FeesDesc;
-import org.springblade.client.entity.Message;
-import org.springblade.client.feign.ICorpsDescClient;
-import org.springblade.client.feign.IFeesDescClient;
-import org.springblade.client.feign.IMessageClient;
-import org.springblade.client.feign.ISerialClient;
-import org.springblade.core.mp.support.Condition;
+import org.springblade.client.entity.*;
+import org.springblade.client.feign.*;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
@@ -103,6 +96,10 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 
 	private ICorpsDescClient corpsDescClient;//公司
 
+	private final IContainerDescClient containerDescClient;
+
+	private final IPortClient portClient;
+
 
 	@Override
 	public IPage<TransportVO> selectTransportPage(IPage<TransportVO> page, TransportVO transport) {
@@ -323,18 +320,18 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 					BigDecimal amount = transportItem.getPrice().multiply(new BigDecimal(days), MathContext.DECIMAL32).setScale(2, BigDecimal.ROUND_HALF_UP);
 					transportItem.setOverdueAmount(amount);
 					LambdaUpdateWrapper<TransportItemFees> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
-					lambdaUpdateWrapper.eq(TransportItemFees::getCode,transportItem.getCode())
-					.eq(TransportItemFees::getPid,transport.getId())
-						.eq(TransportItemFees::getIsDeleted,0)
-						.eq(TransportItemFees::getTenantId,AuthUtil.getTenantId());
+					lambdaUpdateWrapper.eq(TransportItemFees::getCode, transportItem.getCode())
+						.eq(TransportItemFees::getPid, transport.getId())
+						.eq(TransportItemFees::getIsDeleted, 0)
+						.eq(TransportItemFees::getTenantId, AuthUtil.getTenantId());
 					R<FeesDesc> feesDescR = feesDescClient.getFeesByName("超期费");
 					if (feesDescR.isSuccess() && ObjectUtils.isNotNull(feesDescR.getData())) {
-						lambdaUpdateWrapper.eq(TransportItemFees::getItemId,feesDescR.getData().getId());
+						lambdaUpdateWrapper.eq(TransportItemFees::getItemId, feesDescR.getData().getId());
 						TransportItemFees selectTransportItemFees = transportItemFeesMapper.selectOne(lambdaUpdateWrapper);
-						if (ObjectUtils.isNotNull(selectTransportItemFees)){
+						if (ObjectUtils.isNotNull(selectTransportItemFees)) {
 							selectTransportItemFees.setAmount(amount);
 							transportItemFeesMapper.updateById(selectTransportItemFees);
-						}else{
+						} else {
 							TransportItemFees transportItemFees = new TransportItemFees();
 							transportItemFees.setCreateUser(AuthUtil.getUserId());
 							transportItemFees.setCreateTime(new Date());
@@ -344,9 +341,9 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 							transportItemFees.setCode(transportItem.getCode());
 							transportItemFees.setSort(1);
 							transportItemFees.setItemId(feesDescR.getData().getId());
-							if (ObjectUtils.isNotNull(transport.getCorpId())){
+							if (ObjectUtils.isNotNull(transport.getCorpId())) {
 								transportItemFees.setCorpId(transport.getCorpId());
-							}else{
+							} else {
 								transportItemFees.setCorpId(transport.getShippingCompanyId());
 							}
 							transportItemFees.setQuantity(new BigDecimal(days));
@@ -626,6 +623,93 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 		return selectTransport;
 	}
 
+	@Override
+	public R importTransportInfo(List<TransportItemExcelEnter> excelList, boolean b, Long corpId, String corpName,String billType) {
+		List<TransportItem> transportItemList = new ArrayList<>();
+		List<TransportItemFees> transportItemFeesList = new ArrayList<>();
+		for (TransportItemExcelEnter transportItemExcelEnter : excelList) {
+			TransportItem transportItem = new TransportItem();
+			BeanUtil.copy(transportItemExcelEnter, transportItem);
+			if (ObjectUtils.isNull(transportItem.getCode())) {
+				throw new RuntimeException("箱号不能为空");
+			}
+			LambdaQueryWrapper<Archives> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(Archives::getIsDeleted, 0)
+				.eq(Archives::getTenantId, AuthUtil.getTenantId())
+				.eq(Archives::getCode, transportItem.getCode());
+			Archives archives = archivesMapper.selectOne(lambdaQueryWrapper);
+			if (ObjectUtils.isNull(archives)) {
+				throw new RuntimeException("箱号:" + transportItem.getCode() + "不存在,请修改后再进行操作!");
+			}
+
+			if (ObjectUtils.isNull(transportItem.getAddress())) {
+				throw new RuntimeException("最新地点不能为空");
+			}
+			if (ObjectUtils.isNull(transportItem.getNewDate())) {
+				throw new RuntimeException("最新时间不能为空");
+			}
+			//箱类型
+			if (ObjectUtils.isNotNull(transportItem.getBoxType())) {
+				R<BasicContainerDesc> detail = containerDescClient.getContainer(transportItem.getBoxType());
+				if (detail.isSuccess() && ObjectUtils.isNotNull(detail.getData())) {
+					transportItem.setBoxType(detail.getData().getName());
+					transportItem.setBoxTypeId(detail.getData().getId());
+				} else {
+					throw new RuntimeException("箱型不存在");
+				}
+			} else {
+				throw new RuntimeException("箱型不能为空");
+			}
+			//最新地点
+			if (ObjectUtils.isNotNull(transportItem.getAddress())) {
+				BasicPortDesc basicPortDesc = new BasicPortDesc();
+				basicPortDesc.setName(transportItem.getAddress());
+				BasicPortDesc detail = portClient.getPortData(basicPortDesc);
+				if (ObjectUtils.isNotNull(detail)) {
+					transportItem.setAddress(detail.getName());
+					transportItem.setAddressId(detail.getId());
+
+				} else {
+					transportItem.setAddress(null);
+					transportItem.setAddressId(null);
+				}
+			}
+			transportItemList.add(transportItem);
+			TransportItemFees transportItemFees = new TransportItemFees();
+			transportItemFees.setCorpId(corpId);
+			transportItemFees.setCorpName(corpName);
+			//获取费用id
+			R<FeesDesc> fees = feesDescClient.getFeesByName("租金");
+			if (fees.isSuccess() && fees.getData() != null) {
+				transportItemFees.setItemId(fees.getData().getId());
+				transportItemFees.setItemName("租金");
+			}
+			transportItemFees.setAmount(transportItem.getAmount());
+			if ("CKZY".equals(billType)){
+				transportItemFees.setFeesType(1);
+			}else{
+				transportItemFees.setFeesType(2);
+			}
+			transportItemFees.setUnit(transportItem.getBoxType());
+			transportItemFees.setCurrency(transportItem.getCurrency());
+			if ("CYN".equals(transportItem.getCurrency())){
+				transportItemFees.setExchangeRate(new BigDecimal(1));
+			}else{
+				transportItemFees.setExchangeRate(new BigDecimal(6.30));
+			}
+			transportItemFees.setAutoGenerate("1");
+			transportItemFees.setGenerationSource(transportItem.getCode());
+			transportItemFees.setQuantity(new BigDecimal(1));
+			transportItemFees.setPrice(transportItem.getAmount());
+			transportItemFees.setCode(transportItem.getCode());
+			transportItemFeesList.add(transportItemFees);
+		}
+		Map<String,Object> map = new HashMap<>();
+		map.put("transportItemList",transportItemList);
+		map.put("transportItemFeesList",transportItemFeesList);
+		return R.data(map);
+	}
+
 	/**
 	 * 订单生成账单 并且推送财务消息
 	 *
@@ -698,8 +782,8 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 				//获取费用id
 				if (ObjectUtils.isNotNull(transportItemFees.getItemId())) {
 					items.setCostType(transportItemFees.getItemId().toString());
-					items.setSrcFeesId(transportItemFees.getId());
 				}
+				items.setSrcFeesId(transportItemFees.getId());
 				itemsList.add(items);
 				applyDTO.setItemsList(itemsList);
 			}

+ 6 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java

@@ -517,6 +517,7 @@ public class CorpsDescController extends BladeController {
 					.or().isNull(CorpsDesc::getAdminProfiles));
 			}
 		}
+		lambdaQueryWrapper.orderByAsc(CorpsDesc::getCname);
 
 		//获得客户信息
 		List<CorpsDesc> corpsDescList = corpsDescService.list(lambdaQueryWrapper);
@@ -586,6 +587,7 @@ public class CorpsDescController extends BladeController {
 		if (StringUtils.isNotBlank(corpsDesc.getBelongtocompany())) {
 			lambdaQueryWrapper.and(i -> i.eq(CorpsDesc::getBelongtocompany, corpsDesc.getBelongtocompany()).or().isNull(CorpsDesc::getBelongtocompany));
 		}
+		lambdaQueryWrapper.orderByAsc(CorpsDesc::getCname);
 		List<CorpsDesc> corpsDescList = corpsDescService.list(lambdaQueryWrapper);
 
 		List<CorpListVo> voList = BeanUtil.copy(corpsDescList, CorpListVo.class);
@@ -612,6 +614,7 @@ public class CorpsDescController extends BladeController {
 		lambdaQueryWrapper.eq(CorpsDesc::getIsDeleted, 0);
 		lambdaQueryWrapper.eq(CorpsDesc::getTenantId, SecureUtil.getTenantId());
 		lambdaQueryWrapper.eq(CorpsDesc::getCorpType, "CD");
+		lambdaQueryWrapper.orderByAsc(CorpsDesc::getCname);
 
 		List<CorpsDesc> corpsDescList = corpsDescService.list(lambdaQueryWrapper);
 
@@ -630,6 +633,7 @@ public class CorpsDescController extends BladeController {
 		lambdaQueryWrapper.eq(CorpsDesc::getIsDeleted, 0);
 		lambdaQueryWrapper.eq(CorpsDesc::getTenantId, SecureUtil.getTenantId());
 		lambdaQueryWrapper.eq(CorpsDesc::getCorpType, "KH");
+		lambdaQueryWrapper.orderByAsc(CorpsDesc::getCname);
 
 		List<CorpsDesc> corpsDescList = corpsDescService.list(lambdaQueryWrapper);
 
@@ -716,6 +720,7 @@ public class CorpsDescController extends BladeController {
 		lambdaQueryWrapper.eq(CorpsDesc::getId,corpsDesc.getId());
 		lambdaQueryWrapper.eq(CorpsDesc::getTenantId,SecureUtil.getTenantId());
 		lambdaQueryWrapper.eq(CorpsDesc::getCorpType,corpsDesc.getCorpType());
+		lambdaQueryWrapper.orderByAsc(CorpsDesc::getCname);
 		List<CorpsDesc> corpsDescList = corpsDescService.list(lambdaQueryWrapper);
 		if (CollectionUtils.isNotEmpty(corpsDescList)) {
 			corpsDescList.forEach(item -> {
@@ -749,6 +754,7 @@ public class CorpsDescController extends BladeController {
 		queryWrapper.eq("is_deleted",0);
 		queryWrapper.eq("tenant_id",AuthUtil.getTenantId());
 		queryWrapper.apply(ObjectUtils.isNotNull(corpType),"find_in_set(corp_type,'"+corpType+"')");
+		queryWrapper.orderByAsc("cname");
 		List<CorpsDesc> pages = corpsDescService.list(queryWrapper);
 		List<CorpsDescVO> corpsDescVOList = new ArrayList<>();
 		if (CollectionUtils.isNotEmpty(pages)) {