Przeglądaj źródła

1.进出场同步撤销接口-客户还箱逻辑修改
2.箱轨迹时间倒序
3.客户订舱增加检索条件
4.进场记录完成休息显示问题
5.出场同步增加提单号是否占用及占用数量是否充足判断
6.放箱号批量修改箱动bug修改
7.占用放箱号增加是否重复占用判断
8.箱管调箱撤销审核问题修改
9.代码注释补充及个别重复代码优化

纪新园 5 dni temu
rodzic
commit
0463782db3

+ 5 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dynamics/entity/BoxDynamicsRecordItems.java

@@ -289,6 +289,11 @@ public class BoxDynamicsRecordItems implements Serializable {
 	 */
 	@ApiModelProperty(value = "数据同步上一步场站英文")
 	private String srcStationEname;
+	/**
+	 * 数据同步上一步箱好坏
+	 */
+	@ApiModelProperty(value = "数据同步上一步箱好坏")
+	private String srcBoxGoodBad;
 
 	/**
 	 * 临时id

+ 48 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/BoxNumUtils.java

@@ -1,6 +1,13 @@
 package org.springblade.los.Util;
 
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import lombok.AllArgsConstructor;
 import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
+import org.springblade.los.box.dynamics.entity.BoxDynamicsRecordItems;
+import org.springblade.los.box.entity.Archives;
+import org.springblade.system.feign.ISysClient;
+
+import java.util.List;
 
 /**
  * @author :jixinyuan
@@ -63,4 +70,45 @@ public class BoxNumUtils {
 		return null;
 	}
 
+	/**
+	 *  验证箱号是否存在黑名单箱号
+	 * @param blacklist 黑名单
+	 * @param boxCodeList   箱号
+	 * @param tenantId 租户
+	 */
+	public static String verifyBlacklist(String blacklist,List<String>  boxCodeList,String tenantId){
+		StringBuilder text = new StringBuilder();
+		if (ObjectUtils.isNotNull(blacklist)) {
+			for (String item : boxCodeList) {
+				if (item.length() > 3) {
+					String head = item.substring(0, 4);
+					if (blacklist.contains(head)) {
+						text.append(item).append(",");
+					}
+				}
+			}
+		}
+		return text.toString();
+	}
+
+	/**
+	 * 进出场同步明细-存储上一步数据
+	 * @param archives  箱档案
+	 * @param recordItems  进出场同步明细
+	 */
+	public static BoxDynamicsRecordItems storagePreviousStepData(Archives archives, BoxDynamicsRecordItems recordItems){
+		recordItems.setSrcPortId(archives.getAddressId());
+		recordItems.setSrcPortCode(archives.getAddressCode());
+		recordItems.setSrcPortCname(archives.getAddressCname());
+		recordItems.setSrcPortEname(archives.getAddressEname());
+		recordItems.setSrcStationId(archives.getStationId());
+		recordItems.setSrcStationCode(archives.getStationCode());
+		recordItems.setSrcStationCname(archives.getStationCname());
+		recordItems.setSrcStationEname(archives.getStationEname());
+		recordItems.setSrcBoxDynamics(archives.getBoxDynamics());
+		recordItems.setSrcBoxStatus(archives.getStatus());
+		recordItems.setSrcBoxGoodBad(archives.getBoxStatus());
+		return recordItems;
+	}
+
 }

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesTrajectoryController.java

@@ -107,7 +107,7 @@ public class ArchivesTrajectoryController extends BladeController {
 		}
 
 		lambdaQueryWrapper.last("GROUP BY code,box_type,bill_type,box_dynamics,box_category,DATE_FORMAT(new_date, '%Y-%m-%d')," +
-			"port_id,station_id,container_number,IFNULL(mblno, ''),IFNULL(hblno, ''),src_id ORDER BY new_date DESC,code DESC");
+			"port_id,station_id,container_number,IFNULL(mblno, ''),IFNULL(hblno, ''),src_id ORDER BY new_date DESC");
 		IPage<ArchivesTrajectory> pages = archivesTrajectoryService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}

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

@@ -30,6 +30,7 @@ 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.BoxNumUtils;
 import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.Util.GlobalOperationLogUtils;
 import org.springblade.los.Util.OperatorType;
@@ -222,19 +223,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				.in(BCntrTypes::getCnName, boxType));
 		}
 		String blacklist = sysClient.getParamService("box.blacklist");
-		if (ObjectUtils.isNotNull(blacklist)) {
-			StringBuilder text = new StringBuilder();
-			for (String item : boxCodeList) {
-				if (item.length() > 3) {
-					String head = item.substring(0, 4);
-					if (blacklist.contains(head)) {
-						text.append(item).append(",");
-					}
-				}
-			}
-			if (ObjectUtils.isNotNull(text.toString())) {
-				throw new RuntimeException("箱号:" + text + "为黑名单箱,请修改数据后再操作");
-			}
+		String text = BoxNumUtils.verifyBlacklist(blacklist, boxCodeList, AuthUtil.getTenantId());
+		if (ObjectUtils.isNotNull(text)) {
+			throw new RuntimeException("箱号:" + text + "为黑名单箱,请修改数据后再操作");
 		}
 		BoxDynamicsRecord boxDynamicsRecord = new BoxDynamicsRecord();
 		boxDynamicsRecord.setCreateTime(new Date());
@@ -527,7 +518,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					failureHandling(type, boxDynamicsRecord, "未查到放箱号:" + recordItems.getContainerNumber() + "下箱号:" + recordItems.getBoxCode() + "明细");
 					return false;
 				}
-				putBox1.setTemporaryId(recordItems.getTemporaryId());
+				recordItems.setSrcPutBoxId(putBox1.getId());
 				if (putBoxNewList.isEmpty()) {
 					putBoxNewList.add(putBox1);
 				} else {
@@ -577,7 +568,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			if (!tradingBoxList.isEmpty()) {
 				TradingBox tradingBox = tradingBoxList.stream().filter(e -> e.getContractNo().equals(recordItems.getHblno())).findFirst().orElse(null);
 				if (tradingBox != null) {
-					tradingBox.setTemporaryId(recordItems.getTemporaryId());
+					recordItems.setSrcTradingBoxId(tradingBox.getId());
 					if (!tradingBoxes.isEmpty()) {
 						if (!tradingBoxes.stream().map(TradingBox::getId).collect(Collectors.toList()).contains(tradingBox.getId())) {
 							tradingBoxes.add(tradingBox);
@@ -692,15 +683,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		}
 		for (BoxDynamicsRecordItems item : itemsListTZX) {
 			item.setWhetherSynchronous("1");
-			if (!putBoxNewList.isEmpty()) {
-				putBoxNewList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxId(putBox.getId()));
-			}
 			if (!putBoxItemsOldList.isEmpty()) {
 				putBoxItemsOldList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxItemsId(putBox.getId()));
 			}
-			if (!tradingBoxes.isEmpty()) {
-				tradingBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxId(putBox.getId()));
-			}
 			if (!tradingBoxItemOldList.isEmpty()) {
 				tradingBoxItemOldList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxItemsId(putBox.getId()));
 			}
@@ -982,6 +967,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 
 	/**
 	 * 新箱进场流程
+	 * @param boxDynamicsRecord  进出场记录
+	 * @param itemsListJC  进出场记录箱明细
+	 * @param type  操作类型  1=excel导入直接提示  2=api记录并修改状态为失败 3=只记录
 	 */
 	private Boolean synchronization(List<BoxDynamicsRecordItems> itemsListJC, BoxDynamicsRecord boxDynamicsRecord, String type) throws IOException {
 		if (itemsListJC.stream().anyMatch(e -> ObjectUtils.isNull(e.getObjective()))) {
@@ -1011,21 +999,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				.eq(PutBoxItems::getIsDeleted, 0)
 				.eq(PutBoxItems::getTenantId, tenantId)
 				.in(PutBoxItems::getPid, putBoxIdList));
+			//验证黑名单
 			String blacklist = sysClient.getParamServiceDWT("box.blacklist", tenantId);
-			if (ObjectUtils.isNotNull(blacklist)) {
-				StringBuilder text = new StringBuilder();
-				for (String item : boxCodeList) {
-					if (item.length() > 3) {
-						String head = item.substring(0, 4);
-						if (blacklist.contains(head)) {
-							text.append(item).append(",");
-						}
-					}
-				}
-				if (ObjectUtils.isNotNull(text.toString())) {
-					failureHandling(type, boxDynamicsRecord, "箱号:" + text + "为黑名单箱,请修改数据后再操作");
-					return false;
-				}
+			String text = BoxNumUtils.verifyBlacklist(blacklist, boxCodeList, tenantId);
+			if (ObjectUtils.isNotNull(text)) {
+				failureHandling(type, boxDynamicsRecord, "箱号:" + text + "为黑名单箱,请修改数据后再操作");
+				return false;
 			}
 			List<Long> srcIdList = putBoxList.stream().map(PutBox::getSrcId).collect(Collectors.toList());
 			List<TradingBox> tradingBoxList = new ArrayList<>();
@@ -1057,7 +1036,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					&& ObjectUtils.isNotNull(e.getPolId()) && e.getPolId().equals(item.getPortId())
 					&& ObjectUtils.isNotNull(e.getPolStationId()) && e.getPolStationId().equals(item.getStationId())).findFirst().orElse(null);
 				if (putBox != null) {
-					putBox.setTemporaryId(item.getTemporaryId());
+					item.setSrcPutBoxId(putBox.getId());
 					if (!putBoxes.isEmpty()) {
 						if (!putBoxes.stream().map(PutBox::getId).collect(Collectors.toList()).contains(putBox.getId())) {
 							putBoxes.add(putBox);
@@ -1068,17 +1047,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					//箱档案数据处理
 					Archives archives = archivesList.stream().filter(e -> e.getCode().equals(item.getBoxCode())).findFirst().orElse(null);
 					if (archives != null) {
-
-						item.setSrcPortId(archives.getAddressId());
-						item.setSrcPortCode(archives.getAddressCode());
-						item.setSrcPortCname(archives.getAddressCname());
-						item.setSrcPortEname(archives.getAddressEname());
-						item.setSrcStationId(archives.getStationId());
-						item.setSrcStationCode(archives.getStationCode());
-						item.setSrcStationCname(archives.getStationCname());
-						item.setSrcStationEname(archives.getStationEname());
-						item.setSrcBoxDynamics(archives.getBoxDynamics());
-						item.setSrcBoxStatus(archives.getStatus());
+						//存储上一步数据
+						BoxNumUtils.storagePreviousStepData(archives,item);
 
 						archives.setContainerNumberOw(item.getContainerNumber());
 						archives.setContainerNumberTypeOw(putBox.getBoxClass());
@@ -1226,7 +1196,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							TradingBox tradingBox = tradingBoxList.stream().filter(e -> e.getId().equals(putBox.getSrcId()))
 								.findFirst().orElse(null);
 							if (tradingBox != null) {
-								tradingBox.setTemporaryId(item.getTemporaryId());
+								item.setSrcTradingBoxId(tradingBox.getId());
 								if (!tradingBoxes.isEmpty()) {
 									if (!tradingBoxes.stream().map(TradingBox::getId).collect(Collectors.toList()).contains(tradingBox.getId())) {
 										tradingBoxes.add(tradingBox);
@@ -1418,7 +1388,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					}
 					item.setVersion(ObjectUtils.isNull(item.getVersion()) ? 1 : item.getVersion() + 1);
 				}
-				putBoxService.saveOrUpdateBatch(putBoxes);
+				putBoxService.updateBatchById(putBoxes);
 			}
 			if (!putBoxItems.isEmpty()) {
 				putBoxItemsService.saveOrUpdateBatch(putBoxItems);
@@ -1493,15 +1463,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			}
 			for (BoxDynamicsRecordItems item : itemsListJC) {
 				item.setWhetherSynchronous("1");
-				if (!putBoxes.isEmpty()) {
-					putBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxId(putBox.getId()));
-				}
 				if (!putBoxItems.isEmpty()) {
 					putBoxItems.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxItemsId(putBox.getId()));
 				}
-				if (!tradingBoxes.isEmpty()) {
-					tradingBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxId(putBox.getId()));
-				}
 				if (!tradingBoxItems.isEmpty()) {
 					tradingBoxItems.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxItemsId(putBox.getId()));
 				}
@@ -1516,6 +1480,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 
 	/**
 	 * 撤销新箱进场流程
+	 * @param boxDynamicsRecord  进出场记录
+	 * @param itemsListJC  进出场记录箱明细
+	 * @param type  操作类型  1=excel导入直接提示  2=api记录并修改状态为失败 3=只记录
 	 */
 	private Boolean revokeSynchronization(List<BoxDynamicsRecordItems> itemsListJC, BoxDynamicsRecord boxDynamicsRecord, String type) throws IOException {
 		if (itemsListJC.stream().anyMatch(e -> ObjectUtils.isNull(e.getObjective()))) {
@@ -1528,10 +1495,14 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				.distinct().collect(Collectors.toList());
 			List<Archives> archivesList = new ArrayList<>();
 			if (!archivesIdList.isEmpty()) {
-				archivesList = archivesService.list(new LambdaQueryWrapper<Archives>()
-					.eq(Archives::getTenantId, tenantId)
-					.eq(Archives::getIsDeleted, 0)
-					.in(Archives::getId, archivesIdList));
+				if ("HX".equals(type)) {
+					archivesList = archivesService.selectDetele(archivesIdList, tenantId);
+				} else {
+					archivesList = archivesService.list(new LambdaQueryWrapper<Archives>()
+						.eq(Archives::getTenantId, tenantId)
+						.eq(Archives::getIsDeleted, 0)
+						.in(Archives::getId, archivesIdList));
+				}
 			}
 			//放箱号
 			List<Long> putBoxIdList = itemsListJC.stream().map(BoxDynamicsRecordItems::getSrcPutBoxId).filter(Objects::nonNull)
@@ -1627,15 +1598,20 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				if (!archivesList.isEmpty()) {
 					Archives archives = archivesList.stream().filter(e -> e.getId().equals(item.getSrcArchivesId())).findFirst().orElse(null);
 					if (archives != null) {
+						if ("HX".equals(type)) {
+							archives.setIsDeleted(0);
+						}
 						archives.setUpdateTime(new Date());
 						archives.setUpdateUserName(AuthUtil.getUserName());
 						archives.setUpdateUser(AuthUtil.getUserId());
 						if (ObjectUtils.isNotNull(item.getSrcBoxStatus()) && !"待使用".equals(archives.getStatus())) {
 							archives.setStatus(item.getSrcBoxStatus());
 							archives.setBoxDynamics(item.getSrcBoxDynamics());
+							archives.setBoxStatus(item.getSrcBoxGoodBad());
 						} else {
 							archives.setBoxDynamics("作废");
 							archives.setStatus("作废");
+							archives.setBoxStatus("好箱");
 						}
 						archives.setAddressId(item.getSrcPortId());
 						archives.setAddressCode(item.getSrcPortCode());
@@ -1646,6 +1622,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						archives.setStationCname(item.getSrcStationCname());
 						archives.setStationEname(item.getSrcStationEname());
 						archivesArrayList.add(archives);
+					} else {
+						throw new RemoteException("撤销失败未查到原箱档案数据,请联系管理员");
 					}
 				}
 				if (!putBoxItemsList.isEmpty()) {
@@ -1657,9 +1635,11 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						if (ObjectUtils.isNotNull(item.getSrcBoxStatus()) && !"待使用".equals(putBoxItem.getStatus())) {
 							putBoxItem.setStatus(item.getSrcBoxStatus());
 							putBoxItem.setBoxDynamics(item.getSrcBoxDynamics());
+							putBoxItem.setBoxStatus(item.getSrcBoxGoodBad());
 						} else {
 							putBoxItem.setBoxDynamics("作废");
 							putBoxItem.setStatus("作废");
+							putBoxItem.setBoxStatus("好箱");
 						}
 						if ("CC".contains(type)) {
 							putBoxItem.setPodStationId(null);
@@ -1701,6 +1681,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						}
 						putBoxItems.add(putBoxItem);
 					}
+				} else {
+					throw new RemoteException("撤销失败未查到原放箱号箱明细数据,请联系管理员");
 				}
 				if (!tradingBoxItemList.isEmpty()) {
 					TradingBoxItem tradingBoxItem = tradingBoxItemList.stream().filter(e -> e.getId().equals(item.getSrcTradingBoxItemsId())).findFirst().orElse(null);
@@ -1711,9 +1693,11 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						if (ObjectUtils.isNotNull(item.getSrcBoxStatus()) && !"待使用".equals(tradingBoxItem.getStatus())) {
 							tradingBoxItem.setStatus(item.getSrcBoxStatus());
 							tradingBoxItem.setBoxDynamics(item.getSrcBoxDynamics());
+							tradingBoxItem.setBoxStatus(item.getSrcBoxGoodBad());
 						} else {
 							tradingBoxItem.setBoxDynamics("作废");
 							tradingBoxItem.setStatus("作废");
+							tradingBoxItem.setBoxStatus("好箱");
 						}
 						if ("CC".contains(type)) {
 							tradingBoxItem.setPodStationId(0L);
@@ -1829,6 +1813,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				if (!containerNumberItemListNew.isEmpty()) {
 					seaContainerNumberItemService.updateBatchById(containerNumberItemListNew);
 				}
+			} else {
+				throw new RemoteException("撤销失败未查到原放箱号数据,请联系管理员");
 			}
 			if (!putBoxItems.isEmpty()) {
 				putBoxItemsService.updateBatchById(putBoxItems);
@@ -1896,6 +1882,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		return true;
 	}
 
+	/**
+	 * 进出场数据同步处理
+	 * @param boxDynamicsRecord  进出场记录
+	 * @param itemsList  进出场记录箱明细
+	 * @param type  操作类型  1=excel导入直接提示  2=api记录并修改状态为失败 3=只记录
+	 */
 	private Boolean synchronizationV1(BoxDynamicsRecord boxDynamicsRecord, List<BoxDynamicsRecordItems> itemsList, String type) throws IOException {
 		if (itemsList.stream().anyMatch(e -> ObjectUtils.isNull(e.getObjective()))) {
 			failureHandling(type, boxDynamicsRecord, "进出场目的不能为空");
@@ -2035,17 +2027,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							failureHandling(type, boxDynamicsRecord, "未查到箱号:" + recordItems.getBoxCode() + "箱档案数据");
 							return false;
 						}
-
-						recordItems.setSrcPortId(archives.getAddressId());
-						recordItems.setSrcPortCode(archives.getAddressCode());
-						recordItems.setSrcPortCname(archives.getAddressCname());
-						recordItems.setSrcPortEname(archives.getAddressEname());
-						recordItems.setSrcStationId(archives.getStationId());
-						recordItems.setSrcStationCode(archives.getStationCode());
-						recordItems.setSrcStationCname(archives.getStationCname());
-						recordItems.setSrcStationEname(archives.getStationEname());
-						recordItems.setSrcBoxDynamics(archives.getBoxDynamics());
-						recordItems.setSrcBoxStatus(archives.getStatus());
+						//存储上一步数据
+						BoxNumUtils.storagePreviousStepData(archives,recordItems);
 
 						String containerNumberType = "";
 						//原放箱号数据处理
@@ -2053,7 +2036,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							&& e.getPolId().equals(archives.getAddressId()) && e.getPolStationId().equals(archives.getStationId())
 							&& e.getBoxType().equals(archives.getTypeName())).findFirst().orElse(null);
 						if (putBoxOld != null) {
-							putBoxOld.setTemporaryId(recordItems.getTemporaryId());
+							recordItems.setSrcPutBoxId(putBoxOld.getId());
 							if (!putBoxes.isEmpty()) {
 								if (!putBoxes.stream().map(PutBox::getId).collect(Collectors.toList()).contains(putBoxOld.getId())) {
 									putBoxes.add(putBoxOld);
@@ -2138,7 +2121,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								TradingBox tradingBox = tradingBoxList.stream().filter(e -> e.getId().equals(putBoxOld.getSrcId()))
 									.findFirst().orElse(null);
 								if (tradingBox != null) {
-									tradingBox.setTemporaryId(recordItems.getTemporaryId());
+									recordItems.setSrcTradingBoxId(tradingBox.getId());
 									if (!tradingBoxes.isEmpty()) {
 										if (!tradingBoxes.stream().map(TradingBox::getId).collect(Collectors.toList()).contains(tradingBox.getId())) {
 											tradingBoxes.add(tradingBox);
@@ -2302,7 +2285,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								putBoxItem.setBoxStatus(recordItems.getBoxStatus());
 								putBoxItem.setTemporaryId(recordItems.getTemporaryId());
 								putBoxItemsNewList.add(putBoxItem);
-								putBox.setTemporaryId(recordItems.getTemporaryId());
+								recordItems.setSrcPutBoxPodId(putBox.getId());
 								if (putBoxNewList.isEmpty()) {
 									putBoxNewList.add(putBox);
 								} else {
@@ -2408,7 +2391,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						containersService.updateBatchById(containersListNew);
 					}
 					if (!archivesDateleList.isEmpty()) {
-						for (Archives item : archivesDateleList){
+						for (Archives item : archivesDateleList) {
 							item.setUpdateTime(new Date());
 							item.setUpdateUserName(AuthUtil.getUserName());
 							item.setUpdateUser(AuthUtil.getUserId());
@@ -2422,21 +2405,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					}
 					for (BoxDynamicsRecordItems item : itemsListFC) {
 						item.setWhetherSynchronous("1");
-						if (!putBoxNewList.isEmpty()) {
-							putBoxNewList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxPodId(putBox.getId()));
-						}
 						if (!putBoxItemsNewList.isEmpty()) {
 							putBoxItemsNewList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxItemsPodId(putBox.getId()));
 						}
-						if (!putBoxes.isEmpty()) {
-							putBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxId(putBox.getId()));
-						}
 						if (!putBoxItemsOldList.isEmpty()) {
 							putBoxItemsOldList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxItemsId(putBox.getId()));
 						}
-						if (!tradingBoxes.isEmpty()) {
-							tradingBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxId(putBox.getId()));
-						}
 						if (!tradingBoxItemOldList.isEmpty()) {
 							tradingBoxItemOldList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxItemsId(putBox.getId()));
 						}
@@ -2473,21 +2447,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					.eq(PutBoxItems::getIsDeleted, 0)
 					.eq(PutBoxItems::getTenantId, boxDynamicsRecord.getTenantId())
 					.in(PutBoxItems::getPid, putBoxIdList));
+				//验证黑名单
 				String blacklist = sysClient.getParamService("box.blacklist");
-				if (ObjectUtils.isNotNull(blacklist)) {
-					StringBuilder text = new StringBuilder();
-					for (String item : boxCodeList) {
-						if (item.length() > 3) {
-							String head = item.substring(0, 4);
-							if (blacklist.contains(head)) {
-								text.append(item).append(",");
-							}
-						}
-					}
-					if (ObjectUtils.isNotNull(text.toString())) {
-						failureHandling(type, boxDynamicsRecord, "箱号:" + text + "为黑名单箱,请修改数据后再操作");
-						return false;
-					}
+				String text = BoxNumUtils.verifyBlacklist(blacklist, boxCodeList, boxDynamicsRecord.getTenantId());
+				if (ObjectUtils.isNotNull(text)) {
+					failureHandling(type, boxDynamicsRecord, "箱号:" + text + "为黑名单箱,请修改数据后再操作");
+					return false;
 				}
 				List<Long> srcIdList = putBoxList.stream().map(PutBox::getSrcId).collect(Collectors.toList());
 				List<TradingBox> tradingBoxList = new ArrayList<>();
@@ -2495,7 +2460,6 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					tradingBoxList = tradingBoxMapper.selectList(new LambdaQueryWrapper<TradingBox>()
 						.eq(TradingBox::getTenantId, boxDynamicsRecord.getTenantId())
 						.eq(TradingBox::getIsDeleted, 0)
-						.eq(TradingBox::getType, "XGDX")
 						.eq(TradingBox::getStatus, 0)
 						.in(TradingBox::getId, srcIdList));
 				}
@@ -2521,7 +2485,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						&& ObjectUtils.isNotNull(e.getPolId()) && e.getPolId().equals(item.getPortId())
 						&& ObjectUtils.isNotNull(e.getPolStationId()) && e.getPolStationId().equals(item.getStationId())).findFirst().orElse(null);
 					if (putBox != null) {
-						putBox.setTemporaryId(item.getTemporaryId());
+						item.setSrcPutBoxId(putBox.getId());
 						if (!putBoxes.isEmpty()) {
 							if (!putBoxes.stream().map(PutBox::getId).collect(Collectors.toList()).contains(putBox.getId())) {
 								putBoxes.add(putBox);
@@ -2586,7 +2550,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							TradingBox tradingBox = tradingBoxList.stream().filter(e -> e.getId().equals(putBox.getSrcId()))
 								.findFirst().orElse(null);
 							if (tradingBox != null) {
-								tradingBox.setTemporaryId(item.getTemporaryId());
+								item.setSrcTradingBoxId(tradingBox.getId());
 								if ((tradingBox.getPolId() + "").equals(tradingBox.getPodId())) {
 									samePort = false;
 								}
@@ -2684,17 +2648,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						//箱档案数据处理
 						Archives archives = archivesList.stream().filter(e -> e.getCode().equals(item.getBoxCode())).findFirst().orElse(null);
 						if (archives != null) {
-
-							item.setSrcPortId(archives.getAddressId());
-							item.setSrcPortCode(archives.getAddressCode());
-							item.setSrcPortCname(archives.getAddressCname());
-							item.setSrcPortEname(archives.getAddressEname());
-							item.setSrcStationId(archives.getStationId());
-							item.setSrcStationCode(archives.getStationCode());
-							item.setSrcStationCname(archives.getStationCname());
-							item.setSrcStationEname(archives.getStationEname());
-							item.setSrcBoxDynamics(archives.getBoxDynamics());
-							item.setSrcBoxStatus(archives.getStatus());
+							//存储上一步数据
+							BoxNumUtils.storagePreviousStepData(archives,item);
 
 							archives.setContainerNumberOw(item.getContainerNumber());
 							archives.setContainerNumberTypeOw(putBox.getBoxClass());
@@ -2886,15 +2841,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				}
 				for (BoxDynamicsRecordItems item : itemsListZJ) {
 					item.setWhetherSynchronous("1");
-					if (!putBoxes.isEmpty()) {
-						putBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxId(putBox.getId()));
-					}
 					if (!putBoxItems.isEmpty()) {
 						putBoxItems.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxItemsId(putBox.getId()));
 					}
-					if (!tradingBoxes.isEmpty()) {
-						tradingBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxId(putBox.getId()));
-					}
 					if (!tradingBoxItems.isEmpty()) {
 						tradingBoxItems.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxItemsId(putBox.getId()));
 					}
@@ -3026,17 +2975,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							failureHandling(type, boxDynamicsRecord, "未查到箱号:" + recordItems.getBoxCode() + "箱档案数据");
 							return false;
 						}
-
-						recordItems.setSrcPortId(archives.getAddressId());
-						recordItems.setSrcPortCode(archives.getAddressCode());
-						recordItems.setSrcPortCname(archives.getAddressCname());
-						recordItems.setSrcPortEname(archives.getAddressEname());
-						recordItems.setSrcStationId(archives.getStationId());
-						recordItems.setSrcStationCode(archives.getStationCode());
-						recordItems.setSrcStationCname(archives.getStationCname());
-						recordItems.setSrcStationEname(archives.getStationEname());
-						recordItems.setSrcBoxDynamics(archives.getBoxDynamics());
-						recordItems.setSrcBoxStatus(archives.getStatus());
+						//存储上一步数据
+						BoxNumUtils.storagePreviousStepData(archives,recordItems);
 
 						//放箱号数据处理
 						PutBox putBox = putBoxList.stream().filter(e -> e.getContainerNumber().equals(recordItems.getContainerNumber())
@@ -3112,7 +3052,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								TradingBox tradingBox = tradingBoxList.stream().filter(e -> e.getId().equals(putBox.getSrcId()))
 									.findFirst().orElse(null);
 								if (tradingBox != null) {
-									tradingBox.setTemporaryId(recordItems.getTemporaryId());
+									recordItems.setSrcTradingBoxId(tradingBox.getId());
 									if (!tradingBoxes.isEmpty()) {
 										if (!tradingBoxes.stream().map(TradingBox::getId).collect(Collectors.toList()).contains(tradingBox.getId())) {
 											tradingBoxes.add(tradingBox);
@@ -3188,7 +3128,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 									}
 								}
 							}
-							putBox.setTemporaryId(recordItems.getTemporaryId());
+							recordItems.setSrcPutBoxId(putBox.getId());
 							if (putBoxNewList.isEmpty()) {
 								putBoxNewList.add(putBox);
 							} else {
@@ -3380,15 +3320,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 
 					for (BoxDynamicsRecordItems item : itemsListFC) {
 						item.setWhetherSynchronous("1");
-						if (!putBoxNewList.isEmpty()) {
-							putBoxNewList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxId(putBox.getId()));
-						}
 						if (!putBoxItemsNewList.isEmpty()) {
 							putBoxItemsNewList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxItemsId(putBox.getId()));
 						}
-						if (!tradingBoxes.isEmpty()) {
-							tradingBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxId(putBox.getId()));
-						}
 						if (!tradingBoxItemOldList.isEmpty()) {
 							tradingBoxItemOldList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxItemsId(putBox.getId()));
 						}
@@ -3455,12 +3389,16 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				//OW单据明细数据
 				List<TradingBoxItem> tradingBoxItemOldList = new ArrayList<>();
 				for (BoxDynamicsRecordItems recordItems : itemsListRC) {
+					recordItems.setTemporaryId(System.currentTimeMillis());
 					//箱档案信息处理
 					Archives archives = archivesList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode())).findFirst().orElse(null);
 					if (archives == null) {
 						failureHandling(type, boxDynamicsRecord, "未查到箱号:" + recordItems.getBoxCode() + "箱档案数据");
 						return false;
 					}
+					//存储上一步数据
+					BoxNumUtils.storagePreviousStepData(archives,recordItems);
+
 					//放箱号数据处理
 					PutBox putBox = putBoxList.stream().filter(e -> e.getContainerNumber().equals(recordItems.getContainerNumber())
 						&& e.getPolId().equals(recordItems.getPortId()) && e.getPolStationId().equals(recordItems.getStationId())
@@ -3472,6 +3410,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							putBoxItem = putBoxItemsList.stream().filter(e -> e.getBoxCode().equals(recordItems.getBoxCode())
 								&& putBox.getId().equals(e.getPid())).findFirst().orElse(null);
 							if (putBoxItem != null) {
+								putBoxItem.setTemporaryId(recordItems.getTemporaryId());
 								putBoxItem.setBoxStatus(recordItems.getBoxStatus());
 								putBoxItem.setUpdateUser(AuthUtil.getUserId());
 								putBoxItem.setUpdateUserName(AuthUtil.getUserName());
@@ -3496,6 +3435,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 									tradingBoxItem = tradingBoxItemList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode()))
 										.findFirst().orElse(null);
 									if (tradingBoxItem != null) {
+										tradingBoxItem.setTemporaryId(recordItems.getTemporaryId());
 										tradingBoxItem.setPid(tradingBox.getId());
 										tradingBoxItem.setBoxStatus(recordItems.getBoxStatus());
 										tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
@@ -3522,6 +3462,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					archives.setUpdateUser(AuthUtil.getUserId());
 					archives.setUpdateUserName(AuthUtil.getUserName());
 					archives.setBoxStatus(recordItems.getBoxStatus());
+					archives.setTemporaryId(recordItems.getTemporaryId());
 					archivesArrayList.add(archives);
 				}
 				if (!archivesArrayList.isEmpty()) {
@@ -3593,6 +3534,20 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				if (!tradingBoxItemOldList.isEmpty()) {
 					tradingBoxItemService.updateBatchById(tradingBoxItemOldList);
 				}
+
+				for (BoxDynamicsRecordItems item : itemsListRC) {
+					item.setWhetherSynchronous("1");
+					if (!putBoxItemsNewList.isEmpty()) {
+						putBoxItemsNewList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxItemsId(putBox.getId()));
+					}
+					if (!tradingBoxItemOldList.isEmpty()) {
+						tradingBoxItemOldList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxItemsId(putBox.getId()));
+					}
+					if (!archivesArrayList.isEmpty()) {
+						archivesArrayList.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcArchivesId(putBox.getId()));
+					}
+				}
+				boxDynamicsRecordItemsService.updateBatchById(itemsListRC);
 			}
 
 			List<BoxDynamicsRecordItems> itemsListError = itemsList.stream().filter(e -> !"CT".equals(e.getObjective())
@@ -3632,22 +3587,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					.eq(PutBoxItems::getIsDeleted, 0)
 					.eq(PutBoxItems::getTenantId, boxDynamicsRecord.getTenantId())
 					.in(PutBoxItems::getPid, putBoxIdList));
-
+				//验证黑名单
 				String blacklist = sysClient.getParamService("box.blacklist");
-				if (ObjectUtils.isNotNull(blacklist)) {
-					StringBuilder text = new StringBuilder();
-					for (String item : boxCodeList) {
-						if (item.length() > 3) {
-							String head = item.substring(0, 4);
-							if (blacklist.contains(head)) {
-								text.append(item).append(",");
-							}
-						}
-					}
-					if (ObjectUtils.isNotNull(text.toString())) {
-						failureHandling(type, boxDynamicsRecord, "箱号:" + text + "为黑名单箱,请修改数据后再操作");
-						return false;
-					}
+				String text = BoxNumUtils.verifyBlacklist(blacklist, boxCodeList, boxDynamicsRecord.getTenantId());
+				if (ObjectUtils.isNotNull(text)) {
+					failureHandling(type, boxDynamicsRecord, "箱号:" + text + "为黑名单箱,请修改数据后再操作");
+					return false;
 				}
 				List<Long> srcIdList = putBoxList.stream().map(PutBox::getSrcId).collect(Collectors.toList());
 				List<TradingBox> tradingBoxList = new ArrayList<>();
@@ -3655,7 +3600,6 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					tradingBoxList = tradingBoxMapper.selectList(new LambdaQueryWrapper<TradingBox>()
 						.eq(TradingBox::getTenantId, boxDynamicsRecord.getTenantId())
 						.eq(TradingBox::getIsDeleted, 0)
-						.eq(TradingBox::getType, "XGDX")
 						.eq(TradingBox::getStatus, 0)
 						.in(TradingBox::getId, srcIdList));
 				}
@@ -3689,7 +3633,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							&& ObjectUtils.isNotNull(e.getPolStationId()) && e.getPolStationId().equals(item.getStationId())).findFirst().orElse(null);
 					}
 					if (putBoxData != null) {
-						putBoxData.setTemporaryId(item.getTemporaryId());
+						item.setSrcPutBoxId(putBoxData.getId());
 						if (!putBoxes.isEmpty()) {
 							if (!putBoxes.stream().map(PutBox::getId).collect(Collectors.toList()).contains(putBoxData.getId())) {
 								putBoxes.add(putBoxData);
@@ -3711,6 +3655,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							item.setSrcStationEname(archives.getStationEname());
 							item.setSrcBoxDynamics(archives.getBoxDynamics());
 							item.setSrcBoxStatus(archives.getStatus());
+							item.setSrcBoxGoodBad(archives.getBoxStatus());
 
 							archives.setContainerNumberOw(item.getContainerNumber());
 							archives.setContainerNumberTypeOw(putBoxData.getBoxClass());
@@ -3821,7 +3766,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							TradingBox tradingBox = tradingBoxList.stream().filter(e -> e.getId().equals(putBoxData.getSrcId()))
 								.findFirst().orElse(null);
 							if (tradingBox != null) {
-								tradingBox.setTemporaryId(item.getTemporaryId());
+								item.setSrcTradingBoxId(tradingBox.getId());
 								if (!tradingBoxes.isEmpty()) {
 									if (!tradingBoxes.stream().map(TradingBox::getId).collect(Collectors.toList()).contains(tradingBox.getId())) {
 										tradingBoxes.add(tradingBox);
@@ -4047,15 +3992,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				}
 				for (BoxDynamicsRecordItems item : itemsListZD) {
 					item.setWhetherSynchronous("1");
-					if (!putBoxes.isEmpty()) {
-						putBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxId(putBox.getId()));
-					}
 					if (!putBoxItems.isEmpty()) {
 						putBoxItems.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxItemsId(putBox.getId()));
 					}
-					if (!tradingBoxes.isEmpty()) {
-						tradingBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxId(putBox.getId()));
-					}
 					if (!tradingBoxItems.isEmpty()) {
 						tradingBoxItems.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxItemsId(putBox.getId()));
 					}
@@ -4133,22 +4072,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					.eq(PutBoxItems::getIsDeleted, 0)
 					.eq(PutBoxItems::getTenantId, boxDynamicsRecord.getTenantId())
 					.in(PutBoxItems::getPid, putBoxIdList));
-
+                //验证黑名单
 				String blacklist = sysClient.getParamService("box.blacklist");
-				if (ObjectUtils.isNotNull(blacklist)) {
-					StringBuilder text = new StringBuilder();
-					for (String item : boxCodeList) {
-						if (item.length() > 3) {
-							String head = item.substring(0, 4);
-							if (blacklist.contains(head)) {
-								text.append(item).append(",");
-							}
-						}
-					}
-					if (ObjectUtils.isNotNull(text.toString())) {
-						failureHandling(type, boxDynamicsRecord, "箱号:" + text + "为黑名单箱,请修改数据后再操作");
-						return false;
-					}
+				String text = BoxNumUtils.verifyBlacklist(blacklist, boxCodeList, boxDynamicsRecord.getTenantId());
+				if (ObjectUtils.isNotNull(text)) {
+					failureHandling(type, boxDynamicsRecord, "箱号:" + text + "为黑名单箱,请修改数据后再操作");
+					return false;
 				}
 				List<Long> srcIdList = putBoxList.stream().map(PutBox::getSrcId).collect(Collectors.toList());
 				List<TradingBox> tradingBoxList = new ArrayList<>();
@@ -4193,7 +4122,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					}
 					boolean whetherExistence = false;
 					if (putBoxData != null) {
-						putBoxData.setTemporaryId(item.getTemporaryId());
+						item.setSrcPutBoxId(putBoxData.getId());
 						if (!putBoxes.isEmpty()) {
 							if (!putBoxes.stream().map(PutBox::getId).collect(Collectors.toList()).contains(putBoxData.getId())) {
 								putBoxes.add(putBoxData);
@@ -4204,18 +4133,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						//箱档案数据处理
 						Archives archives = archivesList.stream().filter(e -> e.getCode().equals(item.getBoxCode())).findFirst().orElse(null);
 						if (archives != null) {
-
-							item.setSrcPortId(archives.getAddressId());
-							item.setSrcPortCode(archives.getAddressCode());
-							item.setSrcPortCname(archives.getAddressCname());
-							item.setSrcPortEname(archives.getAddressEname());
-							item.setSrcStationId(archives.getStationId());
-							item.setSrcStationCode(archives.getStationCode());
-							item.setSrcStationCname(archives.getStationCname());
-							item.setSrcStationEname(archives.getStationEname());
-							item.setSrcBoxDynamics(archives.getBoxDynamics());
-							item.setSrcBoxStatus(archives.getStatus());
-
+							//存储上一步数据
+							BoxNumUtils.storagePreviousStepData(archives,item);
 							if (!archives.getTypeName().equals(item.getBoxType())) {
 								failureHandling(type, boxDynamicsRecord, "箱号:" + item.getBoxCode() + "与箱档案中箱型不符");
 								return false;
@@ -4409,7 +4328,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 											tradingBox.setHblno(bills.getHblno());
 										}
 									}
-									tradingBox.setTemporaryId(item.getTemporaryId());
+									item.setSrcTradingBoxId(tradingBox.getId());
 									if (!tradingBoxes.isEmpty()) {
 										if (!tradingBoxes.stream().map(TradingBox::getId).collect(Collectors.toList()).contains(tradingBox.getId())) {
 											tradingBoxes.add(tradingBox);
@@ -4629,6 +4548,30 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							failureHandling(type, boxDynamicsRecord, "放箱号:" + item.getContainerNumber() + "剩余场地盘存小于本次导入箱数");
 							return false;
 						}
+						List<String> hblnoList = itemsListCC.stream().filter(e -> e.getContainerNumber().equals(item.getContainerNumber()))
+							.map(BoxDynamicsRecordItems::getHblno).filter(Objects::nonNull).collect(Collectors.toList());
+						List<Bills> billsList1 = new ArrayList<>();
+						if (!billsList.isEmpty()) {
+							billsList1 =  billsList.stream().filter(e -> "MH,DD".contains(e.getBillType()) &&
+									hblnoList.contains(e.getHblno())).collect(Collectors.toList());
+						}
+						if (!billsList1.isEmpty()) {
+							for (Bills bills : billsList1){
+								long sum = itemsListCC.stream().filter(e -> e.getContainerNumber().equals(item.getContainerNumber())
+                                        && bills.getHblno().equals(e.getHblno())).count();
+								SeaContainerNumberItem containerNumberItems = containerNumberItemList.stream()
+									.filter(e-> e.getPid().equals(bills.getId()) && e.getSrcId().equals(item.getId()))
+									.findFirst().orElse(null);
+								if (containerNumberItems == null){
+									failureHandling(type, boxDynamicsRecord, "提单号:" + bills.getHblno() + "未占用放箱号");
+									return false;
+								}
+								if (sum> containerNumberItems.getOccupyNum()-containerNumberItems.getOutNum()){
+									failureHandling(type, boxDynamicsRecord, "提单号:" + bills.getHblno() + "出场箱数大于占用数量");
+									return false;
+								}
+							}
+						}
 						if (item.getOccupyNum() != 0 && item.getOccupyNum() > Integer.parseInt(count + "")) {
 							item.setOccupyNum(item.getOccupyNum() - Integer.parseInt(count + ""));
 						} else {
@@ -4807,15 +4750,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				}
 				for (BoxDynamicsRecordItems item : itemsListCC) {
 					item.setWhetherSynchronous("1");
-					if (!putBoxes.isEmpty()) {
-						putBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxId(putBox.getId()));
-					}
 					if (!putBoxItems.isEmpty()) {
 						putBoxItems.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcPutBoxItemsId(putBox.getId()));
 					}
-					if (!tradingBoxes.isEmpty()) {
-						tradingBoxes.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxId(putBox.getId()));
-					}
 					if (!tradingBoxItems.isEmpty()) {
 						tradingBoxItems.stream().filter(e -> item.getTemporaryId().equals(e.getTemporaryId())).findFirst().ifPresent(putBox -> item.setSrcTradingBoxItemsId(putBox.getId()));
 					}
@@ -4846,6 +4783,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		return true;
 	}
 
+	/**
+	 *  进出场数据错误统一处理
+	 * @param type 操作类型  1=excel导入直接提示  2=api记录并修改状态为失败 3=只记录
+	 * @param boxDynamicsRecord 进出场记录
+	 * @param msg 错误内容
+	 */
 	private void failureHandling(String type, BoxDynamicsRecord boxDynamicsRecord, String msg) throws IOException {
 		if ("1".equals(type)) {
 			throw new RemoteException(msg);
@@ -4859,6 +4802,16 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		}
 	}
 
+	/**
+	 * 正常出场-起运港出口超期箱使费
+	 * @param containersListNew  出口分单配箱明细
+	 * @param tradingBoxList ow/自有箱单据
+	 * @param tradingBoxItemOldList ow/自有箱单据箱明细
+	 * @param putBoxItems 放箱号单据箱明细
+	 * @param putBoxList 放箱号单据
+	 * @param boxDynamicsRecord 进场记录
+	 * @param type 操作类型  1=excel导入直接提示  2=api记录并修改状态为失败 3=只记录
+	 */
 	private Boolean countOverdueFee(List<PutBox> putBoxList, List<TradingBox> tradingBoxList, List<TradingBoxItem> tradingBoxItemOldList,
 									List<Containers> containersListNew, List<PutBoxItems> putBoxItems
 		, BoxDynamicsRecord boxDynamicsRecord, String type) throws IOException {
@@ -5144,8 +5097,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								feeCenterD.setAmount(amount);
 								feeCenterD.setAmountLoc(amount.multiply(feeCenterD.getExrate()));
 								feeCenterD.setUnsettledAmount(feeCenterD.getAmount());
-								feeCenterD.setCreateUser(AuthUtil.getUserId());
-								feeCenterD.setCreateUserName(AuthUtil.getUserName());
+								feeCenterD.setCreateUser(billsHYCKM.getOperatorId());
+								feeCenterD.setCreateUserName(billsHYCKM.getOperatorName());
 								feeCenterD.setCreateTime(new Date());
 								feeCenterService.save(feeCenterD);
 								List<FeeCenter> feeCenterListMs = feeCenterListM.stream().filter(e -> e.getPid().equals(billsHYCKM.getId()))
@@ -5202,6 +5155,17 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		return true;
 	}
 
+
+	/**
+	 *  无货返空-超期箱使费
+	 * @param billsList  出口分单数据
+	 * @param tradingBoxList ow/自有箱单据
+	 * @param tradingBoxItemOldList ow/自有箱单据箱明细
+	 * @param putBoxItems 放箱号单据箱明细
+	 * @param putBoxList 放箱号单据
+	 * @param boxDynamicsRecord 进场记录
+	 * @param type 操作类型  1=excel导入直接提示  2=api记录并修改状态为失败 3=只记录
+	 */
 	private Boolean countOverdueFeeWHFK(List<PutBox> putBoxList, List<TradingBox> tradingBoxList, List<TradingBoxItem> tradingBoxItemOldList,
 										List<Bills> billsList, List<PutBoxItems> putBoxItems
 		, BoxDynamicsRecord boxDynamicsRecord, String type) throws IOException {
@@ -5391,6 +5355,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		return true;
 	}
 
+	/**
+	 * 获取具体超期箱使费标准
+	 * @param storageFeesList 超期箱使费标准数据
+	 * @param bills 海运进出口单据
+	 * @param type 操作类型  1=起运港  2=目的港
+	 */
 	private StorageFees getStorageFees(List<StorageFees> storageFeesList, Bills bills, String type) {
 		StorageFees storageFees;
 		String portId;
@@ -5412,6 +5382,16 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		return storageFees;
 	}
 
+	/**
+	 *  超期箱使费-费用中心数据拼接
+	 * @param item  放箱号箱明细
+	 * @param bills 进出口单据
+	 * @param fees 费用信息
+	 * @param storageFeesItems 超期箱使费规则明细
+	 * @param curExrateList 汇率明细
+	 * @param overdueDays 超期天数
+	 * @param exrateType 本币币别
+	 */
 	private FeeCenter addFeeCenter(PutBoxItems item, Bills bills, BFees fees,
 								   List<StorageFeesItems> storageFeesItems, List<BCurExrate> curExrateList,
 								   int overdueDays, String exrateType) {
@@ -5423,8 +5403,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		feeCenter.setCorpEnName(bills.getCorpEnName());
 		feeCenter.setShortName(bills.getShortName());
 		feeCenter.setCreateTime(new Date());
-		feeCenter.setCreateUser(AuthUtil.getUserId());
-		feeCenter.setCreateUserName(AuthUtil.getUserName());
+		feeCenter.setCreateUser(bills.getOperatorId());
+		feeCenter.setCreateUserName(bills.getOperatorName());
 		feeCenter.setPaymode(bills.getMpaymode());
 		feeCenter.setPid(bills.getId());
 		feeCenter.setDc("D");
@@ -5525,6 +5505,16 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		return feeCenter;
 	}
 
+	/**
+	 * 客户还箱-目的港进口超期箱使费
+	 * @param billsHYJK  进口分单
+	 * @param tradingBoxList ow/自有箱单据
+	 * @param tradingBoxItemOldList ow/自有箱单据箱明细
+	 * @param putBoxItemsOldList 放箱号单据箱明细
+	 * @param putBoxList 放箱号单据
+	 * @param boxDynamicsRecord 进场记录
+	 * @param type 操作类型  1=excel导入直接提示  2=api记录并修改状态为失败 3=只记录
+	 */
 	private Boolean countOverdueFeeV1(Bills billsHYJK, List<TradingBox> tradingBoxList,
 									  List<TradingBoxItem> tradingBoxItemOldList, List<PutBoxItems> putBoxItemsOldList,
 									  List<PutBox> putBoxList, BoxDynamicsRecord boxDynamicsRecord, String type) throws IOException {
@@ -5761,8 +5751,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				feeCenterD.setAmount(amount);
 				feeCenterD.setAmountLoc(amount.multiply(feeCenterD.getExrate()));
 				feeCenterD.setUnsettledAmount(feeCenterD.getAmount());
-				feeCenterD.setCreateUser(AuthUtil.getUserId());
-				feeCenterD.setCreateUserName(AuthUtil.getUserName());
+				feeCenterD.setCreateUser(bills.getOperatorId());
+				feeCenterD.setCreateUserName(bills.getOperatorName());
 				feeCenterD.setCreateTime(new Date());
 				feeCenterService.save(feeCenterD);
 				List<FeeCenter> feeCenterListM = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
@@ -5823,6 +5813,14 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		return true;
 	}
 
+	/**
+	 * 费用明细生成账单数据
+	 * @param feeCenterList 费用明细
+	 * @param billsHYJK 进出口单据信息
+	 * @param exrateType 本币币别
+	 * @param boxDynamicsRecord 进出场记录
+	 * @param type 操作类型  1=excel导入直接提示  2=api记录并修改状态为失败 3=只记录
+	 */
 	private Boolean generateAccBills(List<FeeCenter> feeCenterList, Bills billsHYJK, String exrateType,
 									 BoxDynamicsRecord boxDynamicsRecord, String type) throws IOException {
 		List<FeeCenter> feeCenterList1 = new ArrayList<>();

+ 5 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/ArchivesMapper.java

@@ -18,6 +18,8 @@ package org.springblade.los.box.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.tenant.annotation.TenantIgnore;
 import org.springblade.los.box.entity.Archives;
 import org.springblade.los.box.vo.ArchivesVO;
 
@@ -41,4 +43,7 @@ public interface ArchivesMapper extends BaseMapper<Archives> {
 	List<ArchivesVO> selectArchivesPage(IPage page, ArchivesVO archives);
 
     void updateCode(Archives archives);
+
+	@TenantIgnore
+    List<Archives> selectDetele(@Param("archivesIdList") List<Long> archivesIdList, @Param("tenantId")String tenantId);
 }

+ 9 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/ArchivesMapper.xml

@@ -71,5 +71,14 @@
     <select id="selectArchivesPage" resultMap="archivesResultMap">
         select * from container_archives where is_deleted = 0
     </select>
+    <select id="selectDetele" resultType="org.springblade.los.box.entity.Archives">
+        select * from container_archives
+        where tenant_id = #{tenantId}
+        id IN
+        <foreach collection="archivesIdList" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        )
+    </select>
 
 </mapper>

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

@@ -76,4 +76,6 @@ public interface IArchivesService extends IService<Archives> {
 	Map<String, Object> distributionGrouping(Archives archives);
 
     void updateCode(Archives archives);
+
+    List<Archives> selectDetele(List<Long> archivesIdList, String tenantId);
 }

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

@@ -431,4 +431,9 @@ public class ArchivesServiceImpl extends ServiceImpl<ArchivesMapper, Archives> i
 		baseMapper.updateCode(archives);
 	}
 
+	@Override
+	public List<Archives> selectDetele(List<Long> archivesIdList, String tenantId) {
+		return baseMapper.selectDetele(archivesIdList,tenantId);
+	}
+
 }

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

@@ -337,12 +337,6 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 		if (ObjectUtils.isNull(putBox.getBoxEastId())) {
 			throw new RuntimeException("箱东必填");
 		}
-		PutBox detail = baseMapper.selectById(putBox.getId());
-		List<PutBoxItems> putBoxItems = putBoxItemsService.list(new LambdaQueryWrapper<PutBoxItems>()
-			.eq(PutBoxItems::getTenantId, AuthUtil.getTenantId())
-			.eq(PutBoxItems::getIsDeleted, 0)
-			.notIn(PutBoxItems::getId, putBox.getPutBoxItemsList().stream().map(PutBoxItems::getId).collect(Collectors.toList()))
-			.eq(PutBoxItems::getPid, detail.getId()));
 		List<PutBoxItems> putBoxItemsList = putBox.getPutBoxItemsList();
 		for (PutBoxItems item : putBoxItemsList) {
 			item.setUpdateTime(new Date());
@@ -352,37 +346,6 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 			item.setBoxEastName(putBox.getBoxEastName());
 		}
 		putBoxItemsService.updateBatchById(putBoxItemsList);
-		if (!putBoxItems.isEmpty()) {
-			putBoxItems.addAll(putBoxItemsList);
-			String boxEastId = "";
-			for (PutBoxItems item : putBoxItems) {
-				if (ObjectUtils.isNull(boxEastId)) {
-					boxEastId = item.getBoxEastId() + ",";
-				} else {
-					if (!boxEastId.contains(item.getBoxEastId() + "")) {
-						boxEastId = boxEastId + item.getBoxEastId() + ",";
-					}
-				}
-			}
-			String boxEastName = putBoxItems.stream().map(PutBoxItems::getBoxEastName).distinct().collect(Collectors.joining(","));
-			detail.setBoxEastId(boxEastId.substring(0, boxEastId.length() - 1));
-			detail.setBoxEastName(boxEastName);
-		} else {
-			String boxEastId = "";
-			for (PutBoxItems item : putBoxItemsList) {
-				if (ObjectUtils.isNull(boxEastId)) {
-					boxEastId = item.getBoxEastId() + ",";
-				} else {
-					if (!boxEastId.contains(item.getBoxEastId() + "")) {
-						boxEastId = boxEastId + item.getBoxEastId() + ",";
-					}
-				}
-			}
-			String boxEastName = putBoxItemsList.stream().map(PutBoxItems::getBoxEastName).distinct().collect(Collectors.joining(","));
-			detail.setBoxEastId(boxEastId.substring(0, boxEastId.length() - 1));
-			detail.setBoxEastName(boxEastName);
-		}
-		baseMapper.updateById(detail);
 		return R.data(putBox);
 	}
 
@@ -2647,6 +2610,7 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 		details.setWhetherManuallyCreate("0");
 		details.setWhetherDeactivate("0");
 		details.setInternalContainerNumber("");
+		details.setCode(null);
 		return details;
 	}
 

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

@@ -246,7 +246,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			if (tradingBox.getPolId().equals(Long.parseLong(tradingBox.getPodId()))) {
 				throw new RuntimeException("调箱目的港与起运港相同,请修改目的港");
 			}
-			if (tradingBox.getPodStationId().equals(tradingBox.getPolStationId())) {
+			if (ObjectUtils.isNotNull(tradingBox.getPodStationId()) && tradingBox.getPodStationId().equals(tradingBox.getPolStationId())) {
 				throw new RuntimeException("调箱目的港场站与起运港场站相同,请修改目的港场站");
 			}
 		} else if ("CCSQ".equals(tradingBox.getType())) {
@@ -3708,7 +3708,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		detail.setUpdateUserName(AuthUtil.getUserName());
 		detail.setUpdateUser(AuthUtil.getUserId());
 		detail.setUpdateTime(new Date());
-		int version = StringUtil.isBlank(detail.getVersion()) ? 1 : Integer.parseInt(tradingBox.getVersion());
+		int version = StringUtil.isBlank(detail.getVersion()) ? 1 : Integer.parseInt(detail.getVersion());
 		detail.setVersion(String.valueOf(version + 1));
 		baseMapper.updateById(detail);
 		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()

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

@@ -91,6 +91,9 @@ public class BookingCabinController extends BladeController {
 			.like(ObjectUtils.isNotNull(bills.getMblno()), Bills::getMblno, bills.getMblno())
 			.like(ObjectUtils.isNotNull(bills.getHblno()), Bills::getHblno, bills.getHblno())
 			.like(ObjectUtils.isNotNull(bills.getBookingNo()), Bills::getBookingNo, bills.getBookingNo())
+			.and(ObjectUtils.isNotNull(bills.getVesselCnName()), i -> i.like(Bills::getVesselCnName, bills.getVesselCnName()).or()
+				.like(Bills::getVesselEnName, bills.getVesselCnName()))
+			.like(ObjectUtils.isNotNull(bills.getVoyageNo()), Bills::getVoyageNo, bills.getVoyageNo())
 			.and(ObjectUtils.isNotNull(bills.getCorpCnName()), i -> i.like(Bills::getCorpCnName, bills.getCorpCnName()).or()
 				.like(Bills::getCorpEnName, bills.getCorpCnName()))
 			.and(ObjectUtils.isNotNull(bills.getCarrierCnName()), i -> i.like(Bills::getCarrierCnName, bills.getCarrierCnName()).or()
@@ -101,11 +104,16 @@ public class BookingCabinController extends BladeController {
 				.like(Bills::getPolEnName, bills.getPolEnName()).or().like(Bills::getPolCode, bills.getPolEnName()))
 			.and(ObjectUtils.isNotNull(bills.getLineCnName()), i -> i.like(Bills::getLineCnName, bills.getLineCnName()).or()
 				.like(Bills::getLineEnName, bills.getLineCnName()))
+			.like(ObjectUtils.isNotNull(bills.getExtendedData()), Bills::getExtendedData, bills.getExtendedData())
 			.apply(ObjectUtils.isNotNull(bills.getCreateDeptName()), "find_in_set('" + bills.getCreateDeptName() + "',create_dept_name)");
 		if (ObjectUtils.isNotNull(bills.getEtdList()) && !bills.getEtdList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getEtd, bills.getEtdList().get(0));
 			lambdaQueryWrapper.le(Bills::getEtd, bills.getEtdList().get(1));
 		}
+		if (ObjectUtils.isNotNull(bills.getActualEtdList()) && !bills.getActualEtdList().isEmpty()) {
+			lambdaQueryWrapper.ge(Bills::getActualEtd, bills.getActualEtdList().get(0));
+			lambdaQueryWrapper.le(Bills::getActualEtd, bills.getActualEtdList().get(1));
+		}
 		if (ObjectUtils.isNotNull(bills.getBookingDateList()) && !bills.getBookingDateList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getBookingDate, bills.getBookingDateList().get(0));
 			lambdaQueryWrapper.le(Bills::getBookingDate, bills.getBookingDateList().get(1));

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

@@ -132,6 +132,9 @@ public class SeaContainerNumberItemServiceImpl extends ServiceImpl<SeaContainerN
 		if (preContainers == null) {
 			throw new RuntimeException("数据错误,请联系管理员");
 		}
+		if ("已选择".equals(preContainers.getContainerNumberStatus())){
+			throw new RuntimeException("放箱号已占用请刷新");
+		}
 		if (preContainers.getQuantity() < containerNumberItemList.stream().map(SeaContainerNumberItem::getOccupyNum).reduce(0, Integer::sum)) {
 			throw new RuntimeException("操作占用箱量合计大于订舱箱量");
 		}

+ 4 - 0
blade-service/blade-los/src/main/java/org/springblade/los/enums/BoxDynamicsEnums.java

@@ -53,6 +53,10 @@ public enum BoxDynamicsEnums {
 	 */
 	T("T", "退租箱进场"),
 	/**
+	 * 完成修箱
+	 */
+	RC("RC", "完成修箱"),
+	/**
 	 * 内点摆箱
 	 */
 	BX("BX", "内点摆箱"),