Selaa lähdekoodia

1.商务中心-报价模块接口调试及修改
2.海运进出口增加提取报价列表接口
3.海运进出口增加报价海运费导入
4.增加预定舱-详情,保存,提交接口
5.箱管,导入箱明细,币别和汇率问题
6.买箱,箱档案信息没有更新

纪新园 1 vuosi sitten
vanhempi
commit
922172746e
24 muutettua tiedostoa jossa 1067 lisäystä ja 103 poistoa
  1. 1 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/AgentBoxItemExcel.java
  2. 1 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/BoxFeeItemExcel.java
  3. 1 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/RentalBoxItemExcel.java
  4. 1 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/TradingBoxItemExcel.java
  5. 21 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/entity/MktSlot.java
  6. 7 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/entity/MktSlotItem.java
  7. 80 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/entity/MktSlotQuotation.java
  8. 28 21
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/RouteCostController.java
  9. 19 17
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxItemServiceImpl.java
  10. 32 32
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java
  11. 39 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/controller/MktSlotController.java
  12. 15 3
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/controller/MktSlotItemController.java
  13. 16 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/controller/MktSlotQuotationController.java
  14. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/IMktSlotItemService.java
  15. 43 3
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/impl/MktSlotItemServiceImpl.java
  16. 22 10
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/impl/MktSlotServiceImpl.java
  17. 140 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BookingCabinController.java
  18. 6 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java
  19. 309 5
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  20. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java
  21. 10 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterController.java
  22. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterService.java
  23. 265 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  24. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/view/mapper/FinanceProfitMapper.xml

+ 1 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/AgentBoxItemExcel.java

@@ -68,7 +68,7 @@ public class AgentBoxItemExcel implements Serializable {
 	/**
 	 * 币别
 	 */
-	@ExcelProperty(value = "币别*")
+	@ExcelProperty(value = "币别(大写)*")
 	private String currency;
 
 	/**

+ 1 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/BoxFeeItemExcel.java

@@ -63,7 +63,7 @@ public class BoxFeeItemExcel implements Serializable {
 	/**
 	 * 币别
 	 */
-	@ExcelProperty(value = "币别*")
+	@ExcelProperty(value = "币别(大写)*")
 	private String currency;
 
 	/**

+ 1 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/RentalBoxItemExcel.java

@@ -63,7 +63,7 @@ public class RentalBoxItemExcel implements Serializable {
 	/**
 	 * 币别
 	 */
-	@ExcelProperty(value = "币别*")
+	@ExcelProperty(value = "币别(大写)*")
 	private String currency;
 
 	/**

+ 1 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/TradingBoxItemExcel.java

@@ -63,7 +63,7 @@ public class TradingBoxItemExcel implements Serializable {
 	/**
 	 * 币别
 	 */
-	@ExcelProperty(value = "币别*")
+	@ExcelProperty(value = "币别(大写)*")
 	private String currency;
 
 	/**

+ 21 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/entity/MktSlot.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.business.mktSlot.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
@@ -23,7 +24,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
 
@@ -110,71 +110,85 @@ public class MktSlot implements Serializable {
 	 * 起运港 id
 	 */
 	@ApiModelProperty(value = "起运港 id")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Long polId;
 	/**
 	 * 起运港代码
 	 */
 	@ApiModelProperty(value = "起运港代码")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String polCode;
 	/**
 	 * 起运港英文名称
 	 */
 	@ApiModelProperty(value = "起运港英文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String polCnName;
 	/**
 	 * 起运港英文名称
 	 */
 	@ApiModelProperty(value = "起运港英文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String polEnName;
 	/**
 	 * 目的港 id
 	 */
 	@ApiModelProperty(value = "目的港 id")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Long podId;
 	/**
 	 * 目的港代码
 	 */
 	@ApiModelProperty(value = "目的港代码")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String podCode;
 	/**
 	 * 目的港中文名称
 	 */
 	@ApiModelProperty(value = "目的港中文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String podCnName;
 	/**
 	 * 目的港英文名称
 	 */
 	@ApiModelProperty(value = "目的港英文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String podEnName;
 	/**
 	 * 航线 id
 	 */
 	@ApiModelProperty(value = "航线 id")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Long lineId;
 	/**
 	 * 航线中文名称
 	 */
 	@ApiModelProperty(value = "航线中文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String lineCnName;
 	/**
 	 * 航线英文名称
 	 */
 	@ApiModelProperty(value = "航线英文名称")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String lineEnName;
 	/**
 	 * 航线代码
 	 */
 	@ApiModelProperty(value = "航线代码")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String lineCode;
 	/**
 	 * 有效日期启
 	 */
 	@ApiModelProperty(value = "有效日期启")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date effectiveStartDate;
 	/**
 	 * 有效日期止
 	 */
 	@ApiModelProperty(value = "有效日期止")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date effectiveEndDate;
 	/**
 	 * 单据状态  录入 已提交
@@ -195,5 +209,11 @@ public class MktSlot implements Serializable {
 	@TableField(exist = false)
 	private List<MktSlotItem> mktSlotItemList;
 
+	/**
+	 * 船公司
+	 */
+	@TableField(exist = false)
+	private Long shippingCompanyId;
+
 
 }

+ 7 - 1
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/entity/MktSlotItem.java

@@ -18,9 +18,11 @@ package org.springblade.los.business.mktSlot.entity;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -180,11 +182,15 @@ public class MktSlotItem implements Serializable {
 	 * 有效日期启
 	 */
 	@ApiModelProperty(value = "有效日期启")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date effectiveStartDate;
 	/**
 	 * 有效日期止
 	 */
 	@ApiModelProperty(value = "有效日期止")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date effectiveEndDate;
 	/**
 	 * 币别
@@ -235,7 +241,7 @@ public class MktSlotItem implements Serializable {
 	 * 航线 id
 	 */
 	@ApiModelProperty(value = "航线 id")
-	private Long lineId;
+	private String lineId;
 	/**
 	 * 航线中文名称
 	 */

+ 80 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/entity/MktSlotQuotation.java

@@ -17,9 +17,11 @@
 package org.springblade.los.business.mktSlot.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -109,8 +111,15 @@ public class MktSlotQuotation implements Serializable {
 	 * etd
 	 */
 	@ApiModelProperty(value = "etd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date etd;
 	/**
+	 * 星期
+	 */
+	@ApiModelProperty(value = "星期")
+	private String week;
+	/**
 	 * 20Gp
 	 */
 	@ApiModelProperty(value = "20Gp")
@@ -126,6 +135,21 @@ public class MktSlotQuotation implements Serializable {
 	@ApiModelProperty(value = "40Hc")
 	private BigDecimal hc40;
 	/**
+	 * 20Gp
+	 */
+	@ApiModelProperty(value = "20Gp")
+	private BigDecimal gp20Cost;
+	/**
+	 * 40Gp
+	 */
+	@ApiModelProperty(value = "40Gp")
+	private BigDecimal gp40Cost;
+	/**
+	 * 40Hc
+	 */
+	@ApiModelProperty(value = "40Hc")
+	private BigDecimal hc40Cost;
+	/**
 	 * 币别
 	 */
 	@ApiModelProperty(value = "币别")
@@ -181,5 +205,61 @@ public class MktSlotQuotation implements Serializable {
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 
+	/**
+	 * 船公司
+	 */
+	@ApiModelProperty(value = "船公司")
+	private Long shippingCompanyId;
+	/**
+	 * 船公司中文
+	 */
+	@ApiModelProperty(value = "船公司中文")
+	private String shippingCompanyCname;
+	/**
+	 * 船公司英文
+	 */
+	@ApiModelProperty(value = "船公司英文")
+	private String shippingCompanyEname;
+	/**
+	 * 船公司代码
+	 */
+	@ApiModelProperty(value = "船公司代码")
+	private String shippingCompanyCode;
+	/**
+	 * 船公司简称
+	 */
+	@ApiModelProperty(value = "船公司简称")
+	private String shippingCompanyAbbreviation;
+	/**
+	 * 承运人
+	 */
+	@ApiModelProperty(value = "承运人")
+	private Long actualShippingCompanyId;
+	/**
+	 * 承运人中文
+	 */
+	@ApiModelProperty(value = "承运人中文")
+	private String actualShippingCompanyCname;
+	/**
+	 * 承运人英文
+	 */
+	@ApiModelProperty(value = "承运人英文")
+	private String actualShippingCompanyEname;
+	/**
+	 * 承运人代码
+	 */
+	@ApiModelProperty(value = "承运人代码")
+	private String actualShippingCompanyCode;
+	/**
+	 * 承运人简称
+	 */
+	@ApiModelProperty(value = "承运人简称")
+	private String actualShippingCompanyAbbreviation;
+	/**
+	 * 箱属
+	 */
+	@ApiModelProperty(value = "箱属")
+	private String boxBelongsTo;
+
 
 }

+ 28 - 21
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/RouteCostController.java

@@ -343,11 +343,11 @@ public class RouteCostController extends BladeController {
 		lambdaQueryWrapper.eq(RouteCost::getTenantId, AuthUtil.getTenantId())
 			.eq(RouteCost::getIsDeleted, 0)
 			.eq(RouteCost::getStatus, "审核通过")
-			.eq(RouteCost::getBelongingCompanyId, AuthUtil.getDeptId())
+			.eq(ObjectUtils.isNotNull(routeCost.getBusinessType()), RouteCost::getBusinessType, routeCost.getBusinessType())
 			.eq(ObjectUtils.isNotNull(routeCost.getPodId()), RouteCost::getPodId, routeCost.getPodId())
 			.eq(ObjectUtils.isNotNull(routeCost.getDestinationId()), RouteCost::getDestinationId, routeCost.getDestinationId())
-			.apply(ObjectUtils.isNotNull(routeCost.getShippingCompanyId()), "(business_type = 'SOC' and actual_shipping_company_id = '" + routeCost.getShippingCompanyId() + "')" +
-				"OR (business_type = 'COC' and shipping_company_id = '" + routeCost.getShippingCompanyId() + "')");
+			.apply(ObjectUtils.isNotNull(routeCost.getShippingCompanyId()), "((business_type = 'SOC' and actual_shipping_company_id = '" + routeCost.getShippingCompanyId() + "')" +
+				"OR (business_type = 'COC' and shipping_company_id = '" + routeCost.getShippingCompanyId() + "'))");
 //			.eq(ObjectUtils.isNotNull(routeCost.getShippingCompanyId()), RouteCost::getActualShippingCompanyId, routeCost.getShippingCompanyId());
 		lambdaQueryWrapper.orderByAsc(RouteCost::getTotalProfit);
 		List<RouteCost> list = routeCostService.list(lambdaQueryWrapper);
@@ -393,7 +393,7 @@ public class RouteCostController extends BladeController {
 	}
 
 	/**
-	 * 提运价列表
+	 * 提运价列表
 	 */
 	@GetMapping("/MktSlotQuotation")
 	public R<List<MktSlotItem>> MktSlotQuotation(RouteCost routeCost) {
@@ -402,9 +402,16 @@ public class RouteCostController extends BladeController {
 		lambdaQueryWrapper.eq(RouteCost::getTenantId, AuthUtil.getTenantId())
 			.eq(RouteCost::getIsDeleted, 0)
 			.eq(RouteCost::getStatus, "审核通过")
-			.eq(RouteCost::getBelongingCompanyId, AuthUtil.getDeptId())
 			.eq(ObjectUtils.isNotNull(routeCost.getPodId()), RouteCost::getPodId, routeCost.getPodId())
-			.eq(ObjectUtils.isNotNull(routeCost.getDestinationId()), RouteCost::getDestinationId, routeCost.getDestinationId());
+			.like(ObjectUtils.isNotNull(routeCost.getAirlineId()), RouteCost::getAirlineId, routeCost.getAirlineId())
+			.like(ObjectUtils.isNotNull(routeCost.getDestinationId()), RouteCost::getDestinationId, routeCost.getDestinationId());
+		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+		if (ObjectUtils.isNotNull(routeCost.getEffectiveStartDate())) {
+			lambdaQueryWrapper.apply(ObjectUtils.isNotNull(routeCost.getEffectiveStartDate()), "DATE_FORMAT(effective_start_date,'%Y-%m-%d') >= '" + formatter.format(routeCost.getEffectiveStartDate()) + "'");
+		}
+		if (ObjectUtils.isNotNull(routeCost.getEffectiveEndDate())) {
+			lambdaQueryWrapper.apply(ObjectUtils.isNotNull(routeCost.getEffectiveEndDate()), "DATE_FORMAT(effective_end_date,'%Y-%m-%d') <= '" + formatter.format(routeCost.getEffectiveEndDate()) + "'");
+		}
 		lambdaQueryWrapper.orderByAsc(RouteCost::getDestinationId);
 		List<RouteCost> list = routeCostService.list(lambdaQueryWrapper);
 		if (!list.isEmpty()) {
@@ -416,16 +423,16 @@ public class RouteCostController extends BladeController {
 			if (!routeCostItemList.isEmpty()) {
 				for (RouteCost item : list) {
 					MktSlotItem mktSlotItem = new MktSlotItem();
-					mktSlotItem.setShippingCompanyId(item.getShippingCompanyId());
-					mktSlotItem.setShippingCompanyCname(item.getShippingCompanyCname());
-					mktSlotItem.setShippingCompanyEname(item.getShippingCompanyEname());
-					mktSlotItem.setShippingCompanyCode(item.getShippingCompanyCode());
-					mktSlotItem.setShippingCompanyAbbreviation(item.getShippingCompanyAbbreviation());
-					mktSlotItem.setActualShippingCompanyId(item.getActualShippingCompanyId());
-					mktSlotItem.setActualShippingCompanyCname(item.getActualShippingCompanyCname());
-					mktSlotItem.setActualShippingCompanyEname(item.getActualShippingCompanyEname());
-					mktSlotItem.setActualShippingCompanyCode(item.getActualShippingCompanyCode());
-					mktSlotItem.setActualShippingCompanyAbbreviation(item.getActualShippingCompanyAbbreviation());
+					mktSlotItem.setShippingCompanyId(item.getActualShippingCompanyId());
+					mktSlotItem.setShippingCompanyCname(item.getActualShippingCompanyCname());
+					mktSlotItem.setShippingCompanyEname(item.getActualShippingCompanyEname());
+					mktSlotItem.setShippingCompanyCode(item.getActualShippingCompanyCode());
+					mktSlotItem.setShippingCompanyAbbreviation(item.getActualShippingCompanyAbbreviation());
+					mktSlotItem.setActualShippingCompanyId(item.getShippingCompanyId());
+					mktSlotItem.setActualShippingCompanyCname(item.getShippingCompanyCname());
+					mktSlotItem.setActualShippingCompanyEname(item.getShippingCompanyEname());
+					mktSlotItem.setActualShippingCompanyCode(item.getShippingCompanyCode());
+					mktSlotItem.setActualShippingCompanyAbbreviation(item.getShippingCompanyAbbreviation());
 					mktSlotItem.setImportantInstructions(item.getRemarks());
 					mktSlotItem.setEffectiveStartDate(item.getEffectiveStartDate());
 					mktSlotItem.setEffectiveEndDate(item.getEffectiveEndDate());
@@ -438,10 +445,10 @@ public class RouteCostController extends BladeController {
 					mktSlotItem.setPodCode(item.getDestinationCode());
 					mktSlotItem.setPodCnName(item.getDestinationCname());
 					mktSlotItem.setPodEnName(item.getDestinationEname());
-					//todo mktSlotItem.setLineId(item.getAirlineId());
-					//todo mktSlotItem.setLineCnName(item.getAirlineCname());
-					//todo mktSlotItem.setLineEnName(item.getAirlineEname());
-					//todo mktSlotItem.setLineCode(item.getAirlineCode());
+					mktSlotItem.setLineId(item.getAirlineId());
+					mktSlotItem.setLineCnName(item.getAirlineCname());
+					mktSlotItem.setLineEnName(item.getAirlineEname());
+					mktSlotItem.setLineCode(item.getAirlineCode());
 					mktSlotItem.setFlightType(item.getFlightType());
 					mktSlotItem.setTransitPortId(item.getTransitPortId());
 					mktSlotItem.setTransitPortCname(item.getTransitPortCname());
@@ -451,7 +458,7 @@ public class RouteCostController extends BladeController {
 					mktSlotItem.setShippingSpaceNumber(item.getShippingSpaceNumber());
 					mktSlotItem.setWeightLimit(item.getWeightLimit());
 					mktSlotItem.setWhetherJointVenture(item.getWhetherJointVenture());
-					mktSlotItem.setBoxBelongsTo("SOC");
+					mktSlotItem.setBoxBelongsTo(item.getBusinessType());
 					mktSlotItem.setCooperativePartnerId(item.getCooperativePartnerId());
 					mktSlotItem.setCooperativePartnerName(item.getCooperativePartnerName());
 					mktSlotItem.setGp20(routeCostItemList.stream().filter(e -> e.getPid().equals(item.getId())

+ 19 - 17
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxItemServiceImpl.java

@@ -103,7 +103,6 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 		}
 		String exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
 		List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1", AuthUtil.getDeptId());
-		BigDecimal exrateC = currencyUtils.obtainExrate("C", curExrateList, "USD", "1");
 		List<String> codes = new ArrayList<>();
 		List<String> boxType = new ArrayList<>();
 		String portName = "";
@@ -343,7 +342,8 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 					tradingBoxItem.setCode(item.getCode().toUpperCase());
 				}
 				if (!exrateType.equals(item.getCurrency())) {
-					tradingBoxItem.setCurrency(item.getCurrency());
+					tradingBoxItem.setCurrency(item.getCurrency().toUpperCase());
+					BigDecimal exrateC = currencyUtils.obtainExrate("C", curExrateList, tradingBoxItem.getCurrency(), "1");
 					tradingBoxItem.setExrate(exrateC);
 				} else {
 					tradingBoxItem.setCurrency(exrateType);
@@ -389,7 +389,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 							tradingBoxItem.setRestrictingShippingCompaniesName(item.getRestrictingShippingCompaniesName());
 						}
 					}
-					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCode())).findFirst().orElse(null);
+					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCnName())).findFirst().orElse(null);
 					if (bCorps == null) {
 						throw new RuntimeException("箱东:"+defaultBoxEast+"不存在,请先维护基础资料");
 					}
@@ -447,7 +447,8 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 					tradingBoxItem.setCode(item.getCode().toUpperCase());
 				}
 				if (!exrateType.equals(item.getCurrency())) {
-					tradingBoxItem.setCurrency(item.getCurrency());
+					tradingBoxItem.setCurrency(item.getCurrency().toUpperCase());
+					BigDecimal exrateC = currencyUtils.obtainExrate("C", curExrateList, tradingBoxItem.getCurrency(), "1");
 					tradingBoxItem.setExrate(exrateC);
 				} else {
 					tradingBoxItem.setCurrency(exrateType);
@@ -502,7 +503,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 							tradingBoxItem.setRestrictingShippingCompaniesName(item.getRestrictingShippingCompaniesName());
 						}
 					}
-					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCode())).findFirst().orElse(null);
+					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCnName())).findFirst().orElse(null);
 					if (bCorps == null) {
 						throw new RuntimeException("箱东:"+defaultBoxEast+"不存在,请先维护基础资料");
 					}
@@ -556,7 +557,8 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 					tradingBoxItem.setCode(item.getCode().toUpperCase());
 				}
 				if (!exrateType.equals(item.getCurrency())) {
-					tradingBoxItem.setCurrency(item.getCurrency());
+					tradingBoxItem.setCurrency(item.getCurrency().toUpperCase());
+					BigDecimal exrateC = currencyUtils.obtainExrate("C", curExrateList, tradingBoxItem.getCurrency(), "1");
 					tradingBoxItem.setExrate(exrateC);
 				} else {
 					tradingBoxItem.setCurrency(exrateType);
@@ -612,7 +614,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 							tradingBoxItem.setRestrictingShippingCompaniesName(item.getRestrictingShippingCompaniesName());
 						}
 					}
-					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCode())).findFirst().orElse(null);
+					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCnName())).findFirst().orElse(null);
 					if (bCorps == null) {
 						throw new RuntimeException("箱东:"+defaultBoxEast+"不存在,请先维护基础资料");
 					}
@@ -665,7 +667,8 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 					tradingBoxItem.setCode(item.getCode().toUpperCase());
 				}
 				if (!exrateType.equals(item.getCurrency())) {
-					tradingBoxItem.setCurrency(item.getCurrency());
+					tradingBoxItem.setCurrency(item.getCurrency().toUpperCase());
+					BigDecimal exrateC = currencyUtils.obtainExrate("C", curExrateList, tradingBoxItem.getCurrency(), "1");
 					tradingBoxItem.setExrate(exrateC);
 				} else {
 					tradingBoxItem.setCurrency(exrateType);
@@ -712,7 +715,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 							tradingBoxItem.setRestrictingShippingCompaniesName(item.getRestrictingShippingCompaniesName());
 						}
 					}
-					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCode())).findFirst().orElse(null);
+					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCnName())).findFirst().orElse(null);
 					if (bCorps == null) {
 						throw new RuntimeException("箱东:"+defaultBoxEast+"不存在,请先维护基础资料");
 					}
@@ -729,16 +732,19 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 						tradingBoxItem.setBoxEastName(bCorps.getCnName());
 						tradingBoxItem.setOriginalBoxEastId(tradingBox.getPurchaseCompanyId());
 						tradingBoxItem.setOriginalBoxEastName(tradingBox.getPurchaseCompanyName());
+					} else if ("XGFY".equals(tradingBox.getType())) {
+						tradingBoxItem.setBoxEastId(bCorps.getId());
+						tradingBoxItem.setBoxEastName(bCorps.getCnName());
 					}
 					if (ObjectUtils.isNotNull(item.getStationCname())) {
 						BCorps stationCname = corpsList.stream().filter(e -> item.getStationCname().equals(e.getCnName())).findFirst().orElse(null);
 						if (stationCname == null) {
 							throw new RuntimeException("场站:" + item.getStationCname() + "不存在,请先维护基础资料");
 						}
-						tradingBoxItem.setStationId(bCorps.getId());
-						tradingBoxItem.setStationCname(bCorps.getCnName());
-						tradingBoxItem.setStationCode(bCorps.getCode());
-						tradingBoxItem.setStationEname(bCorps.getEnName());
+						tradingBoxItem.setStationId(stationCname.getId());
+						tradingBoxItem.setStationCname(stationCname.getCnName());
+						tradingBoxItem.setStationCode(stationCname.getCode());
+						tradingBoxItem.setStationEname(stationCname.getEnName());
 					}
 				}
 				if ("BUY".equals(tradingBox.getType())) {
@@ -752,10 +758,6 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				}
 				tradingBoxItem.setBoxBelongsTo("SOC");
 				tradingBoxItem.setStatus("待使用");
-				tradingBoxItem.setStationId(tradingBox.getStationId());
-				tradingBoxItem.setStationCname(tradingBox.getStationCname());
-				tradingBoxItem.setStationEname(tradingBox.getStationEname());
-				tradingBoxItem.setStationCode(tradingBox.getStationCode());
 				tradingBoxItem.setCreateUser(AuthUtil.getUserId());
 				tradingBoxItem.setCreateUserName(AuthUtil.getUserName());
 				tradingBoxItem.setCreateTime(new Date());

+ 32 - 32
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java

@@ -1622,14 +1622,14 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 						archives1.setNewDate(detail.getActivationDate());
 						archives1.setBoxDynamics("空箱入场");
 						archives1.setStatus("待使用");
-						archives1.setAddressId(detail.getAddressId());
-						archives1.setAddressCode(detail.getAddressCode());
-						archives1.setAddressCname(detail.getAddressCname());
-						archives1.setAddressEname(detail.getAddressEname());
-						archives1.setStationId(detail.getStationId());
-						archives1.setStationCode(detail.getStationCode());
-						archives1.setStationCname(detail.getStationCname());
-						archives1.setStationEname(detail.getStationEname());
+						archives1.setAddressId(tradingBox.getAddressId());
+						archives1.setAddressCode(tradingBox.getAddressCode());
+						archives1.setAddressCname(tradingBox.getAddressCname());
+						archives1.setAddressEname(tradingBox.getAddressEname());
+						archives1.setStationId(tradingBox.getStationId());
+						archives1.setStationCode(tradingBox.getStationCode());
+						archives1.setStationCname(tradingBox.getStationCname());
+						archives1.setStationEname(tradingBox.getStationEname());
 						archives1.setContractNo(tradingBox.getContractNo());
 						if ("BUY".equals(tradingBox.getType())) {
 							archives1.setContainerNumberType("自有箱");
@@ -1668,14 +1668,14 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 						archives1.setContractNo(tradingBox.getContractNo());
 						archives1.setBoxDynamics(item.getBoxDynamics());
 						archives1.setStatus(item.getStatus());
-						archives1.setAddressId(detail.getPolId());
-						archives1.setAddressCode(detail.getPolCode());
-						archives1.setAddressCname(detail.getPolCname());
-						archives1.setAddressEname(detail.getPolEname());
-						archives1.setStationId(detail.getPolStationId());
-						archives1.setStationCode(detail.getPolStationCode());
-						archives1.setStationCname(detail.getPolStationCname());
-						archives1.setStationEname(detail.getPolStationEname());
+						archives1.setAddressId(tradingBox.getPolId());
+						archives1.setAddressCode(tradingBox.getPolCode());
+						archives1.setAddressCname(tradingBox.getPolCname());
+						archives1.setAddressEname(tradingBox.getPolEname());
+						archives1.setStationId(tradingBox.getPolStationId());
+						archives1.setStationCode(tradingBox.getPolStationCode());
+						archives1.setStationCname(tradingBox.getPolStationCname());
+						archives1.setStationEname(tradingBox.getPolStationEname());
 						if ("BUY".equals(tradingBox.getType())) {
 							archives1.setPurchaseDate(tradingBox.getPurchaseDate());
 							archives1.setBoxSource("买箱");
@@ -1725,14 +1725,14 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					archives1.setContractNo(tradingBox.getContractNo());
 					archives1.setBoxDynamics(item.getBoxDynamics());
 					archives1.setStatus(item.getStatus());
-					archives1.setAddressId(detail.getPolId());
-					archives1.setAddressCode(detail.getPolCode());
-					archives1.setAddressCname(detail.getPolCname());
-					archives1.setAddressEname(detail.getPolEname());
-					archives1.setStationId(detail.getPolStationId());
-					archives1.setStationCode(detail.getPolStationCode());
-					archives1.setStationCname(detail.getPolStationCname());
-					archives1.setStationEname(detail.getPolStationEname());
+					archives1.setAddressId(tradingBox.getPolId());
+					archives1.setAddressCode(tradingBox.getPolCode());
+					archives1.setAddressCname(tradingBox.getPolCname());
+					archives1.setAddressEname(tradingBox.getPolEname());
+					archives1.setStationId(tradingBox.getPolStationId());
+					archives1.setStationCode(tradingBox.getPolStationCode());
+					archives1.setStationCname(tradingBox.getPolStationCname());
+					archives1.setStationEname(tradingBox.getPolStationEname());
 					if ("BUY".equals(tradingBox.getType())) {
 						archives1.setPurchaseDate(tradingBox.getPurchaseDate());
 						archives1.setBoxSource("买箱");
@@ -1768,14 +1768,14 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				} else if ("DL".equals(tradingBox.getType())) {
 					archivesTrajectory.setStatus("代理");
 				}
-				archivesTrajectory.setPortId(detail.getPolId());
-				archivesTrajectory.setPortCode(detail.getPolCode());
-				archivesTrajectory.setPortCname(detail.getPolCname());
-				archivesTrajectory.setPortEname(detail.getPolEname());
-				archivesTrajectory.setStationId(detail.getPolStationId());
-				archivesTrajectory.setStationCode(detail.getPolStationCode());
-				archivesTrajectory.setStationCname(detail.getPolStationCname());
-				archivesTrajectory.setStationEname(detail.getPolStationEname());
+				archivesTrajectory.setPortId(tradingBox.getPolId());
+				archivesTrajectory.setPortCode(tradingBox.getPolCode());
+				archivesTrajectory.setPortCname(tradingBox.getPolCname());
+				archivesTrajectory.setPortEname(tradingBox.getPolEname());
+				archivesTrajectory.setStationId(tradingBox.getPolStationId());
+				archivesTrajectory.setStationCode(tradingBox.getPolStationCode());
+				archivesTrajectory.setStationCname(tradingBox.getPolStationCname());
+				archivesTrajectory.setStationEname(tradingBox.getPolStationEname());
 				archivesTrajectory.setContainerNumber(item.getContainerNumber());
 				archivesTrajectory.setBoxType(item.getBoxType());
 				archivesTrajectory.setBoxCategory(item.getBoxCategory());

+ 39 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/controller/MktSlotController.java

@@ -30,13 +30,22 @@ 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.springblade.los.box.entity.RouteCost;
+import org.springblade.los.box.entity.RouteCostItem;
 import org.springblade.los.business.mktSlot.entity.MktSlot;
+import org.springblade.los.business.mktSlot.entity.MktSlotItem;
+import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
+import org.springblade.los.business.mktSlot.service.IMktSlotQuotationService;
 import org.springblade.los.business.mktSlot.service.IMktSlotService;
 import org.springblade.los.business.mktSlot.vo.MktSlotVO;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * mkt&slot表 控制器
@@ -52,6 +61,8 @@ public class MktSlotController extends BladeController {
 
 	private final IMktSlotService mktSlotService;
 
+	private final IMktSlotQuotationService mktSlotQuotationService;
+
 	/**
 	 * 详情
 	 */
@@ -166,7 +177,7 @@ public class MktSlotController extends BladeController {
 	/**
 	 * 生成报价
 	 */
-	@GetMapping("/generateQuotation")
+	@PostMapping("/generateQuotation")
 	public R generateQuotation(@Valid @RequestBody MktSlot mktSlot) {
 		return mktSlotService.generateQuotation(mktSlot);
 	}
@@ -174,9 +185,35 @@ public class MktSlotController extends BladeController {
 	/**
 	 * 撤销报价
 	 */
-	@GetMapping("/revokeQuotation")
+	@PostMapping("/revokeQuotation")
 	public R revokeQuotation(@Valid @RequestBody MktSlot mktSlot) {
 		return mktSlotService.revokeQuotation(mktSlot);
 	}
 
+	/**
+	 * 提取报价列表
+	 */
+	@GetMapping("/MktSlotQuotation")
+	public R<List<MktSlotQuotation>> MktSlotQuotation(MktSlot mktSlot) {
+		List<MktSlotQuotation> mktSlotQuotationList = new ArrayList<>();
+		LambdaQueryWrapper<MktSlot> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(MktSlot::getTenantId, AuthUtil.getTenantId())
+			.eq(MktSlot::getIsDeleted, 0)
+			.eq(MktSlot::getBillStatus, "已提交")
+			.eq(ObjectUtils.isNotNull(mktSlot.getPolId()), MktSlot::getPolId, mktSlot.getPolId())
+			.eq(ObjectUtils.isNotNull(mktSlot.getPodId()), MktSlot::getPodId, mktSlot.getPodId());
+		lambdaQueryWrapper.orderByAsc(MktSlot::getPodId);
+		List<MktSlot> list = mktSlotService.list(lambdaQueryWrapper);
+		if (!list.isEmpty()) {
+			List<Long> pid = list.stream().map(MktSlot::getId).collect(Collectors.toList());
+			mktSlotQuotationList = mktSlotQuotationService.list(new LambdaQueryWrapper<MktSlotQuotation>()
+				.eq(MktSlotQuotation::getTenantId, AuthUtil.getTenantId())
+				.eq(MktSlotQuotation::getIsDeleted, 0)
+				.eq(MktSlotQuotation::getShippingCompanyId, mktSlot.getShippingCompanyId())
+				.in(MktSlotQuotation::getPid, pid)
+			);
+		}
+		return R.data(mktSlotQuotationList);
+	}
+
 }

+ 15 - 3
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/controller/MktSlotItemController.java

@@ -34,6 +34,8 @@ import org.springblade.los.business.mktSlot.vo.MktSlotItemVO;
 import org.springblade.los.business.mktSlot.service.IMktSlotItemService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * mkt&slot明细表 控制器
  *
@@ -108,10 +110,20 @@ public class MktSlotItemController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入mktSlotItem")
 	public R submit(@Valid @RequestBody MktSlotItem mktSlotItem) {
-		return R.status(mktSlotItemService.saveOrUpdate(mktSlotItem));
+		return mktSlotItemService.submit(mktSlotItem);
+	}
+
+	/**
+	 * 新增或修改 mkt&slot明细表
+	 */
+	@PostMapping("/submitList")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入mktSlotItem")
+	public R submitList(@Valid @RequestBody List<MktSlotItem> mktSlotItemList) {
+		return mktSlotItemService.submitList(mktSlotItemList);
 	}
 
-	
+
 	/**
 	 * 删除 mkt&slot明细表
 	 */
@@ -122,5 +134,5 @@ public class MktSlotItemController extends BladeController {
 		return R.status(mktSlotItemService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }

+ 16 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/controller/MktSlotQuotationController.java

@@ -27,6 +27,7 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.los.business.mktSlot.entity.MktSlotItem;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
@@ -34,6 +35,8 @@ import org.springblade.los.business.mktSlot.vo.MktSlotQuotationVO;
 import org.springblade.los.business.mktSlot.service.IMktSlotQuotationService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * mkt&slot报价明细表 控制器
  *
@@ -111,7 +114,18 @@ public class MktSlotQuotationController extends BladeController {
 		return R.status(mktSlotQuotationService.saveOrUpdate(mktSlotQuotation));
 	}
 
-	
+	/**
+	 * 新增或修改 mkt&slot明细表
+	 */
+	@PostMapping("/submitList")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入mktSlotItem")
+	public R submitList(@Valid @RequestBody List<MktSlotQuotation> mktSlotQuotationList) {
+		mktSlotQuotationService.saveOrUpdateBatch(mktSlotQuotationList);
+		return R.data(mktSlotQuotationList);
+	}
+
+
 	/**
 	 * 删除 mkt&slot报价明细表
 	 */
@@ -122,5 +136,5 @@ public class MktSlotQuotationController extends BladeController {
 		return R.status(mktSlotQuotationService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }

+ 6 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/IMktSlotItemService.java

@@ -16,11 +16,14 @@
  */
 package org.springblade.los.business.mktSlot.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.los.business.mktSlot.entity.MktSlotItem;
 import org.springblade.los.business.mktSlot.vo.MktSlotItemVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * mkt&slot明细表 服务类
  *
@@ -38,4 +41,7 @@ public interface IMktSlotItemService extends IService<MktSlotItem> {
 	 */
 	IPage<MktSlotItemVO> selectMktSlotItemPage(IPage<MktSlotItemVO> page, MktSlotItemVO mktSlotItem);
 
+    R submit(MktSlotItem mktSlotItem);
+
+	R submitList(List<MktSlotItem> mktSlotItemList);
 }

+ 43 - 3
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/impl/MktSlotItemServiceImpl.java

@@ -16,13 +16,19 @@
  */
 package org.springblade.los.business.mktSlot.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.los.business.mktSlot.entity.MktSlotItem;
-import org.springblade.los.business.mktSlot.vo.MktSlotItemVO;
 import org.springblade.los.business.mktSlot.mapper.MktSlotItemMapper;
 import org.springblade.los.business.mktSlot.service.IMktSlotItemService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.los.business.mktSlot.vo.MktSlotItemVO;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * mkt&slot明细表 服务实现类
@@ -38,4 +44,38 @@ public class MktSlotItemServiceImpl extends ServiceImpl<MktSlotItemMapper, MktSl
 		return page.setRecords(baseMapper.selectMktSlotItemPage(page, mktSlotItem));
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R submit(MktSlotItem mktSlotItem) {
+		if (mktSlotItem.getId() == null) {
+			mktSlotItem.setCreateTime(new Date());
+			mktSlotItem.setCreateUser(AuthUtil.getUserId());
+			mktSlotItem.setCreateUserName(AuthUtil.getUserName());
+		} else {
+			mktSlotItem.setUpdateUser(AuthUtil.getUserId());
+			mktSlotItem.setUpdateTime(new Date());
+			mktSlotItem.setUpdateUserName(AuthUtil.getUserName());
+		}
+		this.saveOrUpdate(mktSlotItem);
+		return R.data(mktSlotItem);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R submitList(List<MktSlotItem> mktSlotItemList) {
+		for (MktSlotItem item : mktSlotItemList) {
+			if (item.getId() == null) {
+				item.setCreateTime(new Date());
+				item.setCreateUser(AuthUtil.getUserId());
+				item.setCreateUserName(AuthUtil.getUserName());
+			} else {
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateTime(new Date());
+				item.setUpdateUserName(AuthUtil.getUserName());
+			}
+		}
+		this.saveOrUpdateBatch(mktSlotItemList);
+		return R.data(mktSlotItemList);
+	}
+
 }

+ 22 - 10
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/impl/MktSlotServiceImpl.java

@@ -43,10 +43,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.ZoneId;
+import java.time.*;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -170,6 +167,7 @@ public class MktSlotServiceImpl extends ServiceImpl<MktSlotMapper, MktSlot> impl
 			mktSlot.setUpdateUser(AuthUtil.getUserId());
 			mktSlot.setUpdateTime(new Date());
 			mktSlot.setUpdateUserName(AuthUtil.getUserName());
+			this.updateById(mktSlot);
 		}
 		if (ObjectUtils.isNotNull(mktSlot.getMktSlotItemList()) && !mktSlot.getMktSlotItemList().isEmpty()) {
 			for (MktSlotItem item : mktSlot.getMktSlotItemList()) {
@@ -246,13 +244,13 @@ public class MktSlotServiceImpl extends ServiceImpl<MktSlotMapper, MktSlot> impl
 		}
 		List<MktSlotQuotation> mktSlotQuotationList = new ArrayList<>();
 		MktSlot detail = baseMapper.selectById(mktSlot.getId());
-		Instant instant1 = detail.getEffectiveStartDate().toInstant();
-		Instant instant2 = detail.getEffectiveEndDate().toInstant();
-		LocalDate date1 = instant1.atZone(ZoneId.systemDefault()).toLocalDate();
-		LocalDate date2 = instant2.atZone(ZoneId.systemDefault()).toLocalDate();
-		Duration duration = Duration.between(date1.atStartOfDay(), date2.atStartOfDay());
-		long days = duration.toDays();
 		for (MktSlotItem item : mktSlot.getMktSlotItemList()) {
+			Instant instant1 = item.getEffectiveStartDate().toInstant();
+			Instant instant2 = item.getEffectiveEndDate().toInstant();
+			LocalDate date1 = instant1.atZone(ZoneId.systemDefault()).toLocalDate();
+			LocalDate date2 = instant2.atZone(ZoneId.systemDefault()).toLocalDate();
+			Duration duration = Duration.between(date1.atStartOfDay(), date2.atStartOfDay());
+			long days = duration.toDays();
 			for (int i = 0; i <= days; i++) {
 				MktSlotQuotation mktSlotQuotation = new MktSlotQuotation();
 				LocalDate tomorrow = date1.plusDays(i);
@@ -264,9 +262,13 @@ public class MktSlotServiceImpl extends ServiceImpl<MktSlotMapper, MktSlot> impl
 				mktSlotQuotation.setBranchId(item.getBranchId());
 				mktSlotQuotation.setBranchName(item.getBranchName());
 				mktSlotQuotation.setEtd(Date.from(tomorrow.atStartOfDay(ZoneId.systemDefault()).toInstant()));
+				mktSlotQuotation.setWeek(String.valueOf(tomorrow.getDayOfWeek()));
 				mktSlotQuotation.setGp20(item.getGp20());
 				mktSlotQuotation.setGp40(item.getGp40());
 				mktSlotQuotation.setHc40(item.getHc40());
+				mktSlotQuotation.setGp20Cost(item.getGp20());
+				mktSlotQuotation.setGp40Cost(item.getGp40());
+				mktSlotQuotation.setHc40Cost(item.getHc40());
 				mktSlotQuotation.setCurCode(item.getCurCode());
 				mktSlotQuotation.setPolId(item.getPolId());
 				mktSlotQuotation.setPolCode(item.getPolCode());
@@ -276,6 +278,16 @@ public class MktSlotServiceImpl extends ServiceImpl<MktSlotMapper, MktSlot> impl
 				mktSlotQuotation.setPodCode(item.getPodCode());
 				mktSlotQuotation.setPodCnName(item.getPodCnName());
 				mktSlotQuotation.setPodEnName(item.getPodEnName());
+				mktSlotQuotation.setShippingCompanyId(item.getShippingCompanyId());
+				mktSlotQuotation.setShippingCompanyCname(item.getShippingCompanyCname());
+				mktSlotQuotation.setShippingCompanyEname(item.getShippingCompanyEname());
+				mktSlotQuotation.setShippingCompanyCode(item.getShippingCompanyCode());
+				mktSlotQuotation.setShippingCompanyAbbreviation(item.getShippingCompanyAbbreviation());
+				mktSlotQuotation.setActualShippingCompanyId(item.getActualShippingCompanyId());
+				mktSlotQuotation.setActualShippingCompanyCname(item.getActualShippingCompanyCname());
+				mktSlotQuotation.setActualShippingCompanyEname(item.getActualShippingCompanyEname());
+				mktSlotQuotation.setActualShippingCompanyCode(item.getActualShippingCompanyCode());
+				mktSlotQuotation.setActualShippingCompanyAbbreviation(item.getActualShippingCompanyAbbreviation());
 				mktSlotQuotationList.add(mktSlotQuotation);
 			}
 			item.setUpdateUser(AuthUtil.getUserId());

+ 140 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BookingCabinController.java

@@ -0,0 +1,140 @@
+/*
+ *      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.los.business.sea.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 lombok.AllArgsConstructor;
+import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.core.boot.ctrl.BladeController;
+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.los.business.sea.entity.Bills;
+import org.springblade.los.business.sea.service.IBillsService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * 业务-预定舱 控制器
+ *
+ * @author BladeX
+ * @since 2023-10-16
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/bookingCabin")
+@Api(value = "业务-预定舱", tags = "业务-预定舱接口")
+public class BookingCabinController extends BladeController {
+
+	private final IBillsService billsService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入bills")
+	public R<Bills> detail(Bills bills) {
+		Bills detail = billsService.detailBookingCabin(bills);
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 业务-海运进出口
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入bills")
+	public R<IPage<Bills>> list(Bills bills, Query query) {
+		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Bills::getIsDeleted, 0)
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.like(ObjectUtils.isNotNull(bills.getBillNo()), Bills::getBillNo, bills.getBillNo())
+			.like(ObjectUtils.isNotNull(bills.getBookingNo()), Bills::getBookingNo, bills.getBookingNo())
+			.and(ObjectUtils.isNotNull(bills.getCorpCnName()), i -> i.like(Bills::getCorpCnName, bills.getCorpCnName()).or()
+				.like(Bills::getCorpEnName, bills.getCorpCnName()))
+			.and(ObjectUtils.isNotNull(bills.getCarrierCnName()), i -> i.like(Bills::getCarrierCnName, bills.getCarrierCnName()).or()
+				.like(Bills::getCarrierEnName, bills.getCarrierCnName()).or().like(Bills::getCarrierArgreementNo, bills.getCarrierCnName()))
+			.and(ObjectUtils.isNotNull(bills.getPodCnName()), i -> i.like(Bills::getPodCnName, bills.getPodCnName()).or()
+				.like(Bills::getPodEnName, bills.getPodCnName()).or().like(Bills::getPodCode, bills.getPodCnName()))
+			.and(ObjectUtils.isNotNull(bills.getPolEnName()), i -> i.like(Bills::getPolCnName, bills.getPolEnName()).or()
+				.like(Bills::getPolEnName, bills.getPolEnName()).or().like(Bills::getPolCode, bills.getPolEnName()))
+			.and(ObjectUtils.isNotNull(bills.getLineCnName()), i -> i.like(Bills::getLineCnName, bills.getLineCnName()).or()
+				.like(Bills::getLineEnName, bills.getLineCnName()))
+			.apply(ObjectUtils.isNotNull(bills.getCreateDeptName()), "find_in_set('" + bills.getCreateDeptName() + "',create_dept_name)");
+		if (ObjectUtils.isNotNull(bills.getEtdList()) && !bills.getEtdList().isEmpty()) {
+			lambdaQueryWrapper.ge(Bills::getEtd, bills.getEtdList().get(0));
+			lambdaQueryWrapper.le(Bills::getEtd, bills.getEtdList().get(1));
+		}
+		if (ObjectUtils.isNotNull(bills.getEtaList()) && !bills.getEtaList().isEmpty()) {
+			lambdaQueryWrapper.ge(Bills::getEta, bills.getEtaList().get(0));
+			lambdaQueryWrapper.le(Bills::getEta, bills.getEtaList().get(1));
+		}
+		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
+			lambdaQueryWrapper.eq(Bills::getBranchId, AuthUtil.getDeptId());
+			if (!AuthUtil.getUserRole().contains("secondaryAdmin")) {
+				lambdaQueryWrapper.and(i -> i.eq(AuthUtil.getUserRole().contains("业务员"), Bills::getSrcId, AuthUtil.getUserId()).or()
+					.eq(AuthUtil.getUserRole().contains("操作员"), Bills::getOperatorId, AuthUtil.getUserId()).or()
+					.eq(AuthUtil.getUserRole().contains("客服"), Bills::getCustomerServiceId, AuthUtil.getUserId()).or()
+					.eq(Bills::getCreateUser, AuthUtil.getUserId()));
+			}
+		} else {
+			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getSrcType()), Bills::getSrcType, bills.getSrcType())
+				.and(ObjectUtils.isNotNull(bills.getSrcCnName()), i -> i.like(Bills::getSrcCnName, bills.getSrcCnName()).or()
+					.like(Bills::getSrcEnName, bills.getSrcCnName()));
+			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getBranchId()), Bills::getBranchId, bills.getBranchId());
+		}
+		lambdaQueryWrapper.and(ObjectUtils.isNotNull(bills.getBookingAgentCnName()), i -> i.like(Bills::getBookingAgentCnName, bills.getBookingAgentCnName()).or()
+				.like(Bills::getBookingAgentEnName, bills.getBookingAgentCnName()))
+			.eq(ObjectUtils.isNotNull(bills.getIssueType()), Bills::getIssueType, bills.getIssueType())
+			.eq(ObjectUtils.isNotNull(bills.getBillType()), Bills::getBillType, bills.getBillType())
+			.eq(ObjectUtils.isNotNull(bills.getBusinessType()), Bills::getBusinessType, bills.getBusinessType())
+			.eq(ObjectUtils.isNotNull(bills.getSeaType()), Bills::getSeaType, bills.getSeaType())
+			.eq(ObjectUtils.isNotNull(bills.getStatus()), Bills::getStatus, bills.getStatus());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getBillStatus()), Bills::getBillStatus, bills.getBillStatus());
+		IPage<Bills> pages = billsService.page(Condition.getPage(query), lambdaQueryWrapper);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增或修改 业务-海运进出口(全部)
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入bills")
+	@RepeatSubmit
+	public R submit(@Valid @RequestBody Bills bills) throws Exception {
+		return billsService.submitBooking(bills);
+	}
+
+	/**
+	 * 提交预定舱
+	 */
+	@PostMapping("/submitBookingCabin")
+	public R submitBookingCabin(@Valid @RequestBody Bills bills) {
+		return billsService.submitBookingCabin(bills);
+	}
+
+}
+

+ 6 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java

@@ -175,4 +175,10 @@ public interface IBillsService extends IService<Bills> {
 	R increaseReinsurancePolicyTeu(String ids, String id);
 
 	R batchCopyBills(String ids, String billType, String copyCntr, String copyFee);
+
+	Bills detailBookingCabin(Bills bills);
+
+	R submitBookingCabin(Bills bills);
+
+	R submitBooking(Bills bills)throws Exception;
 }

+ 309 - 5
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java

@@ -46,7 +46,6 @@ import org.springblade.los.basic.vessels.entity.BVessels;
 import org.springblade.los.basic.vessels.mapper.VesselsMapper;
 import org.springblade.los.billno.entity.BusinessBillNo;
 import org.springblade.los.billno.service.IBusinessBillNoService;
-import org.springblade.los.business.amends.mapper.AmendsMapper;
 import org.springblade.los.business.files.entity.FilesCenter;
 import org.springblade.los.business.files.service.IFilesCenterService;
 import org.springblade.los.business.release.entity.SeaReleaseBillItems;
@@ -802,14 +801,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			boolean statusAtd = false;
 			boolean statusAta = false;
 			if ("SE".equals(bills.getBusinessType())) {
-				if (!details.getEtd().equals(bills.getEtd())) {
+				if (ObjectUtils.isNotNull(details.getEtd()) && !details.getEtd().equals(bills.getEtd())) {
 					statusEtd = true;
 				}
 				if (ObjectUtils.isNotNull(details.getActualEtd()) && !details.getActualEtd().equals(bills.getActualEtd())) {
 					statusAtd = true;
 				}
 			} else if ("SI".equals(bills.getBusinessType())) {
-				if (!details.getEta().equals(bills.getEta())) {
+				if (ObjectUtils.isNotNull(details.getEta()) && !details.getEta().equals(bills.getEta())) {
 					statusEta = true;
 				}
 				if (ObjectUtils.isNotNull(details.getActualEta()) && !details.getActualEta().equals(bills.getActualEta())) {
@@ -3419,8 +3418,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		if (billsList.isEmpty()) {
 			throw new RuntimeException("未查到单据信息");
 		}
-		List<Long> idMList = billsList.stream().filter(e-> "MM".equals(e.getBillType())).map(Bills::getId).collect(Collectors.toList());
-		if (!idMList.isEmpty()){
+		List<Long> idMList = billsList.stream().filter(e -> "MM".equals(e.getBillType())).map(Bills::getId).collect(Collectors.toList());
+		if (!idMList.isEmpty()) {
 			List<Bills> billsHList = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
 				.eq(Bills::getTenantId, AuthUtil.getTenantId())
 				.eq(Bills::getIsDeleted, 0)
@@ -3868,6 +3867,311 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		return R.data("操作成功");
 	}
 
+	@Override
+	public Bills detailBookingCabin(Bills bills) {
+		if (bills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills detail = baseMapper.selectById(bills.getId());
+		SeaBillsDetail seaBillsDetail = seaBillsDetailService.getOne(new LambdaQueryWrapper<SeaBillsDetail>()
+			.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
+			.eq(SeaBillsDetail::getPid, detail.getId()));
+		detail.setDetail(seaBillsDetail != null ? seaBillsDetail : new SeaBillsDetail());
+		detail.setPreContainersList(preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+			.eq(PreContainers::getIsDeleted, 0)
+			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+			.eq(PreContainers::getPid, detail.getId())));
+		detail.setFilesList(filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
+			.eq(FilesCenter::getIsDeleted, 0)
+			.eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FilesCenter::getPid, detail.getId())));
+		return detail;
+	}
+
+	@Override
+	public R submitBookingCabin(Bills bills) {
+		if (bills.getId() == null) {
+			throw new SecurityException("缺少必要参数");
+		}
+		Bills detail = baseMapper.selectById(bills.getId());
+		if (detail == null) {
+			throw new SecurityException("未查到单据信息");
+		}
+		SeaBillsDetail seaBillsDetail = seaBillsDetailService.getOne(new LambdaQueryWrapper<SeaBillsDetail>()
+			.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
+			.eq(SeaBillsDetail::getPid, detail.getId()));
+		List<PreContainers> preContainers = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+			.eq(PreContainers::getIsDeleted, 0)
+			.eq(PreContainers::getPid, detail.getId()));
+		BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+			.select(BusinessType::getId)
+			.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
+			.eq(BusinessType::getIsDeleted, 0)
+			.eq(BusinessType::getStatus, 0)
+			.eq(BusinessType::getCode, "HYCK"));
+		if (businessType == null) {
+			throw new RuntimeException("未找到可用业务类型");
+		}
+		Bills copyBills = new Bills();
+		BeanUtil.copyProperties(detail, copyBills);
+		copyBills.setTemporaryId(detail.getId());
+		copyBills.setId(null);
+		BusinessBillNo businessBillNo = new BusinessBillNo();
+		businessBillNo.setBusinessTypeId(businessType.getId());
+		businessBillNo.setCode("HYCK-PH");
+		businessBillNo.setBranchId(detail.getBranchId());
+		R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+		if (!clientBillNo.isSuccess()) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			throw new RuntimeException("生成订单编号失败");
+		}
+		copyBills.setBillNo((String) clientBillNo.getData());
+		copyBills.setOperatorId(AuthUtil.getUserId());
+		copyBills.setOperatorName(AuthUtil.getUserName());
+		copyBills.setBillNo("");
+		copyBills.setMblno("");
+		copyBills.setHblno("");
+		copyBills.setRefno("");
+		copyBills.setBookingNo("");
+		copyBills.setMasterBillNo(null);
+		copyBills.setMasterId(null);
+		copyBills.setStatus(0);
+		copyBills.setBillStatus(0);
+		copyBills.setBillingStatus(0);
+		copyBills.setSplitOrderSum(0);
+		copyBills.setTeuTotal(0);
+		copyBills.setWhetherSail(null);
+		copyBills.setLogisticsStatus(null);
+		copyBills.setWhetherReachHarbor(null);
+		copyBills.setWhetherCancel(null);
+		copyBills.setTransferOrderStatus(null);
+		copyBills.setChangeOrderDate(null);
+		copyBills.setReturnDate(null);
+		copyBills.setReturnEmptyDate(null);
+		copyBills.setClearanceDate(null);
+		copyBills.setReceiveStatus(null);
+		copyBills.setChangeOrdersStatus(null);
+		copyBills.setReturningSecurityMoneyStatus(null);
+		copyBills.setAmountDr(new BigDecimal("0.00"));
+		copyBills.setAmountCr(new BigDecimal("0.00"));
+		copyBills.setAmountProfit(new BigDecimal("0.00"));
+		copyBills.setAmountDrUsd(new BigDecimal("0.00"));
+		copyBills.setAmountCrUsd(new BigDecimal("0.00"));
+		copyBills.setAmountProfitUsd(new BigDecimal("0.00"));
+		copyBills.setAmountDrLoc(new BigDecimal("0.00"));
+		copyBills.setAmountCrLoc(new BigDecimal("0.00"));
+		copyBills.setAmountProfitLoc(new BigDecimal("0.00"));
+		copyBills.setCheckDrStatus(0);
+		copyBills.setCheckDrStatusDescr("未对账");
+		copyBills.setCheckCrStatus(0);
+		copyBills.setCheckCrStatusDescr("未申请");
+		copyBills.setStlDrStatus(0);
+		copyBills.setStlDrStatusDescr("未结");
+		copyBills.setStlCrStatus(0);
+		copyBills.setStlCrStatusDescr("未结");
+		copyBills.setInvoiceDrStatus(0);
+		copyBills.setInvoiceDrStatusDescr("未开");
+		copyBills.setInvoiceCrStatus(0);
+		copyBills.setInvoiceCrStatusDescr("未开");
+		copyBills.setBillStatus(0);
+		copyBills.setAccountStatus(0);
+		copyBills.setSplitOrderSum(0);
+		copyBills.setCfsQuantity(new BigDecimal("0.00"));
+		copyBills.setCfsGrossWeight(new BigDecimal("0.00"));
+		copyBills.setCfsMeasurement(new BigDecimal("0.00"));
+		this.save(copyBills);
+		if (seaBillsDetail != null) {
+			seaBillsDetail.setId(null);
+			seaBillsDetail.setPid(copyBills.getId());
+			seaBillsDetail.setCreateUser(AuthUtil.getUserId());
+			seaBillsDetail.setCreateUserName(AuthUtil.getUserName());
+			seaBillsDetail.setCreateDept(copyBills.getCreateDept());
+			seaBillsDetail.setCreateDeptName(copyBills.getCreateDeptName());
+			seaBillsDetail.setCreateTime(new Date());
+			seaBillsDetailService.save(seaBillsDetail);
+		}
+		if (!preContainers.isEmpty()) {
+			for (PreContainers containers : preContainers) {
+				containers.setId(null);
+				containers.setPid(copyBills.getId());
+				containers.setCreateUser(AuthUtil.getUserId());
+				containers.setCreateUserName(AuthUtil.getUserName());
+				containers.setCreateDept(copyBills.getCreateDept());
+				containers.setCreateDeptName(copyBills.getCreateDeptName());
+				containers.setCreateTime(new Date());
+				containers.setContainerNumberStatus("录入");
+			}
+			preContainersService.saveBatch(preContainers);
+		}
+		return R.data(copyBills);
+	}
+
+	@Override
+	public R submitBooking(Bills billss) throws Exception {
+		Object object = StringTools.handle(billss, "Bills");
+		Bills bills = JSONObject.parseObject(JSONObject.toJSONString(object), Bills.class);
+		String deptId;
+		String branchId;
+		String deptName = "";
+		if (ObjectUtils.isNull(bills.getBranchId())) {
+			deptId = AuthUtil.getDeptId();
+			branchId = AuthUtil.getDeptId();
+		} else {
+			deptId = bills.getBranchId();
+			branchId = bills.getBranchId();
+		}
+		//获取部门ids对应中文名
+		R<String> res = sysClient.getDeptName(Long.parseLong(branchId));
+		if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+			deptName = res.getData();
+		}
+		if (bills.getId() == null) {
+			BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
+				.select(BusinessType::getId)
+				.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
+				.eq(BusinessType::getIsDeleted, 0)
+				.eq(BusinessType::getStatus, 0)
+				.eq(BusinessType::getCode, bills.getBusinessTypeCode()));
+			if (businessType == null) {
+				throw new RuntimeException("未找到可用业务类型");
+			}
+			BusinessBillNo businessBillNo = new BusinessBillNo();
+			businessBillNo.setBusinessTypeId(businessType.getId());
+			businessBillNo.setCode(bills.getBillNoFormat());
+			businessBillNo.setBranchId(bills.getBranchId());
+			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+			if (!clientBillNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				return R.fail(500, "生成订单编号失败");
+			}
+			bills.setBillNo((String) clientBillNo.getData());
+			bills.setCreateTime(new Date());
+			bills.setCreateUser(AuthUtil.getUserId());
+			bills.setCreateUserName(AuthUtil.getUserName());
+			bills.setTenantId(AuthUtil.getTenantId());
+			if (ObjectUtils.isNotNull(branchId)) {
+				bills.setBranchId(branchId);
+				bills.setBranchName(deptName);
+				bills.setCreateDept(deptId);
+				bills.setCreateDeptName(deptName);
+			}
+			// 初始创建为1
+			bills.setVersion("1");
+			this.save(bills);
+		} else {
+			bills.setUpdateUser(AuthUtil.getUserId());
+			bills.setUpdateTime(new Date());
+			bills.setUpdateUserName(AuthUtil.getUserName());
+		}
+		Integer V20 = 0;
+		Integer V40 = 0;
+		Integer V40HC = 0;
+		Integer V45 = 0;
+		Integer V48 = 0;
+		Integer other = 0;
+		BigDecimal teu = new BigDecimal("0.00");
+		StringBuilder boxTypeSum = new StringBuilder();
+		if (ObjectUtils.isNotNull(bills.getPreContainersList())) {
+			for (PreContainers item : bills.getPreContainersList()) {
+				if (ObjectUtils.isNull(item.getCntrTypeCode())) {
+					throw new RuntimeException("箱型不能为空");
+				}
+				if (item.getId() == null) {
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+					item.setCreateUserName(AuthUtil.getUserName());
+					if (ObjectUtils.isNotNull(branchId)) {
+						item.setBranchId(branchId);
+						item.setCreateDept(deptId);
+						item.setCreateDeptName(deptName);
+					}
+				} else {
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+				}
+				item.setPid(bills.getId());
+				if (item.getCntrTypeCode().contains("20")) {
+					V20 += item.getQuantity();
+				} else if (item.getCntrTypeCode().contains("45")) {
+					V45 += item.getQuantity();
+				} else if (item.getCntrTypeCode().contains("48")) {
+					V48 += item.getQuantity();
+				} else if (item.getCntrTypeCode().contains("40")) {
+					V40 += item.getQuantity();
+				} else if (item.getCntrTypeCode().contains("40") && item.getCntrTypeCode().contains("HC")) {
+					V40HC += item.getQuantity();
+				} else {
+					other += item.getQuantity();
+				}
+				boxTypeSum.append(item.getCntrTypeCode()).append("*").append(item.getQuantity()).append(",");
+				if (ObjectUtils.isNotNull(item.getQuantity()) && ObjectUtils.isNotNull(item.getTeu())) {
+					teu = teu.add(new BigDecimal(item.getQuantity()).multiply(item.getTeu()));
+				}
+			}
+			preContainersService.saveOrUpdateBatch(bills.getPreContainersList());
+			if (boxTypeSum.length() > 0) {
+				boxTypeSum = new StringBuilder(boxTypeSum.substring(0, boxTypeSum.length() - 1));
+				bills.setQuantityCntrDescr(boxTypeSum.toString());
+			}
+		}
+		bills.setQuantityV20(V20);
+		bills.setQuantityV40(V40);
+		bills.setQuantityV40hc(V40HC);
+		bills.setQuantityV45(V45);
+		bills.setQuantityV48(V48);
+		bills.setQuantityOther(other);
+		bills.setTeu(teu.intValue());
+
+		if (ObjectUtils.isNotNull(bills.getDetail())) {
+			Object seaBillsDetailObject = StringTools.handle(bills.getDetail(), "SeaBillsDetail");
+			SeaBillsDetail seaBillsDetail = JSONObject.parseObject(JSONObject.toJSONString(seaBillsDetailObject), SeaBillsDetail.class);
+			if (ObjectUtils.isNotNull(seaBillsDetail.getId())) {
+				seaBillsDetail.setUpdateUser(AuthUtil.getUserId());
+				seaBillsDetail.setUpdateUserName(AuthUtil.getUserName());
+				seaBillsDetail.setUpdateTime(new Date());
+			} else {
+				seaBillsDetail.setPid(bills.getId());
+				seaBillsDetail.setBranchId(bills.getBranchId());
+				seaBillsDetail.setCreateUser(AuthUtil.getUserId());
+				seaBillsDetail.setCreateUserName(AuthUtil.getUserName());
+				seaBillsDetail.setCreateDept(bills.getCreateDept());
+				seaBillsDetail.setCreateDeptName(bills.getCreateDeptName());
+				seaBillsDetail.setCreateTime(new Date());
+			}
+			seaBillsDetailService.saveOrUpdate(seaBillsDetail);
+			String text = "";
+			if (ObjectUtils.isNotNull(seaBillsDetail.getHconsigneeDetails())) {
+				text = text + seaBillsDetail.getHconsigneeDetails() + ";";
+			}
+			if (ObjectUtils.isNotNull(seaBillsDetail.getHshipperDetails())) {
+				text = text + seaBillsDetail.getHshipperDetails() + ";";
+			}
+			bills.setReceivingAndShipping(text);
+		}
+		if (ObjectUtils.isNotNull(bills.getFilesList())) {
+			for (FilesCenter item : bills.getFilesList()) {
+				item.setPid(bills.getId());
+				if (item.getId() == null) {
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+					item.setCreateUserName(AuthUtil.getUserName());
+					if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
+						item.setCreateDeptName(deptName);
+					}
+				} else {
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+				}
+			}
+			filesCenterService.saveOrUpdateBatch(bills.getFilesList());
+		}
+		this.updateById(bills);
+		return R.data(bills);
+	}
+
 	/**
 	 * 删除海运进出口明细表
 	 *

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java

@@ -95,8 +95,8 @@ public class AuditProecessController extends BladeController {
 			lambdaQueryWrapper.lt(LosAuditProecess::getEtd, auditProecess.getEtdList().get(1));
 		}
 		lambdaQueryWrapper.ne(StringUtils.isBlank(auditProecess.getAuditStatus()), LosAuditProecess::getAuditStatus, "N");
+		lambdaQueryWrapper.like(LosAuditProecess::getAuditUserId, String.valueOf(AuthUtil.getUserId()));//审核人id
 		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
-			lambdaQueryWrapper.like(LosAuditProecess::getAuditUserId, String.valueOf(AuthUtil.getUserId()));//审核人id
 			lambdaQueryWrapper.eq(LosAuditProecess::getSalesCompanyId, AuthUtil.getDeptId());
 		} else {
 			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(auditProecess.getSalesCompanyId()), LosAuditProecess::getSalesCompanyId, auditProecess.getSalesCompanyId());

+ 10 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FeeCenterController.java

@@ -33,6 +33,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.fees.entity.LosBFeesTemplate;
+import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.service.IFeeCenterService;
@@ -255,6 +256,15 @@ public class FeeCenterController extends BladeController {
 	}
 
 	/**
+	 * 海运费报价导入
+	 */
+	@GetMapping("/quotationImportBatch")
+	@RepeatSubmit
+	public R quotationImportBatch(@RequestParam("billsIds") String billsIds,@RequestParam("quotationId") String quotationId) {
+		return feeCenterService.quotationImportBatch(billsIds,quotationId);
+	}
+
+	/**
 	 * 物流-费用中心
 	 */
 	@GetMapping("/selectByAccNoList")

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/IFeeCenterService.java

@@ -88,4 +88,6 @@ public interface IFeeCenterService extends IService<FeeCenter> {
 	R templateImportBatch(String billsIds, String templateId, String dc);
 
 	R costImportBatch(String billsIds, String costId);
+
+	R quotationImportBatch(String billsIds, String quotationId);
 }

+ 265 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.basic.corps.entity.BCorps;
@@ -42,6 +43,8 @@ import org.springblade.los.box.mapper.TradingBoxMapper;
 import org.springblade.los.box.service.IRouteCostItemService;
 import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.amends.mapper.AmendsMapper;
+import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
+import org.springblade.los.business.mktSlot.service.IMktSlotQuotationService;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.entity.PreContainers;
 import org.springblade.los.business.sea.mapper.BillsMapper;
@@ -95,6 +98,8 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 
 	private final CurrencyUtils currencyUtils;
 
+	private final IMktSlotQuotationService mktSlotQuotationService;
+
 	@Override
 	public IPage<FeeCenterVO> selectFeeCenterPage(IPage<FeeCenterVO> page, FeeCenterVO feeCenter) {
 		return page.setRecords(baseMapper.selectFeeCenterPage(page, feeCenter));
@@ -1283,7 +1288,6 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 				feeCenter.setFeeCode(items.getFeeCode());
 				feeCenter.setFeeCnName(items.getFeeCnName());
 				feeCenter.setFeeEnName(items.getFeeEnName());
-				feeCenter.setUnitNo(items.getUnitNo());
 				feeCenter.setPrice(items.getSalesPrice());
 				feeCenter.setCurCode(items.getCurCode());
 				if (exrateType.equals(items.getCurCode())) {
@@ -1292,6 +1296,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					feeCenter.setExrate(currencyUtils.obtainExrate(feeCenter.getDc(), curExrateList, feeCenter.getCurCode(), "1"));
 				}
 				if ("按箱型".equals(items.getQuantityRule())) {
+					feeCenter.setUnitNo(items.getUnitNo());
 					if (preContainers.isEmpty()) {
 						text.append("费用:").append(items.getFeeCnName()).append("未找到集装箱信息!");
 						continue;
@@ -1307,12 +1312,15 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					feeCenter.setQuantity(new BigDecimal(quantity + ""));
 					feeCenter.setAmount(feeCenter.getPrice().multiply(feeCenter.getQuantity()));
 				} else if ("按票".equals(items.getQuantityRule())) {
+					feeCenter.setUnitNo(templateItems.getUnitNo());
 					feeCenter.setQuantity(new BigDecimal("1"));
 					feeCenter.setAmount(feeCenter.getPrice().multiply(new BigDecimal("1")));
 				} else if ("按重量".equals(items.getQuantityRule())) {
+					feeCenter.setUnitNo(templateItems.getUnitNo());
 					feeCenter.setQuantity(bills.getGrossWeight());
 					feeCenter.setAmount(feeCenter.getPrice().multiply(feeCenter.getQuantity()));
 				} else if ("按TEU".equals(items.getQuantityRule())) {
+					feeCenter.setUnitNo(items.getUnitNo());
 					if (preContainers.isEmpty()) {
 						text.append("费用:").append(items.getFeeCnName()).append("未找到集装箱信息!");
 						continue;
@@ -1330,6 +1338,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					feeCenter.setQuantity(new BigDecimal(quantity + ""));
 					feeCenter.setAmount(feeCenter.getPrice().multiply(feeCenter.getQuantity()));
 				} else if ("按箱量".equals(items.getQuantityRule())) {
+					feeCenter.setUnitNo(templateItems.getUnitNo());
 					if (preContainers.isEmpty()) {
 						text.append("费用:").append(items.getFeeCnName()).append("未找到集装箱信息!");
 						continue;
@@ -1343,9 +1352,11 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 					feeCenter.setQuantity(new BigDecimal(quantity + ""));
 					feeCenter.setAmount(feeCenter.getPrice().multiply(feeCenter.getQuantity()));
 				} else if ("按尺码".equals(items.getQuantityRule())) {
+					feeCenter.setUnitNo(templateItems.getUnitNo());
 					feeCenter.setQuantity(bills.getMeasurement());
 					feeCenter.setAmount(feeCenter.getPrice().multiply(feeCenter.getQuantity()));
 				} else {
+					feeCenter.setUnitNo(templateItems.getUnitNo());
 					feeCenter.setQuantity(new BigDecimal("1"));
 					feeCenter.setAmount(feeCenter.getPrice().multiply(feeCenter.getQuantity()));
 				}
@@ -1527,6 +1538,259 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		}
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R quotationImportBatch(String billsIds, String quotationId) {
+		List<MktSlotQuotation> mktSlotQuotationList = mktSlotQuotationService.list(new LambdaQueryWrapper<MktSlotQuotation>()
+			.eq(MktSlotQuotation::getTenantId, AuthUtil.getTenantId())
+			.eq(MktSlotQuotation::getIsDeleted, 0)
+			.eq(MktSlotQuotation::getPid, Func.toLongList(quotationId)));
+		if (mktSlotQuotationList.isEmpty()) {
+			throw new RuntimeException("未查到成本明细");
+		}
+		List<Bills> billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.apply("find_in_set(id,'" + billsIds + "')"));
+		if (billsList.isEmpty()) {
+			throw new RuntimeException("未查到单据信息");
+		}
+		List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+			.eq(PreContainers::getIsDeleted, 0)
+			.apply("find_in_set(pid,'" + billsIds + "')"));
+		BFees fees = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
+			.eq(BFees::getTenantId, AuthUtil.getTenantId())
+			.eq(BFees::getIsDeleted, 0)
+			.eq(BFees::getCode, "HYF"));
+		if (fees == null) {
+			throw new RuntimeException("未查到海运费信息,请先维护基础资料");
+		}
+		BFees feesD = bFeesService.getOne(new LambdaQueryWrapper<BFees>()
+			.eq(BFees::getTenantId, AuthUtil.getTenantId())
+			.eq(BFees::getIsDeleted, 0)
+			.eq(BFees::getCode, "XSJ"));
+		if (feesD == null) {
+			throw new RuntimeException("未查到销售价信息,请先维护基础资料");
+		}
+		String deptName = "";
+		String branchId = AuthUtil.getDeptId();
+		if (ObjectUtils.isNotNull(branchId)) {
+			R<String> res = sysClient.getDeptName(Long.parseLong(branchId));
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				deptName = res.getData();
+			}
+		}
+		List<FeeCenter> list = new ArrayList<>();
+		StringBuilder text = new StringBuilder();
+		for (Bills bills : billsList) {
+			if (0 != bills.getStatus()) {
+				throw new RuntimeException("单号:" + bills.getBillNo() + ",已提交审核或审核通过,导入失败");
+			}
+			String texts = "";
+			if (ObjectUtils.isNull(bills.getMblno())) {
+				texts = texts + "提单号、";
+			}
+			if (ObjectUtils.isNull(bills.getVesselId())) {
+				texts = texts + "船名、";
+			}
+			if (ObjectUtils.isNull(bills.getVoyageNo())) {
+				texts = texts + "航次、";
+			}
+			if (ObjectUtils.isNull(bills.getPodId())) {
+				texts = texts + "卸货港、";
+			}
+			if (ObjectUtils.isNull(bills.getCarrierId())) {
+				texts = texts + "船公司、";
+			}
+			if (ObjectUtils.isNull(bills.getBoxBelongsTo())) {
+				texts = texts + "箱属、";
+			}
+			if (ObjectUtils.isNotNull(texts)) {
+				throw new RuntimeException("单号:" + bills.getBillNo() + "," + texts + "不能为空");
+			}
+			List<PreContainers> preContainers = new ArrayList<>();
+			if (!preContainersList.isEmpty()) {
+				preContainers = preContainersList.stream().filter(e -> e.getPid().equals(bills.getId())).collect(Collectors.toList());
+			}
+			if (preContainers.isEmpty()) {
+				continue;
+			}
+			Date date;
+			if ("SE".equals(bills.getBusinessType())) {
+				if (ObjectUtils.isNotNull(bills.getActualEtd())) {
+					date = bills.getActualEtd();
+				} else {
+					date = bills.getEtd();
+				}
+			} else {
+				if (ObjectUtils.isNotNull(bills.getActualEta())) {
+					date = bills.getActualEta();
+				} else {
+					date = bills.getEta();
+				}
+			}
+			List<MktSlotQuotation> mktSlotQuotations = mktSlotQuotationList.stream().filter(e -> e.getEtd().equals(date)
+				&& e.getBoxBelongsTo().equals(bills.getBoxBelongsTo())).collect(Collectors.toList());
+			String exrateType = currencyUtils.standardCurrency(branchId);
+			List<BCurExrate> curExrateList = currencyUtils.obtainRate(date, "1", branchId);
+			int count = 1;
+			for (PreContainers item : preContainers) {
+				FeeCenter feeCenter = this.addFeeCenterQuotation(bills, "D", count, fees, "国内直接客户", item,
+					curExrateList, mktSlotQuotations, exrateType, "1");
+				if (feeCenter != null) {
+					feeCenter.setBranchId(branchId);
+					feeCenter.setBranchName(deptName);
+					list.add(feeCenter);
+					count++;
+				}
+				if ("SOC".equals(bills.getBoxBelongsTo())) {
+					FeeCenter feeCenterD = this.addFeeCenterQuotation(bills, "D", count, feesD, "国内直接客户", item,
+						curExrateList, mktSlotQuotations, exrateType, "2");
+					if (feeCenterD != null) {
+						feeCenterD.setBranchId(branchId);
+						feeCenterD.setBranchName(deptName);
+						list.add(feeCenterD);
+						count++;
+					}
+				} else if ("COC".equals(bills.getBoxBelongsTo())) {
+					FeeCenter feeCenterD = this.addFeeCenterQuotation(bills, "D", count, feesD, "国内直接客户", item,
+						curExrateList, mktSlotQuotations, exrateType, "2");
+					if (feeCenterD != null) {
+						feeCenterD.setBranchId(branchId);
+						feeCenterD.setBranchName(deptName);
+						list.add(feeCenterD);
+						count++;
+					}
+				} else {
+					throw new RuntimeException("单号:" + bills.getBillNo() + "单据类型非分单,请选择分单数据");
+				}
+
+			}
+		}
+		if (!list.isEmpty()) {
+			this.saveOrUpdateBatch(list);
+		}
+		if (ObjectUtils.isNotNull(text.toString())) {
+			return R.data(list, text + "未导入!!!");
+		} else {
+			return R.data(list);
+		}
+	}
+
+	private FeeCenter addFeeCenterQuotation(Bills bills, String dc, int count, BFees fees, String corpType,
+											PreContainers items, List<BCurExrate> curExrateList,
+											List<MktSlotQuotation> mktSlotQuotations, String exrateType, String type) {
+		FeeCenter feeCenter = new FeeCenter();
+		feeCenter.setBranchId(bills.getBranchId());
+		feeCenter.setBranchName(bills.getBranchName());
+		feeCenter.setPid(bills.getId());
+		feeCenter.setCntrNo(bills.getQuantityCntrTypesDescr());
+		feeCenter.setBillNo(bills.getBillNo());
+		feeCenter.setBusinessType(bills.getBusinessType());
+		feeCenter.setBillType(bills.getBillType());
+		feeCenter.setBillDate(bills.getBillDate());
+		feeCenter.setBillCorpId(bills.getCorpId());
+		feeCenter.setBillCorpCnName(bills.getCorpCnName());
+		feeCenter.setBillCorpEnName(bills.getCorpEnName());
+		feeCenter.setBillShortName(bills.getCorpCnName());
+		feeCenter.setLineId(bills.getLineId());
+		feeCenter.setLineCnName(bills.getLineCnName());
+		feeCenter.setLineEnName(bills.getLineEnName());
+		feeCenter.setVesselId(bills.getVesselId());
+		feeCenter.setVesselCnName(bills.getVesselCnName());
+		feeCenter.setVesselEnName(bills.getVesselEnName());
+		feeCenter.setVoyageNo(bills.getVoyageNo());
+		feeCenter.setMblno(bills.getMblno());
+		feeCenter.setHblno(bills.getHblno());
+		feeCenter.setEtd(bills.getEtd());
+		feeCenter.setEta(bills.getEta());
+		feeCenter.setPolId(bills.getPolId());
+		feeCenter.setPolCode(bills.getPolCode());
+		feeCenter.setPolCnName(bills.getPolCnName());
+		feeCenter.setPolEnName(bills.getPolEnName());
+		feeCenter.setPodId(bills.getPodId());
+		feeCenter.setPodCode(bills.getPodCode());
+		feeCenter.setPodCnName(bills.getPodCnName());
+		feeCenter.setPodEnName(bills.getPodEnName());
+		feeCenter.setDc(dc);
+		feeCenter.setPaymode(bills.getMpaymode());
+		feeCenter.setSort(count);
+		feeCenter.setFeeId(fees.getId());
+		feeCenter.setCorpType(corpType);
+		feeCenter.setFeeCode(fees.getCode());
+		feeCenter.setFeeCnName(fees.getCnName());
+		feeCenter.setFeeEnName(fees.getEnName());
+		feeCenter.setUnitNo(fees.getUnitNo());
+		feeCenter.setCurCode(fees.getCurNo());
+		feeCenter.setExrate(currencyUtils.obtainExrate(feeCenter.getDc(), curExrateList, feeCenter.getCurCode(), "1"));
+		feeCenter.setQuantity(new BigDecimal(items.getQuantity() + ""));
+		if ("1".equals(type)) {
+			feeCenter.setCorpId(bills.getCorpId());
+			feeCenter.setCorpCnName(bills.getCorpCnName());
+			feeCenter.setCorpEnName(bills.getCorpEnName());
+			feeCenter.setShortName(bills.getShortName());
+			if ("20GP".equals(items.getCntrTypeCode())) {
+				feeCenter.setPrice(mktSlotQuotations.stream().map(MktSlotQuotation::getGp20).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			} else if ("40GP".equals(items.getCntrTypeCode())) {
+				feeCenter.setPrice(mktSlotQuotations.stream().map(MktSlotQuotation::getGp40).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			} else if ("40HC".equals(items.getCntrTypeCode())) {
+				feeCenter.setPrice(mktSlotQuotations.stream().map(MktSlotQuotation::getHc40).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			} else {
+				return null;
+			}
+		} else if ("2".equals(type)) {
+			BCorps bCorps = bCorpsService.getOne(new LambdaQueryWrapper<BCorps>()
+				.eq(BCorps::getTenantId, AuthUtil.getTenantId())
+				.eq(BCorps::getIsDeleted, 0)
+				.eq(BCorps::getCode, "ZBYF"));
+			if (bCorps == null) {
+				throw new RuntimeException("基础资料未查到编码为‘ZBYF’往来单位");
+			}
+			feeCenter.setCorpId(bCorps.getId());
+			feeCenter.setCorpCnName(bCorps.getCnName());
+			feeCenter.setCorpEnName(bCorps.getEnName());
+			feeCenter.setShortName(bCorps.getShortName());
+			if ("20GP".equals(items.getCntrTypeCode())) {
+				feeCenter.setPrice(mktSlotQuotations.stream().map(MktSlotQuotation::getGp20Cost).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			} else if ("40GP".equals(items.getCntrTypeCode())) {
+				feeCenter.setPrice(mktSlotQuotations.stream().map(MktSlotQuotation::getGp40Cost).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			} else if ("40HC".equals(items.getCntrTypeCode())) {
+				feeCenter.setPrice(mktSlotQuotations.stream().map(MktSlotQuotation::getHc40Cost).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			} else {
+				return null;
+			}
+		} else if ("3".equals(type)) {
+			feeCenter.setCorpId(bills.getCarrierId());
+			feeCenter.setCorpCnName(bills.getCarrierCnName());
+			feeCenter.setCorpEnName(bills.getCarrierEnName());
+			feeCenter.setShortName(bills.getCarrierShortName());
+			if ("20GP".equals(items.getCntrTypeCode())) {
+				feeCenter.setPrice(mktSlotQuotations.stream().map(MktSlotQuotation::getGp20Cost).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			} else if ("40GP".equals(items.getCntrTypeCode())) {
+				feeCenter.setPrice(mktSlotQuotations.stream().map(MktSlotQuotation::getGp40Cost).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			} else if ("40HC".equals(items.getCntrTypeCode())) {
+				feeCenter.setPrice(mktSlotQuotations.stream().map(MktSlotQuotation::getHc40Cost).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			} else {
+				return null;
+			}
+		}
+		feeCenter.setAmount(feeCenter.getPrice().multiply(feeCenter.getQuantity()));
+		if (ObjectUtils.isNull(feeCenter.getAmount())) {
+			feeCenter.setAmount(new BigDecimal("0"));
+		}
+		if (exrateType.equals(feeCenter.getCurCode())) {
+			feeCenter.setAmountLoc(feeCenter.getAmount());
+		} else {
+			if (new BigDecimal("0").compareTo(feeCenter.getAmount()) != 0) {
+				feeCenter.setAmountLoc(feeCenter.getAmount().multiply(feeCenter.getExrate()));
+			} else {
+				feeCenter.setAmountLoc(new BigDecimal("0"));
+			}
+		}
+		return feeCenter;
+	}
+
 	private FeeCenter addFeeCenter(Bills bills, String dc, int count, BFees fees, String corpType, RouteCostItem items,
 								   List<BCurExrate> curExrateList, List<PreContainers> preContainers,
 								   String exrateType, String type) {

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/view/mapper/FinanceProfitMapper.xml

@@ -90,6 +90,7 @@
         </if>
         <if test="data.billType != null and data.billType != ''">
             and find_in_set(seb.business_type,#{data.billType})
+            and (IF(find_in_set( seb.business_type, 'SEA,SIA,AEA,AIA' ) ,seb.STATUS = 3,1=1))
         </if>
         <if test="data.billNo != null and data.billNo != ''">
             and seb.bill_no like concat('%', #{data.billNo}, '%')
@@ -199,6 +200,7 @@
         </if>
         <if test="data.billType != null and data.billType != ''">
             and find_in_set(seb.business_type,#{data.billType})
+            and (IF(find_in_set( seb.business_type, 'SEA,SIA,AEA,AIA' ) ,seb.STATUS = 3,1=1))
         </if>
         <if test="data.billNo != null and data.billNo != ''">
             and seb.bill_no like concat('%', #{data.billNo}, '%')