فهرست منبع

1.决策分析,amend审核通过再统计
2.海运进出口收发货人检索条件不包括通知人
3.提单样本导入增加备注导入
4.箱管费用-导入明细增加场站
5.提取成本列表增加所属公司
6.默认箱东改为参数动态控制
7.箱型统计-40HG改为40HC
8.增加商务中心-报价模块表以及基础接口修改
9.增加报价模块-提交,撤销接口
10.增加报价模块-生成报价,撤销报价接口
11.增加报价模块-提取运价接口

纪新园 9 ماه پیش
والد
کامیت
a9a0399e35
35فایلهای تغییر یافته به همراه2322 افزوده شده و 41 حذف شده
  1. 2 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dto/BoxPoolContainerNumberDTO.java
  2. 2 2
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dto/BoxPoolPortDTO.java
  3. 5 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/BoxFeeItemExcel.java
  4. 34 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/dto/MktSlotDTO.java
  5. 34 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/dto/MktSlotItemDTO.java
  6. 34 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/dto/MktSlotQuotationDTO.java
  7. 199 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/entity/MktSlot.java
  8. 324 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/entity/MktSlotItem.java
  9. 185 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/entity/MktSlotQuotation.java
  10. 36 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/vo/MktSlotItemVO.java
  11. 36 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/vo/MktSlotQuotationVO.java
  12. 36 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/vo/MktSlotVO.java
  13. 79 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/RouteCostController.java
  14. 4 4
      blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/PutBoxMapper.xml
  15. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java
  16. 48 21
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxItemServiceImpl.java
  17. 182 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/controller/MktSlotController.java
  18. 126 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/controller/MktSlotItemController.java
  19. 126 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/controller/MktSlotQuotationController.java
  20. 42 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotItemMapper.java
  21. 69 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotItemMapper.xml
  22. 42 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotMapper.java
  23. 44 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotMapper.xml
  24. 42 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotQuotationMapper.java
  25. 42 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotQuotationMapper.xml
  26. 41 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/IMktSlotItemService.java
  27. 41 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/IMktSlotQuotationService.java
  28. 53 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/IMktSlotService.java
  29. 41 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/impl/MktSlotItemServiceImpl.java
  30. 41 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/impl/MktSlotQuotationServiceImpl.java
  31. 320 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/impl/MktSlotServiceImpl.java
  32. 0 5
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  33. 5 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/TemplateImportServiceImpl.java
  34. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  35. 4 4
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

+ 2 - 2
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dto/BoxPoolContainerNumberDTO.java

@@ -90,7 +90,7 @@ public class BoxPoolContainerNumberDTO {
 	private Long gP40Good;
 
 	/**
-	 * 40HG-好
+	 * 40HC-好
 	 */
 	private Long hG40Good;
 
@@ -110,7 +110,7 @@ public class BoxPoolContainerNumberDTO {
 	private Long gP40Bad;
 
 	/**
-	 * 40HG-坏
+	 * 40HC-坏
 	 */
 	private Long hG40Bad;
 

+ 2 - 2
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dto/BoxPoolPortDTO.java

@@ -58,7 +58,7 @@ public class BoxPoolPortDTO {
 	private Long gP40Good;
 
 	/**
-	 * 40HG-好
+	 * 40HC-好
 	 */
 	private Long hG40Good;
 
@@ -78,7 +78,7 @@ public class BoxPoolPortDTO {
 	private Long gP40Bad;
 
 	/**
-	 * 40HG-坏
+	 * 40HC-坏
 	 */
 	private Long hG40Bad;
 

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

@@ -71,6 +71,11 @@ public class BoxFeeItemExcel implements Serializable {
 	 */
 	@ExcelProperty(value = "维修部位")
 	private String repairLocation;
+	/**
+	 * 场站
+	 */
+	@ExcelProperty(value = "场站*")
+	private String stationCname;
 
 	/**
 	 * 限制港口

+ 34 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/dto/MktSlotDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      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.mktSlot.dto;
+
+import org.springblade.los.business.mktSlot.entity.MktSlot;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * mkt&slot表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MktSlotDTO extends MktSlot {
+	private static final long serialVersionUID = 1L;
+
+}

+ 34 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/dto/MktSlotItemDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      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.mktSlot.dto;
+
+import org.springblade.los.business.mktSlot.entity.MktSlotItem;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * mkt&slot明细表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MktSlotItemDTO extends MktSlotItem {
+	private static final long serialVersionUID = 1L;
+
+}

+ 34 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/dto/MktSlotQuotationDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      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.mktSlot.dto;
+
+import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * mkt&slot报价明细表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MktSlotQuotationDTO extends MktSlotQuotation {
+	private static final long serialVersionUID = 1L;
+
+}

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

@@ -0,0 +1,199 @@
+/*
+ *      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.mktSlot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * mkt&slot表实体类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Data
+@TableName("los_mkt_slot")
+@ApiModel(value = "MktSlot对象", description = "mkt&slot表")
+public class MktSlot implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 创建人 Id
+	 */
+	@ApiModelProperty(value = "创建人 Id")
+	private Long createUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private String createUserName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人 Id
+	 */
+	@ApiModelProperty(value = "修改人 Id")
+	private Long updateUser;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 审核状态
+	 */
+	@ApiModelProperty(value = "审核状态")
+	private String status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 分公司
+	 */
+	@ApiModelProperty(value = "分公司")
+	private String branchName;
+	/**
+	 * 分公司 Id
+	 */
+	@ApiModelProperty(value = "分公司 Id")
+	private String branchId;
+	/**
+	 * 系统号
+	 */
+	@ApiModelProperty(value = "系统号")
+	private String sysNo;
+	/**
+	 * 起运港 id
+	 */
+	@ApiModelProperty(value = "起运港 id")
+	private Long polId;
+	/**
+	 * 起运港代码
+	 */
+	@ApiModelProperty(value = "起运港代码")
+	private String polCode;
+	/**
+	 * 起运港英文名称
+	 */
+	@ApiModelProperty(value = "起运港英文名称")
+	private String polCnName;
+	/**
+	 * 起运港英文名称
+	 */
+	@ApiModelProperty(value = "起运港英文名称")
+	private String polEnName;
+	/**
+	 * 目的港 id
+	 */
+	@ApiModelProperty(value = "目的港 id")
+	private Long podId;
+	/**
+	 * 目的港代码
+	 */
+	@ApiModelProperty(value = "目的港代码")
+	private String podCode;
+	/**
+	 * 目的港中文名称
+	 */
+	@ApiModelProperty(value = "目的港中文名称")
+	private String podCnName;
+	/**
+	 * 目的港英文名称
+	 */
+	@ApiModelProperty(value = "目的港英文名称")
+	private String podEnName;
+	/**
+	 * 航线 id
+	 */
+	@ApiModelProperty(value = "航线 id")
+	private Long lineId;
+	/**
+	 * 航线中文名称
+	 */
+	@ApiModelProperty(value = "航线中文名称")
+	private String lineCnName;
+	/**
+	 * 航线英文名称
+	 */
+	@ApiModelProperty(value = "航线英文名称")
+	private String lineEnName;
+	/**
+	 * 航线代码
+	 */
+	@ApiModelProperty(value = "航线代码")
+	private String lineCode;
+	/**
+	 * 有效日期启
+	 */
+	@ApiModelProperty(value = "有效日期启")
+	private Date effectiveStartDate;
+	/**
+	 * 有效日期止
+	 */
+	@ApiModelProperty(value = "有效日期止")
+	private Date effectiveEndDate;
+	/**
+	 * 单据状态  录入 已提交
+	 */
+	@ApiModelProperty(value = "单据状态")
+	private String billStatus;
+	/**
+	 * 单据日期
+	 */
+	@ApiModelProperty(value = "单据日期")
+	private Date billDate;
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+
+	@TableField(exist = false)
+	private List<MktSlotItem> mktSlotItemList;
+
+
+}

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

@@ -0,0 +1,324 @@
+/*
+ *      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.mktSlot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * mkt&slot明细表实体类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Data
+@TableName("los_mkt_slot_item")
+@ApiModel(value = "MktSlotItem对象", description = "mkt&slot明细表")
+public class MktSlotItem implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 父id
+	 */
+	@ApiModelProperty(value = "父id")
+	private Long pid;
+	/**
+	 * 创建人 Id
+	 */
+	@ApiModelProperty(value = "创建人 Id")
+	private Long createUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private String createUserName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人 Id
+	 */
+	@ApiModelProperty(value = "修改人 Id")
+	private Long updateUser;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 分公司
+	 */
+	@ApiModelProperty(value = "分公司")
+	private String branchName;
+	/**
+	 * 分公司 Id
+	 */
+	@ApiModelProperty(value = "分公司 Id")
+	private String branchId;
+	/**
+	 * 是否生成报价
+	 */
+	@ApiModelProperty(value = "是否生成报价")
+	private String whetherQuotation;
+	/**
+	 * 船公司
+	 */
+	@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;
+	/**
+	 * 20Gp
+	 */
+	@ApiModelProperty(value = "20Gp")
+	private BigDecimal gp20;
+	/**
+	 * 40Gp
+	 */
+	@ApiModelProperty(value = "40Gp")
+	private BigDecimal gp40;
+	/**
+	 * 40Hc
+	 */
+	@ApiModelProperty(value = "40Hc")
+	private BigDecimal hc40;
+	/**
+	 * 重要指示
+	 */
+	@ApiModelProperty(value = "重要指示")
+	private String importantInstructions;
+	/**
+	 * 有效日期启
+	 */
+	@ApiModelProperty(value = "有效日期启")
+	private Date effectiveStartDate;
+	/**
+	 * 有效日期止
+	 */
+	@ApiModelProperty(value = "有效日期止")
+	private Date effectiveEndDate;
+	/**
+	 * 币别
+	 */
+	@ApiModelProperty(value = "币别")
+	private String curCode;
+	/**
+	 * 起运港 id
+	 */
+	@ApiModelProperty(value = "起运港 id")
+	private Long polId;
+	/**
+	 * 起运港代码
+	 */
+	@ApiModelProperty(value = "起运港代码")
+	private String polCode;
+	/**
+	 * 起运港英文名称
+	 */
+	@ApiModelProperty(value = "起运港英文名称")
+	private String polCnName;
+	/**
+	 * 起运港英文名称
+	 */
+	@ApiModelProperty(value = "起运港英文名称")
+	private String polEnName;
+	/**
+	 * 目的港 id
+	 */
+	@ApiModelProperty(value = "目的港 id")
+	private Long podId;
+	/**
+	 * 目的港代码
+	 */
+	@ApiModelProperty(value = "目的港代码")
+	private String podCode;
+	/**
+	 * 目的港中文名称
+	 */
+	@ApiModelProperty(value = "目的港中文名称")
+	private String podCnName;
+	/**
+	 * 目的港英文名称
+	 */
+	@ApiModelProperty(value = "目的港英文名称")
+	private String podEnName;
+	/**
+	 * 航线 id
+	 */
+	@ApiModelProperty(value = "航线 id")
+	private Long lineId;
+	/**
+	 * 航线中文名称
+	 */
+	@ApiModelProperty(value = "航线中文名称")
+	private String lineCnName;
+	/**
+	 * 航线英文名称
+	 */
+	@ApiModelProperty(value = "航线英文名称")
+	private String lineEnName;
+	/**
+	 * 航线代码
+	 */
+	@ApiModelProperty(value = "航线代码")
+	private String lineCode;
+	/**
+	 * 类型  转船/直达
+	 */
+	@ApiModelProperty(value = "类型  转船/直达")
+	private String flightType;
+	/**
+	 * 中转港
+	 */
+	@ApiModelProperty(value = "中转港")
+	private Long transitPortId;
+	/**
+	 * 中转港中文
+	 */
+	@ApiModelProperty(value = "中转港中文")
+	private String transitPortCname;
+	/**
+	 * 中转港英文
+	 */
+	@ApiModelProperty(value = "中转港英文")
+	private String transitPortEname;
+	/**
+	 * 中转港代码
+	 */
+	@ApiModelProperty(value = "中转港代码")
+	private String transitPortCode;
+	/**
+	 * 舱位类型  固定/非固定
+	 */
+	@ApiModelProperty(value = "舱位类型  固定/非固定")
+	private String cabinType;
+	/**
+	 * 舱位数
+	 */
+	@ApiModelProperty(value = "舱位数")
+	private Integer shippingSpaceNumber;
+	/**
+	 * 限重含皮(吨)
+	 */
+	@ApiModelProperty(value = "限重含皮(吨)")
+	private BigDecimal weightLimit;
+	/**
+	 * 是否合营
+	 */
+	@ApiModelProperty(value = "是否合营")
+	private String whetherJointVenture;
+	/**
+	 * 箱属
+	 */
+	@ApiModelProperty(value = "箱属")
+	private String boxBelongsTo;
+	/**
+	 * 合作伙伴
+	 */
+	@ApiModelProperty(value = "合作伙伴")
+	private String cooperativePartnerId;
+	/**
+	 * 合作伙伴
+	 */
+	@ApiModelProperty(value = "合作伙伴")
+	private String cooperativePartnerName;
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+
+	@TableField(exist = false)
+	private List<MktSlotQuotation> mktSlotQuotationList;
+
+
+}

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

@@ -0,0 +1,185 @@
+/*
+ *      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.mktSlot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * mkt&slot报价明细表实体类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Data
+@TableName("los_mkt_slot_quotation")
+@ApiModel(value = "MktSlotQuotation对象", description = "mkt&slot报价明细表")
+public class MktSlotQuotation implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 父id
+	 */
+	@ApiModelProperty(value = "父id")
+	private Long pid;
+	/**
+	 * 明细父id
+	 */
+	@ApiModelProperty(value = "明细父id")
+	private Long ppid;
+	/**
+	 * 创建人 Id
+	 */
+	@ApiModelProperty(value = "创建人 Id")
+	private Long createUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private String createUserName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人 Id
+	 */
+	@ApiModelProperty(value = "修改人 Id")
+	private Long updateUser;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 分公司
+	 */
+	@ApiModelProperty(value = "分公司")
+	private String branchName;
+	/**
+	 * 分公司 Id
+	 */
+	@ApiModelProperty(value = "分公司 Id")
+	private String branchId;
+	/**
+	 * etd
+	 */
+	@ApiModelProperty(value = "etd")
+	private Date etd;
+	/**
+	 * 20Gp
+	 */
+	@ApiModelProperty(value = "20Gp")
+	private BigDecimal gp20;
+	/**
+	 * 40Gp
+	 */
+	@ApiModelProperty(value = "40Gp")
+	private BigDecimal gp40;
+	/**
+	 * 40Hc
+	 */
+	@ApiModelProperty(value = "40Hc")
+	private BigDecimal hc40;
+	/**
+	 * 币别
+	 */
+	@ApiModelProperty(value = "币别")
+	private String curCode;
+	/**
+	 * 起运港 id
+	 */
+	@ApiModelProperty(value = "起运港 id")
+	private Long polId;
+	/**
+	 * 起运港代码
+	 */
+	@ApiModelProperty(value = "起运港代码")
+	private String polCode;
+	/**
+	 * 起运港英文名称
+	 */
+	@ApiModelProperty(value = "起运港英文名称")
+	private String polCnName;
+	/**
+	 * 起运港英文名称
+	 */
+	@ApiModelProperty(value = "起运港英文名称")
+	private String polEnName;
+	/**
+	 * 目的港 id
+	 */
+	@ApiModelProperty(value = "目的港 id")
+	private Long podId;
+	/**
+	 * 目的港代码
+	 */
+	@ApiModelProperty(value = "目的港代码")
+	private String podCode;
+	/**
+	 * 目的港中文名称
+	 */
+	@ApiModelProperty(value = "目的港中文名称")
+	private String podCnName;
+	/**
+	 * 目的港英文名称
+	 */
+	@ApiModelProperty(value = "目的港英文名称")
+	private String podEnName;
+	/**
+	 * 来源明细id
+	 */
+	@ApiModelProperty(value = "来源明细id")
+	private Long srcItemId;
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+
+
+}

+ 36 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/vo/MktSlotItemVO.java

@@ -0,0 +1,36 @@
+/*
+ *      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.mktSlot.vo;
+
+import org.springblade.los.business.mktSlot.entity.MktSlotItem;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * mkt&slot明细表视图实体类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "MktSlotItemVO对象", description = "mkt&slot明细表")
+public class MktSlotItemVO extends MktSlotItem {
+	private static final long serialVersionUID = 1L;
+
+}

+ 36 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/vo/MktSlotQuotationVO.java

@@ -0,0 +1,36 @@
+/*
+ *      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.mktSlot.vo;
+
+import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * mkt&slot报价明细表视图实体类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "MktSlotQuotationVO对象", description = "mkt&slot报价明细表")
+public class MktSlotQuotationVO extends MktSlotQuotation {
+	private static final long serialVersionUID = 1L;
+
+}

+ 36 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/mktSlot/vo/MktSlotVO.java

@@ -0,0 +1,36 @@
+/*
+ *      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.mktSlot.vo;
+
+import org.springblade.los.business.mktSlot.entity.MktSlot;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * mkt&slot表视图实体类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "MktSlotVO对象", description = "mkt&slot表")
+public class MktSlotVO extends MktSlot {
+	private static final long serialVersionUID = 1L;
+
+}

+ 79 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/RouteCostController.java

@@ -40,12 +40,15 @@ import org.springblade.los.box.service.IRouteCostFeeService;
 import org.springblade.los.box.service.IRouteCostItemService;
 import org.springblade.los.box.service.IRouteCostService;
 import org.springblade.los.box.vo.RouteCostVO;
+import org.springblade.los.business.mktSlot.entity.MktSlotItem;
 import org.springblade.los.excel.RouteCostExcel;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 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;
 
@@ -340,6 +343,7 @@ 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())
 			.apply(ObjectUtils.isNotNull(routeCost.getShippingCompanyId()), "(business_type = 'SOC' and actual_shipping_company_id = '" + routeCost.getShippingCompanyId() + "')" +
@@ -388,5 +392,80 @@ public class RouteCostController extends BladeController {
 		return routeCostService.batchRevoke(ids);
 	}
 
+	/**
+	 * 提前运价列表
+	 */
+	@GetMapping("/MktSlotQuotation")
+	public R<List<MktSlotItem>> MktSlotQuotation(RouteCost routeCost) {
+		List<MktSlotItem> mktSlotItemList = new ArrayList<>();
+		LambdaQueryWrapper<RouteCost> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		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());
+		lambdaQueryWrapper.orderByAsc(RouteCost::getDestinationId);
+		List<RouteCost> list = routeCostService.list(lambdaQueryWrapper);
+		if (!list.isEmpty()) {
+			List<Long> pid = list.stream().map(RouteCost::getId).collect(Collectors.toList());
+			List<RouteCostItem> routeCostItemList = routeCostItemService.list(new LambdaQueryWrapper<RouteCostItem>()
+				.eq(RouteCostItem::getTenantId, AuthUtil.getTenantId())
+				.eq(RouteCostItem::getIsDeleted, 0)
+				.in(RouteCostItem::getPid, pid));
+			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.setImportantInstructions(item.getRemarks());
+					mktSlotItem.setEffectiveStartDate(item.getEffectiveStartDate());
+					mktSlotItem.setEffectiveEndDate(item.getEffectiveEndDate());
+					//todo mktSlotItem.setCurCode();
+					mktSlotItem.setPolId(item.getPodId());
+					mktSlotItem.setPolCode(item.getPodCode());
+					mktSlotItem.setPolCnName(item.getPodCname());
+					mktSlotItem.setPolEnName(item.getPodEname());
+					mktSlotItem.setPodId(item.getDestinationId());
+					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.setFlightType(item.getFlightType());
+					mktSlotItem.setTransitPortId(item.getTransitPortId());
+					mktSlotItem.setTransitPortCname(item.getTransitPortCname());
+					mktSlotItem.setTransitPortEname(item.getTransitPortEname());
+					mktSlotItem.setTransitPortCode(item.getTransitPortCode());
+					mktSlotItem.setCabinType(item.getCabinType());
+					mktSlotItem.setShippingSpaceNumber(item.getShippingSpaceNumber());
+					mktSlotItem.setWeightLimit(item.getWeightLimit());
+					mktSlotItem.setWhetherJointVenture(item.getWhetherJointVenture());
+					mktSlotItem.setBoxBelongsTo("SOC");
+					mktSlotItem.setCooperativePartnerId(item.getCooperativePartnerId());
+					mktSlotItem.setCooperativePartnerName(item.getCooperativePartnerName());
+					mktSlotItem.setGp20(routeCostItemList.stream().filter(e -> e.getPid().equals(item.getId())
+						&& "20GP".equals(e.getBoxType())).map(RouteCostItem::getSalesPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
+					mktSlotItem.setGp40(routeCostItemList.stream().filter(e -> e.getPid().equals(item.getId())
+						&& "40GP".equals(e.getBoxType())).map(RouteCostItem::getSalesPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
+					mktSlotItem.setHc40(routeCostItemList.stream().filter(e -> e.getPid().equals(item.getId())
+						&& "40HC".equals(e.getBoxType())).map(RouteCostItem::getSalesPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
+					mktSlotItemList.add(mktSlotItem);
+				}
+			}
+		}
+		return R.data(mktSlotItemList);
+	}
+
 
 }

+ 4 - 4
blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/PutBoxMapper.xml

@@ -184,7 +184,7 @@
         AND is_deleted = '0'
         AND pid = lpb.id
         AND box_status = '好'
-        AND box_type = '40HG'
+        AND box_type = '40HC'
         ) AS hG40Good,
         (
         SELECT
@@ -196,7 +196,7 @@
         AND is_deleted = '0'
         AND pid = lpb.id
         AND box_status = '好'
-        AND NOT FIND_IN_SET( box_type, '40HG,40GP,20GP' )
+        AND NOT FIND_IN_SET( box_type, '40HC,40GP,20GP' )
         ) AS otherGood,
         (
         SELECT
@@ -232,7 +232,7 @@
         AND is_deleted = '0'
         AND pid = lpb.id
         AND box_status = '坏'
-        AND box_type = '40HG'
+        AND box_type = '40HC'
         ) AS hG40Bad,
         (
         SELECT
@@ -244,7 +244,7 @@
         AND is_deleted = '0'
         AND pid = lpb.id
         AND box_status = '坏'
-        AND NOT FIND_IN_SET( box_type, '40HG,40GP,20GP' )
+        AND NOT FIND_IN_SET( box_type, '40HC,40GP,20GP' )
         ) AS otherBad
         FROM
             logistics_put_box lpb

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java

@@ -487,7 +487,7 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 						gP20Good = gP20Good + item.getRemainingNum();
 					} else if ("40GP".equals(item.getBoxType())) {
 						gP40Good = gP40Good + item.getRemainingNum();
-					} else if ("40HG".equals(item.getBoxType())) {
+					} else if ("40HC".equals(item.getBoxType())) {
 						hG40Good = hG40Good + item.getRemainingNum();
 					} else {
 						otherGood = otherGood + item.getRemainingNum();

+ 48 - 21
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxItemServiceImpl.java

@@ -44,6 +44,7 @@ import org.springblade.los.box.mapper.TradingBoxItemMapper;
 import org.springblade.los.box.mapper.TradingBoxMapper;
 import org.springblade.los.box.service.ITradingBoxItemService;
 import org.springblade.los.box.vo.TradingBoxItemVO;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -75,6 +76,8 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 
 	private final CurrencyUtils currencyUtils;
 
+	private final ISysClient sysClient;
+
 	@Override
 	public IPage<TradingBoxItemVO> selectTradingBoxItemPage(IPage<TradingBoxItemVO> page, TradingBoxItemVO tradingBoxItem) {
 		return page.setRecords(baseMapper.selectTradingBoxItemPage(page, tradingBoxItem));
@@ -101,10 +104,11 @@ 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<>();
+		List<String> codes = new ArrayList<>();
+		List<String> boxType = new ArrayList<>();
 		String portName = "";
 		String stationName = "";
+		String station = "";
 		String cyCname = "";
 		List<TradingBoxItem> tradingBoxItemList = new ArrayList<>();
 		if ("1".contains(type)) {
@@ -148,7 +152,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				.distinct().collect(Collectors.joining(","));
 			stationName = excelList.stream().map(TradingBoxItemExcel::getRestrictingShippingCompaniesName).filter(Objects::nonNull)
 				.distinct().collect(Collectors.joining(","));
-		} else if("2".equals(type)) {
+		} else if ("2".equals(type)) {
 			//导入数据
 			List<RentalBoxItemExcel> excelList = ExcelUtil.read(file, RentalBoxItemExcel.class);
 			if (CollectionUtils.isEmpty(excelList)) {
@@ -189,7 +193,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				.distinct().collect(Collectors.joining(","));
 			cyCname = excelList.stream().map(RentalBoxItemExcel::getStationCname).filter(Objects::nonNull)
 				.distinct().collect(Collectors.joining(","));
-		}else if("3".equals(type)) {
+		} else if ("3".equals(type)) {
 			//导入数据
 			List<AgentBoxItemExcel> excelList = ExcelUtil.read(file, AgentBoxItemExcel.class);
 			if (CollectionUtils.isEmpty(excelList)) {
@@ -262,10 +266,11 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				if (ObjectUtils.isNull(item.getCurrency())) {
 					throw new RuntimeException("币别不能为空");
 				}
-				if ("1".contains(type)) {
-					if (ObjectUtils.isNull(item.getAmount())) {
-						throw new RuntimeException("金额不能为空");
-					}
+				if (ObjectUtils.isNull(item.getStationCname())) {
+					throw new RuntimeException("场站不能为空");
+				}
+				if (ObjectUtils.isNull(item.getAmount())) {
+					throw new RuntimeException("金额不能为空");
 				}
 			}
 			boxType = excelList.stream().map(BoxFeeItemExcel::getBoxType).filter(Objects::nonNull)
@@ -274,6 +279,8 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				.distinct().collect(Collectors.joining(","));
 			stationName = excelList.stream().map(BoxFeeItemExcel::getRestrictingShippingCompaniesName).filter(Objects::nonNull)
 				.distinct().collect(Collectors.joining(","));
+			station = excelList.stream().map(BoxFeeItemExcel::getStationCname).filter(Objects::nonNull)
+				.distinct().collect(Collectors.joining(","));
 		}
 		List<TradingBoxItem> itemList = baseMapper.selectList(new LambdaQueryWrapper<TradingBoxItem>()
 			.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
@@ -294,16 +301,26 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				.eq(BPorts::getIsDeleted, 0)
 				.apply("find_in_set(cn_name,'" + portName + "')"));
 		}
+		String defaultBoxEast = sysClient.getParamService("default.box.east");
+		if (ObjectUtils.isNull(defaultBoxEast) || "获取数据失败".equals(defaultBoxEast)) {
+			throw new RuntimeException("请先维护默认箱东");
+		}
 		if (ObjectUtils.isNotNull(stationName)) {
-			stationName = stationName + ",WFL";
+			stationName = stationName + ","+defaultBoxEast;
 			if (ObjectUtils.isNotNull(cyCname)) {
 				stationName = stationName + "," + cyCname;
 			}
+			if (ObjectUtils.isNotNull(station)) {
+				stationName = stationName + "," + station;
+			}
 		} else {
-			stationName = "WFL";
+			stationName = defaultBoxEast;
 			if (ObjectUtils.isNotNull(cyCname)) {
 				stationName = stationName + "," + cyCname;
 			}
+			if (ObjectUtils.isNotNull(station)) {
+				stationName = stationName + "," + station;
+			}
 		}
 		List<BCorps> corpsList = bCorpsService.list(new LambdaQueryWrapper<BCorps>()
 			.eq(BCorps::getTenantId, AuthUtil.getTenantId())
@@ -372,9 +389,9 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 							tradingBoxItem.setRestrictingShippingCompaniesName(item.getRestrictingShippingCompaniesName());
 						}
 					}
-					BCorps bCorps = corpsList.stream().filter(e -> "WFL".equals(e.getCode())).findFirst().orElse(null);
+					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCode())).findFirst().orElse(null);
 					if (bCorps == null) {
-						throw new RuntimeException("箱东:WFL不存在,请先维护基础资料");
+						throw new RuntimeException("箱东:"+defaultBoxEast+"不存在,请先维护基础资料");
 					}
 					if ("BUY".equals(tradingBox.getType())) {
 						tradingBoxItem.setBoxEastId(bCorps.getId());
@@ -412,7 +429,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				tradingBoxItem.setPid(tradingBox.getId());
 				tradingBoxItemList.add(tradingBoxItem);
 			}
-		} else if("2".equals(type)){
+		} else if ("2".equals(type)) {
 			//导入数据
 			List<RentalBoxItemExcel> excelList = ExcelUtil.read(file, RentalBoxItemExcel.class);
 			for (RentalBoxItemExcel item : excelList) {
@@ -485,9 +502,9 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 							tradingBoxItem.setRestrictingShippingCompaniesName(item.getRestrictingShippingCompaniesName());
 						}
 					}
-					BCorps bCorps = corpsList.stream().filter(e -> "WFL".equals(e.getCode())).findFirst().orElse(null);
+					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCode())).findFirst().orElse(null);
 					if (bCorps == null) {
-						throw new RuntimeException("箱东:WFL不存在,请先维护基础资料");
+						throw new RuntimeException("箱东:"+defaultBoxEast+"不存在,请先维护基础资料");
 					}
 					if ("BUY".equals(tradingBox.getType())) {
 						tradingBoxItem.setBoxEastId(bCorps.getId());
@@ -521,7 +538,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				tradingBoxItem.setPid(tradingBox.getId());
 				tradingBoxItemList.add(tradingBoxItem);
 			}
-		}else if("3".equals(type)){
+		} else if ("3".equals(type)) {
 			//导入数据
 			List<AgentBoxItemExcel> excelList = ExcelUtil.read(file, AgentBoxItemExcel.class);
 			for (AgentBoxItemExcel item : excelList) {
@@ -595,9 +612,9 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 							tradingBoxItem.setRestrictingShippingCompaniesName(item.getRestrictingShippingCompaniesName());
 						}
 					}
-					BCorps bCorps = corpsList.stream().filter(e -> "WFL".equals(e.getCode())).findFirst().orElse(null);
+					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCode())).findFirst().orElse(null);
 					if (bCorps == null) {
-						throw new RuntimeException("箱东:WFL不存在,请先维护基础资料");
+						throw new RuntimeException("箱东:"+defaultBoxEast+"不存在,请先维护基础资料");
 					}
 					if ("BUY".equals(tradingBox.getType())) {
 						tradingBoxItem.setBoxEastId(bCorps.getId());
@@ -631,7 +648,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				tradingBoxItem.setPid(tradingBox.getId());
 				tradingBoxItemList.add(tradingBoxItem);
 			}
-		}else if ("4".contains(type)) {
+		} else if ("4".contains(type)) {
 			List<BoxFeeItemExcel> excelList = ExcelUtil.read(file, BoxFeeItemExcel.class);
 			for (BoxFeeItemExcel item : excelList) {
 				TradingBoxItem tradingBoxItem;
@@ -695,9 +712,9 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 							tradingBoxItem.setRestrictingShippingCompaniesName(item.getRestrictingShippingCompaniesName());
 						}
 					}
-					BCorps bCorps = corpsList.stream().filter(e -> "WFL".equals(e.getCode())).findFirst().orElse(null);
+					BCorps bCorps = corpsList.stream().filter(e -> defaultBoxEast.equals(e.getCode())).findFirst().orElse(null);
 					if (bCorps == null) {
-						throw new RuntimeException("箱东:WFL不存在,请先维护基础资料");
+						throw new RuntimeException("箱东:"+defaultBoxEast+"不存在,请先维护基础资料");
 					}
 					if ("BUY".equals(tradingBox.getType())) {
 						tradingBoxItem.setBoxEastId(bCorps.getId());
@@ -713,6 +730,16 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 						tradingBoxItem.setOriginalBoxEastId(tradingBox.getPurchaseCompanyId());
 						tradingBoxItem.setOriginalBoxEastName(tradingBox.getPurchaseCompanyName());
 					}
+					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());
+					}
 				}
 				if ("BUY".equals(tradingBox.getType())) {
 					tradingBoxItem.setBoxCategory("自有箱");

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

@@ -0,0 +1,182 @@
+/*
+ *      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.mktSlot.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 lombok.AllArgsConstructor;
+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.core.tool.utils.Func;
+import org.springblade.los.business.mktSlot.entity.MktSlot;
+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.text.SimpleDateFormat;
+
+/**
+ * mkt&slot表 控制器
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/mktslot")
+@Api(value = "mkt&slot表", tags = "mkt&slot表接口")
+public class MktSlotController extends BladeController {
+
+	private final IMktSlotService mktSlotService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入mktSlot")
+	public R<MktSlot> detail(MktSlot mktSlot) {
+		MktSlot detail = mktSlotService.detail(mktSlot);
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 mkt&slot表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入mktSlot")
+	public R<IPage<MktSlot>> list(MktSlot mktSlot, Query query) {
+		LambdaQueryWrapper<MktSlot> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(MktSlot::getTenantId, AuthUtil.getTenantId())
+			.eq(MktSlot::getIsDeleted, 0)
+			.like(ObjectUtils.isNotNull(mktSlot.getSysNo()), MktSlot::getSysNo, mktSlot.getSysNo())
+			.eq(ObjectUtils.isNotNull(mktSlot.getStatus()), MktSlot::getStatus, mktSlot.getStatus())
+			.eq(ObjectUtils.isNotNull(mktSlot.getBillStatus()), MktSlot::getBillStatus, mktSlot.getBillStatus())
+			.eq(ObjectUtils.isNotNull(mktSlot.getPodId()), MktSlot::getPodId, mktSlot.getPodId())
+			.eq(ObjectUtils.isNotNull(mktSlot.getPolId()), MktSlot::getPolId, mktSlot.getPolId())
+			.eq(ObjectUtils.isNotNull(mktSlot.getLineId()), MktSlot::getLineId, mktSlot.getLineId())
+			.orderByDesc(MktSlot::getBillDate);
+		if (ObjectUtils.isNotNull(mktSlot.getEffectiveStartDate()) && ObjectUtils.isNotNull(mktSlot.getEffectiveEndDate())) {
+			SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+			lambdaQueryWrapper.apply(ObjectUtils.isNotNull(mktSlot.getEffectiveStartDate()), "DATE_FORMAT(effective_start_date,'%Y-%m-%d') >= '" + formatter.format(mktSlot.getEffectiveStartDate()) + "'")
+				.apply(ObjectUtils.isNotNull(mktSlot.getEffectiveEndDate()), "DATE_FORMAT(effective_end_date,'%Y-%m-%d') <= '" + formatter.format(mktSlot.getEffectiveEndDate()) + "'");
+		}
+		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
+			lambdaQueryWrapper.eq(MktSlot::getBranchId, AuthUtil.getDeptId());
+		} else {
+			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(mktSlot.getBranchId()), MktSlot::getBranchId, mktSlot.getBranchId());
+		}
+		IPage<MktSlot> pages = mktSlotService.page(Condition.getPage(query), lambdaQueryWrapper);
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 mkt&slot表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入mktSlot")
+	public R<IPage<MktSlotVO>> page(MktSlotVO mktSlot, Query query) {
+		IPage<MktSlotVO> pages = mktSlotService.selectMktSlotPage(Condition.getPage(query), mktSlot);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 mkt&slot表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入mktSlot")
+	public R save(@Valid @RequestBody MktSlot mktSlot) {
+		return R.status(mktSlotService.save(mktSlot));
+	}
+
+	/**
+	 * 修改 mkt&slot表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入mktSlot")
+	public R update(@Valid @RequestBody MktSlot mktSlot) {
+		return R.status(mktSlotService.updateById(mktSlot));
+	}
+
+	/**
+	 * 新增或修改 mkt&slot表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入mktSlot")
+	public R submit(@Valid @RequestBody MktSlot mktSlot) {
+		return mktSlotService.submit(mktSlot);
+	}
+
+
+	/**
+	 * 删除 mkt&slot表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(mktSlotService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+	/**
+	 * 提交
+	 */
+	@GetMapping("/submitMktSlot")
+	public R submitMktSlot(@RequestParam("ids") String ids) {
+		return mktSlotService.submitMktSlot(ids);
+	}
+
+	/**
+	 * 撤销
+	 */
+	@GetMapping("/revokeMktSlot")
+	public R revokeMktSlot(@RequestParam("ids") String ids) {
+		return mktSlotService.revokeMktSlot(ids);
+	}
+
+	/**
+	 * 生成报价
+	 */
+	@GetMapping("/generateQuotation")
+	public R generateQuotation(@Valid @RequestBody MktSlot mktSlot) {
+		return mktSlotService.generateQuotation(mktSlot);
+	}
+
+	/**
+	 * 撤销报价
+	 */
+	@GetMapping("/revokeQuotation")
+	public R revokeQuotation(@Valid @RequestBody MktSlot mktSlot) {
+		return mktSlotService.revokeQuotation(mktSlot);
+	}
+
+}

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

@@ -0,0 +1,126 @@
+/*
+ *      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.mktSlot.controller;
+
+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.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.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.los.business.mktSlot.entity.MktSlotItem;
+import org.springblade.los.business.mktSlot.vo.MktSlotItemVO;
+import org.springblade.los.business.mktSlot.service.IMktSlotItemService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * mkt&slot明细表 控制器
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/mktslotitem")
+@Api(value = "mkt&slot明细表", tags = "mkt&slot明细表接口")
+public class MktSlotItemController extends BladeController {
+
+	private final IMktSlotItemService mktSlotItemService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入mktSlotItem")
+	public R<MktSlotItem> detail(MktSlotItem mktSlotItem) {
+		MktSlotItem detail = mktSlotItemService.getOne(Condition.getQueryWrapper(mktSlotItem));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 mkt&slot明细表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入mktSlotItem")
+	public R<IPage<MktSlotItem>> list(MktSlotItem mktSlotItem, Query query) {
+		IPage<MktSlotItem> pages = mktSlotItemService.page(Condition.getPage(query), Condition.getQueryWrapper(mktSlotItem));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 mkt&slot明细表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入mktSlotItem")
+	public R<IPage<MktSlotItemVO>> page(MktSlotItemVO mktSlotItem, Query query) {
+		IPage<MktSlotItemVO> pages = mktSlotItemService.selectMktSlotItemPage(Condition.getPage(query), mktSlotItem);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 mkt&slot明细表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入mktSlotItem")
+	public R save(@Valid @RequestBody MktSlotItem mktSlotItem) {
+		return R.status(mktSlotItemService.save(mktSlotItem));
+	}
+
+	/**
+	 * 修改 mkt&slot明细表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入mktSlotItem")
+	public R update(@Valid @RequestBody MktSlotItem mktSlotItem) {
+		return R.status(mktSlotItemService.updateById(mktSlotItem));
+	}
+
+	/**
+	 * 新增或修改 mkt&slot明细表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入mktSlotItem")
+	public R submit(@Valid @RequestBody MktSlotItem mktSlotItem) {
+		return R.status(mktSlotItemService.saveOrUpdate(mktSlotItem));
+	}
+
+	
+	/**
+	 * 删除 mkt&slot明细表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(mktSlotItemService.removeByIds(Func.toLongList(ids)));
+	}
+
+	
+}

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

@@ -0,0 +1,126 @@
+/*
+ *      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.mktSlot.controller;
+
+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.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.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
+import org.springblade.los.business.mktSlot.vo.MktSlotQuotationVO;
+import org.springblade.los.business.mktSlot.service.IMktSlotQuotationService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * mkt&slot报价明细表 控制器
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/mktslotquotation")
+@Api(value = "mkt&slot报价明细表", tags = "mkt&slot报价明细表接口")
+public class MktSlotQuotationController extends BladeController {
+
+	private final IMktSlotQuotationService mktSlotQuotationService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入mktSlotQuotation")
+	public R<MktSlotQuotation> detail(MktSlotQuotation mktSlotQuotation) {
+		MktSlotQuotation detail = mktSlotQuotationService.getOne(Condition.getQueryWrapper(mktSlotQuotation));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 mkt&slot报价明细表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入mktSlotQuotation")
+	public R<IPage<MktSlotQuotation>> list(MktSlotQuotation mktSlotQuotation, Query query) {
+		IPage<MktSlotQuotation> pages = mktSlotQuotationService.page(Condition.getPage(query), Condition.getQueryWrapper(mktSlotQuotation));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 mkt&slot报价明细表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入mktSlotQuotation")
+	public R<IPage<MktSlotQuotationVO>> page(MktSlotQuotationVO mktSlotQuotation, Query query) {
+		IPage<MktSlotQuotationVO> pages = mktSlotQuotationService.selectMktSlotQuotationPage(Condition.getPage(query), mktSlotQuotation);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 mkt&slot报价明细表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入mktSlotQuotation")
+	public R save(@Valid @RequestBody MktSlotQuotation mktSlotQuotation) {
+		return R.status(mktSlotQuotationService.save(mktSlotQuotation));
+	}
+
+	/**
+	 * 修改 mkt&slot报价明细表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入mktSlotQuotation")
+	public R update(@Valid @RequestBody MktSlotQuotation mktSlotQuotation) {
+		return R.status(mktSlotQuotationService.updateById(mktSlotQuotation));
+	}
+
+	/**
+	 * 新增或修改 mkt&slot报价明细表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入mktSlotQuotation")
+	public R submit(@Valid @RequestBody MktSlotQuotation mktSlotQuotation) {
+		return R.status(mktSlotQuotationService.saveOrUpdate(mktSlotQuotation));
+	}
+
+	
+	/**
+	 * 删除 mkt&slot报价明细表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(mktSlotQuotationService.removeByIds(Func.toLongList(ids)));
+	}
+
+	
+}

+ 42 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotItemMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      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.mktSlot.mapper;
+
+import org.springblade.los.business.mktSlot.entity.MktSlotItem;
+import org.springblade.los.business.mktSlot.vo.MktSlotItemVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * mkt&slot明细表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+public interface MktSlotItemMapper extends BaseMapper<MktSlotItem> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param mktSlotItem
+	 * @return
+	 */
+	List<MktSlotItemVO> selectMktSlotItemPage(IPage page, MktSlotItemVO mktSlotItem);
+
+}

+ 69 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotItemMapper.xml

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.los.business.mktSlot.mapper.MktSlotItemMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="mktSlotItemResultMap" type="org.springblade.los.business.mktSlot.entity.MktSlotItem">
+        <id column="id" property="id"/>
+        <result column="pid" property="pid"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_user_name" property="updateUserName"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="version" property="version"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="remarks" property="remarks"/>
+        <result column="branch_name" property="branchName"/>
+        <result column="branch_id" property="branchId"/>
+        <result column="whether_quotation" property="whetherQuotation"/>
+        <result column="shipping_company_id" property="shippingCompanyId"/>
+        <result column="shipping_company_cname" property="shippingCompanyCname"/>
+        <result column="shipping_company_ename" property="shippingCompanyEname"/>
+        <result column="shipping_company_code" property="shippingCompanyCode"/>
+        <result column="shipping_company_abbreviation" property="shippingCompanyAbbreviation"/>
+        <result column="actual_shipping_company_id" property="actualShippingCompanyId"/>
+        <result column="actual_shipping_company_cname" property="actualShippingCompanyCname"/>
+        <result column="actual_shipping_company_ename" property="actualShippingCompanyEname"/>
+        <result column="actual_shipping_company_code" property="actualShippingCompanyCode"/>
+        <result column="actual_shipping_company_abbreviation" property="actualShippingCompanyAbbreviation"/>
+        <result column="20_gp" property="20Gp"/>
+        <result column="40_gp" property="40Gp"/>
+        <result column="40_hc" property="40Hc"/>
+        <result column="important_instructions" property="importantInstructions"/>
+        <result column="effective_start_date" property="effectiveStartDate"/>
+        <result column="effective_end_date" property="effectiveEndDate"/>
+        <result column="cur_code" property="curCode"/>
+        <result column="pol_id" property="polId"/>
+        <result column="pol_code" property="polCode"/>
+        <result column="pol_cn_name" property="polCnName"/>
+        <result column="pol_en_name" property="polEnName"/>
+        <result column="pod_id" property="podId"/>
+        <result column="pod_code" property="podCode"/>
+        <result column="pod_cn_name" property="podCnName"/>
+        <result column="pod_en_name" property="podEnName"/>
+        <result column="line_id" property="lineId"/>
+        <result column="line_cn_name" property="lineCnName"/>
+        <result column="line_en_name" property="lineEnName"/>
+        <result column="line_code" property="lineCode"/>
+        <result column="flight_type" property="flightType"/>
+        <result column="transit_port_id" property="transitPortId"/>
+        <result column="transit_port_cname" property="transitPortCname"/>
+        <result column="transit_port_ename" property="transitPortEname"/>
+        <result column="transit_port_code" property="transitPortCode"/>
+        <result column="cabin_type" property="cabinType"/>
+        <result column="shipping_space_number" property="shippingSpaceNumber"/>
+        <result column="weight_limit" property="weightLimit"/>
+        <result column="whether_joint_venture" property="whetherJointVenture"/>
+        <result column="box_belongs_to" property="boxBelongsTo"/>
+        <result column="cooperative_partner_id" property="cooperativePartnerId"/>
+        <result column="cooperative_partner_name" property="cooperativePartnerName"/>
+    </resultMap>
+
+
+    <select id="selectMktSlotItemPage" resultMap="mktSlotItemResultMap">
+        select * from los_mkt_slot_item where is_deleted = 0
+    </select>
+
+</mapper>

+ 42 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      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.mktSlot.mapper;
+
+import org.springblade.los.business.mktSlot.entity.MktSlot;
+import org.springblade.los.business.mktSlot.vo.MktSlotVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * mkt&slot表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+public interface MktSlotMapper extends BaseMapper<MktSlot> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param mktSlot
+	 * @return
+	 */
+	List<MktSlotVO> selectMktSlotPage(IPage page, MktSlotVO mktSlot);
+
+}

+ 44 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotMapper.xml

@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.los.business.mktSlot.mapper.MktSlotMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="mktSlotResultMap" type="org.springblade.los.business.mktSlot.entity.MktSlot">
+        <id column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_user_name" property="updateUserName"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="version" property="version"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="remarks" property="remarks"/>
+        <result column="branch_name" property="branchName"/>
+        <result column="branch_id" property="branchId"/>
+        <result column="sys_no" property="sysNo"/>
+        <result column="pol_id" property="polId"/>
+        <result column="pol_code" property="polCode"/>
+        <result column="pol_cn_name" property="polCnName"/>
+        <result column="pol_en_name" property="polEnName"/>
+        <result column="pod_id" property="podId"/>
+        <result column="pod_code" property="podCode"/>
+        <result column="pod_cn_name" property="podCnName"/>
+        <result column="pod_en_name" property="podEnName"/>
+        <result column="line_id" property="lineId"/>
+        <result column="line_cn_name" property="lineCnName"/>
+        <result column="line_en_name" property="lineEnName"/>
+        <result column="line_code" property="lineCode"/>
+        <result column="effective_start_date" property="effectiveStartDate"/>
+        <result column="effective_end_date" property="effectiveEndDate"/>
+        <result column="bill_status" property="billStatus"/>
+        <result column="bill_date" property="billDate"/>
+    </resultMap>
+
+
+    <select id="selectMktSlotPage" resultMap="mktSlotResultMap">
+        select * from los_mkt_slot where is_deleted = 0
+    </select>
+
+</mapper>

+ 42 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotQuotationMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      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.mktSlot.mapper;
+
+import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
+import org.springblade.los.business.mktSlot.vo.MktSlotQuotationVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * mkt&slot报价明细表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+public interface MktSlotQuotationMapper extends BaseMapper<MktSlotQuotation> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param mktSlotQuotation
+	 * @return
+	 */
+	List<MktSlotQuotationVO> selectMktSlotQuotationPage(IPage page, MktSlotQuotationVO mktSlotQuotation);
+
+}

+ 42 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/mapper/MktSlotQuotationMapper.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.los.business.mktSlot.mapper.MktSlotQuotationMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="mktSlotQuotationResultMap" type="org.springblade.los.business.mktSlot.entity.MktSlotQuotation">
+        <id column="id" property="id"/>
+        <result column="pid" property="pid"/>
+        <result column="ppid" property="ppid"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_user_name" property="updateUserName"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="version" property="version"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="remarks" property="remarks"/>
+        <result column="branch_name" property="branchName"/>
+        <result column="branch_id" property="branchId"/>
+        <result column="etd" property="etd"/>
+        <result column="20_gp" property="20Gp"/>
+        <result column="40_gp" property="40Gp"/>
+        <result column="40_hc" property="40Hc"/>
+        <result column="cur_code" property="curCode"/>
+        <result column="pol_id" property="polId"/>
+        <result column="pol_code" property="polCode"/>
+        <result column="pol_cn_name" property="polCnName"/>
+        <result column="pol_en_name" property="polEnName"/>
+        <result column="pod_id" property="podId"/>
+        <result column="pod_code" property="podCode"/>
+        <result column="pod_cn_name" property="podCnName"/>
+        <result column="pod_en_name" property="podEnName"/>
+        <result column="src_item_id" property="srcItemId"/>
+    </resultMap>
+
+
+    <select id="selectMktSlotQuotationPage" resultMap="mktSlotQuotationResultMap">
+        select * from los_mkt_slot_quotation where is_deleted = 0
+    </select>
+
+</mapper>

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

@@ -0,0 +1,41 @@
+/*
+ *      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.mktSlot.service;
+
+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;
+
+/**
+ * mkt&slot明细表 服务类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+public interface IMktSlotItemService extends IService<MktSlotItem> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param mktSlotItem
+	 * @return
+	 */
+	IPage<MktSlotItemVO> selectMktSlotItemPage(IPage<MktSlotItemVO> page, MktSlotItemVO mktSlotItem);
+
+}

+ 41 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/IMktSlotQuotationService.java

@@ -0,0 +1,41 @@
+/*
+ *      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.mktSlot.service;
+
+import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
+import org.springblade.los.business.mktSlot.vo.MktSlotQuotationVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * mkt&slot报价明细表 服务类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+public interface IMktSlotQuotationService extends IService<MktSlotQuotation> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param mktSlotQuotation
+	 * @return
+	 */
+	IPage<MktSlotQuotationVO> selectMktSlotQuotationPage(IPage<MktSlotQuotationVO> page, MktSlotQuotationVO mktSlotQuotation);
+
+}

+ 53 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/IMktSlotService.java

@@ -0,0 +1,53 @@
+/*
+ *      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.mktSlot.service;
+
+import org.springblade.core.tool.api.R;
+import org.springblade.los.business.mktSlot.entity.MktSlot;
+import org.springblade.los.business.mktSlot.vo.MktSlotVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * mkt&slot表 服务类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+public interface IMktSlotService extends IService<MktSlot> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param mktSlot
+	 * @return
+	 */
+	IPage<MktSlotVO> selectMktSlotPage(IPage<MktSlotVO> page, MktSlotVO mktSlot);
+
+    MktSlot detail(MktSlot mktSlot);
+
+	R submit(MktSlot mktSlot);
+
+	R submitMktSlot(String ids);
+
+	R revokeMktSlot(String ids);
+
+	R generateQuotation(MktSlot mktSlot);
+
+	R revokeQuotation(MktSlot mktSlot);
+}

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

@@ -0,0 +1,41 @@
+/*
+ *      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.mktSlot.service.impl;
+
+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.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * mkt&slot明细表 服务实现类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Service
+public class MktSlotItemServiceImpl extends ServiceImpl<MktSlotItemMapper, MktSlotItem> implements IMktSlotItemService {
+
+	@Override
+	public IPage<MktSlotItemVO> selectMktSlotItemPage(IPage<MktSlotItemVO> page, MktSlotItemVO mktSlotItem) {
+		return page.setRecords(baseMapper.selectMktSlotItemPage(page, mktSlotItem));
+	}
+
+}

+ 41 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/mktSlot/service/impl/MktSlotQuotationServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      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.mktSlot.service.impl;
+
+import org.springblade.los.business.mktSlot.entity.MktSlotQuotation;
+import org.springblade.los.business.mktSlot.vo.MktSlotQuotationVO;
+import org.springblade.los.business.mktSlot.mapper.MktSlotQuotationMapper;
+import org.springblade.los.business.mktSlot.service.IMktSlotQuotationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * mkt&slot报价明细表 服务实现类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Service
+public class MktSlotQuotationServiceImpl extends ServiceImpl<MktSlotQuotationMapper, MktSlotQuotation> implements IMktSlotQuotationService {
+
+	@Override
+	public IPage<MktSlotQuotationVO> selectMktSlotQuotationPage(IPage<MktSlotQuotationVO> page, MktSlotQuotationVO mktSlotQuotation) {
+		return page.setRecords(baseMapper.selectMktSlotQuotationPage(page, mktSlotQuotation));
+	}
+
+}

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

@@ -0,0 +1,320 @@
+/*
+ *      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.mktSlot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+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.business.entity.BusinessType;
+import org.springblade.los.basic.business.service.IBusinessTypeService;
+import org.springblade.los.billno.entity.BusinessBillNo;
+import org.springblade.los.billno.service.IBusinessBillNoService;
+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.mapper.MktSlotMapper;
+import org.springblade.los.business.mktSlot.service.IMktSlotItemService;
+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.springblade.system.feign.ISysClient;
+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.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * mkt&slot表 服务实现类
+ *
+ * @author BladeX
+ * @since 2025-06-24
+ */
+@Service
+@AllArgsConstructor
+public class MktSlotServiceImpl extends ServiceImpl<MktSlotMapper, MktSlot> implements IMktSlotService {
+
+	private final ISysClient sysClient;
+
+	private final IBusinessBillNoService businessBillNoService;
+
+	private final IBusinessTypeService bBusinessTypeService;
+
+	private final CurrencyUtils currencyUtils;
+
+	private final IMktSlotItemService mktSlotItemService;
+
+	private final IMktSlotQuotationService mktSlotQuotationService;
+
+	@Override
+	public IPage<MktSlotVO> selectMktSlotPage(IPage<MktSlotVO> page, MktSlotVO mktSlot) {
+		return page.setRecords(baseMapper.selectMktSlotPage(page, mktSlot));
+	}
+
+	@Override
+	public MktSlot detail(MktSlot mktSlot) {
+		if (mktSlot.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		MktSlot detail = baseMapper.selectById(mktSlot.getId());
+		if (detail == null) {
+			throw new RuntimeException("未查到单据信息");
+		}
+		List<MktSlotItem> mktSlotItemList = mktSlotItemService.list(new LambdaQueryWrapper<MktSlotItem>()
+			.eq(MktSlotItem::getTenantId, AuthUtil.getTenantId())
+			.eq(MktSlotItem::getIsDeleted, 0)
+			.eq(MktSlotItem::getPid, detail.getId()));
+		if (!mktSlotItemList.isEmpty()) {
+			List<MktSlotQuotation> mktSlotQuotationList = mktSlotQuotationService.list(new LambdaQueryWrapper<MktSlotQuotation>()
+				.eq(MktSlotQuotation::getTenantId, AuthUtil.getTenantId())
+				.eq(MktSlotQuotation::getIsDeleted, 0)
+				.eq(MktSlotQuotation::getPid, detail.getId())
+				.in(MktSlotQuotation::getPpid, mktSlotItemList.stream().map(MktSlotItem::getId).collect(Collectors.toList())));
+			for (MktSlotItem item : mktSlotItemList) {
+				if (!mktSlotQuotationList.isEmpty()) {
+					List<MktSlotQuotation> mktSlotQuotations = mktSlotQuotationList.stream().filter(e -> e.getPpid().equals(item.getId()))
+						.collect(Collectors.toList());
+					item.setMktSlotQuotationList(mktSlotQuotations.isEmpty() ? new ArrayList<>() : mktSlotQuotations);
+				} else {
+					item.setMktSlotQuotationList(new ArrayList<>());
+				}
+			}
+		}
+		detail.setMktSlotItemList(mktSlotItemList);
+		return detail;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R submit(MktSlot mktSlot) {
+		String branchId;
+		String deptName = "";
+		if (ObjectUtils.isNull(mktSlot.getBranchId())) {
+			branchId = AuthUtil.getDeptId();
+		} else {
+			branchId = mktSlot.getBranchId();
+		}
+		//获取部门ids对应中文名
+		R<String> res = sysClient.getDeptName(Long.parseLong(branchId));
+		if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+			deptName = res.getData();
+		}
+		if (mktSlot.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, "BJZX"));
+			if (businessType == null) {
+				throw new RuntimeException("未找到可用业务类型");
+			}
+			BusinessBillNo businessBillNo = new BusinessBillNo();
+			businessBillNo.setBusinessTypeId(businessType.getId());
+			businessBillNo.setCode("BJZX");
+			businessBillNo.setBranchId(mktSlot.getBranchId());
+			R clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
+			if (!clientBillNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				return R.fail(500, "生成订单编号失败");
+			}
+			mktSlot.setSysNo((String) clientBillNo.getData());
+			mktSlot.setBillDate(new Date());
+			mktSlot.setCreateTime(new Date());
+			mktSlot.setCreateUser(AuthUtil.getUserId());
+			mktSlot.setCreateUserName(AuthUtil.getUserName());
+			mktSlot.setTenantId(AuthUtil.getTenantId());
+			mktSlot.setBranchId(branchId);
+			mktSlot.setBranchName(deptName);
+			// 初始创建为1
+			mktSlot.setVersion("1");
+			this.save(mktSlot);
+		} else {
+			MktSlot dataSourceBill = baseMapper.selectOne(new LambdaQueryWrapper<MktSlot>().select(MktSlot::getId, MktSlot::getVersion).eq(MktSlot::getId, mktSlot.getId()));
+			if (!Objects.equals(dataSourceBill.getVersion(), mktSlot.getVersion())) {
+				return R.fail(601, "数据已被其他用户更新,请等待刷新后重试");
+			}
+			// 每更新一次往上累加一次版本
+			// 旧数据处理
+			int version = StringUtil.isBlank(dataSourceBill.getVersion()) ? 1 : Integer.parseInt(dataSourceBill.getVersion());
+			mktSlot.setVersion(String.valueOf(version + 1));
+			mktSlot.setUpdateUser(AuthUtil.getUserId());
+			mktSlot.setUpdateTime(new Date());
+			mktSlot.setUpdateUserName(AuthUtil.getUserName());
+		}
+		if (ObjectUtils.isNotNull(mktSlot.getMktSlotItemList()) && !mktSlot.getMktSlotItemList().isEmpty()) {
+			for (MktSlotItem item : mktSlot.getMktSlotItemList()) {
+				if (item.getId() == null) {
+					item.setCreateTime(new Date());
+					item.setCreateUser(AuthUtil.getUserId());
+					item.setCreateUserName(AuthUtil.getUserName());
+					item.setBranchId(branchId);
+					item.setBranchName(deptName);
+				} else {
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setUpdateUserName(AuthUtil.getUserName());
+				}
+				item.setPid(mktSlot.getId());
+			}
+			mktSlotItemService.saveOrUpdateBatch(mktSlot.getMktSlotItemList());
+		}
+		return R.data(mktSlot);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R submitMktSlot(String ids) {
+		if (ObjectUtils.isNull(ids)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		List<MktSlot> mktSlotList = baseMapper.selectList(new LambdaQueryWrapper<MktSlot>()
+			.eq(MktSlot::getTenantId, AuthUtil.getTenantId())
+			.eq(MktSlot::getIsDeleted, 0)
+			.in(MktSlot::getId, Func.toLongList(ids)));
+		if (mktSlotList.isEmpty()) {
+			throw new RuntimeException("未查到单据信息");
+		}
+		for (MktSlot item : mktSlotList) {
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setUpdateTime(new Date());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setBillStatus("已提交");
+		}
+		this.updateBatchById(mktSlotList);
+		return R.data("操作成功");
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R revokeMktSlot(String ids) {
+		if (ObjectUtils.isNull(ids)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		List<MktSlot> mktSlotList = baseMapper.selectList(new LambdaQueryWrapper<MktSlot>()
+			.eq(MktSlot::getTenantId, AuthUtil.getTenantId())
+			.eq(MktSlot::getIsDeleted, 0)
+			.in(MktSlot::getId, Func.toLongList(ids)));
+		if (mktSlotList.isEmpty()) {
+			throw new RuntimeException("未查到单据信息");
+		}
+		for (MktSlot item : mktSlotList) {
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setUpdateTime(new Date());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setBillStatus("录入");
+		}
+		this.updateBatchById(mktSlotList);
+		return R.data("操作成功");
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R generateQuotation(MktSlot mktSlot) {
+		if (mktSlot.getId() == null || ObjectUtils.isNull(mktSlot.getMktSlotItemList()) ||
+			mktSlot.getMktSlotItemList().isEmpty()) {
+			throw new RuntimeException("缺少必要请求参数");
+		}
+		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()) {
+			for (int i = 0; i <= days; i++) {
+				MktSlotQuotation mktSlotQuotation = new MktSlotQuotation();
+				LocalDate tomorrow = date1.plusDays(i);
+				mktSlotQuotation.setPid(detail.getId());
+				mktSlotQuotation.setPpid(item.getId());
+				mktSlotQuotation.setCreateTime(new Date());
+				mktSlotQuotation.setCreateUser(AuthUtil.getUserId());
+				mktSlotQuotation.setCreateUserName(AuthUtil.getUserName());
+				mktSlotQuotation.setBranchId(item.getBranchId());
+				mktSlotQuotation.setBranchName(item.getBranchName());
+				mktSlotQuotation.setEtd(Date.from(tomorrow.atStartOfDay(ZoneId.systemDefault()).toInstant()));
+				mktSlotQuotation.setGp20(item.getGp20());
+				mktSlotQuotation.setGp40(item.getGp40());
+				mktSlotQuotation.setHc40(item.getHc40());
+				mktSlotQuotation.setCurCode(item.getCurCode());
+				mktSlotQuotation.setPolId(item.getPolId());
+				mktSlotQuotation.setPolCode(item.getPolCode());
+				mktSlotQuotation.setPolCnName(item.getPolCnName());
+				mktSlotQuotation.setPolEnName(item.getPolEnName());
+				mktSlotQuotation.setPodId(item.getPodId());
+				mktSlotQuotation.setPodCode(item.getPodCode());
+				mktSlotQuotation.setPodCnName(item.getPodCnName());
+				mktSlotQuotation.setPodEnName(item.getPodEnName());
+				mktSlotQuotationList.add(mktSlotQuotation);
+			}
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setUpdateTime(new Date());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setWhetherQuotation("1");
+		}
+		if (!mktSlotQuotationList.isEmpty()) {
+			mktSlotQuotationService.saveBatch(mktSlotQuotationList);
+		}
+		mktSlotItemService.updateBatchById(mktSlot.getMktSlotItemList());
+		return R.data(mktSlot);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R revokeQuotation(MktSlot mktSlot) {
+		if (mktSlot.getId() == null || ObjectUtils.isNull(mktSlot.getMktSlotItemList()) ||
+			mktSlot.getMktSlotItemList().isEmpty()) {
+			throw new RuntimeException("缺少必要请求参数");
+		}
+		MktSlot detail = baseMapper.selectById(mktSlot.getId());
+		List<Long> idList = mktSlot.getMktSlotItemList().stream().map(MktSlotItem::getId).collect(Collectors.toList());
+		List<MktSlotQuotation> mktSlotQuotationList = mktSlotQuotationService.list(new LambdaQueryWrapper<MktSlotQuotation>()
+			.eq(MktSlotQuotation::getTenantId, AuthUtil.getTenantId())
+			.eq(MktSlotQuotation::getIsDeleted, 0)
+			.in(MktSlotQuotation::getPpid, idList)
+			.eq(MktSlotQuotation::getPid, detail.getId()));
+		if (!mktSlotQuotationList.isEmpty()) {
+			mktSlotQuotationService.removeByIds(mktSlotQuotationList.stream().map(MktSlotQuotation::getId).collect(Collectors.toList()));
+		}
+		for (MktSlotItem item : mktSlot.getMktSlotItemList()) {
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setUpdateTime(new Date());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setWhetherQuotation("0");
+		}
+		mktSlotItemService.updateBatchById(mktSlot.getMktSlotItemList());
+		return R.data(mktSlot);
+	}
+
+}

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

@@ -127,8 +127,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 	private final FinPeriodMapper finPeriodMapper;
 
-	private final AmendsMapper amendsMapper;
-
 	private final ISeaBillsDetailService seaBillsDetailService;
 
 	private final VesselsMapper vesselsMapper;
@@ -682,9 +680,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			if (ObjectUtils.isNotNull(seaBillsDetail.getHconsigneeDetails())) {
 				text = text + seaBillsDetail.getHconsigneeDetails() + ";";
 			}
-			if (ObjectUtils.isNotNull(seaBillsDetail.getHnotifyDetails())) {
-				text = text + seaBillsDetail.getHnotifyDetails() + ";";
-			}
 			if (ObjectUtils.isNotNull(seaBillsDetail.getHshipperDetails())) {
 				text = text + seaBillsDetail.getHshipperDetails() + ";";
 			}

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

@@ -1465,6 +1465,11 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 				bills.setHpaymode("CC");
 			}
 		}
+		//SI 备注
+		String siRemarks = getSheetCellValueAsString(sheet, 32, 1);
+		if (ObjectUtils.isNotNull(siRemarks)) {
+			bills.setSiRemarks(siRemarks);
+		}
 		List<Containers> containersList = new ArrayList<>();
 		BigDecimal sumQty = new BigDecimal(0L);
 		BigDecimal sumGw = new BigDecimal(0L);

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

@@ -1606,7 +1606,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			if (bCorps == null) {
 				throw new RuntimeException("基础资料未查到往来单位" + bills.getBranchName());
 			}
-			feeCenter.setCorpId(bCorps.getCorpId());
+			feeCenter.setCorpId(bCorps.getId());
 			feeCenter.setCorpCnName(bCorps.getCnName());
 			feeCenter.setCorpEnName(bCorps.getEnName());
 			feeCenter.setShortName(bCorps.getShortName());
@@ -1623,7 +1623,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 			if (bCorps == null) {
 				throw new RuntimeException("基础资料未查到编码为‘ZBYF’往来单位");
 			}
-			feeCenter.setCorpId(bCorps.getCorpId());
+			feeCenter.setCorpId(bCorps.getId());
 			feeCenter.setCorpCnName(bCorps.getCnName());
 			feeCenter.setCorpEnName(bCorps.getEnName());
 			feeCenter.setShortName(bCorps.getShortName());

+ 4 - 4
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

@@ -95,9 +95,9 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				.eq(Amends::getTenantId, AuthUtil.getTenantId())
 				.eq(Amends::getIsDeleted, 0)
 				.apply("find_in_set(mblno,'" + mblno + "')");
-			if (ObjectUtils.isNotNull(financeProfit.getExamine())) {
+//			if (ObjectUtils.isNotNull(financeProfit.getExamine())) {
 				lambdaQueryWrapper.eq(Amends::getStatus, 3);
-			}
+//			}
 			List<Amends> amendsList = amendsMapper.selectList(lambdaQueryWrapper);
 			List<FeeCenter> feeCenterList = new ArrayList<>();
 			if (!amendsList.isEmpty()) {
@@ -617,9 +617,9 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				.eq(Amends::getTenantId, AuthUtil.getTenantId())
 				.eq(Amends::getIsDeleted, 0)
 				.apply("find_in_set(mblno,'" + mblno + "')");
-			if (ObjectUtils.isNotNull(financeProfit.getExamine())) {
+//			if (ObjectUtils.isNotNull(financeProfit.getExamine())) {
 				lambdaQueryWrapper.eq(Amends::getStatus, 3);
-			}
+//			}
 			List<Amends> amendsList = amendsMapper.selectList(lambdaQueryWrapper);
 			List<FeeCenter> feeCenterList = new ArrayList<>();
 			if (!amendsList.isEmpty()) {