浏览代码

1.久置柜列表查询去掉状态等于作废的
2.免箱使天数审批通过赋值修改
3.海运出口打印件数整数大写修改
4.增加修改提单号接口
5.箱型箱量相关接口增加版本号控制
6.收发通,国外代理详情描述换行处理
7.海运出口转单增加判断箱号是否出场
8.客户订舱提单修改-海运出口覆盖问题修改
9.费用明细保存模板箱型编码取值修改
10.超期箱使费计算-每个区间计算天数加1,当天无货返空按一天算
11.放箱号增加取消数量及列表查询条件修改
12.免箱使申请报表报错修改
13.app统计去除主单数据
14.OW箱修改同步放箱号接口箱量计算逻辑修改

纪新园 3 天之前
父节点
当前提交
f0f75d526e
共有 24 个文件被更改,包括 956 次插入264 次删除
  1. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/PutBox.java
  2. 87 11
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/SeaFeeday.java
  3. 19 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/statisticAnalysis/UnshippedGoodsAnalysis.java
  4. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/ArchivesTrajectoryUtils.java
  5. 32 18
      blade-service/blade-los/src/main/java/org/springblade/los/Util/BigDecimalUtils.java
  6. 4 2
      blade-service/blade-los/src/main/java/org/springblade/los/Util/BillUtils.java
  7. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/Util/OwBoxUsageFeeUtils.java
  8. 64 3
      blade-service/blade-los/src/main/java/org/springblade/los/Util/StringTools.java
  9. 358 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/UpdateHblnoUtils.java
  10. 12 4
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/mapper/CorpsMapper.xml
  11. 9 6
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  12. 6 5
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/PutBoxController.java
  13. 61 46
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java
  14. 2 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ArchivesServiceImpl.java
  15. 38 51
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java
  16. 26 15
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  17. 168 84
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  18. 17 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java
  19. 7 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/SeaContainerNumberItemServiceImpl.java
  20. 19 5
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/SeaFeedayServiceImpl.java
  21. 4 6
      blade-service/blade-los/src/main/java/org/springblade/los/check/controller/AuditProecessController.java
  22. 4 2
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java
  23. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  24. 6 3
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

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

@@ -469,6 +469,12 @@ public class PutBox implements Serializable {
 	private String boxTubeRemarks;
 
 	/**
+	 * 取消数量
+	 */
+	@ApiModelProperty(value = "取消数量")
+	private Integer cancelNumber;
+
+	/**
 	 * 开船日期
 	 */
 	@TableField(exist = false)

+ 87 - 11
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/SeaFeeday.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springblade.los.utils.LosSpecialHandle;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -116,15 +117,25 @@ public class SeaFeeday implements Serializable {
 	@ApiModelProperty(value = "HB/L NO")
 	private String hblno;
 	/**
-	 * 免箱使天数
+	 * POL免箱使天数
 	 */
-	@ApiModelProperty(value = "免箱使天数")
-	private Integer freeBoxUseDays;
+	@ApiModelProperty(value = "POL免箱使天数")
+	private Integer polFreeBoxUseDays;
 	/**
-	 * 申请天数
+	 * POD免箱使天数
 	 */
-	@ApiModelProperty(value = "申请天数")
-	private Integer applyDays;
+	@ApiModelProperty(value = "POD免箱使天数")
+	private Integer podFreeBoxUseDays;
+	/**
+	 * POL申请天数
+	 */
+	@ApiModelProperty(value = "POL申请天数")
+	private Integer polApplyDays;
+	/**
+	 * POD申请天数
+	 */
+	@ApiModelProperty(value = "POD申请天数")
+	private Integer podApplyDays;
 	/**
 	 * 申请金额
 	 */
@@ -166,11 +177,6 @@ public class SeaFeeday implements Serializable {
 	@ApiModelProperty(value = "开船日期")
 	private Date etd;
 	/**
-	 * 到港日期
-	 */
-	@ApiModelProperty(value = "到港日期")
-	private Date eta;
-	/**
 	 * 实际开船日期
 	 */
 	@ApiModelProperty(value = "实际开船日期")
@@ -185,6 +191,76 @@ public class SeaFeeday implements Serializable {
 	 */
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
+	/**
+	 * 船名 id
+	 */
+	@ApiModelProperty(value = "船名 id")
+	private Long vesselId;
+	/**
+	 * 中文船名
+	 */
+	@ApiModelProperty(value = "中文船名")
+	private String vesselCnName;
+	/**
+	 * 英文船名
+	 */
+	@ApiModelProperty(value = "英文船名")
+	private String vesselEnName;
+	/**
+	 * 航次
+	 */
+	@ApiModelProperty(value = "航次")
+	private String voyageNo;
+	/**
+	 * 装货港 id
+	 */
+	@ApiModelProperty(value = "装货港 id")
+	private Long polId;
+	/**
+	 * 装货港代码
+	 */
+	@ApiModelProperty(value = "装货港代码")
+	private String polCode;
+	/**
+	 * 装货港英文名称
+	 */
+	@ApiModelProperty(value = "装货港英文名称")
+	private String polCnName;
+	/**
+	 * 装货港英文名称
+	 */
+	@ApiModelProperty(value = "装货港英文名称")
+	private String polEnName;
+	/**
+	 * 装货港英文名称打印 默认等于pol_en_name 可以编辑
+	 */
+	@ApiModelProperty(value = "装货港英文名称打印 默认等于pol_en_name 可以编辑")
+	private String polNamePrint;
+	/**
+	 * 卸货港 id
+	 */
+	@ApiModelProperty(value = "卸货港 id")
+	private Long podId;
+	/**
+	 * 卸货港代码
+	 */
+	@ApiModelProperty(value = "卸货港代码")
+	private String podCode;
+	/**
+	 * 卸货港中文名称
+	 */
+	@ApiModelProperty(value = "卸货港中文名称")
+	private String podCnName;
+	/**
+	 * 卸货港英文名称
+	 */
+	@ApiModelProperty(value = "卸货港英文名称")
+	private String podEnName;
+	/**
+	 * 卸货港英文名称打印 默认等于pol_en_name 可以编辑
+	 */
+	@ApiModelProperty(value = "卸货港英文名称打印 默认等于pol_en_name 可以编辑")
+	private String podNamePrint;
 
 
 }

+ 19 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/statisticAnalysis/UnshippedGoodsAnalysis.java

@@ -1,5 +1,8 @@
 package org.springblade.los.statisticAnalysis;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -33,6 +36,22 @@ public class UnshippedGoodsAnalysis {
 	 * 租户
 	 */
 	private String tenantId;
+	/**
+	 * 所属公司
+	 */
+	private String branchId;
+	/**
+	 * 所属公司
+	 */
+	private String branchName;
+	/**
+	 * 业务员
+	 */
+	private Long srcId;
+	/**
+	 * 业务员
+	 */
+	private String srcCnName;
 
 
 }

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/ArchivesTrajectoryUtils.java

@@ -185,6 +185,10 @@ public class ArchivesTrajectoryUtils {
 		archivesTrajectoryService.save(archivesTrajectory);
 	}
 
+	/**
+	 * 海运进出口保存修改atd、ata日期生成箱轨迹
+	 * @param bills 海运进出口单据
+	 */
 	public void saveTrajectoryAndContainers(Bills bills) {
 		if ("SOC".equals(bills.getBoxBelongsTo())) {
 			List<ArchivesTrajectory> archivesTrajectoryList = new ArrayList<>();

+ 32 - 18
blade-service/blade-los/src/main/java/org/springblade/los/Util/BigDecimalUtils.java

@@ -54,24 +54,7 @@ public class BigDecimalUtils {
 				result.append(LESS_THAN_20[Character.getNumericValue(c)]).append(" ");
 			}
 		}
-		String data = result.toString().trim().substring(result.toString().trim().lastIndexOf("AND"));
-		if ("AND".equals(data)) {
-			data = result.toString().trim().substring(0, result.toString().trim().lastIndexOf("AND"));
-			if (data.trim().lastIndexOf("AND") >= 0) {
-				String data1 = data.trim().substring(data.trim().lastIndexOf("AND"));
-				if ("AND".equals(data1)) {
-					data = data.trim().substring(0, data.trim().lastIndexOf("AND"));
-				}
-			}
-			data = data.trim();
-			if (data.lastIndexOf("-") >= 0) {
-				String data2 = data.substring(data.lastIndexOf("-"));
-				if ("-".equals(data2)) {
-					data = data.substring(0, data.lastIndexOf("-"));
-				}
-			}
-			return data;
-		} else {
+		if ("THOUSAND".equals(result.toString().trim().substring(result.toString().trim().lastIndexOf("THOUSAND")))){
 			if (result.toString().trim().lastIndexOf("-") >= 0) {
 				String data2 = result.toString().trim().substring(result.toString().trim().lastIndexOf("-"));
 				if ("-".equals(data2)) {
@@ -83,6 +66,37 @@ public class BigDecimalUtils {
 			} else {
 				return result.toString().trim();
 			}
+		}else{
+			String data = result.toString().trim().substring(result.toString().trim().lastIndexOf("AND"));
+			if ("AND".equals(data)) {
+				data = result.toString().trim().substring(0, result.toString().trim().lastIndexOf("AND"));
+				if (data.trim().lastIndexOf("AND") >= 0) {
+					String data1 = data.trim().substring(data.trim().lastIndexOf("AND"));
+					if ("AND".equals(data1)) {
+						data = data.trim().substring(0, data.trim().lastIndexOf("AND"));
+					}
+				}
+				data = data.trim();
+				if (data.lastIndexOf("-") >= 0) {
+					String data2 = data.substring(data.lastIndexOf("-"));
+					if ("-".equals(data2)) {
+						data = data.substring(0, data.lastIndexOf("-"));
+					}
+				}
+				return data;
+			} else {
+				if (result.toString().trim().lastIndexOf("-") >= 0) {
+					String data2 = result.toString().trim().substring(result.toString().trim().lastIndexOf("-"));
+					if ("-".equals(data2)) {
+						data2 = result.toString().trim().substring(0, result.toString().trim().lastIndexOf("-"));
+						return data2;
+					} else {
+						return result.toString().trim();
+					}
+				} else {
+					return result.toString().trim();
+				}
+			}
 		}
 	}
 

+ 4 - 2
blade-service/blade-los/src/main/java/org/springblade/los/Util/BillUtils.java

@@ -1203,14 +1203,16 @@ public class BillUtils implements IBillUtils {
 				.apply("DATE_FORMAT(effective_end_date,'%Y-%m-%d') >= '" + formatter.format(bills.getEtd()) + "'")
 			);
 			if (costList.isEmpty()) {
-				throw new RuntimeException("请先维护成本!");
+				throw new RuntimeException("系统检测到" + bills.getEtd() + " " + bills.getCarrierCnName() + " " + bills.getPolEnName() +
+					"->" + bills.getPodEnName() + "没有指导价 请联系成本中心!!!");
 			}
 			List<RouteCostItem> costItemList = routeCostItemService.list(new LambdaQueryWrapper<RouteCostItem>()
 				.eq(RouteCostItem::getIsDeleted, 0)
 				.eq(RouteCostItem::getTenantId, AuthUtil.getTenantId())
 				.in(RouteCostItem::getPid, costList.stream().map(RouteCost::getId).collect(Collectors.toList())));
 			if (costItemList.isEmpty()) {
-				throw new RuntimeException("请先维护成本!");
+				throw new RuntimeException("系统检测到" + bills.getEtd() + " " + bills.getCarrierCnName() + " " + bills.getPolEnName() +
+					"->" + bills.getPodEnName() + "没有指导价 请联系成本中心!!!");
 			}
 			List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
 				.eq(PreContainers::getIsDeleted, 0)

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/Util/OwBoxUsageFeeUtils.java

@@ -732,7 +732,7 @@ public class OwBoxUsageFeeUtils {
 				LocalDateTime ldt1 = item.getPolStationEmptyContainerExitDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
 				LocalDateTime ldt2 = item.getPolReturnDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
 				int overdueDays = (int) ChronoUnit.DAYS.between(ldt1, ldt2);
-				if (overdueDays > 0) {
+				if (overdueDays >= 0) {
 					FeeCenter feeCenter = this.addFeeCenter(item, bills, fees, storageFeesItems, curExrateList, overdueDays, exrateType, "3");
 					if (feeCenter != null) {
 						FeeCenter feeCenterC = new FeeCenter();
@@ -1346,7 +1346,7 @@ public class OwBoxUsageFeeUtils {
 				//剩余计费天数需从免箱使天数所在下一档次开始计算
 				if (term.getStartDay() > finalOverdueBoxUseDays) {
 					//本档次需计费天数
-					int dayLength = term.getEndDay() - term.getStartDay();
+					int dayLength = term.getEndDay()+1 - term.getStartDay();
 					//剩余计费天数是否大于本档次计费天数
 					if (days > dayLength) {
 						days -= dayLength;

+ 64 - 3
blade-service/blade-los/src/main/java/org/springblade/los/Util/StringTools.java

@@ -13,8 +13,6 @@ import org.springblade.los.utils.LosSpecialHandle;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.List;
 import java.util.Random;
 
 /**
@@ -330,7 +328,6 @@ public class StringTools {
 	public static String wrapText(String text, int maxLineLength) {
 		if (text == null) return null;
 		if (maxLineLength <= 0) throw new IllegalArgumentException("maxLineLength must be > 0");
-
 		StringBuilder result = new StringBuilder();
 		String[] paragraphs = text.split("\n", -1); // 保留原有换行
 
@@ -347,6 +344,21 @@ public class StringTools {
 				// 计算理论结束位置
 				int end = Math.min(start + maxLineLength, length);
 
+				//检测是否在行尾遇到连续星号序列(如 *、**、***)
+				if (end < length && end == start + maxLineLength) {
+					int starCount = 0;
+					int pos = end;
+					// 统计从 end 开始连续的 * 数量
+					while (pos < length && paragraph.charAt(pos) == '*') {
+						starCount++;
+						pos++;
+					}
+					// 如果存在连续星号,允许整段星号序列不计入长度
+					if (starCount > 0) {
+						end = end + starCount; // 跳过所有星号
+					}
+				}
+
 				// 如果不是最后一行,且结束位置不是空格,则回退到前一个空格
 				if (end < length && !Character.isWhitespace(paragraph.charAt(end))) {
 					int lastSpace = paragraph.lastIndexOf(' ', end);
@@ -372,4 +384,53 @@ public class StringTools {
 		}
 		return result.toString();
 	}
+
+	public static Bills lineProcess(String text, int maxLineLength, Bills bills, String type) {
+		if (text == null) return null;
+		if (maxLineLength <= 0) throw new IllegalArgumentException("maxLineLength must be > 0");
+
+		String[] paragraphs = text.split("\n", -1);
+		if (paragraphs.length <= maxLineLength) {
+			return null;
+		} else {
+			StringBuilder firstString = new StringBuilder();
+			StringBuilder remaining = new StringBuilder();
+			for (int i = 0; i < paragraphs.length; i++) {
+				if (i < maxLineLength) {
+					if (i > 0) {
+						firstString.append("\n");
+					}
+					firstString.append(paragraphs[i]);
+				} else {
+					if (i == maxLineLength) {
+						remaining.append(paragraphs[i]);
+					} else {
+						remaining.append("\n").append(paragraphs[i]);
+					}
+				}
+			}
+			SeaBillsDetail seaBillsDetail = bills.getDetail();
+			if ("1".equals(type)) {
+				if (seaBillsDetail != null) {
+					seaBillsDetail.setHshipperDetails(firstString + "*");
+				}
+				bills.setCommodityDescr("*" + remaining);
+			} else if ("2".equals(type)) {
+				if (seaBillsDetail != null) {
+					seaBillsDetail.setHconsigneeDetails(firstString + "**");
+				}
+				bills.setCommodityDescr("**" + remaining);
+			} else if ("3".equals(type)) {
+				if (seaBillsDetail != null) {
+					seaBillsDetail.setHnotifyDetails(firstString + "***");
+				}
+				bills.setCommodityDescr("***" + remaining);
+			} else if ("4".equals(type)) {
+				bills.setForeignAgencyDetails(firstString + "****");
+				bills.setCommodityDescr("****" + remaining);
+			}
+			bills.setDetail(seaBillsDetail);
+			return bills;
+		}
+	}
 }

+ 358 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/UpdateHblnoUtils.java

@@ -0,0 +1,358 @@
+package org.springblade.los.Util;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.los.box.entity.ArchivesTrajectory;
+import org.springblade.los.box.entity.PutBoxItems;
+import org.springblade.los.box.entity.TradingBoxItem;
+import org.springblade.los.box.service.IArchivesTrajectoryService;
+import org.springblade.los.box.service.IPutBoxItemsService;
+import org.springblade.los.box.service.ITradingBoxItemService;
+import org.springblade.los.business.amends.entity.Amends;
+import org.springblade.los.business.amends.service.IAmendsService;
+import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.los.business.sea.entity.Containers;
+import org.springblade.los.business.sea.entity.SeaContainerNumberItem;
+import org.springblade.los.business.sea.mapper.BillsMapper;
+import org.springblade.los.business.sea.service.IContainersService;
+import org.springblade.los.business.sea.service.ISeaContainerNumberItemService;
+import org.springblade.los.finance.fee.entity.FeeCenter;
+import org.springblade.los.finance.fee.entity.FinAccBills;
+import org.springblade.los.finance.fee.service.IFeeCenterService;
+import org.springblade.los.finance.fee.service.IFinAccBillsService;
+import org.springblade.los.finance.invoices.entity.FinInvoices;
+import org.springblade.los.finance.invoices.entity.FinInvoicesItems;
+import org.springblade.los.finance.invoices.mapper.FinInvoicesMapper;
+import org.springblade.los.finance.invoices.service.IFinInvoicesItemsService;
+import org.springblade.los.finance.stl.entity.FinStlBills;
+import org.springblade.los.finance.stl.entity.FinStlBillsItems;
+import org.springblade.los.finance.stl.mapper.FinStlBillsMapper;
+import org.springblade.los.finance.stl.service.IFinStlBillsItemsService;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/12/29
+ */
+@Component
+@AllArgsConstructor
+public class UpdateHblnoUtils {
+
+	private final IFeeCenterService feeCenterService;
+
+	private final IFinAccBillsService finAccBillsService;
+
+	private final BillsMapper billsMapper;
+
+	private final ITradingBoxItemService tradingBoxItemService;
+
+	private final FinStlBillsMapper finStlBillsMapper;
+
+	private final IFinStlBillsItemsService finStlBillsItemsService;
+
+	private final FinInvoicesMapper finInvoicesMapper;
+
+	private final IFinInvoicesItemsService finInvoicesItemsService;
+
+	private final IPutBoxItemsService putBoxItemsService;
+
+	private final IAmendsService amendsService;
+
+	private final ISeaContainerNumberItemService seaContainerNumberItemService;
+
+	private final IContainersService containersService;
+
+	private final IArchivesTrajectoryService archivesTrajectoryService;
+
+	/**
+	 * 修改提单号
+	 * @param id 单据id
+	 * @param hblno 新提单号
+	 */
+	public R updateHblno(Long id, String hblno) {
+		if (id == null || ObjectUtils.isNull(hblno)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills bills = billsMapper.selectById(id);
+		if (bills == null) {
+			throw new RuntimeException("未查到单据信息");
+		}
+		List<Bills> billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.ne(Bills::getId, id)
+			.eq(Bills::getHblno, bills.getHblno()));
+		if (!billsList.isEmpty()) {
+			for (Bills item : billsList) {
+				item.setHblno(hblno);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+				int version1 = StringUtil.isBlank(item.getVersion()) ? 1 : Integer.parseInt(item.getVersion());
+				item.setVersion(String.valueOf(version1 + 1));
+				billsMapper.updateById(item);
+			}
+		}
+		//获取费用明细数据
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getHblno, bills.getHblno()));
+		if (!feeCenterList.isEmpty()) {
+			for (FeeCenter item : feeCenterList) {
+				item.setHblno(hblno);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+			}
+			feeCenterService.updateBatchById(feeCenterList);
+		}
+		//获取账单明细数据
+		List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+			.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+			.eq(FinAccBills::getIsDeleted, 0)
+			.eq(FinAccBills::getHblno, bills.getHblno()));
+		if (!finAccBillsList.isEmpty()) {
+			//修改账单汇率以及重新计算合计金额
+			for (FinAccBills item : finAccBillsList) {
+				item.setHblno(hblno);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+			}
+			finAccBillsService.updateBatchById(finAccBillsList);
+			List<Long> accBillIdList = finAccBillsList.stream().map(FinAccBills::getId).collect(Collectors.toList());
+			//获取账单对应对账,付费申请,结算中心明细数据
+			List<FinStlBillsItems> finStlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
+				.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinStlBillsItems::getIsDeleted, 0)
+				.in(FinStlBillsItems::getAccBillId, accBillIdList));
+			if (!finStlBillsItemsList.isEmpty()) {
+				//修改明细汇率以及重新计算合计金额
+				for (FinStlBillsItems item : finStlBillsItemsList) {
+					item.setHblno(hblno);
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					item.setUpdateTime(new Date());
+				}
+				finStlBillsItemsService.updateBatchById(finStlBillsItemsList);
+				List<Long> idList = finStlBillsItemsList.stream().map(FinStlBillsItems::getId).collect(Collectors.toList());
+				List<Long> pidList = finStlBillsItemsList.stream().map(FinStlBillsItems::getPid).collect(Collectors.toList());
+				//获取除本次明细以外其他所有明细
+				List<FinStlBillsItems> finStlBillsItems = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
+					.eq(FinStlBillsItems::getIsDeleted, 0)
+					.eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
+					.in(FinStlBillsItems::getPid, pidList)
+					.notIn(FinStlBillsItems::getId, idList));
+				if (!finStlBillsItems.isEmpty()) {
+					finStlBillsItems.addAll(finStlBillsItemsList);
+				} else {
+					finStlBillsItems = finStlBillsItemsList;
+				}
+				List<Long> stlBillsIdList = finStlBillsItems.stream().map(FinStlBillsItems::getPid).collect(Collectors.toList());
+				//获取明细对应主单据数据
+				List<FinStlBills> finStlBillsList = finStlBillsMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
+					.eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
+					.eq(FinStlBills::getIsDeleted, 0)
+					.in(FinStlBills::getId, stlBillsIdList));
+				if (!finStlBillsList.isEmpty()) {
+					for (FinStlBills item : finStlBillsList) {
+						List<FinStlBillsItems> finStlBillsItems1 = finStlBillsItems.stream().filter(e -> e.getPid().equals(item.getId()))
+							.collect(Collectors.toList());
+						if (!finStlBillsItems1.isEmpty()) {
+							item.setHblno(finStlBillsItems1.stream().map(FinStlBillsItems::getHblno).distinct().collect(Collectors.joining(",")));
+							item.setHblnos(finStlBillsItems1.stream().map(FinStlBillsItems::getHblno).distinct().collect(Collectors.joining(",")));
+							item.setUpdateUser(AuthUtil.getUserId());
+							item.setUpdateUserName(AuthUtil.getUserName());
+							item.setUpdateTime(new Date());
+							finStlBillsMapper.updateById(item);
+						}
+					}
+				}
+			}
+			//获取账单对应发票申请,销项发票明细数据
+			List<FinInvoicesItems> finInvoicesItemsList = finInvoicesItemsService.list(new LambdaQueryWrapper<FinInvoicesItems>()
+				.eq(FinInvoicesItems::getTenantId, AuthUtil.getTenantId())
+				.eq(FinInvoicesItems::getIsDeleted, 0)
+				.in(FinInvoicesItems::getAccBillId, accBillIdList));
+			if (!finInvoicesItemsList.isEmpty()) {
+				//修改明细汇率以及重新计算合计金额
+				for (FinInvoicesItems item : finInvoicesItemsList) {
+					item.setHblno(hblno);
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateUserName(AuthUtil.getUserName());
+					item.setUpdateTime(new Date());
+				}
+				finInvoicesItemsService.updateBatchById(finInvoicesItemsList);
+				List<Long> idList = finInvoicesItemsList.stream().map(FinInvoicesItems::getId).collect(Collectors.toList());
+				List<Long> pidList = finInvoicesItemsList.stream().map(FinInvoicesItems::getPid).collect(Collectors.toList());
+				//获取除本次明细以外其他所有明细
+				List<FinInvoicesItems> finInvoicesItems = finInvoicesItemsService.list(new LambdaQueryWrapper<FinInvoicesItems>()
+					.eq(FinInvoicesItems::getIsDeleted, 0)
+					.eq(FinInvoicesItems::getTenantId, AuthUtil.getTenantId())
+					.in(FinInvoicesItems::getPid, pidList)
+					.notIn(FinInvoicesItems::getId, idList));
+				if (!finInvoicesItems.isEmpty()) {
+					finInvoicesItems.addAll(finInvoicesItemsList);
+				} else {
+					finInvoicesItems = finInvoicesItemsList;
+				}
+				List<Long> stlBillsIdList = finInvoicesItems.stream().map(FinInvoicesItems::getPid).collect(Collectors.toList());
+				//获取明细对应主单据数据
+				List<FinInvoices> finStlBillsList = finInvoicesMapper.selectList(new LambdaQueryWrapper<FinInvoices>()
+					.eq(FinInvoices::getTenantId, AuthUtil.getTenantId())
+					.eq(FinInvoices::getIsDeleted, 0)
+					.in(FinInvoices::getId, stlBillsIdList));
+				if (!finStlBillsList.isEmpty()) {
+					for (FinInvoices item : finStlBillsList) {
+						List<FinInvoicesItems> finInvoicesItems1 = finInvoicesItems.stream().filter(e -> e.getPid().equals(item.getId()))
+							.collect(Collectors.toList());
+						if (!finInvoicesItems1.isEmpty()) {
+							item.setHblno(finInvoicesItems1.stream().map(FinInvoicesItems::getHblno).distinct().collect(Collectors.joining(",")));
+							item.setHblnos(finInvoicesItems1.stream().map(FinInvoicesItems::getHblno).distinct().collect(Collectors.joining(",")));
+							item.setUpdateUser(AuthUtil.getUserId());
+							item.setUpdateUserName(AuthUtil.getUserName());
+							item.setUpdateTime(new Date());
+							finInvoicesMapper.updateById(item);
+						}
+					}
+				}
+			}
+		}
+		List<TradingBoxItem> tradingBoxItemList = tradingBoxItemService.list(new LambdaQueryWrapper<TradingBoxItem>()
+			.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
+			.eq(TradingBoxItem::getIsDeleted, 0)
+			.eq(TradingBoxItem::getHblno, bills.getHblno()));
+		if (!tradingBoxItemList.isEmpty()) {
+			for (TradingBoxItem item : tradingBoxItemList) {
+				item.setHblno(hblno);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+			}
+			tradingBoxItemService.updateBatchById(tradingBoxItemList);
+		}
+		List<PutBoxItems> putBoxItemsList = putBoxItemsService.list(new LambdaQueryWrapper<PutBoxItems>()
+			.eq(PutBoxItems::getTenantId, AuthUtil.getTenantId())
+			.eq(PutBoxItems::getIsDeleted, 0)
+			.eq(PutBoxItems::getHblno, bills.getHblno()));
+		if (!putBoxItemsList.isEmpty()) {
+			for (PutBoxItems item : putBoxItemsList) {
+				item.setHblno(hblno);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+			}
+			putBoxItemsService.updateBatchById(putBoxItemsList);
+		}
+		List<Amends> amendsList = amendsService.list(new LambdaQueryWrapper<Amends>()
+			.eq(Amends::getTenantId, AuthUtil.getTenantId())
+			.eq(Amends::getIsDeleted, 0)
+			.eq(Amends::getHblno, bills.getHblno()));
+		if (!putBoxItemsList.isEmpty()) {
+			for (Amends item : amendsList) {
+				item.setHblno(hblno);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+			}
+			amendsService.updateBatchById(amendsList);
+		}
+		List<SeaContainerNumberItem> seaContainerNumberItemList = seaContainerNumberItemService.list(new LambdaQueryWrapper<SeaContainerNumberItem>()
+			.eq(SeaContainerNumberItem::getTenantId, AuthUtil.getTenantId())
+			.eq(SeaContainerNumberItem::getIsDeleted, 0)
+			.eq(SeaContainerNumberItem::getHblno, bills.getHblno()));
+		if (!seaContainerNumberItemList.isEmpty()) {
+			for (SeaContainerNumberItem item : seaContainerNumberItemList) {
+				item.setHblno(hblno);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+			}
+			seaContainerNumberItemService.updateBatchById(seaContainerNumberItemList);
+		}
+		List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
+			.eq(Containers::getTenantId, AuthUtil.getTenantId())
+			.eq(Containers::getIsDeleted, 0)
+			.eq(Containers::getHblno, bills.getHblno()));
+		if (!containersList.isEmpty()) {
+			List<ArchivesTrajectory> archivesTrajectoryList = new ArrayList<>();
+			for (Containers item : containersList) {
+				item.setHblno(hblno);
+				item.setUpdateUser(AuthUtil.getUserId());
+				item.setUpdateUserName(AuthUtil.getUserName());
+				item.setUpdateTime(new Date());
+				ArchivesTrajectory archivesTrajectory = new ArchivesTrajectory();
+				archivesTrajectory.setPortId(bills.getPolId());
+				archivesTrajectory.setPortCode(bills.getPolCode());
+				archivesTrajectory.setPortCname(bills.getPolCnName());
+				archivesTrajectory.setPortEname(bills.getPolEnName());
+				archivesTrajectory.setStationId(bills.getCyId());
+				archivesTrajectory.setStationCode(bills.getCyCode());
+				archivesTrajectory.setStationCname(bills.getCyCnName());
+				archivesTrajectory.setStationEname(bills.getCyCnName());
+				archivesTrajectory.setBoxDynamics("提单号修改");
+				archivesTrajectory.setStatus("提单号修改");
+				archivesTrajectory.setEtd(bills.getActualEtd());
+				archivesTrajectory.setNewDate(bills.getActualEtd());
+				archivesTrajectory.setContainerNumber(item.getContainerNumber());
+				archivesTrajectory.setBoxType(item.getCntrTypeCode());
+				archivesTrajectory.setBoxCategory(item.getBoxSrcType());
+				archivesTrajectory.setMblno(item.getMblno());
+				archivesTrajectory.setHblno(hblno);
+				archivesTrajectory.setPodId(bills.getPodId());
+				archivesTrajectory.setPodCode(bills.getPodCode());
+				archivesTrajectory.setPodCname(bills.getPodCnName());
+				archivesTrajectory.setPodEname(bills.getPodEnName());
+				archivesTrajectory.setBillType(bills.getBusinessType());
+				archivesTrajectory.setCode(item.getCntrNo());
+				archivesTrajectory.setCreateTime(new Date());
+				archivesTrajectory.setCreateUser(AuthUtil.getUserId());
+				archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
+				archivesTrajectory.setTenantId(AuthUtil.getTenantId());
+				archivesTrajectory.setSrcId(bills.getId());
+				archivesTrajectory.setPolCyId(item.getPolCyId());
+				archivesTrajectory.setPolCyCode(item.getPolCyCode());
+				archivesTrajectory.setPolCyCname(item.getPolCyCname());
+				archivesTrajectory.setPolCyEname(item.getPolCyEname());
+				archivesTrajectory.setPolFreeBoxUseDays(bills.getPolFreeBoxUseDays());
+				archivesTrajectory.setPolPreAppearanceDate(item.getPolPreAppearanceDate());
+				archivesTrajectory.setPolStationEmptyContainerExitDate(item.getPolStationEmptyContainerExitDate());
+				archivesTrajectory.setPolReturnDate(item.getPolReturnDate());
+				archivesTrajectory.setPolOverdueBoxUseDays(item.getPolOverdueBoxUseDays());
+				archivesTrajectory.setEta(bills.getEta());
+				archivesTrajectory.setPodEmptyContainerReturnDate(item.getPodEmptyContainerReturnDate());
+				archivesTrajectory.setPodStationId(item.getPodStationId());
+				archivesTrajectory.setPodStationCode(item.getPodStationCode());
+				archivesTrajectory.setPodStationCname(item.getPodStationCname());
+				archivesTrajectory.setPodStationEname(item.getPodStationEname());
+				archivesTrajectory.setPodFreeBoxUseDays(bills.getPodFreeBoxUseDays());
+				archivesTrajectory.setPodBoxUseDays(item.getPodBoxUseDays());
+				archivesTrajectory.setShipNameId(bills.getVesselId());
+				archivesTrajectory.setShipCname(bills.getVesselCnName());
+				archivesTrajectory.setShipEname(bills.getVesselEnName());
+				archivesTrajectory.setVoyage(bills.getVoyageNo());
+				archivesTrajectoryList.add(archivesTrajectory);
+			}
+			containersService.updateBatchById(containersList);
+			archivesTrajectoryService.saveBatch(archivesTrajectoryList);
+		}
+		bills.setHblno(hblno);
+		bills.setUpdateUser(AuthUtil.getUserId());
+		bills.setUpdateUserName(AuthUtil.getUserName());
+		bills.setUpdateTime(new Date());
+		int version = StringUtil.isBlank(bills.getVersion()) ? 1 : Integer.parseInt(bills.getVersion());
+		bills.setVersion(String.valueOf(version + 1));
+		billsMapper.updateById(bills);
+		return R.success("操作成功");
+	}
+}

+ 12 - 4
blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/mapper/CorpsMapper.xml

@@ -109,7 +109,9 @@
         (CASE corp.business_type
         WHEN  'SE' THEN '海运出口'
         WHEN  'SI' THEN '海运进口'
-        ELSE '其他' END) as businessType
+        ELSE '其他' END) as businessType,
+        corp.branch_name as branchName,
+        corp.src_cn_name as srcCnName
         FROM
         los_b_corps corp
         WHERE
@@ -118,16 +120,22 @@
         <if test="data.corpName != null and data.corpName != '' ">
             AND corp.cn_name = #{data.corpName}
         </if>
+        <if test="data.branchId != null and data.branchId != '' ">
+          and find_in_set(#{data.branchId},corp.branch_id)
+        </if>
+        <if test="data.srcId != null and data.srcId != '' ">
+            AND corp.src_id = #{data.srcId}
+        </if>
         <if test="data.businessType != null and data.businessType != '' ">
             AND corp.business_type = #{data.businessType}
         </if>
-        <if test="data.unshippedGoodsDays != null and data.unshippedGoodsDays != '' and data.unshippedGoodsDays == '1'">
+        <if test='data.unshippedGoodsDays != null and data.unshippedGoodsDays != "" and data.unshippedGoodsDays == "1"'>
             AND corp.business_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 2 MONTH) AND DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
         </if>
-        <if test="data.unshippedGoodsDays != null and data.unshippedGoodsDays != '' and data.unshippedGoodsDays == '2'">
+        <if test='data.unshippedGoodsDays != null and data.unshippedGoodsDays != "" and data.unshippedGoodsDays == "2"'>
             AND corp.business_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 3 MONTH) AND DATE_SUB(CURDATE(), INTERVAL 2 MONTH)
         </if>
-        <if test="data.unshippedGoodsDays != null and data.unshippedGoodsDays != '' and data.unshippedGoodsDays == '3'">
+        <if test='data.unshippedGoodsDays != null and data.unshippedGoodsDays != "" and data.unshippedGoodsDays == "3"'>
             AND (
             corp.business_date IS NULL
             OR corp.business_date &lt;= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)

+ 9 - 6
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java

@@ -2663,14 +2663,17 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				.eq(SeaFeeday::getPid, billId)
 				.orderByDesc(SeaFeeday::getCreateTime)
 				.last("LIMIT 1"));
-			SeaFeedayVO vo = new SeaFeedayVO();
-			BeanUtil.copyProperties(bills, vo);
-			if (vo != null) {
-				vo.setDept(dept);
-				map.put(MagicValues.DATA, vo);
-			} else {
+			if (bills != null){
+				SeaFeedayVO vo = new SeaFeedayVO();
+				BeanUtil.copyProperties(bills, vo);
+				if (vo != null) {
+					vo.setDept(dept);
+					map.put(MagicValues.DATA, vo);
+				}
+			}else{
 				map.put(MagicValues.DATA, null);
 			}
+
 		} else {
 			// 默认取单据数据,包括主表、预配箱、配箱、费用
 			Bills bills = billsService.getById(billId);

+ 6 - 5
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/PutBoxController.java

@@ -111,10 +111,10 @@ public class PutBoxController extends BladeController {
 		lambdaQueryWrapper.orderByAsc(PutBox::getPodCname);
 		lambdaQueryWrapper.orderByAsc(PutBox::getPriorityLevel);
 		if ("1".equals(putBox.getWhetherDisplay())) {
-			lambdaQueryWrapper.ne(PutBox::getRemainingNum, 0);
+			lambdaQueryWrapper.apply("remaining_num - cancel_number != 0");
 			lambdaQueryWrapper.eq(PutBox::getWhetherDeactivate, "0");
 		} else if ("2".equals(putBox.getWhetherDisplay())) {
-			lambdaQueryWrapper.eq(PutBox::getRemainingNum, 0);
+			lambdaQueryWrapper.apply("remaining_num - cancel_number = 0");
 			lambdaQueryWrapper.eq(PutBox::getWhetherDeactivate, "0");
 		} else if ("3".equals(putBox.getWhetherDisplay())) {
 			lambdaQueryWrapper.eq(PutBox::getWhetherDeactivate, "1");
@@ -157,15 +157,16 @@ public class PutBoxController extends BladeController {
 			.like(ObjectUtils.isNotNull(putBox.getSrcNo()), PutBox::getSrcNo, putBox.getSrcNo())
 			.like(ObjectUtils.isNotNull(putBox.getCode()), PutBox::getCode, putBox.getCode())
 			.eq(ObjectUtils.isNotNull(putBox.getPriorityLevel()), PutBox::getPriorityLevel, putBox.getPriorityLevel());
+		lambdaQueryWrapper.eq(PutBox::getWhetherDeactivate,0);
 		lambdaQueryWrapper.orderByDesc(PutBox::getCreateTime);
 		lambdaQueryWrapper.orderByAsc(PutBox::getPolCname);
 		lambdaQueryWrapper.orderByAsc(PutBox::getPodCname);
 		lambdaQueryWrapper.orderByAsc(PutBox::getPriorityLevel);
 		if ("1".equals(putBox.getWhetherDisplay())) {
-			lambdaQueryWrapper.ne(PutBox::getRemainingNum, 0);
+			lambdaQueryWrapper.apply("remaining_num - cancel_number != 0");
 			lambdaQueryWrapper.eq(PutBox::getWhetherDeactivate, "0");
 		} else if ("2".equals(putBox.getWhetherDisplay())) {
-			lambdaQueryWrapper.eq(PutBox::getRemainingNum, 0);
+			lambdaQueryWrapper.apply("remaining_num - cancel_number = 0");
 			lambdaQueryWrapper.eq(PutBox::getWhetherDeactivate, "0");
 		} else if ("3".equals(putBox.getWhetherDisplay())) {
 			lambdaQueryWrapper.eq(PutBox::getWhetherDeactivate, "1");
@@ -290,7 +291,7 @@ public class PutBoxController extends BladeController {
 			seaContainerNumberItem.setPolStationId(item.getPolStationId());
 			seaContainerNumberItem.setPolStationCname(item.getPolStationCname());
 			seaContainerNumberItem.setBoxType(item.getBoxType());
-			seaContainerNumberItem.setRemainingNum(item.getRemainingNum());
+			seaContainerNumberItem.setRemainingNum(item.getRemainingNum()-item.getCancelNumber());
 			seaContainerNumberItem.setPodStationId(item.getPodStationId());
 			seaContainerNumberItem.setPodStationCname(item.getPodStationCname());
 			seaContainerNumberItem.setInternalContainerNumber(item.getInternalContainerNumber());

+ 61 - 46
blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java

@@ -2926,6 +2926,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 									if (tradingBoxItem != null) {
 										tradingBoxItem = EntryExitDataHandleUtils.tradingBoxItemDataHandle(tradingBoxItem, recordItems, tradingBox,
 											false, null, "空箱提箱进场", "待使用", "6");
+										tradingBoxItem.setHblno("");
 										tradingBoxItemOldList.add(tradingBoxItem);
 									} else {
 										failureHandling(type, boxDynamicsRecord, "放箱号:" + recordItems.getContainerNumber() + "来源单据中,箱号:"
@@ -2979,53 +2980,65 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							}
 							List<String> boxList = itemsListWHFK.stream().filter(e -> e.getContainerNumber().equals(item.getContainerNumber()))
 								.map(BoxDynamicsRecordItems::getBoxCode).collect(Collectors.toList());
-							List<Containers> containers = containersList.stream()
-								.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
-									Comparator.comparing(f -> f.getContainerNumber() + f.getCntrNo()))), ArrayList::new));
-							if (containers.isEmpty()) {
-								continue;
-							}
-							long size = containers.stream().filter(e -> ObjectUtils.isNotNull(e.getContainerNumber()) &&
-								e.getContainerNumber().equals(item.getContainerNumber()) && boxList.contains(e.getCntrNo())).count();
-							boolean whetherAppearStatus = false;
-							if (!containerNumberItemList.isEmpty()) {
-								SeaContainerNumberItem containerNumberItems = containerNumberItemList.stream().filter(e -> e.getSrcId().equals(item.getId())).findFirst().orElse(null);
-								if (containerNumberItems != null) {
-									containerNumberItems.setOutNum(containerNumberItems.getOutNum() - Integer.parseInt(size + ""));
-									containerNumberItems.setWhetherAppearStatus("0");
-									whetherAppearStatus = true;
-									containerNumberItemListNew.add(containerNumberItems);
-								}
-							}
-							if (!preContainersList.isEmpty()) {
-								PreContainers preContainers = preContainersList.stream().filter(e -> e.getPid().equals(containers.get(0).getPid()) &&
-									item.getBoxType().equals(e.getCntrTypeCode())).findFirst().orElse(null);
-								if (preContainers != null) {
-									if (whetherAppearStatus) {
-										preContainers.setWhetherAppearStatus("0");
-										preContainersListNew.add(preContainers);
+
+							List<String> hblno = putBoxItemsNewList.stream().map(PutBoxItems::getTemporaryHblno)
+								.filter(Objects::nonNull).distinct().collect(Collectors.toList());
+							if (!hblno.isEmpty()) {
+								List<Long> hblnoIdList = billsListFD.stream().filter(e -> hblno.contains(e.getHblno()))
+									.map(Bills::getId).collect(Collectors.toList());
+								for (Long billId : hblnoIdList) {
+									List<Containers> containers = containersList.stream().filter(e -> e.getPid().equals(billId))
+										.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
+											Comparator.comparing(f -> f.getContainerNumber() + f.getCntrNo()))), ArrayList::new));
+									if (containers.isEmpty()) {
+										continue;
+									}
+									long size = containers.stream().filter(e -> ObjectUtils.isNotNull(e.getContainerNumber()) &&
+										e.getContainerNumber().equals(item.getContainerNumber()) && boxList.contains(e.getCntrNo())
+										&& e.getPid().equals(billId)).count();
+									boolean whetherAppearStatus = false;
+									if (!containerNumberItemList.isEmpty()) {
+										SeaContainerNumberItem containerNumberItems = containerNumberItemList.stream()
+											.filter(e -> e.getSrcId().equals(item.getId())&& e.getPid().equals(billId))
+											.findFirst().orElse(null);
+										if (containerNumberItems != null) {
+											containerNumberItems.setOutNum(containerNumberItems.getOutNum() - Integer.parseInt(size + ""));
+											containerNumberItems.setWhetherAppearStatus("0");
+											whetherAppearStatus = true;
+											containerNumberItemListNew.add(containerNumberItems);
+										}
+									}
+									if (!preContainersList.isEmpty()) {
+										PreContainers preContainers = preContainersList.stream().filter(e -> e.getPid().equals(containers.get(0).getPid()) &&
+											item.getBoxType().equals(e.getCntrTypeCode()) && e.getPid().equals(billId)).findFirst().orElse(null);
+										if (preContainers != null) {
+											if (whetherAppearStatus) {
+												preContainers.setWhetherAppearStatus("0");
+												preContainersListNew.add(preContainers);
+											}
+										}
+									}
+									for (Containers containersItem : containers) {
+										if (ObjectUtils.isNotNull(containersItem.getContainerNumber()) &&
+											containersItem.getContainerNumber().equals(item.getContainerNumber())
+											&& boxList.contains(containersItem.getCntrNo())) {
+											containersItem.setUpdateTime(new Date());
+											containersItem.setUpdateUserName(AuthUtil.getUserName());
+											containersItem.setUpdateUser(AuthUtil.getUserId());
+											containersItem.setBoxSrcType("");
+											containersItem.setContainerNumber("");
+											containersItem.setPodStationId(0L);
+											containersItem.setPodStationCode("");
+											containersItem.setPodStationCname("");
+											containersItem.setPodStationEname("");
+											containersItem.setWhetherAppearStatus("0");
+											containersItem.setRemarks("无货返空");
+											int version = StringUtil.isBlank(containersItem.getVersion()) ? 1 : Integer.parseInt(containersItem.getVersion());
+											containersItem.setVersion(String.valueOf(version + 1));
+											containersListNew.add(containersItem);
+											logUtils.saveOperationLog(OperatorType.API_DATA_SYNCHRONIZATION, OperatorType.TG, containersItem.getId());
+										}
 									}
-								}
-							}
-							for (Containers containersItem : containers) {
-								if (ObjectUtils.isNotNull(containersItem.getContainerNumber()) &&
-									containersItem.getContainerNumber().equals(item.getContainerNumber())
-									&& boxList.contains(containersItem.getCntrNo())) {
-									containersItem.setUpdateTime(new Date());
-									containersItem.setUpdateUserName(AuthUtil.getUserName());
-									containersItem.setUpdateUser(AuthUtil.getUserId());
-									containersItem.setBoxSrcType("");
-									containersItem.setContainerNumber("");
-									containersItem.setPodStationId(0L);
-									containersItem.setPodStationCode("");
-									containersItem.setPodStationCname("");
-									containersItem.setPodStationEname("");
-									containersItem.setWhetherAppearStatus("0");
-									containersItem.setRemarks("无货返空");
-									int version = StringUtil.isBlank(containersItem.getVersion()) ? 1 : Integer.parseInt(containersItem.getVersion());
-									containersItem.setVersion(String.valueOf(version + 1));
-									containersListNew.add(containersItem);
-									logUtils.saveOperationLog(OperatorType.API_DATA_SYNCHRONIZATION, OperatorType.TG, containersItem.getId());
 								}
 							}
 						}
@@ -4089,6 +4102,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								.map(Containers::getCntrNo).anyMatch(Objects::nonNull)) {
 								item.setExtendedData(containersListNew.stream().filter(e -> e.getPid().equals(item.getId()))
 									.map(Containers::getCntrNo).filter(Objects::nonNull).collect(Collectors.joining(",")));
+								int version = StringUtil.isBlank(item.getVersion()) ? 1 : Integer.parseInt(item.getVersion());
+								item.setVersion(String.valueOf(version + 1));
 								billsMapper.updateById(item);
 							}
 						}

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ArchivesServiceImpl.java

@@ -467,6 +467,7 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 				lambdaQueryWrapper.apply("find_in_set(box_dynamics,'更改放箱号,箱档案-更改箱状态,海运出口-拆单,装船,卸船')");
 			}
 		}
+		lambdaQueryWrapper.ne(Archives::getBoxDynamics,"作废");
 		IPage<Archives> archivesList = this.page(Condition.getPage(query),lambdaQueryWrapper);
 
 		List<LongTermCabinetExcel> excelList = new ArrayList<>();
@@ -523,6 +524,7 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 				lambdaQueryWrapper.apply("find_in_set(box_dynamics,'更改放箱号,箱档案-更改箱状态,海运出口-拆单,装船,卸船')");
 			}
 		}
+		lambdaQueryWrapper.ne(Archives::getBoxDynamics,"作废");
 		List<Archives> archivesList = this.list(lambdaQueryWrapper);
 		List<LongTermCabinetExcel> excelList = new ArrayList<>();
 		// 获取当前日期

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

@@ -1768,7 +1768,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				} else {
 					putBox.setSrcContainerNumber(tradingBox.getContainerNumber());
 				}
-				putBox.setBoxEastId(tradingBox.getPurchaseCompanyId()+"");
+				putBox.setBoxEastId(tradingBox.getPurchaseCompanyId() + "");
 				putBox.setBoxEastName(tradingBox.getPurchaseCompanyName());
 				putBox.setPolId(detail.getPolId());
 				putBox.setPolCname(detail.getPolCname());
@@ -2901,55 +2901,42 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			putBoxItemsService.updateBatchById(putBoxItemsList);
 		}
 		TradingBox tradingBoxOld = baseMapper.selectById(tradingBox.getId());
-		int subNumber = tradingBoxOld.getCancelNumber() - tradingBox.getCancelNumber();
-		if (subNumber != 0) {
-			if ("OW-F".contains(tradingBox.getType())) {
-				SeaContainerNumberItem containerNumberItem = seaContainerNumberItemService.getOne(new LambdaQueryWrapper<SeaContainerNumberItem>()
-					.eq(SeaContainerNumberItem::getTenantId, AuthUtil.getTenantId())
-					.eq(SeaContainerNumberItem::getIsDeleted, 0)
-					.eq(SeaContainerNumberItem::getPid, tradingBox.getId())
-					.last("LIMIT 1"));
-				if (containerNumberItem != null) {
-					if (containerNumberItem.getOutNum() > tradingBox.getCancelNumber()) {
-						throw new RuntimeException("已出场数量大于本次修改箱量");
-					}
-					PutBox putBoxOld = putBoxService.getById(tradingBox.getSrcContainerNumberId());
-					if (putBoxOld == null) {
-						throw new RuntimeException("未查到原放箱号数据");
-					}
-					if (subNumber > 0) {
-						if (putBoxOld.getRemainingNum() > subNumber) {
-							throw new RuntimeException("放箱号可用数量小于本次增加的占用数量");
-						}
-					} else {
-						if (containerNumberItem.getOccupyNum() - containerNumberItem.getOutNum() < subNumber) {
-							throw new RuntimeException("剩余占用数量小于本次取消占用数量");
-						}
-						if (putBoxOld.getOccupyNum() < subNumber) {
-							throw new RuntimeException("取消数量大于放箱号可用数量");
-						}
-					}
-					containerNumberItem.setOccupyNum(containerNumberItem.getOccupyNum() + subNumber);
-					containerNumberItem.setActualOccupyNum(containerNumberItem.getActualOccupyNum() + subNumber);
-					containerNumberItem.setUpdateUser(AuthUtil.getUserId());
-					containerNumberItem.setUpdateUserName(AuthUtil.getUserName());
-					containerNumberItem.setUpdateTime(new Date());
-					seaContainerNumberItemService.updateById(containerNumberItem);
-					putBoxOld.setRemainingNum(putBoxOld.getRemainingNum() + subNumber);
-					putBoxOld.setOccupyNum(putBoxOld.getOccupyNum() + subNumber);
-					putBoxOld.setUpdateTime(new Date());
-					putBoxOld.setUpdateUser(AuthUtil.getUserId());
-					putBoxOld.setUpdateUserName(AuthUtil.getUserName());
-					putBoxOld.setVersion(putBoxOld.getVersion() + 1);
-					putBoxService.updateById(putBoxOld);
+		if ("OW-F".contains(tradingBox.getType())) {
+			SeaContainerNumberItem containerNumberItem = seaContainerNumberItemService.getOne(new LambdaQueryWrapper<SeaContainerNumberItem>()
+				.eq(SeaContainerNumberItem::getTenantId, AuthUtil.getTenantId())
+				.eq(SeaContainerNumberItem::getIsDeleted, 0)
+				.eq(SeaContainerNumberItem::getPid, tradingBox.getId())
+				.last("LIMIT 1"));
+			if (containerNumberItem != null) {
+				if (containerNumberItem.getOutNum() > tradingBox.getCancelNumber()) {
+					throw new RuntimeException("已出场数量大于本次修改箱量");
 				}
-			} else {
-				if (subNumber > 0 && putBox.getRemainingNum() > subNumber) {
-					throw new RuntimeException("放箱号可用数量小于本次增加的占用数量");
+				PutBox putBoxOld = putBoxService.getById(tradingBox.getSrcContainerNumberId());
+				if (putBoxOld == null) {
+					throw new RuntimeException("未查到原放箱号数据");
+				}
+				if (tradingBox.getCancelNumber() > putBoxOld.getRemainingNum()) {
+					throw new RuntimeException("放箱号可用数量小于取消数量");
 				}
+				containerNumberItem.setOccupyNum(tradingBoxOld.getBoxNumber() - tradingBox.getCancelNumber());
+				containerNumberItem.setActualOccupyNum(tradingBoxOld.getBoxNumber() - tradingBox.getCancelNumber());
+				containerNumberItem.setUpdateUser(AuthUtil.getUserId());
+				containerNumberItem.setUpdateUserName(AuthUtil.getUserName());
+				containerNumberItem.setUpdateTime(new Date());
+				seaContainerNumberItemService.updateById(containerNumberItem);
+				putBoxOld.setCancelNumber(tradingBox.getCancelNumber());
+				putBoxOld.setUpdateTime(new Date());
+				putBoxOld.setUpdateUser(AuthUtil.getUserId());
+				putBoxOld.setUpdateUserName(AuthUtil.getUserName());
+				putBoxOld.setVersion(putBoxOld.getVersion() + 1);
+				putBoxService.updateById(putBoxOld);
+			}
+		} else {
+			if (tradingBox.getCancelNumber() > putBox.getRemainingNum()) {
+				throw new RuntimeException("放箱号可用数量小于取消数量");
 			}
-			putBox.setRemainingNum(putBox.getRemainingNum() + subNumber);
 		}
+		putBox.setCancelNumber(tradingBox.getCancelNumber());
 		putBox.setVersion(putBox.getVersion() + 1);
 		putBoxService.updateById(putBox);
 		return R.data(tradingBox);
@@ -4325,8 +4312,8 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 	}
 
 
-	public static TradingBoxItem synchronizationBoxInformation(TradingBox tradingBox,PutBoxItems item,TradingBoxItem tradingBoxItem) {
-		if (ObjectUtils.isNull(tradingBoxItem) || ObjectUtils.isNull(tradingBoxItem.getId())){
+	public static TradingBoxItem synchronizationBoxInformation(TradingBox tradingBox, PutBoxItems item, TradingBoxItem tradingBoxItem) {
+		if (ObjectUtils.isNull(tradingBoxItem) || ObjectUtils.isNull(tradingBoxItem.getId())) {
 			tradingBoxItem = new TradingBoxItem();
 			tradingBoxItem.setBoxBelongsTo("SOC");
 			if ("OW-N".equals(tradingBox.getType())) {
@@ -4345,7 +4332,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxItem.setCreateTime(new Date());
 			tradingBoxItem.setPid(tradingBox.getId());
 			tradingBoxItem.setWhetherEnable("1");
-		}else{
+		} else {
 			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
 			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
 			tradingBoxItem.setUpdateTime(new Date());
@@ -4377,9 +4364,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			tradingBoxItem.setStationCode(item.getPolCyCode());
 			tradingBoxItem.setStationCname(item.getPolCyCname());
 			tradingBoxItem.setStationEname(item.getPolCyEname());
-			if ("使用中".equals(tradingBoxItem.getStatus())){
+			if ("使用中".equals(tradingBoxItem.getStatus())) {
 				tradingBoxItem.setNewDate(item.getPolStationEmptyContainerExitDate());
-			}else{
+			} else {
 				tradingBoxItem.setNewDate(item.getPolPickUpDate());
 			}
 		}

+ 26 - 15
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java

@@ -34,6 +34,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.Util.IBillUtils;
+import org.springblade.los.Util.UpdateHblnoUtils;
 import org.springblade.los.business.release.entity.SeaReleaseBillItems;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.entity.SeaBillsDetail;
@@ -77,6 +78,8 @@ public class BillsController extends BladeController {
 
 	private final IBillUtils billUtils;
 
+	private final UpdateHblnoUtils updateHblnoUtils;
+
 	/**
 	 * 详情
 	 */
@@ -145,26 +148,26 @@ public class BillsController extends BladeController {
 			lambdaQueryWrapper.ge(Bills::getEtd, bills.getEtdList().get(0));
 			lambdaQueryWrapper.le(Bills::getEtd, bills.getEtdList().get(1));
 		}
-		lambdaQueryWrapper.ge(ObjectUtils.isNotNull(bills.getEtdStart()),Bills::getEtd, bills.getEtdStart());
-		lambdaQueryWrapper.le(ObjectUtils.isNotNull(bills.getEtdEnd()),Bills::getEtd, bills.getEtdEnd());
+		lambdaQueryWrapper.ge(ObjectUtils.isNotNull(bills.getEtdStart()), Bills::getEtd, bills.getEtdStart());
+		lambdaQueryWrapper.le(ObjectUtils.isNotNull(bills.getEtdEnd()), Bills::getEtd, bills.getEtdEnd());
 		if (ObjectUtils.isNotNull(bills.getEtaList()) && !bills.getEtaList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getEta, bills.getEtaList().get(0));
 			lambdaQueryWrapper.le(Bills::getEta, bills.getEtaList().get(1));
 		}
-		lambdaQueryWrapper.ge(ObjectUtils.isNotNull(bills.getEtaStart()),Bills::getEta, bills.getEtaStart());
-		lambdaQueryWrapper.le(ObjectUtils.isNotNull(bills.getEtaEnd()),Bills::getEta, bills.getEtaEnd());
+		lambdaQueryWrapper.ge(ObjectUtils.isNotNull(bills.getEtaStart()), Bills::getEta, bills.getEtaStart());
+		lambdaQueryWrapper.le(ObjectUtils.isNotNull(bills.getEtaEnd()), Bills::getEta, bills.getEtaEnd());
 		if (ObjectUtils.isNotNull(bills.getActualEtdList()) && !bills.getActualEtdList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getActualEtd, bills.getActualEtdList().get(0));
 			lambdaQueryWrapper.le(Bills::getActualEtd, bills.getActualEtdList().get(1));
 		}
-		lambdaQueryWrapper.ge(ObjectUtils.isNotNull(bills.getActualEtdStart()),Bills::getActualEtd, bills.getActualEtdStart());
-		lambdaQueryWrapper.le(ObjectUtils.isNotNull(bills.getActualEtdEnd()),Bills::getActualEtd, bills.getActualEtdEnd());
+		lambdaQueryWrapper.ge(ObjectUtils.isNotNull(bills.getActualEtdStart()), Bills::getActualEtd, bills.getActualEtdStart());
+		lambdaQueryWrapper.le(ObjectUtils.isNotNull(bills.getActualEtdEnd()), Bills::getActualEtd, bills.getActualEtdEnd());
 		if (ObjectUtils.isNotNull(bills.getActualEtaList()) && !bills.getActualEtaList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getActualEta, bills.getActualEtaList().get(0));
 			lambdaQueryWrapper.le(Bills::getActualEta, bills.getActualEtaList().get(1));
 		}
-		lambdaQueryWrapper.ge(ObjectUtils.isNotNull(bills.getActualEtdStart()),Bills::getActualEta, bills.getActualEtdStart());
-		lambdaQueryWrapper.le(ObjectUtils.isNotNull(bills.getActualEtdEnd()),Bills::getActualEta, bills.getActualEtdEnd());
+		lambdaQueryWrapper.ge(ObjectUtils.isNotNull(bills.getActualEtdStart()), Bills::getActualEta, bills.getActualEtdStart());
+		lambdaQueryWrapper.le(ObjectUtils.isNotNull(bills.getActualEtdEnd()), Bills::getActualEta, bills.getActualEtdEnd());
 		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
 			lambdaQueryWrapper.eq(Bills::getBranchId, AuthUtil.getDeptId());
 			if (!AuthUtil.getUserRole().contains("secondaryAdmin") && !AuthUtil.getUserRole().contains("财务") && !AuthUtil.getUserRole().contains("操作经理")) {
@@ -1089,18 +1092,18 @@ public class BillsController extends BladeController {
 	 * 校验是否存在相同船名航次起运港单据并且开船日期不同
 	 */
 	@GetMapping("/verifyData")
-	public R verifyData(@RequestParam("vesselId") Long vesselId,@RequestParam("voyageNo") String voyageNo,
-						@RequestParam("polId") Long polId,@RequestParam("branchId") String branchId) {
-		return billUtils.verifyData(vesselId,voyageNo,polId,branchId);
+	public R verifyData(@RequestParam("vesselId") Long vesselId, @RequestParam("voyageNo") String voyageNo,
+						@RequestParam("polId") Long polId, @RequestParam("branchId") String branchId) {
+		return billUtils.verifyData(vesselId, voyageNo, polId, branchId);
 	}
 
 	/**
 	 * 更新相同船名航次起运港单据开船日期
 	 */
 	@GetMapping("/updateVerifyData")
-	public R updateVerifyData(@RequestParam("vesselId") Long vesselId,@RequestParam("voyageNo") String voyageNo,
-							  @RequestParam("polId") Long polId,@RequestParam("etd") Date etd,@RequestParam("id") Long id) {
-		return billUtils.updateVerifyData(vesselId,voyageNo,polId,etd,id);
+	public R updateVerifyData(@RequestParam("vesselId") Long vesselId, @RequestParam("voyageNo") String voyageNo,
+							  @RequestParam("polId") Long polId, @RequestParam("etd") Date etd, @RequestParam("id") Long id) {
+		return billUtils.updateVerifyData(vesselId, voyageNo, polId, etd, id);
 	}
 
 
@@ -1140,7 +1143,7 @@ public class BillsController extends BladeController {
 			.eq(Bills::getPolId, bills.getPolId())
 //			.eq(Bills::getPodId, bills.getPodId())
 			.ne(Bills::getId, bills.getId())
-			.eq(ObjectUtils.isNotNull(bills.getBoxBelongsTo()),Bills::getBoxBelongsTo, bills.getBoxBelongsTo());
+			.eq(ObjectUtils.isNotNull(bills.getBoxBelongsTo()), Bills::getBoxBelongsTo, bills.getBoxBelongsTo());
 //			.apply("DATE_FORMAT(actual_etd,'%Y-%m-%d') > '" + formatter.format(new Date()) + "'");
 		List<Bills> billsList = billsService.list(lambdaQueryWrapper);
 		return R.data(billsList);
@@ -1154,5 +1157,13 @@ public class BillsController extends BladeController {
 		return billUtils.billVerificationPrompt(ids);
 	}
 
+	/**
+	 * 修改提单号
+	 */
+	@GetMapping("/updateHblno")
+	public R updateHblno(@RequestParam("id") Long id, @RequestParam("hblno") String hblno) {
+		return updateHblnoUtils.updateHblno(id,hblno);
+	}
+
 }
 

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

@@ -380,6 +380,12 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		StringBuilder boxTypeSum = new StringBuilder();
 		if (ObjectUtils.isNotNull(bills.getPreContainersList())) {
 			bills.setTeu(teu.intValue());
+			List<Long> preContainersIdList = bills.getPreContainersList().stream().map(PreContainers::getId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<PreContainers> preContainers = new ArrayList<>();
+			if (!preContainersIdList.isEmpty()) {
+				preContainers = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+					.in(PreContainers::getId, preContainersIdList));
+			}
 			for (PreContainers item : bills.getPreContainersList()) {
 				if (ObjectUtils.isNull(item.getCntrTypeCode())) {
 					throw new RuntimeException("箱型不能为空");
@@ -396,7 +402,18 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 						item.setCreateDept(deptId);
 						item.setCreateDeptName(deptName);
 					}
+					item.setVersion("1");
 				} else {
+					if (!preContainers.isEmpty()) {
+						PreContainers preContainers1 = preContainers.stream().filter(e -> e.getId().equals(item.getId())).findFirst().orElse(null);
+						if (preContainers1 != null) {
+							if (!Objects.equals(preContainers1.getVersion(), item.getVersion())) {
+								throw new RuntimeException("数据已被其他用户更新,请刷新后重试");
+							}
+						}
+					}
+					int version = StringUtil.isBlank(item.getVersion()) ? 1 : Integer.parseInt(item.getVersion());
+					item.setVersion(String.valueOf(version + 1));
 					item.setUpdateUser(AuthUtil.getUserId());
 					item.setUpdateTime(new Date());
 					item.setUpdateUserName(AuthUtil.getUserName());
@@ -927,24 +944,68 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			Object seaBillsDetailObject = StringTools.handle(bills.getDetail(), "SeaBillsDetail");
 			SeaBillsDetail seaBillsDetail = JSONObject.parseObject(JSONObject.toJSONString(seaBillsDetailObject), SeaBillsDetail.class);
 			String lineLength = sysClient.getParamService("line.length");
-			if ("获取数据失败".equals(lineLength)) {
-				throw new RuntimeException("请先维护收发通每行长度参数");
-			}
-			if (ObjectUtils.isNotNull(bills.getForeignAgencyDetails())) {
-				String foreignAgencyDetails = StringTools.wrapText(bills.getForeignAgencyDetails(), Integer.parseInt(lineLength));
-				bills.setForeignAgencyDetails(foreignAgencyDetails);
-			}
-			if (ObjectUtils.isNotNull(seaBillsDetail.getHshipperDetails())) {
-				String hshipperDetails = StringTools.wrapText(seaBillsDetail.getHshipperDetails(), Integer.parseInt(lineLength));
-				seaBillsDetail.setHshipperDetails(hshipperDetails);
-			}
-			if (ObjectUtils.isNotNull(seaBillsDetail.getHconsigneeDetails())) {
-				String hconsigneeDetails = StringTools.wrapText(seaBillsDetail.getHconsigneeDetails(), Integer.parseInt(lineLength));
-				seaBillsDetail.setHconsigneeDetails(hconsigneeDetails);
-			}
-			if (ObjectUtils.isNotNull(seaBillsDetail.getHnotifyDetails())) {
-				String hnotifyDetails = StringTools.wrapText(seaBillsDetail.getHnotifyDetails(), Integer.parseInt(lineLength));
-				seaBillsDetail.setHnotifyDetails(hnotifyDetails);
+
+			String textareaNumber = sysClient.getParamService("textarea.number");
+
+			if (!"获取数据失败".equals(lineLength) && !"获取数据失败".equals(textareaNumber)){
+				String commodityDescr = bills.getCommodityDescr();
+				if (ObjectUtils.isNotNull(seaBillsDetail.getHshipperDetails())) {
+					String hshipperDetails = StringTools.wrapText(seaBillsDetail.getHshipperDetails(), Integer.parseInt(lineLength));
+					Bills billsNew = StringTools.lineProcess(hshipperDetails,Integer.parseInt(textareaNumber),bills,"1");
+					if (billsNew != null){
+						if (ObjectUtils.isNotNull(commodityDescr)){
+							commodityDescr = commodityDescr+"\n"+billsNew.getCommodityDescr();
+						}else{
+							commodityDescr = commodityDescr+billsNew.getCommodityDescr();
+						}
+						seaBillsDetail.setHshipperDetails(billsNew.getDetail().getHshipperDetails());
+					}else{
+						seaBillsDetail.setHshipperDetails(hshipperDetails);
+					}
+				}
+				if (ObjectUtils.isNotNull(seaBillsDetail.getHconsigneeDetails())) {
+					String hconsigneeDetails = StringTools.wrapText(seaBillsDetail.getHconsigneeDetails(), Integer.parseInt(lineLength));
+					Bills billsNew = StringTools.lineProcess(hconsigneeDetails,Integer.parseInt(textareaNumber),bills,"2");
+					if (billsNew != null){
+						if (ObjectUtils.isNotNull(commodityDescr)){
+							commodityDescr = commodityDescr+"\n"+billsNew.getCommodityDescr();
+						}else{
+							commodityDescr = commodityDescr+billsNew.getCommodityDescr();
+						}
+						seaBillsDetail.setHconsigneeDetails(billsNew.getDetail().getHconsigneeDetails());
+					}else{
+						seaBillsDetail.setHconsigneeDetails(hconsigneeDetails);
+					}
+				}
+				if (ObjectUtils.isNotNull(seaBillsDetail.getHnotifyDetails())) {
+					String hnotifyDetails = StringTools.wrapText(seaBillsDetail.getHnotifyDetails(), Integer.parseInt(lineLength));
+					Bills billsNew = StringTools.lineProcess(hnotifyDetails,Integer.parseInt(textareaNumber),bills,"3");
+					if (billsNew != null){
+						if (ObjectUtils.isNotNull(commodityDescr)){
+							commodityDescr = commodityDescr+"\n"+billsNew.getCommodityDescr();
+						}else{
+							commodityDescr = commodityDescr+billsNew.getCommodityDescr();
+						}
+						seaBillsDetail.setHnotifyDetails(billsNew.getDetail().getHnotifyDetails());
+					}else{
+						seaBillsDetail.setHnotifyDetails(hnotifyDetails);
+					}
+				}
+				if (ObjectUtils.isNotNull(bills.getForeignAgencyDetails())) {
+					String foreignAgencyDetails = StringTools.wrapText(bills.getForeignAgencyDetails(), Integer.parseInt(lineLength));
+					Bills billsNew = StringTools.lineProcess(foreignAgencyDetails,Integer.parseInt(textareaNumber),bills,"4");
+					if (billsNew != null){
+						bills.setForeignAgencyDetails(billsNew.getForeignAgencyDetails());
+						if (ObjectUtils.isNotNull(commodityDescr)){
+							commodityDescr = commodityDescr+"\n"+billsNew.getCommodityDescr();
+						}else{
+							commodityDescr = commodityDescr+billsNew.getCommodityDescr();
+						}
+					}else{
+						bills.setForeignAgencyDetails(foreignAgencyDetails);
+					}
+				}
+				bills.setCommodityDescr(commodityDescr);
 			}
 			if (ObjectUtils.isNotNull(seaBillsDetail.getId())) {
 				seaBillsDetail.setUpdateUser(AuthUtil.getUserId());
@@ -2119,16 +2180,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			if (ObjectUtils.isNull(declare.getCarrierId())) {
 				texts = texts + "船公司、";
 			}
-			if ("SE".equals(declare.getBusinessType())) {
-				if (ObjectUtils.isNull(declare.getCyId())) {
-					texts = texts + "POL场站、";
-				}
-			}
-			if ("SI".equals(declare.getBusinessType())) {
-				if (ObjectUtils.isNull(declare.getPodCyId())) {
-					texts = texts + "POD场站、";
-				}
-			}
 			if (ObjectUtils.isNotNull(texts)) {
 				throw new RuntimeException("单号:" + declare.getBillNo() + "," + texts + "不能为空");
 			}
@@ -2257,16 +2308,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 						if (ObjectUtils.isNull(item.getCarrierId())) {
 							texts = texts + "船公司、";
 						}
-						if ("SE".equals(item.getBusinessType())) {
-							if (ObjectUtils.isNull(item.getCyId())) {
-								texts = texts + "POL场站、";
-							}
-						}
-						if ("SI".equals(item.getBusinessType())) {
-							if (ObjectUtils.isNull(item.getPodCyId())) {
-								texts = texts + "POD场站、";
-							}
-						}
 						if (ObjectUtils.isNotNull(texts)) {
 							throw new RuntimeException("单号:" + item.getBillNo() + "," + texts + "不能为空");
 						}
@@ -3650,8 +3691,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.eq(Containers::getIsDeleted, 0)
 			.eq(Containers::getPid, billsJk.getSrcBusId()));
 		if (!containersList.isEmpty()) {
+			String whetherEmpty = sysClient.getParamService("ZDFXH.whether.empty");
 			List<Containers> containersListNew = new ArrayList<>();
 			for (Containers item : containersList) {
+				if ("1".equals(whetherEmpty) && "SOC".equals(billsJk.getBoxBelongsTo()) && ObjectUtils.isNull(item.getContainerNumber())
+					&& !"MM".equals(billsJk.getBillType())){
+					throw new RuntimeException("提单号:"+billsJk.getHblno()+"中箱号"+item.getCntrNo()+"放箱号为空,转单失败");
+				}
 				item.setSrcId(item.getId());
 				item.setId(null);
 				item.setCreateTime(new Date());
@@ -4240,16 +4286,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 						if (ObjectUtils.isNull(item.getCarrierId())) {
 							texts = texts + "船公司、";
 						}
-						if ("SE".equals(item.getBusinessType())) {
-							if (ObjectUtils.isNull(item.getCyId())) {
-								texts = texts + "POL场站、";
-							}
-						}
-						if ("SI".equals(item.getBusinessType())) {
-							if (ObjectUtils.isNull(item.getPodCyId())) {
-								texts = texts + "POD场站、";
-							}
-						}
 					}
 					if (ObjectUtils.isNotNull(texts)) {
 						throw new RuntimeException("分单:" + item.getBillNo() + "," + texts + "不能为空");
@@ -4327,16 +4363,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				if (ObjectUtils.isNull(declare.getCarrierId())) {
 					texts = texts + "船公司、";
 				}
-				if ("SE".equals(declare.getBusinessType())) {
-					if (ObjectUtils.isNull(declare.getCyId())) {
-						texts = texts + "POL场站、";
-					}
-				}
-				if ("SI".equals(declare.getBusinessType())) {
-					if (ObjectUtils.isNull(declare.getPodCyId())) {
-						texts = texts + "POD场站、";
-					}
-				}
 			}
 			if (ObjectUtils.isNotNull(texts)) {
 				throw new RuntimeException("单号:" + declare.getBillNo() + "," + texts + "不能为空");
@@ -5369,24 +5395,68 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			Object seaBillsDetailObject = StringTools.handle(bills.getDetail(), "SeaBillsDetail");
 			SeaBillsDetail seaBillsDetail = JSONObject.parseObject(JSONObject.toJSONString(seaBillsDetailObject), SeaBillsDetail.class);
 			String lineLength = sysClient.getParamService("line.length");
-			if ("获取数据失败".equals(lineLength)) {
-				throw new RuntimeException("请先维护收发通每行长度参数");
-			}
-			if (ObjectUtils.isNotNull(bills.getForeignAgencyDetails())) {
-				String foreignAgencyDetails = StringTools.wrapText(bills.getForeignAgencyDetails(), Integer.parseInt(lineLength));
-				bills.setForeignAgencyDetails(foreignAgencyDetails);
-			}
-			if (ObjectUtils.isNotNull(seaBillsDetail.getHshipperDetails())) {
-				String hshipperDetails = StringTools.wrapText(seaBillsDetail.getHshipperDetails(), Integer.parseInt(lineLength));
-				seaBillsDetail.setHshipperDetails(hshipperDetails);
-			}
-			if (ObjectUtils.isNotNull(seaBillsDetail.getHconsigneeDetails())) {
-				String hconsigneeDetails = StringTools.wrapText(seaBillsDetail.getHconsigneeDetails(), Integer.parseInt(lineLength));
-				seaBillsDetail.setHconsigneeDetails(hconsigneeDetails);
-			}
-			if (ObjectUtils.isNotNull(seaBillsDetail.getHnotifyDetails())) {
-				String hnotifyDetails = StringTools.wrapText(seaBillsDetail.getHnotifyDetails(), Integer.parseInt(lineLength));
-				seaBillsDetail.setHnotifyDetails(hnotifyDetails);
+
+			String textareaNumber = sysClient.getParamService("textarea.number");
+
+			if (!"获取数据失败".equals(lineLength) && !"获取数据失败".equals(textareaNumber)){
+				String commodityDescr = bills.getCommodityDescr();
+				if (ObjectUtils.isNotNull(seaBillsDetail.getHshipperDetails())) {
+					String hshipperDetails = StringTools.wrapText(seaBillsDetail.getHshipperDetails(), Integer.parseInt(lineLength));
+					Bills billsNew = StringTools.lineProcess(hshipperDetails,Integer.parseInt(textareaNumber),bills,"1");
+					if (billsNew != null){
+						if (ObjectUtils.isNotNull(commodityDescr)){
+							commodityDescr = commodityDescr+"\n"+billsNew.getCommodityDescr();
+						}else{
+							commodityDescr = commodityDescr+billsNew.getCommodityDescr();
+						}
+						seaBillsDetail.setHshipperDetails(billsNew.getDetail().getHshipperDetails());
+					}else{
+						seaBillsDetail.setHshipperDetails(hshipperDetails);
+					}
+				}
+				if (ObjectUtils.isNotNull(seaBillsDetail.getHconsigneeDetails())) {
+					String hconsigneeDetails = StringTools.wrapText(seaBillsDetail.getHconsigneeDetails(), Integer.parseInt(lineLength));
+					Bills billsNew = StringTools.lineProcess(hconsigneeDetails,Integer.parseInt(textareaNumber),bills,"2");
+					if (billsNew != null){
+						if (ObjectUtils.isNotNull(commodityDescr)){
+							commodityDescr = commodityDescr+"\n"+billsNew.getCommodityDescr();
+						}else{
+							commodityDescr = commodityDescr+billsNew.getCommodityDescr();
+						}
+						seaBillsDetail.setHconsigneeDetails(billsNew.getDetail().getHconsigneeDetails());
+					}else{
+						seaBillsDetail.setHconsigneeDetails(hconsigneeDetails);
+					}
+				}
+				if (ObjectUtils.isNotNull(seaBillsDetail.getHnotifyDetails())) {
+					String hnotifyDetails = StringTools.wrapText(seaBillsDetail.getHnotifyDetails(), Integer.parseInt(lineLength));
+					Bills billsNew = StringTools.lineProcess(hnotifyDetails,Integer.parseInt(textareaNumber),bills,"3");
+					if (billsNew != null){
+						if (ObjectUtils.isNotNull(commodityDescr)){
+							commodityDescr = commodityDescr+"\n"+billsNew.getCommodityDescr();
+						}else{
+							commodityDescr = commodityDescr+billsNew.getCommodityDescr();
+						}
+						seaBillsDetail.setHnotifyDetails(billsNew.getDetail().getHnotifyDetails());
+					}else{
+						seaBillsDetail.setHnotifyDetails(hnotifyDetails);
+					}
+				}
+				if (ObjectUtils.isNotNull(bills.getForeignAgencyDetails())) {
+					String foreignAgencyDetails = StringTools.wrapText(bills.getForeignAgencyDetails(), Integer.parseInt(lineLength));
+					Bills billsNew = StringTools.lineProcess(foreignAgencyDetails,Integer.parseInt(textareaNumber),bills,"4");
+					if (billsNew != null){
+						bills.setForeignAgencyDetails(billsNew.getForeignAgencyDetails());
+						if (ObjectUtils.isNotNull(commodityDescr)){
+							commodityDescr = commodityDescr+"\n"+billsNew.getCommodityDescr();
+						}else{
+							commodityDescr = commodityDescr+billsNew.getCommodityDescr();
+						}
+					}else{
+						bills.setForeignAgencyDetails(foreignAgencyDetails);
+					}
+				}
+				bills.setCommodityDescr(commodityDescr);
 			}
 			if (ObjectUtils.isNotNull(seaBillsDetail.getId())) {
 				seaBillsDetail.setUpdateUser(AuthUtil.getUserId());
@@ -5919,6 +5989,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			List<String> cntrNoList = containersFdList.stream().map(Containers::getCntrNo).filter(Objects::nonNull).distinct().collect(Collectors.toList());
 			List<String> cntrNoBookingList = containersBookingList.stream().map(Containers::getCntrNo).filter(Objects::nonNull).distinct().collect(Collectors.toList());
 			if (cntrNoList.size() != cntrNoBookingList.size()) {
+				for (Containers item : containersFdList) {
+					if (ObjectUtils.isNotNull(item.getContainerNumber())){
+						throw new RuntimeException("箱号:"+item.getCntrNo()+"存在放箱号,导入失败");
+					}
+				}
 				containersService.removeByIds(containersFdList.stream().map(Containers::getId).collect(Collectors.toList()));
 				for (Containers item : containersBookingList) {
 					item.setPid(billsFd.getId());
@@ -6432,16 +6507,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		bookingCabin.setUpdateUser(AuthUtil.getUserId());
 		bookingCabin.setUpdateTime(new Date());
 		bookingCabin.setWhetherModify("2");
-		int versionBookingCabin = StringUtil.isBlank(bookingCabin.getVersion()) ? 1 : Integer.parseInt(bookingCabin.getVersion());
 		bookingCabin.setVersion(String.valueOf(version + 1));
 		baseMapper.updateById(bookingCabin);
-		List<PreContainers> containersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
-			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
-			.eq(PreContainers::getIsDeleted, 0)
-			.eq(PreContainers::getPid, detail.getId()));
-		if (!containersList.isEmpty()) {
-			preContainersService.removeByIds(containersList.stream().map(PreContainers::getId).collect(Collectors.toList()));
-		}
 		List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
 			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
 			.eq(PreContainers::getIsDeleted, 0)
@@ -6449,8 +6516,24 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		if (preContainersList.isEmpty()) {
 			throw new RuntimeException("未查到订舱箱型箱量");
 		}
+		List<PreContainers> containersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+			.eq(PreContainers::getIsDeleted, 0)
+			.eq(PreContainers::getPid, detail.getId()));
+		if (!containersList.isEmpty()) {
+			preContainersService.removeByIds(containersList.stream().map(PreContainers::getId).collect(Collectors.toList()));
+		}
+
 		List<PreContainers> preContainers = new ArrayList<>();
 		for (PreContainers item : preContainersList) {
+			if (!containersList.isEmpty()){
+				PreContainers preContainers1 = containersList.stream().filter(e-> e.getCntrTypeCode().equals(item.getCntrTypeCode()))
+					.findFirst().orElse(null);
+				if (preContainers1 != null){
+					item.setWhetherAppearStatus(preContainers1.getWhetherAppearStatus());
+					item.setContainerNumberStatus(preContainers1.getContainerNumberStatus());
+				}
+			}
 			item.setId(null);
 			item.setCreateUser(AuthUtil.getUserId());
 			item.setCreateUserName(AuthUtil.getUserName());
@@ -6459,6 +6542,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			item.setUpdateUser(null);
 			item.setUpdateUserName(null);
 			item.setUpdateTime(null);
+			item.setVersion("1");
 			preContainers.add(item);
 		}
 		preContainersService.saveBatch(preContainers);

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

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.los.Util.BoxNumUtils;
 import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.Util.RegularUtils;
@@ -400,6 +401,12 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 				deptName = String.join(",", res.getData());
 			}
 		}
+		List<Long> preContainersIdList = preContainersList.stream().map(PreContainers::getId).filter(Objects::nonNull).collect(Collectors.toList());
+		List<PreContainers> preContainersArrayList = new ArrayList<>();
+		if (!preContainersIdList.isEmpty()) {
+			preContainersArrayList = baseMapper.selectList(new LambdaQueryWrapper<PreContainers>()
+				.in(PreContainers::getId, preContainersIdList));
+		}
 		for (PreContainers preContainers : preContainersList) {
 			preContainers.setWhetherModifyJson(preContainers.getCntrTypeCode() + "+" + preContainers.getQuantity());
 			if ("0".equals(preContainers.getWhetherAppearStatus())){
@@ -415,6 +422,16 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 					preContainers.setCreateDeptName(deptName);
 				}
 			} else {
+				if (!preContainersArrayList.isEmpty()) {
+					PreContainers preContainers1 = preContainersArrayList.stream().filter(e -> e.getId().equals(preContainers.getId())).findFirst().orElse(null);
+					if (preContainers1 != null) {
+						if (!Objects.equals(preContainers1.getVersion(), preContainers.getVersion())) {
+							throw new RuntimeException("数据已被其他用户更新,请刷新后重试");
+						}
+					}
+				}
+				int version = StringUtil.isBlank(preContainers.getVersion()) ? 1 : Integer.parseInt(preContainers.getVersion());
+				preContainers.setVersion(String.valueOf(version + 1));
 				preContainers.setUpdateUser(AuthUtil.getUserId());
 				preContainers.setUpdateTime(new Date());
 				preContainers.setUpdateUserName(AuthUtil.getUserName());

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

@@ -24,6 +24,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.Util.RegularUtils;
 import org.springblade.los.basic.cntr.entity.BCntrTypes;
@@ -144,6 +145,8 @@ public class SeaContainerNumberItemServiceImpl extends ServiceImpl<SeaContainerN
 		preContainers.setUpdateUser(AuthUtil.getUserId());
 		preContainers.setUpdateUserName(AuthUtil.getUserName());
 		preContainers.setContainerNumberStatus("已选择");
+		int version = StringUtil.isBlank(preContainers.getVersion()) ? 1 : Integer.parseInt(preContainers.getVersion());
+		preContainers.setVersion(String.valueOf(version + 1));
 		preContainersService.updateById(preContainers);
 		if (!putBoxeFeeList.isEmpty()) {
 			Bills bills = billsMapper.selectById(containerNumberItemList.get(0).getPid());
@@ -412,6 +415,8 @@ public class SeaContainerNumberItemServiceImpl extends ServiceImpl<SeaContainerN
 		preContainers.setUpdateUser(AuthUtil.getUserId());
 		preContainers.setUpdateUserName(AuthUtil.getUserName());
 		preContainers.setContainerNumberStatus("录入");
+		int version = StringUtil.isBlank(preContainers.getVersion()) ? 1 : Integer.parseInt(preContainers.getVersion());
+		preContainers.setVersion(String.valueOf(version + 1));
 		preContainersService.updateById(preContainers);
 		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
@@ -470,6 +475,8 @@ public class SeaContainerNumberItemServiceImpl extends ServiceImpl<SeaContainerN
 		preContainers1.setUpdateTime(new Date());
 		preContainers1.setUpdateUserName(AuthUtil.getUserName());
 		preContainers1.setUpdateUser(AuthUtil.getUserId());
+		int version = StringUtil.isBlank(preContainers1.getVersion()) ? 1 : Integer.parseInt(preContainers1.getVersion());
+		preContainers1.setVersion(String.valueOf(version + 1));
 		preContainersService.updateById(preContainers1);
 		if (ObjectUtils.isNull(preContainers.getContainerNumberItemList()) || preContainers.getContainerNumberItemList().isEmpty()) {
 			throw new RuntimeException("放箱号数据不能为空");

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

@@ -36,7 +36,6 @@ import org.springblade.los.check.entity.LosAuditPathsLevels;
 import org.springblade.los.check.service.IAuditPathsActsService;
 import org.springblade.los.check.service.IAuditPathsLevelsService;
 import org.springblade.los.check.service.IAuditProecessService;
-import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -73,14 +72,15 @@ public class SeaFeedayServiceImpl extends ServiceImpl<SeaFeedayMapper, SeaFeeday
 			throw new RuntimeException("缺少必要请求参数");
 		}
 		Bills bills = billsService.getById(seaFeedayVO.getBillId());
-		if (bills == null){
+		if (bills == null) {
 			throw new RuntimeException("未查到海运单据信息");
 		}
 		SeaFeeday seaFeeday = new SeaFeeday();
 		seaFeeday.setCreateTime(new Date());
 		seaFeeday.setCreateUser(AuthUtil.getUserId());
 		seaFeeday.setCreateUserName(AuthUtil.getUserName());
-		seaFeeday.setApplyDays(seaFeedayVO.getApplyDays());
+		seaFeeday.setPolApplyDays(seaFeedayVO.getPolApplyDays());
+		seaFeeday.setPodApplyDays(seaFeedayVO.getPodApplyDays());
 		seaFeeday.setApplyAmount(seaFeedayVO.getApplyAmount());
 		seaFeeday.setCurCode(seaFeedayVO.getCurCode());
 		seaFeeday.setType(seaFeedayVO.getType());
@@ -97,10 +97,24 @@ public class SeaFeedayServiceImpl extends ServiceImpl<SeaFeedayMapper, SeaFeeday
 		seaFeeday.setHblno(bills.getHblno());
 		seaFeeday.setStatus("提交申请");
 		seaFeeday.setEtd(bills.getEtd());
-		seaFeeday.setEta(bills.getEta());
 		seaFeeday.setActualEtd(bills.getActualEtd());
 		seaFeeday.setActualEta(bills.getActualEta());
-		seaFeeday.setFreeBoxUseDays(bills.getPodFreeBoxUseDays());
+		seaFeeday.setPolFreeBoxUseDays(bills.getPolFreeBoxUseDays());
+		seaFeeday.setPodFreeBoxUseDays(bills.getPodFreeBoxUseDays());
+		seaFeeday.setVesselId(bills.getVesselId());
+		seaFeeday.setVesselCnName(bills.getVesselCnName());
+		seaFeeday.setVesselEnName(bills.getVesselEnName());
+		seaFeeday.setVoyageNo(bills.getVoyageNo());
+		seaFeeday.setPolId(bills.getPolId());
+		seaFeeday.setPolCode(bills.getPolCode());
+		seaFeeday.setPolCnName(bills.getPolCnName());
+		seaFeeday.setPolEnName(bills.getPolEnName());
+		seaFeeday.setPolNamePrint(bills.getPolNamePrint());
+		seaFeeday.setPodId(bills.getPodId());
+		seaFeeday.setPodCode(bills.getPodCode());
+		seaFeeday.setPodCnName(bills.getPodCnName());
+		seaFeeday.setPodEnName(bills.getPodEnName());
+		seaFeeday.setPodNamePrint(bills.getPodNamePrint());
 		baseMapper.insert(seaFeeday);
 		Integer actId = 1139;
 		String processType = "免箱使天数申请";

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

@@ -35,8 +35,6 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
-import org.springblade.los.basic.corps.entity.BCorps;
-import org.springblade.los.basic.corps.service.IBCorpsService;
 import org.springblade.los.check.dto.LosAuditProecessDTO;
 import org.springblade.los.check.entity.LosAuditProecess;
 import org.springblade.los.check.service.IAuditProecessService;
@@ -46,8 +44,10 @@ import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 
 /**
  * 审批流记录 控制器
@@ -65,8 +65,6 @@ public class AuditProecessController extends BladeController {
 
 	private final IUserClient userClient;
 
-	private final IBCorpsService bCorpsService;
-
 	/**
 	 * 分页 审批流记录
 	 */

+ 4 - 2
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -1950,7 +1950,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 
 	private void processSeaFeeday(Bills bills, SeaFeeday seaFeeday) {
 		if ("pod".equals(seaFeeday.getType())) {
-			bills.setPodFreeBoxUseDays(bills.getPodFreeBoxUseDays() + seaFeeday.getApplyDays());
+			bills.setPodFreeBoxUseDays(seaFeeday.getPodApplyDays());
+			bills.setPolFreeBoxUseDays(seaFeeday.getPolApplyDays());
 			bills.setUpdateTime(new Date());
 			bills.setUpdateUserName(AuthUtil.getUserName());
 			bills.setUpdateUser(AuthUtil.getUserId());
@@ -2391,7 +2392,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					.eq(Bills::getIsDeleted,0)
 					.eq(Bills::getHblno,bills.getHblno()));
 				if (billsJk != null){
-					billsJk.setPodFreeBoxUseDays(billsJk.getPodFreeBoxUseDays() + seaFeeday.getApplyDays());
+					billsJk.setPolFreeBoxUseDays(seaFeeday.getPolApplyDays());
+					billsJk.setPodFreeBoxUseDays(seaFeeday.getPodApplyDays());
 					billsJk.setUpdateTime(new Date());
 					billsJk.setUpdateUserName(AuthUtil.getUserName());
 					billsJk.setUpdateUser(AuthUtil.getUserId());

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

@@ -2912,7 +2912,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 		List<BCntrTypes> cntrTypesList = bCntrTypesService.list(new LambdaQueryWrapper<BCntrTypes>()
 			.eq(BCntrTypes::getTenantId, AuthUtil.getTenantId())
 			.eq(BCntrTypes::getIsDeleted, 0)
-			.in(BCntrTypes::getCode, boxType));
+			.in(BCntrTypes::getCustomsCode, boxType));
 		List<FeeCenter> feeCenterListBoxType = new ArrayList<>();
 		List<FeeCenter> feeCenterList;
 		if (!cntrTypesList.isEmpty()) {

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

@@ -1994,10 +1994,11 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			.eq(Bills::getIsDeleted, 0)
 			.eq(ObjectUtils.isNotNull(count.getBusinessType()), Bills::getBusinessType, count.getBusinessType());
 		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
-			count.setBranchId(AuthUtil.getDeptId());
+			lambdaQueryWrapper.eq(Bills::getBranchId, AuthUtil.getDeptId());
 		} else {
 			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(count.getBranchId()), Bills::getBranchId, count.getBranchId());
 		}
+		lambdaQueryWrapper.ne(Bills::getBillType, "MM");
 		if ("SE".equals(count.getBusinessType())) {
 			lambdaQueryWrapper.ge(ObjectUtils.isNotNull(count.getStartDate()), Bills::getActualEtd, count.getStartDate());
 			lambdaQueryWrapper.le(ObjectUtils.isNotNull(count.getEndDate()), Bills::getActualEtd, count.getEndDate());
@@ -2031,10 +2032,11 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			.eq(Bills::getIsDeleted, 0)
 			.eq(ObjectUtils.isNotNull(count.getBusinessType()), Bills::getBusinessType, count.getBusinessType());
 		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
-			count.setBranchId(AuthUtil.getDeptId());
+			lambdaQueryWrapper.eq(Bills::getBranchId, AuthUtil.getDeptId());
 		} else {
 			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(count.getBranchId()), Bills::getBranchId, count.getBranchId());
 		}
+		lambdaQueryWrapper.ne(Bills::getBillType, "MM");
 		if ("SE".equals(count.getBusinessType())) {
 			lambdaQueryWrapper.ge(ObjectUtils.isNotNull(count.getStartDate()), Bills::getActualEtd, count.getStartDate());
 			lambdaQueryWrapper.le(ObjectUtils.isNotNull(count.getEndDate()), Bills::getActualEtd, count.getEndDate());
@@ -2081,10 +2083,11 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 			.eq(Bills::getIsDeleted, 0)
 			.eq(ObjectUtils.isNotNull(count.getBusinessType()), Bills::getBusinessType, count.getBusinessType());
 		if (!AuthUtil.getUserRole().contains("总部") && !AuthUtil.getUserRole().contains("admin")) {
-			count.setBranchId(AuthUtil.getDeptId());
+			lambdaQueryWrapper.eq(Bills::getBranchId, AuthUtil.getDeptId());
 		} else {
 			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(count.getBranchId()), Bills::getBranchId, count.getBranchId());
 		}
+		lambdaQueryWrapper.ne(Bills::getBillType, "MM");
 		if ("SE".equals(count.getBusinessType())) {
 			lambdaQueryWrapper.ge(ObjectUtils.isNotNull(count.getStartDate()), Bills::getActualEtd, count.getStartDate());
 			lambdaQueryWrapper.le(ObjectUtils.isNotNull(count.getEndDate()), Bills::getActualEtd, count.getEndDate());