Jelajahi Sumber

1.箱轨迹增加检索条件
2.海运进出口保存时配箱明细重新赋值唛头
3.进出场增加判断以及pod场站联系人等信息同步
4.箱池动态增加两个导出接口
5.箱池动态增加场站检索条件
6.pod场站列表检索条件问题修改
7.操作占用:有效期之外的放箱号过滤掉
8.箱管相关bug修改

纪新园 1 Minggu lalu
induk
melakukan
180cdb37af
17 mengubah file dengan 545 tambahan dan 40 penghapusan
  1. 12 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/ArchivesTrajectory.java
  2. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/TradingBox.java
  3. 89 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/ContainerNumberExcel.java
  4. 96 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/PortExcel.java
  5. 1 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  6. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/Util/BillUtils.java
  7. 8 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesTrajectoryController.java
  8. 21 4
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/BoxPoolController.java
  9. 9 10
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/PutBoxController.java
  10. 9 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxController.java
  11. 80 19
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java
  12. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/PutBoxMapper.java
  13. 119 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/mapper/PutBoxMapper.xml
  14. 5 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/IPutBoxService.java
  15. 78 6
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java
  16. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/ContainersMapper.xml
  17. 1 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java

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

@@ -353,4 +353,16 @@ public class ArchivesTrajectory implements Serializable {
 	@TableField(exist = false)
 	private String whetherStillBox;
 
+	/**
+	 * 进场日期
+	 */
+	@TableField(exist = false)
+	private List<String> entryDateList;
+
+	/**
+	 * 出场日期
+	 */
+	@TableField(exist = false)
+	private List<String> appearDateList;
+
 }

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

@@ -738,6 +738,12 @@ public class TradingBox implements Serializable {
 	 */
 	@TableField(exist = false)
 	private List<String> effectiveDateList;
+	/**
+	 * 合同失效日期
+	 */
+	@TableField(exist = false)
+	private List<String> expiryDateList;
+
 
 	/**
 	 * 明细

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

@@ -0,0 +1,89 @@
+package org.springblade.los.box.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+/**
+ * @author :jixinyuan
+ * @date : 2025/4/17
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ContainerNumberExcel {
+
+	/**
+	 * 放箱号
+	 */
+	@ExcelProperty(value = "放箱号")
+	private String containerNumber;
+
+	/**
+	 * 放箱号类型
+	 */
+	@ExcelProperty(value = "放箱号类型")
+	private String busType;
+
+	/**
+	 * 起运港
+	 */
+	@ExcelProperty(value = "起运港")
+	private String polName;
+
+	/**
+	 * 起运港场站
+	 */
+	@ExcelProperty(value = "起运港场站")
+	private String polStationName;
+
+	/**
+	 * 目的港
+	 */
+	@ExcelProperty(value = "目的港")
+	private String podName;
+
+	/**
+	 * 目的港场站
+	 */
+	@ExcelProperty(value = "目的港场站")
+	private String podStationName;
+
+	/**
+	 * 箱型
+	 */
+	@ExcelProperty(value = "箱型")
+	private String boxType;
+
+	/**
+	 * 场地盘存
+	 */
+	@ExcelProperty(value = "场地盘存")
+	private Long total;
+	/**
+	 * 操作占用
+	 */
+	@ExcelProperty(value = "操作占用")
+	private Integer occupyNum;
+	/**
+	 * 可用箱量
+	 */
+	@ExcelProperty(value = "可用箱量")
+	private Long remainingTotal;
+
+	/**
+	 * 好
+	 */
+	@ExcelProperty(value = "好")
+	private Long good;
+
+	/**
+	 * 坏
+	 */
+	@ExcelProperty(value = "坏")
+	private Long bad;
+
+}

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

@@ -0,0 +1,96 @@
+package org.springblade.los.box.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+/**
+ * @author :jixinyuan
+ * @date : 2025/4/17
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class PortExcel {
+
+	/**
+	 * 港口
+	 */
+	@ExcelProperty(value = "港口")
+	private String portName;
+
+	/**
+	 * 场站
+	 */
+	@ExcelProperty(value = "场站")
+	private String stationName;
+
+	/**
+	 * 放箱号类型
+	 */
+	@ExcelProperty(value = "放箱号类型")
+	private String busType;
+
+	/**
+	 * 场地盘存
+	 */
+	@ExcelProperty(value = "场地盘存")
+	private Long total;
+	/**
+	 * 可用箱量
+	 */
+	@ExcelProperty(value = "可用箱量")
+	private Long remainingTotal;
+
+	/**
+	 * 20GP-好
+	 */
+	@ExcelProperty(value = "20GP-好")
+	private Long gP20Good;
+
+	/**
+	 * 40GP-好
+	 */
+	@ExcelProperty(value = "40GP-好")
+	private Long gP40Good;
+
+	/**
+	 * 40HC-好
+	 */
+	@ExcelProperty(value = "40HC-好")
+	private Long hG40Good;
+
+	/**
+	 * 其他-好
+	 */
+	@ExcelProperty(value = "其他-好")
+	private Long otherGood;
+
+	/**
+	 * 20GP-坏
+	 */
+	@ExcelProperty(value = "20GP-坏")
+	private Long gP20Bad;
+
+	/**
+	 * 40GP-坏
+	 */
+	@ExcelProperty(value = "40GP-坏")
+	private Long gP40Bad;
+
+	/**
+	 * 40HC-坏
+	 */
+	@ExcelProperty(value = "40HC-坏")
+	private Long hG40Bad;
+
+	/**
+	 * 其他-坏
+	 */
+	@ExcelProperty(value = "其他-坏")
+	private Long otherBad;
+
+}

+ 1 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java

@@ -855,6 +855,7 @@ public class Bills implements Serializable {
 	 * POL场站 id
 	 */
 	@ApiModelProperty(value = "POL场站 id")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Long cyId;
 	/**
 	 * POL场站代码

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

@@ -120,6 +120,10 @@ public class BillUtils implements IBillUtils {
 			containersService.updateBatchById(containersList);
 			List<Containers> containersListNew = new ArrayList<>();
 			for (Containers item : containersList) {
+				Bills bills1 = billsList.stream().filter(e-> e.getId().equals(item.getPid())).findFirst().orElse(null);
+				if (bills1 != null){
+					item.setMarks(bills1.getMarks());
+				}
 				item.setSrcSplitOrderId(item.getPid());
 				item.setSrcId(item.getId());
 				item.setId(null);

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

@@ -92,6 +92,14 @@ public class ArchivesTrajectoryController extends BladeController {
 			lambdaQueryWrapper.ge(ArchivesTrajectory::getNewDate, archivesTrajectory.getNewDateList().get(0));
 			lambdaQueryWrapper.le(ArchivesTrajectory::getNewDate, archivesTrajectory.getNewDateList().get(1));
 		}
+		if (archivesTrajectory.getEntryDateList() != null && archivesTrajectory.getEntryDateList().size() > 1) {
+			lambdaQueryWrapper.ge(ArchivesTrajectory::getPolPreAppearanceDate, archivesTrajectory.getEntryDateList().get(0));
+			lambdaQueryWrapper.le(ArchivesTrajectory::getPolPreAppearanceDate, archivesTrajectory.getEntryDateList().get(1));
+		}
+		if (archivesTrajectory.getAppearDateList() != null && archivesTrajectory.getAppearDateList().size() > 1) {
+			lambdaQueryWrapper.ge(ArchivesTrajectory::getPolStationEmptyContainerExitDate, archivesTrajectory.getAppearDateList().get(0));
+			lambdaQueryWrapper.le(ArchivesTrajectory::getPolStationEmptyContainerExitDate, archivesTrajectory.getAppearDateList().get(1));
+		}
 		if ("1".equals(archivesTrajectory.getWhetherStillBox())){
 			lambdaQueryWrapper.eq(ArchivesTrajectory::getBoxDynamics,"客户还箱");
 		}

+ 21 - 4
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/BoxPoolController.java

@@ -24,16 +24,15 @@ import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.los.box.dto.BoxPoolContainerNumberDTO;
 import org.springblade.los.box.dto.BoxPoolDTO;
 import org.springblade.los.box.dto.BoxPoolItemDTO;
 import org.springblade.los.box.dto.BoxPoolPortDTO;
-import org.springblade.los.box.excel.EmptyContainerAppearance;
-import org.springblade.los.box.excel.EmptyContainerAppearanceAnalysis;
-import org.springblade.los.box.excel.EmptyContainerEntry;
-import org.springblade.los.box.excel.GiveAnEncore;
+import org.springblade.los.box.excel.*;
 import org.springblade.los.box.service.IPutBoxService;
 import org.springblade.los.business.sea.entity.Bills;
+import org.springblade.los.excel.BBusinessTypeExcel;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -64,6 +63,15 @@ public class BoxPoolController extends BladeController {
 	}
 
 	/**
+	 * 箱池动态港口-导出
+	 */
+	@GetMapping("/listPortExport")
+	public void listPortExport(BoxPoolDTO boxPoolDTO,HttpServletResponse response) {
+		List<BoxPoolPortDTO> list = putBoxService.listPortExport(boxPoolDTO);
+		ExcelUtil.export(response, "港口统计", "港口统计", BeanUtil.copy(list, PortExcel.class), PortExcel.class);
+	}
+
+	/**
 	 * 箱池动态放箱号
 	 */
 	@GetMapping("/listContainerNumber")
@@ -72,6 +80,15 @@ public class BoxPoolController extends BladeController {
 	}
 
 	/**
+	 * 箱池动态放箱号-导出
+	 */
+	@GetMapping("/listContainerNumberExport")
+	public void listContainerNumberExport(BoxPoolDTO boxPoolDTO,HttpServletResponse response) {
+		List<BoxPoolContainerNumberDTO> list = putBoxService.listContainerNumberExport(boxPoolDTO);
+		ExcelUtil.export(response, "放箱号统计", "放箱号统计", BeanUtil.copy(list, PortExcel.class), PortExcel.class);
+	}
+
+	/**
 	 * 箱池动态箱明细
 	 */
 	@GetMapping("/listBoxItem")

+ 9 - 10
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/PutBoxController.java

@@ -32,7 +32,6 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.box.entity.PutBox;
 import org.springblade.los.box.entity.PutBoxItems;
-import org.springblade.los.box.entity.TradingBox;
 import org.springblade.los.box.service.IPutBoxItemsService;
 import org.springblade.los.box.service.IPutBoxService;
 import org.springblade.los.business.sea.entity.SeaContainerNumberItem;
@@ -106,13 +105,13 @@ public class PutBoxController extends BladeController {
 		lambdaQueryWrapper.orderByAsc(PutBox::getPolCname);
 		lambdaQueryWrapper.orderByAsc(PutBox::getPodCname);
 		lambdaQueryWrapper.orderByAsc(PutBox::getPriorityLevel);
-		if ("1".equals(putBox.getWhetherDisplay())){
-			lambdaQueryWrapper.ne(PutBox::getRemainingNum,0);
+		if ("1".equals(putBox.getWhetherDisplay())) {
+			lambdaQueryWrapper.ne(PutBox::getRemainingNum, 0);
 			lambdaQueryWrapper.ge(PutBox::getEffectiveEndDate, new Date());
-		}else if ("2".equals(putBox.getWhetherDisplay())){
-			lambdaQueryWrapper.eq(PutBox::getRemainingNum,0);
+		} else if ("2".equals(putBox.getWhetherDisplay())) {
+			lambdaQueryWrapper.eq(PutBox::getRemainingNum, 0);
 			lambdaQueryWrapper.ge(PutBox::getEffectiveEndDate, new Date());
-		}else if ("3".equals(putBox.getWhetherDisplay())){
+		} else if ("3".equals(putBox.getWhetherDisplay())) {
 			lambdaQueryWrapper.lt(PutBox::getEffectiveEndDate, new Date());
 		}
 		if (ObjectUtils.isNotNull(putBox.getEffectiveStartDate()) && ObjectUtils.isNotNull(putBox.getEffectiveEndDate())) {
@@ -217,11 +216,11 @@ public class PutBoxController extends BladeController {
 			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(putBox.getCabinType()), PutBox::getCabinType, putBox.getCabinType());
 			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(putBox.getAirlineId()), PutBox::getAirlineId, putBox.getAirlineId());
 		}
-		/*if (ObjectUtils.isNotNull(putBox.getEtd())) {
+		if (ObjectUtils.isNotNull(putBox.getEtd())) {
 			SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
 			lambdaQueryWrapper.apply("DATE_FORMAT(effective_start_date,'%Y-%m-%d') <= '" + formatter.format(putBox.getEtd()) + "'")
 				.apply("DATE_FORMAT(effective_end_date,'%Y-%m-%d') >= '" + formatter.format(putBox.getEtd()) + "'");
-		}*/
+		}
 		List<PutBox> putBoxList = putBoxService.list(lambdaQueryWrapper);
 		List<SeaContainerNumberItem> containerNumberItemList = new ArrayList<>();
 		for (PutBox item : putBoxList) {
@@ -283,9 +282,9 @@ public class PutBoxController extends BladeController {
 	 */
 	@GetMapping("/batchUpdatePod")
 	public R batchUpdatePod(@RequestParam("ids") String ids, @RequestParam("podId") String podId,
-							@RequestParam("podCname")String podCname, @RequestParam("podEname")String podEname,
+							@RequestParam("podCname") String podCname, @RequestParam("podEname") String podEname,
 							@RequestParam("podCode") String podCode) {
-		return putBoxService.batchUpdatePod(ids,podId,podCname,podEname,podCode);
+		return putBoxService.batchUpdatePod(ids, podId, podCname, podEname, podCode);
 	}
 
 

+ 9 - 0
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxController.java

@@ -120,6 +120,7 @@ public class TradingBoxController extends BladeController {
 			.eq(ObjectUtils.isNotNull(tradingBox.getBuxStaus()), TradingBox::getBuxStaus, tradingBox.getBuxStaus())
 			.eq(ObjectUtils.isNotNull(tradingBox.getWhetherEnable()), TradingBox::getWhetherEnable, tradingBox.getWhetherEnable())
 			.eq(ObjectUtils.isNotNull(tradingBox.getAppearanceType()), TradingBox::getAppearanceType, tradingBox.getAppearanceType())
+			.eq(ObjectUtils.isNotNull(tradingBox.getApprovalStatus()), TradingBox::getApprovalStatus, tradingBox.getApprovalStatus())
 			.eq(ObjectUtils.isNotNull(tradingBox.getDc()), TradingBox::getDc, tradingBox.getDc())
 		;
 		if (ObjectUtils.isNotNull(tradingBox.getEffectiveDate()) && ObjectUtils.isNotNull(tradingBox.getExpiryDate())) {
@@ -127,6 +128,14 @@ public class TradingBoxController extends BladeController {
 			lambdaQueryWrapper.apply(ObjectUtils.isNotNull(tradingBox.getEffectiveDate()), "DATE_FORMAT(effective_date,'%Y-%m-%d') >= '" + formatter.format(tradingBox.getEffectiveDate()) + "'")
 				.apply(ObjectUtils.isNotNull(tradingBox.getExpiryDate()), "DATE_FORMAT(expiry_date,'%Y-%m-%d') >= '" + formatter.format(tradingBox.getExpiryDate()) + "'");
 		}
+		if (tradingBox.getEffectiveDateList() != null && tradingBox.getEffectiveDateList().size() > 1) {
+			lambdaQueryWrapper.ge(TradingBox::getEffectiveDate, tradingBox.getEffectiveDateList().get(0));
+			lambdaQueryWrapper.le(TradingBox::getEffectiveDate, tradingBox.getEffectiveDateList().get(1));
+		}
+		if (tradingBox.getExpiryDateList() != null && tradingBox.getExpiryDateList().size() > 1) {
+			lambdaQueryWrapper.ge(TradingBox::getExpiryDate, tradingBox.getExpiryDateList().get(0));
+			lambdaQueryWrapper.le(TradingBox::getExpiryDate, tradingBox.getExpiryDateList().get(1));
+		}
 		if (tradingBox.getPurchaseDateList() != null && tradingBox.getPurchaseDateList().size() > 1) {
 			lambdaQueryWrapper.ge(TradingBox::getPurchaseDate, tradingBox.getPurchaseDateList().get(0));
 			lambdaQueryWrapper.le(TradingBox::getPurchaseDate, tradingBox.getPurchaseDateList().get(1));

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

@@ -445,6 +445,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		List<Long> archivesDateleList = new ArrayList<>();
 
 		for (BoxDynamicsRecordItems recordItems : itemsListTZX) {
+			if (ObjectUtils.isNull(recordItems.getApproachExitDate())) {
+				recordItems.setApproachExitDate(new Date());
+			}
 			//箱档案信息处理
 			Archives archives = archivesList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode())).findFirst().orElse(null);
 			if (archives == null) {
@@ -906,6 +909,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			List<PutBox> putBoxes = new ArrayList<>();
 			List<TradingBox> tradingBoxes = new ArrayList<>();
 			for (BoxDynamicsRecordItems item : itemsListJC) {
+				if (ObjectUtils.isNull(item.getApproachExitDate())) {
+					item.setApproachExitDate(new Date());
+				}
 				PutBox putBox = putBoxList.stream().filter(e -> e.getContainerNumber().equals(item.getContainerNumber())
 					&& ObjectUtils.isNotNull(e.getPolId()) && e.getPolId().equals(item.getPortId())
 					&& ObjectUtils.isNotNull(e.getPolStationId()) && e.getPolStationId().equals(item.getStationId())).findFirst().orElse(null);
@@ -1286,14 +1292,16 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						archivesTrajectory.setBoxEastName(item.getBoxEastName());
 						archivesTrajectory.setMblno(item.getMblno());
 						archivesTrajectory.setHblno(item.getHblno());
-						itemsListJC.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
-							.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
+						BoxDynamicsRecordItems dynamicsRecordItems = itemsListJC.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst().orElse(null);
+						if (dynamicsRecordItems != null) {
+							archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective()));
+							archivesTrajectory.setNewDate(dynamicsRecordItems.getApproachExitDate());
+						}
 						archivesTrajectory.setStatus(archivesTrajectory.getBoxDynamics());
 						archivesTrajectory.setCorpId(item.getBoxEastId());
 						archivesTrajectory.setCorpName(item.getBoxEastName());
 						archivesTrajectory.setBillType(tradingBox.getBoxType());
 						archivesTrajectory.setCode(item.getBoxCode());
-						archivesTrajectory.setNewDate(new Date());
 						archivesTrajectory.setCreateTime(new Date());
 						archivesTrajectory.setCreateUser(AuthUtil.getUserId());
 						archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
@@ -1467,6 +1475,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					//OW(拿)-箱档案数据删除
 					List<Long> archivesDateleList = new ArrayList<>();
 					for (BoxDynamicsRecordItems recordItems : itemsListFC) {
+						if (ObjectUtils.isNull(recordItems.getApproachExitDate())) {
+							recordItems.setApproachExitDate(new Date());
+						}
 						//箱档案信息处理
 						Archives archives = archivesList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode())).findFirst().orElse(null);
 						if (archives == null) {
@@ -1492,6 +1503,11 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 									putBoxItem.setPodStationCname(recordItems.getStationEname());
 									putBoxItem.setPodStationEname(recordItems.getStationCode());
 									putBoxItem.setBoxStatus(recordItems.getBoxStatus());
+									if ("待使用".equals(putBoxItem.getStatus())) {
+										failureHandling(type, boxDynamicsRecord, "放箱号:" + recordItems.getContainerNumber() + "中箱号:" +
+											recordItems.getBoxCode() + "未出场,不允许直接还箱");
+										return false;
+									}
 									putBoxItem.setStatus("已还箱");
 									putBoxItem.setBoxDynamics("已返场");
 									putBoxItem.setUpdateUser(AuthUtil.getUserId());
@@ -1754,12 +1770,14 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								archivesTrajectory.setBoxEastName(item.getBoxEastName());
 								archivesTrajectory.setMblno(item.getMblno());
 								archivesTrajectory.setHblno(item.getHblno());
-								itemsListFC.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
-									.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
+								BoxDynamicsRecordItems dynamicsRecordItems = itemsListFC.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst().orElse(null);
+								if (dynamicsRecordItems != null) {
+									archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective()));
+									archivesTrajectory.setNewDate(dynamicsRecordItems.getApproachExitDate());
+								}
 								archivesTrajectory.setStatus(archivesTrajectory.getBoxDynamics());
 								archivesTrajectory.setBillType(putBox.getBoxClass());
 								archivesTrajectory.setCode(item.getBoxCode());
-								archivesTrajectory.setNewDate(new Date());
 								archivesTrajectory.setCreateTime(new Date());
 								archivesTrajectory.setCreateUser(AuthUtil.getUserId());
 								archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
@@ -1876,6 +1894,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				List<PutBox> putBoxes = new ArrayList<>();
 				List<TradingBox> tradingBoxes = new ArrayList<>();
 				for (BoxDynamicsRecordItems item : itemsListZJ) {
+					if (ObjectUtils.isNull(item.getApproachExitDate())) {
+						item.setApproachExitDate(new Date());
+					}
 					PutBox putBox = putBoxList.stream().filter(e -> e.getContainerNumber().equals(item.getContainerNumber())
 						&& ObjectUtils.isNotNull(e.getPolId()) && e.getPolId().equals(item.getPortId())
 						&& ObjectUtils.isNotNull(e.getPolStationId()) && e.getPolStationId().equals(item.getStationId())).findFirst().orElse(null);
@@ -2193,14 +2214,16 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							archivesTrajectory.setBoxEastName(item.getBoxEastName());
 							archivesTrajectory.setMblno(item.getMblno());
 							archivesTrajectory.setHblno(item.getHblno());
-							itemsListZJ.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
-								.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
+							BoxDynamicsRecordItems dynamicsRecordItems = itemsListZJ.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst().orElse(null);
+							if (dynamicsRecordItems != null) {
+								archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective()));
+								archivesTrajectory.setNewDate(dynamicsRecordItems.getApproachExitDate());
+							}
 							archivesTrajectory.setStatus(archivesTrajectory.getBoxDynamics());
 							archivesTrajectory.setCorpId(item.getBoxEastId());
 							archivesTrajectory.setCorpName(item.getBoxEastName());
 							archivesTrajectory.setBillType(tradingBox.getBoxType());
 							archivesTrajectory.setCode(item.getBoxCode());
-							archivesTrajectory.setNewDate(new Date());
 							archivesTrajectory.setCreateTime(new Date());
 							archivesTrajectory.setCreateUser(AuthUtil.getUserId());
 							archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
@@ -2352,6 +2375,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					//海运进口配箱信息修改
 					List<Containers> containersListNew = new ArrayList<>();
 					for (BoxDynamicsRecordItems recordItems : itemsListFC) {
+						if (ObjectUtils.isNull(recordItems.getApproachExitDate())) {
+							recordItems.setApproachExitDate(new Date());
+						}
 						//箱档案信息处理
 						Archives archives = archivesList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode())).findFirst().orElse(null);
 						if (archives == null) {
@@ -2369,6 +2395,11 @@ 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) {
+									if ("待使用".equals(putBoxItem.getStatus())) {
+										failureHandling(type, boxDynamicsRecord, "放箱号:" + recordItems.getContainerNumber() + "中箱号:" +
+											recordItems.getBoxCode() + "未出场,不允许直接还箱");
+										return false;
+									}
 									putBoxItem.setBoxDynamics("空箱提箱进场");
 									putBoxItem.setStatus("待使用");
 									putBoxItem.setPolCyId(recordItems.getStationId());
@@ -2627,12 +2658,14 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								archivesTrajectory.setBoxEastName(item.getBoxEastName());
 								archivesTrajectory.setMblno(item.getMblno());
 								archivesTrajectory.setHblno(item.getHblno());
-								itemsListFC.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
-									.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
+								BoxDynamicsRecordItems dynamicsRecordItems = itemsListFC.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst().orElse(null);
+								if (dynamicsRecordItems != null) {
+									archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective()));
+									archivesTrajectory.setNewDate(dynamicsRecordItems.getApproachExitDate());
+								}
 								archivesTrajectory.setStatus(archivesTrajectory.getBoxDynamics());
 								archivesTrajectory.setBillType(putBox.getBoxClass());
 								archivesTrajectory.setCode(item.getBoxCode());
-								archivesTrajectory.setNewDate(new Date());
 								archivesTrajectory.setCreateTime(new Date());
 								archivesTrajectory.setCreateUser(AuthUtil.getUserId());
 								archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
@@ -2762,6 +2795,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				List<PutBox> putBoxes = new ArrayList<>();
 				List<TradingBox> tradingBoxes = new ArrayList<>();
 				for (BoxDynamicsRecordItems item : itemsListZD) {
+					if (ObjectUtils.isNull(item.getApproachExitDate())) {
+						item.setApproachExitDate(new Date());
+					}
 					PutBox putBoxData;
 					PutBox putBox = putBoxList.stream().filter(e -> e.getContainerNumber().equals(item.getHblno())
 						&& ObjectUtils.isNotNull(e.getPolId()) && e.getPolId().equals(item.getPortId())
@@ -3065,14 +3101,16 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							archivesTrajectory.setBoxEastName(item.getBoxEastName());
 							archivesTrajectory.setMblno(item.getMblno());
 							archivesTrajectory.setHblno(item.getHblno());
-							itemsListZD.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst()
-								.ifPresent(dynamicsRecordItems -> archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective())));
+							BoxDynamicsRecordItems dynamicsRecordItems = itemsListZD.stream().filter(e -> e.getBoxCode().equals(item.getBoxCode())).findFirst().orElse(null);
+							if (dynamicsRecordItems != null) {
+								archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective()));
+								archivesTrajectory.setNewDate(dynamicsRecordItems.getApproachExitDate());
+							}
 							archivesTrajectory.setStatus(archivesTrajectory.getBoxDynamics());
 							archivesTrajectory.setCorpId(item.getBoxEastId());
 							archivesTrajectory.setCorpName(item.getBoxEastName());
 							archivesTrajectory.setBillType(tradingBox.getBoxType());
 							archivesTrajectory.setCode(item.getBoxCode());
-							archivesTrajectory.setNewDate(new Date());
 							archivesTrajectory.setCreateTime(new Date());
 							archivesTrajectory.setCreateUser(AuthUtil.getUserId());
 							archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
@@ -3345,7 +3383,16 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							putBoxItem.setCreateUserName(AuthUtil.getUserName());
 							putBoxItem.setCreateTime(new Date());
 						}
-
+						if (ObjectUtils.isNotNull(putBoxData.getPodId()) && !putBoxData.getPodId().contains(",")) {
+							putBoxItem.setPodStationId(putBoxData.getPodStationId());
+							putBoxItem.setPodStationCode(putBoxData.getPodStationCode());
+							putBoxItem.setPodStationCname(putBoxData.getPodStationCname());
+							putBoxItem.setPodStationEname(putBoxData.getPodStationEname());
+							putBoxItem.setPodCyAddress(putBoxData.getPodCyAddress());
+							putBoxItem.setPodCyContact(putBoxData.getPodCyContact());
+							putBoxItem.setPodCyEmail(putBoxData.getPodCyEmail());
+							putBoxItem.setPodCyTel(putBoxData.getPodCyTel());
+						}
 						putBoxItem.setBoxDynamics("空箱出场");
 						putBoxItem.setBoxStatus(item.getBoxStatus());
 						putBoxItem.setPolCyId(item.getStationId());
@@ -3380,8 +3427,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								TradingBox tradingBox = tradingBoxList.stream().filter(e -> e.getId().equals(putBoxData.getSrcId()))
 									.findFirst().orElse(null);
 								if (tradingBox != null) {
-									if (bills != null){
-										if (ObjectUtils.isNotNull(bills.getMblno())){
+									if (bills != null) {
+										if (ObjectUtils.isNotNull(bills.getMblno())) {
 											if (ObjectUtils.isNotNull(tradingBox.getMblno())) {
 												if (!tradingBox.getMblno().contains(bills.getMblno())) {
 													tradingBox.setMblno(tradingBox.getMblno() + "," + bills.getMblno());
@@ -3460,6 +3507,16 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 										tradingBoxItem.setCreateUserName(AuthUtil.getUserName());
 										tradingBoxItem.setCreateTime(new Date());
 									}
+									if (ObjectUtils.isNotNull(tradingBox.getPodId()) && !tradingBox.getPodId().contains(",")) {
+										tradingBoxItem.setPodStationId(tradingBox.getPodStationId());
+										tradingBoxItem.setPodStationCode(tradingBox.getPodStationCode());
+										tradingBoxItem.setPodStationCname(tradingBox.getPodStationCname());
+										tradingBoxItem.setPodStationEname(tradingBox.getPodStationEname());
+										tradingBoxItem.setPodCyAddress(tradingBox.getPodCyAddress());
+										tradingBoxItem.setPodCyContact(tradingBox.getPodCyContact());
+										tradingBoxItem.setPodCyEmail(tradingBox.getPodCyEmail());
+										tradingBoxItem.setPodCyTel(tradingBox.getPodCyTel());
+									}
 									tradingBoxItem.setBoxEastId(tradingBox.getPurchaseCompanyId());
 									tradingBoxItem.setBoxEastName(tradingBox.getPurchaseCompanyName());
 									tradingBoxItem.setBoxDynamics("空箱出场");
@@ -3556,6 +3613,10 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 									containers.setPodStationCode(putBoxData.getPodStationCode());
 									containers.setPodStationCname(putBoxData.getPodStationCname());
 									containers.setPodStationEname(putBoxData.getPodStationEname());
+									containers.setPodCyAddress(putBoxData.getPodCyAddress());
+									containers.setPodCyContact(putBoxData.getPodCyContact());
+									containers.setPodCyEmail(putBoxData.getPodCyEmail());
+									containers.setPodCyTel(putBoxData.getPodCyTel());
 									containers.setBoxSrcType(putBoxData.getBoxClass());
 									containersListNew.add(containers);
 								}
@@ -3698,6 +3759,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 									archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective() + "C"));
 								} else {
 									archivesTrajectory.setBoxDynamics(BoxDynamicsEnums.getName(dynamicsRecordItems.getObjective()));
+									archivesTrajectory.setNewDate(dynamicsRecordItems.getApproachExitDate());
 								}
 							}
 							archivesTrajectory.setStatus(archivesTrajectory.getBoxDynamics());
@@ -3705,7 +3767,6 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							archivesTrajectory.setCorpName(item.getBoxEastName());
 							archivesTrajectory.setBillType(tradingBox.getBoxType());
 							archivesTrajectory.setCode(item.getBoxCode());
-							archivesTrajectory.setNewDate(new Date());
 							archivesTrajectory.setCreateTime(new Date());
 							archivesTrajectory.setCreateUser(AuthUtil.getUserId());
 							archivesTrajectory.setCreateUserName(AuthUtil.getUserName());

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

@@ -53,4 +53,8 @@ public interface PutBoxMapper extends BaseMapper<PutBox> {
 	,@Param("tenantId")String tenantId,@Param("busType")String busType,@Param("stationId")Long stationId);
 
     List<RouteCostProfitExcel> getBoxNumber(@Param("data")RouteCostProfitExcel routeCost);
+
+	List<BoxPoolPortDTO> listPortExport(@Param("data")BoxPoolDTO boxPoolDTO);
+
+	List<BoxPoolContainerNumberDTO> listContainerNumberExport(@Param("data")BoxPoolDTO boxPoolDTO);
 }

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

@@ -88,8 +88,11 @@
         <if test="data.boxEastName!=null and data.boxEastName != ''">
             and box_east_name like concat(concat('%', #{data.boxEastName}),'%')
         </if>
+        <if test="data.stationId!=null and data.stationId != ''">
+            and pol_station_id = #{data.stationId}
+        </if>
         <if test="data.busType!=null and data.busType != ''">
-            and  find_in_set(bus_type,#{data.busType})
+            and find_in_set(bus_type,#{data.busType})
         </if>
         <if test="data.boxType!=null and data.boxType != ''">
             and box_type = #{data.boxType}
@@ -305,5 +308,120 @@
         </if>
         GROUP BY lpb.id
     </select>
+    <select id="listPortExport" resultType="org.springblade.los.box.dto.BoxPoolPortDTO">
+        SELECT
+        lp.id as portId,
+        lp.cn_name as portName,
+        lpb.pol_station_cname as stationName,
+        lpb.pol_station_id as stationId,
+        lpb.box_class as busType,
+        sum(lpb.remaining_num) as remainingTotal
+        FROM
+        logistics_put_box lpb
+        LEFT JOIN los_b_ports lp ON FIND_IN_SET( lp.id, lpb.pol_id )
+        WHERE
+        lpb.tenant_id = #{data.tenantId}
+        AND lpb.is_deleted = '0'
+        AND lp.tenant_id = #{data.tenantId}
+        AND lp.is_deleted = '0'
+        AND lpb.remaining_num > 0
+        <if test='data.containerNumber != null and data.containerNumber != ""'>
+            and lpb.container_number like concat(concat('%', #{data.containerNumber}),'%')
+        </if>
+        <if test="data.polId!=null and data.polId != ''">
+            and lpb.pol_id like concat(concat('%', #{data.polId}),'%')
+        </if>
+        <if test="data.stationId!=null and data.stationId != ''">
+            and lpb.pol_station_id = #{data.stationId}
+        </if>
+        <if test="data.podId!=null and data.podId != ''">
+            and lpb.pod_id like concat(concat('%', #{data.podId}),'%')
+        </if>
+        <if test="data.polName!=null and data.polName != ''">
+            and lpb.pol_cname like concat(concat('%', #{data.polName}),'%')
+        </if>
+        <if test="data.podName!=null and data.podName != ''">
+            and lpb.pod_cname like concat(concat('%', #{data.podName}),'%')
+        </if>
+        <if test="data.boxEastId!=null and data.boxEastId != ''">
+            and lpb.box_east_id like concat(concat('%', #{data.boxEastId}),'%')
+        </if>
+        <if test="data.boxEastName!=null and data.boxEastName != ''">
+            and lpb.box_east_name like concat(concat('%', #{data.boxEastName}),'%')
+        </if>
+        <if test="data.busType!=null and data.busType != ''">
+            and find_in_set(lpb.box_class,#{data.busType})
+        </if>
+        <if test="data.boxType!=null and data.boxType != ''">
+            and lpb.box_type = #{data.boxType}
+        </if>
+        <if test="data.whetherLoseEfficacy!=null and data.whetherLoseEfficacy != ''">
+            and DATE_FORMAT(lpb.effective_start_date,'%Y-%m-%d') &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-%d')
+            and DATE_FORMAT(lpb.effective_end_date,'%Y-%m-%d') &lt;= DATE_FORMAT(CURDATE(), '%Y-%m-%d')
+        </if>
+        GROUP BY
+        lp.id,lpb.box_class,lpb.pol_station_id
+    </select>
+    <select id="listContainerNumberExport" resultType="org.springblade.los.box.dto.BoxPoolContainerNumberDTO">
+        SELECT
+        id as id ,
+        container_number as containerNumber,
+        bus_type as busType,
+        pol_id as polId,
+        pol_cname as polName,
+        pol_station_id as polStationId,
+        pol_station_cname as polStationName,
+        pod_id as podId,
+        pod_cname as podName,
+        pod_station_id as podStationId,
+        pod_station_cname as podStationName,
+        pod_station_cname as podStationName,
+        box_type as boxType,
+        remaining_num as remainingNum,
+        total_num as totalNum,
+        occupy_num as occupyNum
+        FROM
+        logistics_put_box
+        WHERE
+        tenant_id = #{data.tenantId}
+        AND is_deleted = '0'
+        AND remaining_num > 0
+        <if test='data.containerNumber != null and data.containerNumber != ""'>
+            and container_number like concat(concat('%', #{data.containerNumber}),'%')
+        </if>
+        <if test="data.polId!=null and data.polId != ''">
+            and pol_id like concat(concat('%', #{data.polId}),'%')
+        </if>
+        <if test="data.podId!=null and data.podId != ''">
+            and pod_id like concat(concat('%', #{data.podId}),'%')
+        </if>
+        <if test="data.polName!=null and data.polName != ''">
+            and pol_cname like concat(concat('%', #{data.polName}),'%')
+        </if>
+        <if test="data.podName!=null and data.podName != ''">
+            and pod_cname like concat(concat('%', #{data.podName}),'%')
+        </if>
+        <if test="data.boxEastId!=null and data.boxEastId != ''">
+            and box_east_id like concat(concat('%', #{data.boxEastId}),'%')
+        </if>
+        <if test="data.boxEastName!=null and data.boxEastName != ''">
+            and box_east_name like concat(concat('%', #{data.boxEastName}),'%')
+        </if>
+        <if test="data.stationId!=null and data.stationId != ''">
+            and pol_station_id = #{data.stationId}
+        </if>
+        <if test="data.busType!=null and data.busType != ''">
+            and find_in_set(bus_type,#{data.busType})
+        </if>
+        <if test="data.boxType!=null and data.boxType != ''">
+            and box_type = #{data.boxType}
+        </if>
+        <if test="data.whetherLoseEfficacy!=null and data.whetherLoseEfficacy != ''">
+            and DATE_FORMAT(effective_start_date,'%Y-%m-%d') &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-%d')
+            and DATE_FORMAT(effective_end_date,'%Y-%m-%d') &lt;= DATE_FORMAT(CURDATE(), '%Y-%m-%d')
+        </if>
+        ORDER BY
+        create_time DESC
+    </select>
 
 </mapper>

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

@@ -29,6 +29,7 @@ import org.springblade.los.box.entity.PutBox;
 import org.springblade.los.box.entity.TradingBox;
 import org.springblade.los.box.excel.EmptyContainerAppearance;
 import org.springblade.los.box.excel.EmptyContainerAppearanceAnalysis;
+import org.springblade.los.box.excel.PortExcel;
 import org.springblade.los.box.vo.PutBoxVO;
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.excel.PodStationR;
@@ -98,4 +99,8 @@ public interface IPutBoxService extends IService<PutBox> {
 	R batchUpdatePod(String ids, String podId, String podCname, String podEname, String podCode);
 
 	R updateBatchByIdAndVersion(List<PutBox> putBoxList);
+
+	List<BoxPoolPortDTO> listPortExport(BoxPoolDTO boxPoolDTO);
+
+	List<BoxPoolContainerNumberDTO> listContainerNumberExport(BoxPoolDTO boxPoolDTO);
 }

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

@@ -54,6 +54,7 @@ import org.springblade.los.box.entity.*;
 import org.springblade.los.box.excel.EmptyContainerAppearance;
 import org.springblade.los.box.excel.EmptyContainerAppearanceAnalysis;
 import org.springblade.los.box.excel.GiveAnEncore;
+import org.springblade.los.box.excel.PortExcel;
 import org.springblade.los.box.mapper.ArchivesTrajectoryMapper;
 import org.springblade.los.box.mapper.PutBoxMapper;
 import org.springblade.los.box.mapper.TradingBoxMapper;
@@ -403,14 +404,14 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 		PutBox detail = new PutBox();
 		if (putBox1 != null) {
 			detail = putBox1;
-			detail.setTotalNum(detail.getTotalNum() + putBox.getPutBoxItemsList().size());
-			detail.setRemainingNum(detail.getTotalNum() - detail.getOccupyNum());
+			detail.setRemainingNum(detail.getRemainingNum() + putBox.getPutBoxItemsList().size());
+			detail.setStorageNum(detail.getStorageNum() + putBox.getPutBoxItemsList().size());
 			baseMapper.updateById(detail);
-			putBoxOld.setTotalNum(putBoxOld.getTotalNum() - putBox.getPutBoxItemsList().size());
-			if (putBoxOld.getTotalNum() - putBoxOld.getOccupyNum() < 0) {
-				throw new RuntimeException("场地盘存数量不能小于操作占用数量");
+			if (putBoxOld.getStorageNum() < putBox.getPutBoxItemsList().size()) {
+				throw new RuntimeException("场地盘存数量不能小于本次操作数量");
 			}
-			putBoxOld.setRemainingNum(putBoxOld.getTotalNum() - putBoxOld.getOccupyNum());
+			putBoxOld.setStorageNum(putBoxOld.getStorageNum() - putBox.getPutBoxItemsList().size());
+			putBoxOld.setRemainingNum(putBoxOld.getRemainingNum() - putBox.getPutBoxItemsList().size());
 		} else {
 			BeanUtil.copyProperties(putBoxOld, detail);
 			detail.setId(null);
@@ -5328,6 +5329,77 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 		return null;
 	}
 
+	@Override
+	public List<BoxPoolPortDTO> listPortExport(BoxPoolDTO boxPoolDTO) {
+		boxPoolDTO.setTenantId(AuthUtil.getTenantId());
+		List<BoxPoolPortDTO> boxPoolPortDTOList = baseMapper.listPortExport(boxPoolDTO);
+		if (!boxPoolPortDTOList.isEmpty()) {
+			for (BoxPoolPortDTO item : boxPoolPortDTOList) {
+				List<Map<String, Long>> mapList = baseMapper.selectBoxNumber(item.getPortId(), boxPoolDTO.getWhetherLoseEfficacy(),
+					AuthUtil.getTenantId(), item.getBusType(), item.getStationId());
+				long gP20Good = 0;
+				long gP40Good = 0;
+				long hG40Good = 0;
+				long otherGood = 0;
+				long gP20Bad = 0;
+				long gP40Bad = 0;
+				long hG40Bad = 0;
+				long otherBad = 0;
+				for (Map<String, Long> map : mapList) {
+					if (!map.isEmpty()) {
+						gP20Good = gP20Good + map.get("gP20Good");
+						gP40Good = gP40Good + map.get("gP40Good");
+						hG40Good = hG40Good + map.get("hG40Good");
+						otherGood = otherGood + map.get("otherGood");
+						gP20Bad = gP20Bad + map.get("gP20Bad");
+						gP40Bad = gP40Bad + map.get("gP40Bad");
+						hG40Bad = hG40Bad + map.get("hG40Bad");
+						otherBad = otherBad + map.get("otherBad");
+					}
+				}
+				item.setGP20Good(gP20Good);
+				item.setGP40Good(gP40Good);
+				item.setHG40Good(hG40Good);
+				item.setOtherGood(otherGood);
+				item.setGP20Bad(gP20Bad);
+				item.setGP40Bad(gP40Bad);
+				item.setHG40Bad(hG40Bad);
+				item.setOtherBad(otherBad);
+				item.setTotal(gP20Good + gP40Good + hG40Good + otherGood + gP20Bad + gP40Bad + hG40Bad + otherBad);
+//				item.setRemainingTotal(item.getTotal());
+			}
+		}
+		return boxPoolPortDTOList;
+	}
+
+	@Override
+	public List<BoxPoolContainerNumberDTO> listContainerNumberExport(BoxPoolDTO boxPoolDTO) {
+		boxPoolDTO.setTenantId(AuthUtil.getTenantId());
+		List<BoxPoolContainerNumberDTO> putBoxList = baseMapper.listContainerNumberExport( boxPoolDTO);
+		if (!putBoxList.isEmpty()) {
+			List<Long> ids = putBoxList.stream().map(BoxPoolContainerNumberDTO::getId).collect(Collectors.toList());
+			List<PutBoxItems> boxItemsList = putBoxItemsService.list(new LambdaQueryWrapper<PutBoxItems>()
+				.eq(PutBoxItems::getTenantId, AuthUtil.getTenantId())
+				.eq(PutBoxItems::getIsDeleted, 0)
+				.eq(PutBoxItems::getStatus, "待使用")
+				.in(PutBoxItems::getPid, ids));
+			for (BoxPoolContainerNumberDTO item : putBoxList) {
+				item.setTotal(0L);
+				if (!boxItemsList.isEmpty()) {
+					List<PutBoxItems> itemsList = boxItemsList.stream().filter(e -> e.getPid().equals(item.getId())).collect(Collectors.toList());
+					if (!itemsList.isEmpty()) {
+						item.setGood(itemsList.stream().filter(e -> "好箱".equals(e.getBoxStatus()) && item.getBoxType().equals(e.getBoxType())).count());
+						item.setBad(itemsList.stream().filter(e -> "坏箱".equals(e.getBoxStatus()) && item.getBoxType().equals(e.getBoxType())).count());
+						item.setTotal(item.getGood() + item.getBad());
+					}
+				}
+				item.setOccupyNum(item.getOccupyNum());
+				item.setRemainingTotal(item.getRemainingNum());
+			}
+		}
+		return putBoxList;
+	}
+
 	private void countOverdueFeeV1(Bills billsHYJK, List<TradingBox> tradingBoxList,
 								   List<TradingBoxItem> tradingBoxItemOldList, List<PutBoxItems> putBoxItemsOldList,
 								   List<PutBox> putBoxList) {

+ 3 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/ContainersMapper.xml

@@ -144,6 +144,9 @@
         <if test="data.vesselEnName != null and data.vesselEnName != ''">
             and se.vessel_en_name like concat('%', #{data.vesselEnName}, '%')
         </if>
+        <if test="data.vesselCnName != null and data.vesselCnName != ''">
+            and se.vessel_cn_name like concat('%', #{data.vesselCnName}, '%')
+        </if>
         <if test="data.voyageNo != null and data.voyageNo != ''">
             and se.voyage_no like concat('%', #{data.voyageNo}, '%')
         </if>

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

@@ -657,6 +657,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					item.setPackingUnit(bills.getPackingUnit());
 					item.setPackingUnitId(bills.getPackingUnitId());
 				}
+				item.setMarks(bills.getMarks());
 				if (item.getId() == null) {
 					item.setCreateTime(new Date());
 					item.setCreateUser(AuthUtil.getUserId());