Kaynağa Gözat

1.箱轨迹排序修改
2.费用申请删除增加空值判断
3.获取拆单数据接口atd条件修改
4.进出场增加列表明细数量字段及逻辑
5.出场增加单据,放箱号明细数据,箱档案中放箱号与本次出场放箱号是否匹配
6.超期标准增加排序
7.海运进出口箱型箱量删除重新计算单据teu等数据
8.放箱号明细删除可用盘存重新计算
9.OW箱增加取消数量,箱管备注箱管逻辑

纪新园 1 gün önce
ebeveyn
işleme
b344fa71c9
16 değiştirilmiş dosya ile 547 ekleme ve 276 silme
  1. 7 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/dynamics/entity/BoxDynamicsRecord.java
  2. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/PutBox.java
  3. 1 1
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/entity/TradingBox.java
  4. 0 4
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Containers.java
  5. 3 3
      blade-service/blade-los/src/main/java/org/springblade/los/Util/OwBoxUsageFeeUtils.java
  6. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/storage/service/impl/StorageFeesServiceImpl.java
  7. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/ArchivesTrajectoryController.java
  8. 10 5
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/PutBoxItemsController.java
  9. 4 4
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxController.java
  10. 45 33
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/controller/BoxDynamicsRecordController.java
  11. 232 68
      blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/service/impl/BoxDynamicsRecordServiceImpl.java
  12. 3 3
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/PutBoxServiceImpl.java
  13. 4 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java
  14. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  15. 57 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/PreContainersServiceImpl.java
  16. 172 151
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

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

@@ -16,6 +16,7 @@
  */
 package org.springblade.los.box.dynamics.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -216,5 +217,11 @@ public class BoxDynamicsRecord implements Serializable {
 	@ApiModelProperty(value = "提单号")
 	private String billNo;
 
+	/**
+	 * 明细数量
+	 */
+	@TableField(exist = false)
+	private Long count;
+
 
 }

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

@@ -463,6 +463,12 @@ public class PutBox implements Serializable {
 	private String code;
 
 	/**
+	 * 箱管备注
+	 */
+	@ApiModelProperty(value = "箱管备注")
+	private String boxTubeRemarks;
+
+	/**
 	 * 开船日期
 	 */
 	@TableField(exist = false)

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

@@ -737,7 +737,7 @@ public class TradingBox implements Serializable {
 	 * 取消数量
 	 */
 	@ApiModelProperty(value = "取消数量")
-	private BigDecimal cancelNumber;
+	private Integer cancelNumber;
 
 	/**
 	 * 临时数据

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

@@ -79,8 +79,6 @@ public class Containers implements Serializable {
 	 * 创建时间
 	 */
 	@ApiModelProperty(value = "创建时间")
-	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
-	@DateTimeFormat(pattern = "yyyy-MM-dd")
 	private Date createTime;
 	/**
 	 * 修改人 Id
@@ -96,8 +94,6 @@ public class Containers implements Serializable {
 	 * 修改时间
 	 */
 	@ApiModelProperty(value = "修改时间")
-	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
-	@DateTimeFormat(pattern = "yyyy-MM-dd")
 	private Date updateTime;
 	/**
 	 * 主表id

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

@@ -402,7 +402,7 @@ public class OwBoxUsageFeeUtils {
 					}
 					//所属公司具体超期标准明细
 					List<StorageFeesItems> storageFeesItems = storageFeesItemsList.stream().filter(e -> e.getPid().equals(storageFees.getId()))
-						.collect(Collectors.toList());
+						.sorted(Comparator.comparing(StorageFeesItems::getStartDay)).collect(Collectors.toList());
 					if (storageFeesItems.isEmpty()) {
 						failureHandling("3", boxDynamicsRecord, "请先维护基础资料-超期标准");
 						return false;
@@ -745,7 +745,7 @@ public class OwBoxUsageFeeUtils {
 				}
 				//所属公司具体超期标准明细
 				List<StorageFeesItems> storageFeesItems = storageFeesItemsList.stream().filter(e -> e.getPid().equals(storageFees.getId()))
-					.collect(Collectors.toList());
+					.sorted(Comparator.comparing(StorageFeesItems::getStartDay)).collect(Collectors.toList());
 				if (storageFeesItems.isEmpty()) {
 					failureHandling("3", boxDynamicsRecord, "请先维护基础资料-超期标准");
 					return false;
@@ -936,7 +936,7 @@ public class OwBoxUsageFeeUtils {
 				}
 				//所属公司具体超期标准明细
 				List<StorageFeesItems> storageFeesItems = storageFeesItemsList.stream().filter(e -> e.getPid().equals(storageFees.getId()))
-					.collect(Collectors.toList());
+					.sorted(Comparator.comparing(StorageFeesItems::getStartDay)).collect(Collectors.toList());
 				if (storageFeesItems.isEmpty()) {
 					failureHandling("3", boxDynamicsRecord, "请先维护基础资料-超期标准");
 					return false;

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/basic/storage/service/impl/StorageFeesServiceImpl.java

@@ -96,7 +96,6 @@ public class StorageFeesServiceImpl extends ServiceImpl<StorageFeesMapper, Stora
 			storageFees.setUpdateUserName(AuthUtil.getUserName());
 		}
 		this.saveOrUpdate(storageFees);
-		//客户银行
 		if (ObjectUtils.isNotNull(storageFees.getStorageFeesItemsList())) {
 			for (StorageFeesItems item : storageFees.getStorageFeesItemsList()) {
 				if (item.getId() == null) {
@@ -129,6 +128,7 @@ public class StorageFeesServiceImpl extends ServiceImpl<StorageFeesMapper, Stora
 			.eq(StorageFeesItems::getIsDeleted, 0)
 			.eq(StorageFeesItems::getTenantId, AuthUtil.getTenantId())
 			.eq(StorageFeesItems::getPid, storageFees.getId())
+			.orderByAsc(StorageFeesItems::getStartDay)
 		));
 		return detail;
 	}

+ 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");
+			"port_id,station_id,container_number,IFNULL(mblno, ''),IFNULL(hblno, ''),src_id ORDER BY new_date DESC,create_time DESC");
 		IPage<ArchivesTrajectory> pages = archivesTrajectoryService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}

+ 10 - 5
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/PutBoxItemsController.java

@@ -34,8 +34,6 @@ import org.springblade.core.tool.utils.BeanUtil;
 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.entity.TradingBoxItem;
 import org.springblade.los.box.excel.PutBoxItemExcel;
 import org.springblade.los.box.mapper.PutBoxMapper;
 import org.springblade.los.box.service.IPutBoxItemsService;
@@ -145,8 +143,15 @@ public class PutBoxItemsController extends BladeController {
 				}
 				List<String> codeList = Arrays.asList(putBox.getCode().split(","));
 				if (!codeList.isEmpty()) {
-					putBox.setCode(codeList.stream().filter(Objects::nonNull).filter(e-> !"#".equals(e)).distinct().collect(Collectors.joining(",")));
+					putBox.setCode(codeList.stream().filter(Objects::nonNull).filter(e -> !"#".equals(e)).distinct().collect(Collectors.joining(",")));
 				}
+				int count = (int) putBoxItemsList.stream().filter(e -> e.getStatus().equals("待使用")).count();
+				if (!"OW(拿)".equals(putBox.getBoxClass())) {
+					putBox.setRemainingNum(putBox.getRemainingNum() - count);
+					putBox.setStorageNum(putBox.getStorageNum() - count);
+					putBox.setTotalNum(putBox.getTotalNum() - count);
+				}
+				putBox.setVersion(putBox.getVersion() + 1);
 				putBoxMapper.updateById(putBox);
 			}
 		}
@@ -158,7 +163,7 @@ public class PutBoxItemsController extends BladeController {
 	 * 导出放箱号箱明细数据
 	 */
 	@GetMapping("/exportBoxItem")
-	public void exportBoxItem(HttpServletResponse response, Long pid,@RequestParam(value = "itemIds",required = false) String itemIds) {
+	public void exportBoxItem(HttpServletResponse response, Long pid, @RequestParam(value = "itemIds", required = false) String itemIds) {
 		PutBox putBox = putBoxMapper.selectById(pid);
 		if (putBox == null) {
 			throw new RuntimeException("未查到单据信息");
@@ -169,7 +174,7 @@ public class PutBoxItemsController extends BladeController {
 			.apply(ObjectUtils.isNotNull(itemIds), "find_in_set(id,'" + itemIds + "')")
 			.eq(PutBoxItems::getPid, pid));
 		for (PutBoxItems items : list) {
-			if ("OW(拿)".equals(putBox.getBoxClass())){
+			if ("OW(拿)".equals(putBox.getBoxClass())) {
 				items.setBoxEastName("WINFAST");
 			}
 			items.setContainerNumber(putBox.getContainerNumber());

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

@@ -143,13 +143,13 @@ public class TradingBoxController extends BladeController {
 		if ("1".equals(tradingBox.getWhetherDisplay())) {
 			lambdaQueryWrapper.ne(TradingBox::getSuitcaseNum, 0);
 			lambdaQueryWrapper.ge(TradingBox::getExpiryDate, new Date());
-			lambdaQueryWrapper.apply("suitcase_num != box_number");
+			lambdaQueryWrapper.apply("suitcase_num != box_number - cancel_number");
 		} else if ("2".equals(tradingBox.getWhetherDisplay())) {
 			lambdaQueryWrapper.eq(TradingBox::getSuitcaseNum, 0);
 			lambdaQueryWrapper.ge(TradingBox::getExpiryDate, new Date());
 		} else if ("3".equals(tradingBox.getWhetherDisplay())) {
 			lambdaQueryWrapper.lt(TradingBox::getExpiryDate, new Date());
-			lambdaQueryWrapper.apply("suitcase_num != box_number");
+			lambdaQueryWrapper.apply("suitcase_num != box_number - cancel_number");
 		} else if ("4".equals(tradingBox.getWhetherDisplay())) {
 			String status = sysClient.getParamServiceDWT("postponement.reminder", AuthUtil.getTenantId());
 			if (ObjectUtils.isNull(status) || "获取数据失败".equals(status)) {
@@ -164,9 +164,9 @@ public class TradingBoxController extends BladeController {
 			lambdaQueryWrapper.ge(TradingBox::getExpiryDate, calendar.getTime())
 				.le(TradingBox::getExpiryDate, calendar1.getTime())
 				.ne(TradingBox::getSuitcaseNum, 0);
-			lambdaQueryWrapper.apply("suitcase_num != box_number");
+			lambdaQueryWrapper.apply("suitcase_num != box_number - cancel_number");
 		}else if ("5".equals(tradingBox.getWhetherDisplay())) {
-			lambdaQueryWrapper.apply("suitcase_num = box_number");
+			lambdaQueryWrapper.apply("suitcase_num = box_number - cancel_number");
 		}
 		lambdaQueryWrapper.orderByDesc(TradingBox::getCreateTime);
 		lambdaQueryWrapper.orderByAsc(TradingBox::getPolCname);

+ 45 - 33
blade-service/blade-los/src/main/java/org/springblade/los/box/dynamics/controller/BoxDynamicsRecordController.java

@@ -17,37 +17,36 @@
 package org.springblade.los.box.dynamics.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-
 import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.core.boot.ctrl.BladeController;
 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.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.los.box.excel.EmptyContainerAppearance;
-import org.springblade.los.box.excel.EmptyContainerAppearanceAnalysis;
-import org.springblade.los.box.excel.EmptyContainerEntry;
-import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.los.box.dynamics.entity.BoxDynamicsRecord;
-import org.springblade.los.box.dynamics.vo.BoxDynamicsRecordVO;
+import org.springblade.los.box.dynamics.entity.BoxDynamicsRecordItems;
+import org.springblade.los.box.dynamics.service.IBoxDynamicsRecordItemsService;
 import org.springblade.los.box.dynamics.service.IBoxDynamicsRecordService;
-import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.los.box.dynamics.vo.BoxDynamicsRecordVO;
+import org.springblade.los.box.excel.EmptyContainerAppearance;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 箱动态记录表 控制器
@@ -62,6 +61,7 @@ import java.util.List;
 public class BoxDynamicsRecordController extends BladeController {
 
 	private final IBoxDynamicsRecordService boxDynamicsRecordService;
+	private final IBoxDynamicsRecordItemsService boxDynamicsRecordItemsService;
 
 	/**
 	 * 详情
@@ -83,18 +83,30 @@ public class BoxDynamicsRecordController extends BladeController {
 	public R<IPage<BoxDynamicsRecord>> list(BoxDynamicsRecord boxDynamicsRecord, Query query) {
 		LambdaQueryWrapper<BoxDynamicsRecord> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(BoxDynamicsRecord::getTenantId, AuthUtil.getTenantId())
-			.eq(BoxDynamicsRecord::getIsDeleted,0)
-			.eq(BoxDynamicsRecord::getApproachExit,boxDynamicsRecord.getApproachExit())
-			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getPortCname()),BoxDynamicsRecord::getPortCname,boxDynamicsRecord.getPortCname())
-			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getStationCname()),BoxDynamicsRecord::getStationCname,boxDynamicsRecord.getStationCname())
-			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getBoxCode()),BoxDynamicsRecord::getBoxCode,boxDynamicsRecord.getBoxCode())
-			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getContainerNumber()),BoxDynamicsRecord::getContainerNumber,boxDynamicsRecord.getContainerNumber())
-			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getBillNo()),BoxDynamicsRecord::getBillNo,boxDynamicsRecord.getBillNo())
-			.eq(ObjectUtils.isNotNull(boxDynamicsRecord.getBoxDynamics()),BoxDynamicsRecord::getBoxDynamics,boxDynamicsRecord.getBoxDynamics())
-			.eq(ObjectUtils.isNotNull(boxDynamicsRecord.getSynchronizationStatus()),BoxDynamicsRecord::getSynchronizationStatus,boxDynamicsRecord.getSynchronizationStatus())
+			.eq(BoxDynamicsRecord::getIsDeleted, 0)
+			.eq(BoxDynamicsRecord::getApproachExit, boxDynamicsRecord.getApproachExit())
+			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getPortCname()), BoxDynamicsRecord::getPortCname, boxDynamicsRecord.getPortCname())
+			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getStationCname()), BoxDynamicsRecord::getStationCname, boxDynamicsRecord.getStationCname())
+			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getBoxCode()), BoxDynamicsRecord::getBoxCode, boxDynamicsRecord.getBoxCode())
+			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getContainerNumber()), BoxDynamicsRecord::getContainerNumber, boxDynamicsRecord.getContainerNumber())
+			.like(ObjectUtils.isNotNull(boxDynamicsRecord.getBillNo()), BoxDynamicsRecord::getBillNo, boxDynamicsRecord.getBillNo())
+			.eq(ObjectUtils.isNotNull(boxDynamicsRecord.getBoxDynamics()), BoxDynamicsRecord::getBoxDynamics, boxDynamicsRecord.getBoxDynamics())
+			.eq(ObjectUtils.isNotNull(boxDynamicsRecord.getSynchronizationStatus()), BoxDynamicsRecord::getSynchronizationStatus, boxDynamicsRecord.getSynchronizationStatus())
 			.orderByDesc(BoxDynamicsRecord::getImportDate);
-		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(boxDynamicsRecord.getDescription()),BoxDynamicsRecord::getDescription, boxDynamicsRecord.getDescription());
+		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(boxDynamicsRecord.getDescription()), BoxDynamicsRecord::getDescription, boxDynamicsRecord.getDescription());
 		IPage<BoxDynamicsRecord> pages = boxDynamicsRecordService.page(Condition.getPage(query), lambdaQueryWrapper);
+		if (!pages.getRecords().isEmpty()) {
+			List<Long> idList = pages.getRecords().stream().map(BoxDynamicsRecord::getId).collect(Collectors.toList());
+			List<BoxDynamicsRecordItems> itemsList = boxDynamicsRecordItemsService.list(new LambdaQueryWrapper<BoxDynamicsRecordItems>()
+				.eq(BoxDynamicsRecordItems::getTenantId, AuthUtil.getTenantId())
+				.eq(BoxDynamicsRecordItems::getIsDeleted, 0)
+				.in(BoxDynamicsRecordItems::getPid, idList));
+			for (BoxDynamicsRecord item : pages.getRecords()) {
+				if (!itemsList.isEmpty()) {
+					item.setCount(itemsList.stream().filter(e -> e.getPid().equals(item.getId())).count());
+				}
+			}
+		}
 		return R.data(pages);
 	}
 
@@ -155,8 +167,8 @@ public class BoxDynamicsRecordController extends BladeController {
 	 */
 	@PostMapping("/importExcel")
 	@RepeatSubmit
-	public R importExcel(@RequestParam("file") MultipartFile file,@RequestParam("type") String type) throws IOException {
-		return boxDynamicsRecordService.importExcel(file,type);
+	public R importExcel(@RequestParam("file") MultipartFile file, @RequestParam("type") String type) throws IOException {
+		return boxDynamicsRecordService.importExcel(file, type);
 	}
 
 	/**
@@ -172,24 +184,24 @@ public class BoxDynamicsRecordController extends BladeController {
 	 * 同步
 	 */
 	@GetMapping("/synchronous")
-	public R synchronous(@RequestParam ("id") String id ,@RequestParam ("ids") String ids)throws IOException {
-		return boxDynamicsRecordService.synchronous(id,ids);
+	public R synchronous(@RequestParam("id") String id, @RequestParam("ids") String ids) throws IOException {
+		return boxDynamicsRecordService.synchronous(id, ids);
 	}
 
 	/**
 	 * 撤销同步
 	 */
 	@GetMapping("/revokeSynchronous")
-	public R revokeSynchronous(@RequestParam ("id") String id ,@RequestParam ("ids") String ids)throws IOException {
-		return boxDynamicsRecordService.revokeSynchronous(id,ids);
+	public R revokeSynchronous(@RequestParam("id") String id, @RequestParam("ids") String ids) throws IOException {
+		return boxDynamicsRecordService.revokeSynchronous(id, ids);
 	}
 
 	/**
 	 * 导出模板
 	 */
 	@GetMapping("/exportTemplateById")
-	public void exportTemplateById(HttpServletResponse response,@RequestParam ("id") String id ,@RequestParam ("ids") String ids) {
-		List<EmptyContainerAppearance> list = boxDynamicsRecordService.exportTemplateById(id,ids);
+	public void exportTemplateById(HttpServletResponse response, @RequestParam("id") String id, @RequestParam("ids") String ids) {
+		List<EmptyContainerAppearance> list = boxDynamicsRecordService.exportTemplateById(id, ids);
 		ExcelUtil.export(response, "OW箱-客户还箱", "还箱明细", list, EmptyContainerAppearance.class);
 	}
 
@@ -197,8 +209,8 @@ public class BoxDynamicsRecordController extends BladeController {
 	 * 拆分箱号信息
 	 */
 	@GetMapping("/splitBoxNumber")
-	public R splitBoxNumber(@RequestParam ("billId") Long billId ,@RequestParam ("billIdNew") Long billIdNew
-		,@RequestParam ("containersIds") String containersIds) {
-		return boxDynamicsRecordService.splitBoxNumber(billId,billIdNew,containersIds);
+	public R splitBoxNumber(@RequestParam("billId") Long billId, @RequestParam("billIdNew") Long billIdNew
+		, @RequestParam("containersIds") String containersIds) {
+		return boxDynamicsRecordService.splitBoxNumber(billId, billIdNew, containersIds);
 	}
 }

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

@@ -451,7 +451,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			if (ObjectUtils.isNull(recordItems.getApproachExitDate())) {
 				recordItems.setApproachExitDate(new Date());
 			}
-			recordItems.setTemporaryId(System.currentTimeMillis());
+			Random random = new Random();
+			recordItems.setTemporaryId(System.currentTimeMillis() + random.nextInt(100));
 			//箱档案信息处理
 			Archives archives = archivesList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode())).findFirst().orElse(null);
 			if (archives == null) {
@@ -1043,6 +1044,19 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			item.setUpdateTime(new Date());
 		}
 		containersService.updateBatchById(containersList);
+		List<Archives> archivesList = archivesService.list(new LambdaQueryWrapper<Archives>()
+			.eq(Archives::getTenantId, AuthUtil.getTenantId())
+			.eq(Archives::getIsDeleted, 0)
+			.in(Archives::getCode, boxCode));
+		if (!archivesList.isEmpty()) {
+			for (Archives archives : archivesList) {
+				archives.setUpdateUserName(AuthUtil.getUserName());
+				archives.setUpdateTime(new Date());
+				archives.setUpdateUser(AuthUtil.getUserId());
+				archives.setBillNo(billsNew.getHblno());
+			}
+			archivesService.updateBatchById(archivesList);
+		}
 		List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
 			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
 			.eq(PreContainers::getIsDeleted, 0)
@@ -1071,7 +1085,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 		List<SeaContainerNumberItem> containerNumberItems = new ArrayList<>();
 		for (PreContainers item : preContainersList) {
 			//判断箱量是否大于箱型箱量和
-			int boxNumber = containersList.stream().filter(e -> e.getCntrTypeCode().equals(item.getCntrTypeCode())).collect(Collectors.toList()).size();
+			int boxNumber = (int) containersList.stream().filter(e -> e.getCntrTypeCode().equals(item.getCntrTypeCode())).count();
 			if (boxNumber > item.getQuantity()) {
 				throw new RuntimeException("本次拆分箱型:" + item.getCntrTypeCode() + "箱量大于箱型中箱量");
 			}
@@ -1081,6 +1095,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			item.setUpdateUser(AuthUtil.getUserId());
 			item.setUpdateUserName(AuthUtil.getUserName());
 			item.setUpdateTime(new Date());
+			if (item.getQuantity() == 0){
+				item.setContainerNumberStatus("录入");
+			}
 			preContainers.add(item);
 			//修改原箱型占用放箱号记录数量
 			List<SeaContainerNumberItem> seaContainerNumberItems = containerNumberItemList.stream().filter(e -> e.getBoxType().equals(item.getCntrTypeCode()))
@@ -1100,9 +1117,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					SeaContainerNumberItem seaContainerNumberItem = containerNumberItemListNew.stream()
 						.filter(e -> e.getSrcId().equals(containerNumberItem.getSrcId())).findFirst().orElse(null);
 					if (seaContainerNumberItem != null) {
-						seaContainerNumberItem.setOccupyNum(containerNumberItem.getOccupyNum() + containerNumberSum);
-						seaContainerNumberItem.setActualOccupyNum(containerNumberItem.getActualOccupyNum() + containerNumberSum);
-						seaContainerNumberItem.setOutNum(containerNumberItem.getOutNum() + containerNumberSum);
+						seaContainerNumberItem.setOccupyNum(seaContainerNumberItem.getOccupyNum() + containerNumberSum);
+						seaContainerNumberItem.setActualOccupyNum(seaContainerNumberItem.getActualOccupyNum() + containerNumberSum);
+						seaContainerNumberItem.setOutNum(seaContainerNumberItem.getOutNum() + containerNumberSum);
 						seaContainerNumberItem.setUpdateUser(AuthUtil.getUserId());
 						seaContainerNumberItem.setUpdateUserName(AuthUtil.getUserName());
 						seaContainerNumberItem.setUpdateTime(new Date());
@@ -1135,6 +1152,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					preContainers1.setUpdateUser(AuthUtil.getUserId());
 					preContainers1.setUpdateUserName(AuthUtil.getUserName());
 					preContainers1.setUpdateTime(new Date());
+					preContainers1.setContainerNumberStatus("已选择");
 					preContainers.add(preContainers1);
 				} else {
 					throw new RuntimeException("提单号:" + billsNew.getHblno() + "未查到" + item.getCntrTypeCode() + "箱型");
@@ -1255,7 +1273,17 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					.in(PutBoxItems::getPid, srcIdList)
 					.in(PutBoxItems::getBoxCode, boxCode));
 				if (!putBoxItemsList.isEmpty()) {
+					List<PutBox> putBoxList = putBoxService.list(new LambdaQueryWrapper<PutBox>()
+						.eq(PutBox::getTenantId, AuthUtil.getTenantId())
+						.eq(PutBox::getIsDeleted, 0)
+						.in(PutBox::getId, srcIdList));
+					if (putBoxList.isEmpty()) {
+						throw new RuntimeException("未查到放箱号单据");
+					}
 					for (PutBoxItems putBoxItem : putBoxItemsList) {
+						if ("已还箱".equals(putBoxItem.getStatus())) {
+							throw new RuntimeException("箱号:" + putBoxItem.getBoxCode() + "已还箱");
+						}
 						putBoxItem.setMblno(billsNew.getMblno());
 						putBoxItem.setHblno(billsNew.getHblno());
 						putBoxItem.setAgentName(billsNew.getForeignAgencyCnName());
@@ -1269,12 +1297,68 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						putBoxItem.setUpdateTime(new Date());
 						putBoxItem.setUpdateUserName(AuthUtil.getUserName());
 						putBoxItem.setUpdateUser(AuthUtil.getUserId());
+						PutBox putBox = putBoxList.stream().filter(e -> e.getId().equals(putBoxItem.getPid())).findFirst().orElse(null);
+						if (putBox != null) {
+							ArchivesTrajectory archivesTrajectory = new ArchivesTrajectory();
+							archivesTrajectory.setPortId(putBox.getPolId());
+							archivesTrajectory.setPortCode(putBox.getPolCode());
+							archivesTrajectory.setPortCname(putBox.getPolCname());
+							archivesTrajectory.setPortEname(putBox.getPolEname());
+							archivesTrajectory.setStationId(putBox.getPolStationId());
+							archivesTrajectory.setStationCode(putBox.getPolStationCode());
+							archivesTrajectory.setStationCname(putBox.getPolStationCname());
+							archivesTrajectory.setStationEname(putBox.getPolStationEname());
+							archivesTrajectory.setContainerNumber(putBoxItem.getContainerNumber());
+							archivesTrajectory.setBoxStatus(putBoxItem.getBoxStatus());
+							archivesTrajectory.setBoxType(putBoxItem.getBoxType());
+							archivesTrajectory.setBoxCategory(putBoxItem.getBoxClass());
+							archivesTrajectory.setBoxEastId(putBoxItem.getBoxEastId());
+							archivesTrajectory.setBoxEastName(putBoxItem.getBoxEastName());
+							archivesTrajectory.setMblno(putBoxItem.getMblno());
+							archivesTrajectory.setHblno(putBoxItem.getHblno());
+							archivesTrajectory.setBoxDynamics("海运出来-拆单");
+							archivesTrajectory.setNewDate(putBoxItem.getPolStationEmptyContainerExitDate());
+							if (ObjectUtils.isNotNull(putBox.getPodId()) && !putBox.getPodId().contains(",")) {
+								archivesTrajectory.setPodId(Long.parseLong(putBox.getPodId()));
+								archivesTrajectory.setPodCode(putBox.getPodCode());
+								archivesTrajectory.setPodCname(putBox.getPodCname());
+								archivesTrajectory.setPodEname(putBox.getPodEname());
+							}
+							archivesTrajectory.setStatus("海运出来-拆单");
+							archivesTrajectory.setBillType(putBox.getBoxClass());
+							archivesTrajectory.setCode(putBoxItem.getBoxCode());
+							archivesTrajectory.setCreateTime(new Date());
+							archivesTrajectory.setCreateUser(AuthUtil.getUserId());
+							archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
+							archivesTrajectory.setTenantId(AuthUtil.getTenantId());
+							archivesTrajectory.setSrcId(putBox.getId());
+							archivesTrajectory.setEtd(putBoxItem.getEtd());
+							archivesTrajectory.setPolCyId(putBoxItem.getPolCyId());
+							archivesTrajectory.setPolCyCode(putBoxItem.getPolCyCode());
+							archivesTrajectory.setPolCyCname(putBoxItem.getPolCyCname());
+							archivesTrajectory.setPolCyEname(putBoxItem.getPolCyEname());
+							archivesTrajectory.setPolFreeBoxUseDays(putBoxItem.getPolFreeBoxUseDays());
+							archivesTrajectory.setPolPreAppearanceDate(putBoxItem.getPolPreAppearanceDate());
+							archivesTrajectory.setPolStationEmptyContainerExitDate(putBoxItem.getPolStationEmptyContainerExitDate());
+							archivesTrajectory.setPolReturnDate(putBoxItem.getPolReturnDate());
+							archivesTrajectory.setPolOverdueBoxUseDays(putBoxItem.getPolOverdueBoxUseDays());
+							archivesTrajectory.setEta(putBoxItem.getEta());
+							archivesTrajectory.setPodEmptyContainerReturnDate(putBoxItem.getPodEmptyContainerReturnDate());
+							archivesTrajectory.setPodStationId(putBoxItem.getPodStationId());
+							archivesTrajectory.setPodStationCode(putBoxItem.getPodStationCode());
+							archivesTrajectory.setPodStationCname(putBoxItem.getPodStationCname());
+							archivesTrajectory.setPodStationEname(putBoxItem.getPodStationEname());
+							archivesTrajectory.setPodFreeBoxUseDays(putBoxItem.getPodFreeBoxUseDays());
+							archivesTrajectory.setPodBoxUseDays(putBoxItem.getPodBoxUseDays());
+							archivesTrajectory.setShipNameId(putBoxItem.getShipNameId());
+							archivesTrajectory.setShipCname(putBoxItem.getShipCname());
+							archivesTrajectory.setShipEname(putBoxItem.getShipEname());
+							archivesTrajectory.setShipCode(putBoxItem.getShipCode());
+							archivesTrajectory.setVoyage(putBoxItem.getVoyage());
+							archivesTrajectoryMapper.insert(archivesTrajectory);
+						}
 					}
 					putBoxItemsService.updateBatchById(putBoxItemsList);
-					List<PutBox> putBoxList = putBoxService.list(new LambdaQueryWrapper<PutBox>()
-						.eq(PutBox::getTenantId, AuthUtil.getTenantId())
-						.eq(PutBox::getIsDeleted, 0)
-						.in(PutBox::getId, srcIdList));
 					if (!putBoxList.isEmpty()) {
 						List<Long> srcIdOWList = putBoxList.stream().map(PutBox::getSrcId)
 							.filter(Objects::nonNull).distinct().collect(Collectors.toList());
@@ -1284,7 +1368,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								.eq(TradingBoxItem::getIsDeleted, 0)
 								.in(TradingBoxItem::getPid, srcIdOWList)
 								.in(TradingBoxItem::getCode, boxCode));
-							if (!putBoxItemsList.isEmpty()) {
+							if (!tradingBoxItemList.isEmpty()) {
 								for (TradingBoxItem tradingBoxItem : tradingBoxItemList) {
 									tradingBoxItem.setAgentName(billsNew.getForeignAgencyCnName());
 									tradingBoxItem.setActualEtd(billsNew.getActualEtd());
@@ -1303,9 +1387,37 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 									tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
 								}
 								tradingBoxItemService.updateBatchById(tradingBoxItemList);
+								TradingBox tradingBox = tradingBoxMapper.selectById(tradingBoxItemList.get(0).getPid());
+								if (tradingBox != null){
+									tradingBox.setUpdateUserName(AuthUtil.getUserName());
+									tradingBox.setUpdateUser(AuthUtil.getUserId());
+									tradingBox.setUpdateTime(new Date());
+									int version = StringUtil.isBlank(tradingBox.getVersion()) ? 1 : Integer.parseInt(tradingBox.getVersion());
+									tradingBox.setVersion(String.valueOf(version + 1));
+									tradingBox.setCode(tradingBox.getCode().replaceAll(bills.getHblno(),""));
+									tradingBox.setCode(tradingBox.getCode().replaceAll(",,",","));
+									tradingBoxMapper.updateById(tradingBox);
+								}
 							}
 						}
 					}
+					List<Long> putBoxItemsIdList = putBoxItemsList.stream().map(PutBoxItems::getId).collect(Collectors.toList());
+					List<BoxDynamicsRecordItems> dynamicsRecordItemsList = boxDynamicsRecordItemsService.list(new LambdaQueryWrapper<BoxDynamicsRecordItems>()
+						.eq(BoxDynamicsRecordItems::getTenantId, AuthUtil.getTenantId())
+						.eq(BoxDynamicsRecordItems::getIsDeleted, 0)
+						.in(BoxDynamicsRecordItems::getBoxCode, boxCode)
+						.in(BoxDynamicsRecordItems::getSrcPutBoxItemsId, putBoxItemsIdList)
+						.apply("find_in_set(objective,'BX,WD,Q,QZ,XO')"));
+					if (!dynamicsRecordItemsList.isEmpty()) {
+						for (BoxDynamicsRecordItems item : dynamicsRecordItemsList) {
+							item.setUpdateTime(new Date());
+							item.setUpdateUser(AuthUtil.getUserId());
+							item.setUpdateUserName(AuthUtil.getUserName());
+							item.setHblno(billsNew.getHblno());
+							logUtils.saveOperationLog("海运出口拆单", "提单号:" + bills.getHblno() + "=>" + billsNew.getHblno(), item.getId());
+						}
+						boxDynamicsRecordItemsService.updateBatchById(dynamicsRecordItemsList);
+					}
 				}
 			}
 		}
@@ -1381,7 +1493,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				if (ObjectUtils.isNull(item.getApproachExitDate())) {
 					item.setApproachExitDate(new Date());
 				}
-				item.setTemporaryId(System.currentTimeMillis());
+				Random random = new Random();
+				item.setTemporaryId(System.currentTimeMillis() + random.nextInt(100));
 				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);
@@ -1728,7 +1841,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							}
 							tradingBox.setSuitcaseNum(tradingBox.getSuitcaseNum() + Integer.parseInt(count1 + ""));
 							if ("OW(拿)".contains(item.getBoxClass())) {
-								if (tradingBox.getSuitcaseNum() > tradingBox.getBoxNumber()) {
+								if (tradingBox.getSuitcaseNum() > tradingBox.getBoxNumber()-tradingBox.getCancelNumber()) {
 									failureHandling(type, boxDynamicsRecord, "OW(拿)已提箱数量大于协议数量");
 									return false;
 								}
@@ -1922,6 +2035,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 			List<String> hblno = itemsListJC.stream().map(BoxDynamicsRecordItems::getHblno).filter(Objects::nonNull)
 				.distinct().collect(Collectors.toList());
 			List<Containers> containersList = new ArrayList<>();
+			List<Containers> containersListNew = new ArrayList<>();
 			List<PreContainers> preContainersList = new ArrayList<>();
 			List<PreContainers> preContainersListNew = new ArrayList<>();
 			List<SeaContainerNumberItem> containerNumberItemList = new ArrayList<>();
@@ -2090,6 +2204,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							tradingBoxItem.setShipCname("");
 							tradingBoxItem.setShipEname("");
 							tradingBoxItem.setPolFreeBoxUseDays(0);
+							tradingBoxItem.setPolOverdueBoxUseDays(0);
 							tradingBoxItem.setEtd(null);
 						}
 						if ("HX".equals(type)) {
@@ -2122,12 +2237,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						item.setVersion(item.getVersion() + 1);
 						if ("JC,DBJ,TG".contains(type)) {
 							if (!"OW(拿)".equals(item.getBoxClass()) && !"DBJ".equals(type)) {
-								if (item.getRemainingNum()<count){
+								if (item.getRemainingNum() < count) {
 									throw new RemoteException("可用数量不足,撤销失败");
 								}
 								item.setRemainingNum(item.getRemainingNum() - Integer.parseInt(count + ""));
 							}
-							if (item.getStorageNum()<count){
+							if (item.getStorageNum() < count) {
 								throw new RemoteException("盘存数量不足,撤销失败");
 							}
 							item.setStorageNum(item.getStorageNum() - Integer.parseInt(count + ""));
@@ -2150,30 +2265,40 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 										.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
 											Comparator.comparing(f -> f.getContainerNumber() + f.getCntrNo()))), ArrayList::new));
 									if (!containers.isEmpty()) {
-										long size = containers.stream().filter(e -> ObjectUtils.isNotNull(e.getContainerNumber()) &&
-											e.getContainerNumber().equals(item.getContainerNumber()) && boxList.contains(e.getCntrNo())).count();
-										boolean whetherAppearStatus = false;
-										if (!containerNumberItemList.isEmpty()) {
-											SeaContainerNumberItem containerNumberItems = containerNumberItemList.stream()
-												.filter(e -> e.getSrcId().equals(item.getId())).findFirst().orElse(null);
-											if (containerNumberItems != null) {
-												containerNumberItems.setOutNum(containerNumberItems.getOutNum() - Integer.parseInt(size + ""));
-												if (!containerNumberItems.getOutNum().equals(containerNumberItems.getOccupyNum())) {
-													containerNumberItems.setWhetherAppearStatus("0");
-													whetherAppearStatus = true;
+										List<Containers> containers1 = containers.stream().filter(e -> ObjectUtils.isNotNull(e.getContainerNumber()) &&
+											e.getContainerNumber().equals(item.getContainerNumber()) && boxList.contains(e.getCntrNo())).collect(Collectors.toList());
+										if (!containers1.isEmpty()){
+											boolean whetherAppearStatus = false;
+											if (!containerNumberItemList.isEmpty()) {
+												SeaContainerNumberItem containerNumberItems = containerNumberItemList.stream()
+													.filter(e -> e.getSrcId().equals(item.getId())).findFirst().orElse(null);
+												if (containerNumberItems != null) {
+													containerNumberItems.setOutNum(containerNumberItems.getOutNum() - Integer.parseInt(containers1.size() + ""));
+													if (!containerNumberItems.getOutNum().equals(containerNumberItems.getOccupyNum())) {
+														containerNumberItems.setWhetherAppearStatus("0");
+														whetherAppearStatus = true;
+													}
+													containerNumberItemListNew.add(containerNumberItems);
 												}
-												containerNumberItemListNew.add(containerNumberItems);
 											}
-										}
-										if (!preContainersList.isEmpty()) {
-											PreContainers preContainers = preContainersList.stream().filter(e -> e.getPid().equals(containers.get(0).getPid()) &&
-												item.getBoxType().equals(e.getCntrTypeCode())).findFirst().orElse(null);
-											if (preContainers != null) {
-												if (whetherAppearStatus) {
-													preContainers.setWhetherAppearStatus("0");
-													preContainersListNew.add(preContainers);
+											if (!preContainersList.isEmpty()) {
+												PreContainers preContainers = preContainersList.stream().filter(e -> e.getPid().equals(containers.get(0).getPid()) &&
+													item.getBoxType().equals(e.getCntrTypeCode())).findFirst().orElse(null);
+												if (preContainers != null) {
+													if (whetherAppearStatus) {
+														preContainers.setWhetherAppearStatus("0");
+														preContainersListNew.add(preContainers);
+													}
 												}
 											}
+											for (Containers containers2 : containers1){
+												containers2.setUpdateUser(AuthUtil.getUserId());
+												containers2.setUpdateUserName(AuthUtil.getUserName());
+												containers2.setUpdateTime(new Date());
+												containers2.setContainerNumber("");
+												containers2.setBoxSrcType("");
+												containersListNew.add(containers2);
+											}
 										}
 									}
 								}
@@ -2190,6 +2315,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				if (!containerNumberItemListNew.isEmpty()) {
 					seaContainerNumberItemService.updateBatchById(containerNumberItemListNew);
 				}
+				if (!containersListNew.isEmpty()) {
+					containersService.updateBatchById(containersListNew);
+				}
 			} else {
 				throw new RemoteException("撤销失败未查到原放箱号数据,请联系管理员");
 			}
@@ -2398,7 +2526,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						if (ObjectUtils.isNull(recordItems.getApproachExitDate())) {
 							recordItems.setApproachExitDate(new Date());
 						}
-						recordItems.setTemporaryId(System.currentTimeMillis());
+						Random random = new Random();
+						recordItems.setTemporaryId(System.currentTimeMillis() + random.nextInt(100));
 						//箱档案信息处理
 						Archives archives = archivesList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode())).findFirst().orElse(null);
 						if (archives == null) {
@@ -2951,7 +3080,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					if (ObjectUtils.isNull(item.getApproachExitDate())) {
 						item.setApproachExitDate(new Date());
 					}
-					item.setTemporaryId(System.currentTimeMillis());
+					Random random = new Random();
+					item.setTemporaryId(System.currentTimeMillis() + random.nextInt(100));
 					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);
@@ -3450,7 +3580,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						if (ObjectUtils.isNull(recordItems.getApproachExitDate())) {
 							recordItems.setApproachExitDate(new Date());
 						}
-						recordItems.setTemporaryId(System.currentTimeMillis());
+						Random random = new Random();
+						recordItems.setTemporaryId(System.currentTimeMillis() + random.nextInt(100));
 						//箱档案信息处理
 						Archives archives = archivesList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode())).findFirst().orElse(null);
 						if (archives == null) {
@@ -3876,7 +4007,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 				//OW单据明细数据
 				List<TradingBoxItem> tradingBoxItemOldList = new ArrayList<>();
 				for (BoxDynamicsRecordItems recordItems : itemsListRC) {
-					recordItems.setTemporaryId(System.currentTimeMillis());
+					Random random = new Random();
+					recordItems.setTemporaryId(System.currentTimeMillis() + random.nextInt(100));
 					//箱档案信息处理
 					Archives archives = archivesList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode())).findFirst().orElse(null);
 					if (archives == null) {
@@ -4113,7 +4245,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					if (ObjectUtils.isNull(item.getApproachExitDate())) {
 						item.setApproachExitDate(new Date());
 					}
-					item.setTemporaryId(System.currentTimeMillis());
+					Random random = new Random();
+					item.setTemporaryId(System.currentTimeMillis() + random.nextInt(100));
 					PutBox putBoxData;
 					PutBox putBox = putBoxList.stream().filter(e -> e.getContainerNumber().equals(item.getHblno())
 						&& ObjectUtils.isNotNull(e.getPolId()) && e.getPolId().equals(item.getPortId())
@@ -4342,13 +4475,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								tradingBoxItem.setBoxEastName(tradingBox.getPurchaseCompanyName());
 								tradingBoxItem.setTemporaryId(item.getTemporaryId());
 								tradingBoxItems.add(tradingBoxItem);
-							} else {
-								failureHandling(type, boxDynamicsRecord, "放箱号:" + item.getContainerNumber() + "未查到OW单据");
-								return false;
 							}
-						} else {
-							failureHandling(type, boxDynamicsRecord, "放箱号:" + item.getContainerNumber() + "未查到OW单据");
-							return false;
 						}
 					} else {
 						failureHandling(type, boxDynamicsRecord, "未查到放箱号:" + item.getContainerNumber() + "单据");
@@ -4379,14 +4506,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							failureHandling(type, boxDynamicsRecord, "放箱号:" + item.getContainerNumber() + "剩余场地盘存小于本次导入箱数");
 							return false;
 						}
-						if (tradingBoxes.isEmpty()) {
-							item.setTotalNum(item.getTotalNum() - Integer.parseInt(count + ""));
-							item.setRemainingNum(item.getRemainingNum() - Integer.parseInt(count + ""));
-							if (item.getRemainingNum() < 0) {
-								failureHandling(type, boxDynamicsRecord, "放箱号:" + item.getContainerNumber() + "剩余可用小于本次导入箱数");
-								return false;
-							}
-						} else {
+						if (!tradingBoxes.isEmpty()){
 							TradingBox tradingBox = tradingBoxes.stream().filter(e -> e.getId().equals(item.getSrcId())).findFirst().orElse(null);
 							if (tradingBox != null) {
 								if (ObjectUtils.isNotNull(tradingBox.getCode())) {
@@ -4407,6 +4527,14 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								tradingBoxMapper.updateById(tradingBox);
 							}
 						}
+						/*if (tradingBoxes.isEmpty()) {
+							item.setTotalNum(item.getTotalNum() - Integer.parseInt(count + ""));
+							item.setRemainingNum(item.getRemainingNum() - Integer.parseInt(count + ""));
+							if (item.getRemainingNum() < 0) {
+								failureHandling(type, boxDynamicsRecord, "放箱号:" + item.getContainerNumber() + "剩余可用小于本次导入箱数");
+								return false;
+							}
+						}*/
 						item.setVersion(ObjectUtils.isNull(item.getVersion()) ? 1 : item.getVersion() + 1);
 						putBoxList1.add(item);
 					}
@@ -4610,7 +4738,8 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 					if (ObjectUtils.isNull(item.getApproachExitDate())) {
 						item.setApproachExitDate(new Date());
 					}
-					item.setTemporaryId(System.currentTimeMillis());
+					Random random = new Random();
+					item.setTemporaryId(System.currentTimeMillis() + random.nextInt(100));
 					PutBox putBoxData;
 					PutBox putBox = putBoxList.stream().filter(e -> e.getContainerNumber().equals(item.getHblno())
 						&& ObjectUtils.isNotNull(e.getPolId()) && e.getPolId().equals(item.getPortId())
@@ -4635,6 +4764,10 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 						//箱档案数据处理
 						Archives archives = archivesList.stream().filter(e -> e.getCode().equals(item.getBoxCode())).findFirst().orElse(null);
 						if (archives != null) {
+							if (!archives.getContainerNumber().equals(item.getContainerNumber())){
+								failureHandling(type, boxDynamicsRecord, "箱号:" + archives.getCode()+"在箱档案中放箱号与本次出场放箱号不符");
+								return false;
+							}
 							//存储上一步数据
 							BoxNumUtils.storagePreviousStepData(archives, item);
 							if (!archives.getTypeName().equals(item.getBoxType())) {
@@ -4649,7 +4782,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							archives.setUpdateUser(AuthUtil.getUserId());
 							archives.setUpdateUserName(AuthUtil.getUserName());
 						} else {
-							if (!"OW(拿),代理箱,租箱".contains(putBoxData.getBoxClass())) {
+							failureHandling(type, boxDynamicsRecord, "箱档案中未查到箱号:" + item.getBoxCode());
+							return false;
+							/*if (!"OW(拿),代理箱,租箱".contains(putBoxData.getBoxClass())) {
 								failureHandling(type, boxDynamicsRecord, "箱档案中未查到箱号:" + item.getBoxCode());
 								return false;
 							}
@@ -4662,7 +4797,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							archives.setContainerNumber(item.getContainerNumber());
 							archives.setContainerNumberType(putBoxData.getBoxClass());
 							archives.setTypeName(item.getBoxType());
-							archives.setBoxType(putBoxData.getBoxClass());
+							archives.setBoxType(putBoxData.getBoxClass());*/
 						}
 						archives.setContainerNumberOw(item.getContainerNumber());
 						archives.setContainerNumberTypeOw(putBoxData.getBoxClass());
@@ -4705,6 +4840,18 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 											failureHandling(type, boxDynamicsRecord, "提单号:" + bills.getHblno() + "对应海运出口单据,箱型:" + item.getBoxType() + "未生占用放箱号");
 											return false;
 										}
+										if (!containerNumberItemList.isEmpty()){
+											List<SeaContainerNumberItem> seaContainerNumberItems = containerNumberItemList.stream().filter(e->
+												e.getPid().equals(bills.getId()) && e.getBoxType().equals(preContainers.getCntrTypeCode())
+													&& e.getContainerNumber().equals(putBoxData.getContainerNumber())).collect(Collectors.toList());
+											if (seaContainerNumberItems.isEmpty()){
+												failureHandling(type, boxDynamicsRecord, "提单号:"+bills.getHblno()+"与本次出场放箱号:"+putBoxData.getContainerNumber()+"不符");
+												return false;
+											}
+										}else{
+											failureHandling(type, boxDynamicsRecord, "未查到占用放箱号数据");
+											return false;
+										}
 									}
 								} else {
 									failureHandling(type, boxDynamicsRecord, "提单号:" + bills.getHblno() + "对应海运出口单据未生成配箱列表");
@@ -4738,7 +4885,9 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								putBoxItem.setUpdateUserName(AuthUtil.getUserName());
 								putBoxItem.setUpdateTime(new Date());
 							} else {
-								if ("OW(拿)".equals(putBoxData.getBoxClass())) {
+								failureHandling(type, boxDynamicsRecord, "OW(拿)放箱号:" + item.getContainerNumber() + "未查到进场记录");
+								return false;
+								/*if ("OW(拿)".equals(putBoxData.getBoxClass())) {
 									failureHandling(type, boxDynamicsRecord, "OW(拿)放箱号:" + item.getContainerNumber() + "未查到进场记录");
 									return false;
 								}
@@ -4753,10 +4902,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 								putBoxItem.setBoxType(item.getBoxType());
 								putBoxItem.setCreateUser(AuthUtil.getUserId());
 								putBoxItem.setCreateUserName(AuthUtil.getUserName());
-								putBoxItem.setCreateTime(new Date());
+								putBoxItem.setCreateTime(new Date());*/
 							}
 						} else {
-							if ("OW(拿)".equals(putBoxData.getBoxClass())) {
+							failureHandling(type, boxDynamicsRecord, "OW(拿)放箱号:" + item.getContainerNumber() + "未查到进场记录");
+							return false;
+							/*if ("OW(拿)".equals(putBoxData.getBoxClass())) {
 								failureHandling(type, boxDynamicsRecord, "OW(拿)放箱号:" + item.getContainerNumber() + "未查到进场记录");
 								return false;
 							}
@@ -4771,7 +4922,7 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 							putBoxItem.setBoxType(item.getBoxType());
 							putBoxItem.setCreateUser(AuthUtil.getUserId());
 							putBoxItem.setCreateUserName(AuthUtil.getUserName());
-							putBoxItem.setCreateTime(new Date());
+							putBoxItem.setCreateTime(new Date());*/
 						}
 						if (ObjectUtils.isNotNull(putBoxData.getPodId()) && !putBoxData.getPodId().contains(",")) {
 							putBoxItem.setPodStationId(putBoxData.getPodStationId());
@@ -4985,12 +5136,12 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 										if (recordItems != null) {
 											containers.setCntrNo(recordItems.getBoxCode());
 											containers.setContainerNumber(recordItems.getContainerNumber());
-											recordItems.setAssigned("1");
 											containers.setPolCyId(recordItems.getStationId());
 											containers.setPolCyCode(recordItems.getStationCode());
 											containers.setPolCyCname(recordItems.getStationCname());
 											containers.setPolCyEname(recordItems.getStationEname());
 											containers.setPolStationEmptyContainerExitDate(recordItems.getApproachExitDate());
+											containers.setBoxSrcType(putBoxData.getBoxClass());
 											if (!tradingBoxItemList.isEmpty()) {
 												TradingBoxItem tradingBoxItem = tradingBoxItemList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode()))
 													.findFirst().orElse(null);
@@ -5006,17 +5157,25 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 												}
 											}
 											logUtils.saveOperationLog(OperatorType.API_DATA_SYNCHRONIZATION, OperatorType.CC, containers.getId());
+											recordItems.setAssigned("1");
+											containers.setWhetherAppearStatus("1");
+											int version = StringUtil.isBlank(containers.getVersion()) ? 1 : Integer.parseInt(containers.getVersion());
+											containers.setVersion(String.valueOf(version + 1));
+											containers.setUpdateTime(new Date());
+											containers.setUpdateUserName(AuthUtil.getUserName());
+											containers.setUpdateUser(AuthUtil.getUserId());
+											containersListNew.add(containers);
 										}
 									} else {
 										BoxDynamicsRecordItems recordItems = hblnoList.stream().filter(e -> containers.getCntrNo().equals(e.getBoxCode())).findFirst().orElse(null);
 										if (recordItems != null) {
-											containers.setCntrNo(recordItems.getBoxCode());
 											containers.setContainerNumber(recordItems.getContainerNumber());
 											containers.setPolCyId(recordItems.getStationId());
 											containers.setPolCyCode(recordItems.getStationCode());
 											containers.setPolCyCname(recordItems.getStationCname());
 											containers.setPolCyEname(recordItems.getStationEname());
 											containers.setPolStationEmptyContainerExitDate(recordItems.getApproachExitDate());
+											containers.setBoxSrcType(putBoxData.getBoxClass());
 											if (!tradingBoxItemList.isEmpty()) {
 												TradingBoxItem tradingBoxItem = tradingBoxItemList.stream().filter(e -> e.getCode().equals(recordItems.getBoxCode()))
 													.findFirst().orElse(null);
@@ -5031,14 +5190,19 @@ public class BoxDynamicsRecordServiceImpl extends ServiceImpl<BoxDynamicsRecordM
 													containers.setPodCyTel(tradingBoxItem.getPodCyTel());
 												}
 											}
-											logUtils.saveOperationLog(OperatorType.API_DATA_SYNCHRONIZATION, OperatorType.CC, containers.getId());
+											if (!"1".equals(recordItems.getAssigned())) {
+												logUtils.saveOperationLog(OperatorType.API_DATA_SYNCHRONIZATION, OperatorType.CC, containers.getId());
+											}
+											recordItems.setAssigned("1");
+											containers.setWhetherAppearStatus("1");
+											int version = StringUtil.isBlank(containers.getVersion()) ? 1 : Integer.parseInt(containers.getVersion());
+											containers.setVersion(String.valueOf(version + 1));
+											containers.setUpdateTime(new Date());
+											containers.setUpdateUserName(AuthUtil.getUserName());
+											containers.setUpdateUser(AuthUtil.getUserId());
+											containersListNew.add(containers);
 										}
 									}
-									containers.setBoxSrcType(putBoxData.getBoxClass());
-									containers.setWhetherAppearStatus("1");
-									int version = StringUtil.isBlank(containers.getVersion()) ? 1 : Integer.parseInt(containers.getVersion());
-									containers.setVersion(String.valueOf(version + 1));
-									containersListNew.add(containers);
 								}
 							} else {
 								failureHandling(type, boxDynamicsRecord, "未查到对应提单号:" + item.getMblno() + "配箱单据");

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

@@ -5060,15 +5060,15 @@ public class PutBoxServiceImpl extends ServiceImpl<PutBoxMapper, PutBox> impleme
 			putBox.setUpdateUserName(AuthUtil.getUserName());
 			putBox.setVersion(putBox.getVersion() + 1);
 			if ("空箱提箱进场".equals(boxDynamics) || "调箱进场".equals(boxDynamics)) {
-				if (!"空箱提箱进场".equals(item.getBoxDynamics()) && !"调箱进场".equals(boxDynamics)) {
+				if (!"空箱提箱进场".equals(item.getBoxDynamics()) && !"调箱进场".equals(item.getBoxDynamics())) {
 					putBox.setRemainingNum(putBox.getRemainingNum() + 1);
 					putBox.setStorageNum(putBox.getStorageNum() + 1);
 					putBox.setTotalNum(putBox.getTotalNum() + 1);
 				}
 			} else if ("场内退租出场".equals(boxDynamics) || "已返场".equals(boxDynamics) || "直接退租出场".equals(boxDynamics)
-				|| "空箱出场".equals(boxDynamics) || "退租出场".equals(boxDynamics)) {
+				|| "空箱出场".equals(boxDynamics) || "退租出场".equals(boxDynamics)|| "调箱出场".equals(boxDynamics)) {
 				if (!"场内退租出场".equals(item.getBoxDynamics()) && !"已返场".equals(item.getBoxDynamics()) && !"直接退租出场".equals(item.getBoxDynamics())
-					&& !"空箱出场".equals(item.getBoxDynamics()) && !"退租出场".equals(item.getBoxDynamics())) {
+					&& !"空箱出场".equals(item.getBoxDynamics()) && !"退租出场".equals(item.getBoxDynamics())&& !"调箱出场".equals(item.getBoxDynamics())) {
 					putBox.setRemainingNum(putBox.getRemainingNum() - 1);
 					putBox.setStorageNum(putBox.getStorageNum() - 1);
 					putBox.setTotalNum(putBox.getTotalNum() - 1);

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

@@ -1651,6 +1651,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				putBox.setCreateTime(new Date());
 				putBox.setCreateUserName(AuthUtil.getUserName());
 				putBox.setWhetherManuallyCreate("1");
+				putBox.setBoxTubeRemarks(tradingBox.getBoxTubeRemarks());
 				BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
 					.select(BusinessType::getId)
 					.eq(BusinessType::getTenantId, AuthUtil.getTenantId())
@@ -2970,6 +2971,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
 			.eq(TradingBoxItem::getIsDeleted, 0)
 			.eq(TradingBoxItem::getPid, detail.getId())
+			.ne(TradingBoxItem::getStatus, "作废")
 			.lt(TradingBoxItem::getRentEndDate, tradingBox.getRentDate())
 		);
 		if (putBoxItemsList.isEmpty()) {
@@ -2986,6 +2988,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		List<TradingBoxItem> tradingBoxItemList = tradingBoxItemService.list(new LambdaQueryWrapper<TradingBoxItem>()
 			.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
 			.eq(TradingBoxItem::getIsDeleted, 0)
+			.ne(TradingBoxItem::getStatus, "作废")
 			.eq(TradingBoxItem::getPid, detail.getId())
 		);
 		if (tradingBoxItemList.isEmpty()) {
@@ -3390,7 +3393,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				.eq(TradingBox::getTenantId, AuthUtil.getTenantId())
 				.eq(TradingBox::getIsDeleted, 0)
 				.eq(TradingBox::getWhetherEnable, "是")
-				.apply("find_in_set(type,'OW-N,OW-F') and not_suitcase_num != 0")
+				.apply("find_in_set(type,'OW-N,OW-F') and box_number - cancel_number - suitcase_num != 0")
 				.ge(TradingBox::getExpiryDate, calendar.getTime())
 				.le(TradingBox::getExpiryDate, calendar1.getTime())
 				.orderByAsc(TradingBox::getExpiryDate));

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

@@ -1133,7 +1133,7 @@ public class BillsController extends BladeController {
 			.eq(Bills::getPodId, bills.getPodId())
 			.ne(Bills::getId, bills.getId())
 			.eq(ObjectUtils.isNotNull(bills.getBoxBelongsTo()),Bills::getBoxBelongsTo, bills.getBoxBelongsTo())
-			.apply("DATE_FORMAT(actual_etd,'%Y-%m-%d') <= '" + formatter.format(new Date()) + "'");
+			.apply("DATE_FORMAT(actual_etd,'%Y-%m-%d') > '" + formatter.format(new Date()) + "'");
 		List<Bills> billsList = billsService.list(lambdaQueryWrapper);
 		return R.data(billsList);
 	}

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

@@ -255,6 +255,63 @@ public class PreContainersServiceImpl extends ServiceImpl<PreContainersMapper, P
 			.eq(PreContainers::getIsDeleted,0)
 			.in(PreContainers::getId,ids));
 		if (!preContainersList.isEmpty()){
+			Bills bills = billsMapper.selectById(preContainersList.get(0).getPid());
+			if (bills != null){
+				List<PreContainers> preContainers = baseMapper.selectList(new LambdaQueryWrapper<PreContainers>()
+					.eq(PreContainers::getTenantId,AuthUtil.getTenantId())
+					.eq(PreContainers::getIsDeleted,0)
+					.ne(PreContainers::getId,ids));
+				Integer V20 = 0;
+				Integer V40 = 0;
+				Integer V40HC = 0;
+				Integer V45 = 0;
+				Integer V48 = 0;
+				Integer other = 0;
+				BigDecimal teu = new BigDecimal("0.00");
+				StringBuilder boxTypeSum = new StringBuilder();
+				if (!preContainers.isEmpty()) {
+					bills.setTeu(teu.intValue());
+					for (PreContainers item : preContainers) {
+						switch (item.getCntrTypeCode()) {
+							case "20GP":
+								V20 += item.getQuantity();
+								break;
+							case "20HC":
+								V45 += item.getQuantity();
+								break;
+							case "40FR":
+								V48 += item.getQuantity();
+								break;
+							case "40GP":
+								V40 += item.getQuantity();
+								break;
+							case "40HC":
+								V40HC += item.getQuantity();
+								break;
+							default:
+								other += item.getQuantity();
+								break;
+						}
+						boxTypeSum.append(item.getCntrTypeCode()).append("*").append(item.getQuantity()).append(",");
+						if (ObjectUtils.isNotNull(item.getQuantity()) && ObjectUtils.isNotNull(item.getTeu())) {
+							teu = teu.add(new BigDecimal(item.getQuantity()).multiply(item.getTeu()));
+						}
+					}
+					if (boxTypeSum.length() > 0) {
+						boxTypeSum = new StringBuilder(boxTypeSum.substring(0, boxTypeSum.length() - 1));
+						bills.setQuantityCntrDescr(boxTypeSum.toString());
+					}
+				}
+				bills.setQuantityCntrDescr("");
+				bills.setQuantityV20(V20);
+				bills.setQuantityV40(V40);
+				bills.setQuantityV40hc(V40HC);
+				bills.setQuantityV45(V45);
+				bills.setQuantityV48(V48);
+				bills.setQuantityOther(other);
+				bills.setTeu(teu.intValue());
+				billsMapper.updateById(bills);
+			}
 			for (PreContainers item : preContainersList){
 				item.setUpdateUserName(AuthUtil.getUserName());
 				item.setUpdateUser(AuthUtil.getUserId());

+ 172 - 151
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -2054,7 +2054,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 					}
 					//皮重
 					if (ObjectUtils.isNotNull(item.getDeadlineTare()) && !item.getDeadlineTare().equals(item.getTare())) {
-						if (!"null".equals(item.getDeadlineTare())){
+						if (!"null".equals(item.getDeadlineTare())) {
 							containers.setTare(new BigDecimal(item.getDeadlineTare()));
 							containersStatus = true;
 						}
@@ -2071,159 +2071,180 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 	}
 
 	private void updateFeeCenter(FeeCenterUpdateRecord feeCenterUpdateRecord, FeeCenter feeCenter) {
-		feeCenterUpdateRecord.setStatus("3");
-		feeCenterUpdateRecord.setUpdateUser(AuthUtil.getUserId());
-		feeCenterUpdateRecord.setUpdateTime(new Date());
-		feeCenterUpdateRecord.setUpdateUserName(AuthUtil.getUserName());
-		feeCenterUpdateRecordMapper.updateById(feeCenterUpdateRecord);
-		FinAccBills finAccBills = finAccBillsService.getById(feeCenter.getAccBillId());
-		if (finAccBills == null) {
-			throw new RuntimeException("未查到账单信息");
-		}
-		Bills bills = new Bills();
-		String exrateType;
-		BigDecimal amountProfit = new BigDecimal("0.00");
-		BigDecimal amountProfitUsd = new BigDecimal("0.00");
-		BigDecimal amountProfitLoc = new BigDecimal("0.00");
-		BigDecimal oceanFreightProfit = new BigDecimal("0.00");
-		BigDecimal amountDr = new BigDecimal("0.00");
-		BigDecimal amountDrUsd = new BigDecimal("0.00");
-		BigDecimal amountDrLoc = new BigDecimal("0.00");
-		BigDecimal amountCr = new BigDecimal("0.00");
-		BigDecimal amountCrUsd = new BigDecimal("0.00");
-		BigDecimal amountCrLoc = new BigDecimal("0.00");
-		BigDecimal oceanFreightDr = new BigDecimal("0.00");
-		BigDecimal oceanFreightCr = new BigDecimal("0.00");
-		if ("SE,SI".contains(feeCenter.getBusinessType())) {
-			bills = billsMapper.selectById(feeCenterUpdateRecord.getPid());
-			if (bills == null) {
-				throw new RuntimeException("未查到单据信息");
-			}
-			exrateType = currencyUtils.standardCurrency(bills.getBranchId());
-			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getIsDeleted, 0)
-				.ne(FeeCenter::getId, feeCenter.getId())
-				.eq(FeeCenter::getPid, bills.getId()));
-			if (feeCenterList.isEmpty()) {
-				throw new RuntimeException("未查到费用明细");
-			}
-			amountDr = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && exrateType.equals(e.getCurCode())
-				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			amountDrUsd = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && !exrateType.equals(e.getCurCode())
-				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			amountDrLoc = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && !e.getId().equals(feeCenter.getId()))
-				.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
-			amountCr = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && exrateType.equals(e.getCurCode())
-				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			amountCrUsd = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && !exrateType.equals(e.getCurCode())
-				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			amountCrLoc = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && !e.getId().equals(feeCenter.getId()))
-				.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
-			oceanFreightDr = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "HYF".equals(e.getFeeCode())
-				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
-			oceanFreightCr = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "HYF".equals(e.getFeeCode())
-				&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
-		} else {
-			exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
-		}
-		if ("1".equals(feeCenterUpdateRecord.getType())) {
-			feeCenterService.removeById(feeCenter.getId());
-			finAccBillsService.removeById(finAccBills.getId());
-		} else {
-			feeCenter.setAuditStatus("4");
-			int version = StringUtil.isBlank(feeCenter.getVersion()) ? 1 : Integer.parseInt(feeCenter.getVersion());
-			feeCenter.setVersion(String.valueOf(version + 1));
-			feeCenter.setUpdateUser(AuthUtil.getUserId());
-			feeCenter.setUpdateTime(new Date());
-			feeCenter.setUpdateUserName(AuthUtil.getUserName());
-			feeCenter.setCorpId(feeCenterUpdateRecord.getCorpIdUpdate());
-			feeCenter.setCorpCnName(feeCenterUpdateRecord.getCorpCnNameUpdate());
-			feeCenter.setCorpEnName(feeCenterUpdateRecord.getCorpEnNameUpdate());
-			feeCenter.setShortName(feeCenterUpdateRecord.getShortNameUpdate());
-			feeCenter.setGenerationCorpId(feeCenterUpdateRecord.getGenerationCorpIdUpdate());
-			feeCenter.setGenerationCorpCnName(feeCenterUpdateRecord.getGenerationCorpCnNameUpdate());
-			feeCenter.setGenerationCorpEnName(feeCenterUpdateRecord.getGenerationCorpEnNameUpdate());
-			feeCenter.setCorpType(feeCenterUpdateRecord.getCorpTypeUpdate());
-			feeCenter.setFeeId(feeCenterUpdateRecord.getFeeIdUpdate());
-			feeCenter.setFeeCode(feeCenterUpdateRecord.getFeeCodeUpdate());
-			feeCenter.setFeeCnName(feeCenterUpdateRecord.getFeeCnNameUpdate());
-			feeCenter.setFeeEnName(feeCenterUpdateRecord.getFeeEnNameUpdate());
-			feeCenter.setQuantity(feeCenterUpdateRecord.getQuantityUpdate());
-			feeCenter.setUnitNo(feeCenterUpdateRecord.getUnitNoUpdate());
-			feeCenter.setPrice(feeCenterUpdateRecord.getPriceUpdate());
-			feeCenter.setCurCode(feeCenterUpdateRecord.getCurCodeUpdate());
-			feeCenter.setExrate(feeCenterUpdateRecord.getExrateUpdate());
-			feeCenter.setAmount(feeCenterUpdateRecord.getAmountUpdate());
-			feeCenter.setUnsettledAmount(feeCenterUpdateRecord.getAmountUpdate());
-			feeCenter.setAmountLoc(feeCenterUpdateRecord.getAmountLocUpdate());
-			feeCenter.setTaxRate(feeCenterUpdateRecord.getTaxRateUpdate());
-			feeCenter.setAmountTax(feeCenterUpdateRecord.getAmountTaxUpdate());
-			feeCenter.setAccAmount(feeCenterUpdateRecord.getAmountLocUpdate());
-			feeCenter.setRemarks(feeCenterUpdateRecord.getRemarksUpdate());
-			feeCenterService.updateById(feeCenter);
-			if (feeCenter.getAccBillId() == null) {
-				throw new RuntimeException("账单id不能为空");
-			}
-			if ("D".equals(feeCenter.getDc())) {
-				if (exrateType.equals(feeCenter.getCurCode())) {
-					amountDr = amountDr.add(feeCenter.getAmount());
-					finAccBills.setAmountDr(feeCenter.getAmount());
-					finAccBills.setAmountDrUsd(new BigDecimal("0.00"));
-				} else {
-					amountDrUsd = amountDrUsd.add(feeCenter.getAmount());
-					finAccBills.setAmountDrUsd(feeCenter.getAmount());
-					finAccBills.setAmountDr(new BigDecimal("0.00"));
+		if (feeCenter != null){
+			feeCenterUpdateRecord.setStatus("3");
+			feeCenterUpdateRecord.setUpdateUser(AuthUtil.getUserId());
+			feeCenterUpdateRecord.setUpdateTime(new Date());
+			feeCenterUpdateRecord.setUpdateUserName(AuthUtil.getUserName());
+			feeCenterUpdateRecordMapper.updateById(feeCenterUpdateRecord);
+			FinAccBills finAccBills = null;
+			if (ObjectUtils.isNotNull(feeCenter.getAccBillId())) {
+				finAccBills = finAccBillsService.getById(feeCenter.getAccBillId());
+				if (finAccBills == null) {
+					throw new RuntimeException("未查到账单信息");
+				}
+			}
+			Bills bills = new Bills();
+			String exrateType;
+			BigDecimal amountProfit = new BigDecimal("0.00");
+			BigDecimal amountProfitUsd = new BigDecimal("0.00");
+			BigDecimal amountProfitLoc = new BigDecimal("0.00");
+			BigDecimal oceanFreightProfit = new BigDecimal("0.00");
+			BigDecimal amountDr = new BigDecimal("0.00");
+			BigDecimal amountDrUsd = new BigDecimal("0.00");
+			BigDecimal amountDrLoc = new BigDecimal("0.00");
+			BigDecimal amountCr = new BigDecimal("0.00");
+			BigDecimal amountCrUsd = new BigDecimal("0.00");
+			BigDecimal amountCrLoc = new BigDecimal("0.00");
+			BigDecimal oceanFreightDr = new BigDecimal("0.00");
+			BigDecimal oceanFreightCr = new BigDecimal("0.00");
+			if ("SE,SI".contains(feeCenter.getBusinessType())) {
+				bills = billsMapper.selectById(feeCenterUpdateRecord.getPid());
+				if (bills == null) {
+					throw new RuntimeException("未查到单据信息");
+				}
+				exrateType = currencyUtils.standardCurrency(bills.getBranchId());
+				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+					.eq(FeeCenter::getIsDeleted, 0)
+					.ne(FeeCenter::getId, feeCenter.getId())
+					.eq(FeeCenter::getPid, bills.getId()));
+				if (feeCenterList.isEmpty()) {
+					throw new RuntimeException("未查到费用明细");
+				}
+				amountDr = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && exrateType.equals(e.getCurCode())
+					&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				amountDrUsd = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && !exrateType.equals(e.getCurCode())
+					&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				amountDrLoc = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && !e.getId().equals(feeCenter.getId()))
+					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				amountCr = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && exrateType.equals(e.getCurCode())
+					&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				amountCrUsd = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && !exrateType.equals(e.getCurCode())
+					&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+				amountCrLoc = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && !e.getId().equals(feeCenter.getId()))
+					.map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				oceanFreightDr = feeCenterList.stream().filter(e -> "D".equals(e.getDc()) && "HYF".equals(e.getFeeCode())
+					&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+				oceanFreightCr = feeCenterList.stream().filter(e -> "C".equals(e.getDc()) && "HYF".equals(e.getFeeCode())
+					&& !e.getId().equals(feeCenter.getId())).map(FeeCenter::getAmountLoc).reduce(BigDecimal.ZERO, BigDecimal::add);
+			} else {
+				exrateType = currencyUtils.standardCurrency(AuthUtil.getDeptId());
+			}
+			if ("1".equals(feeCenterUpdateRecord.getType())) {
+				feeCenterService.removeById(feeCenter.getId());
+				if (finAccBills != null) {
+					finAccBillsService.removeById(finAccBills.getId());
 				}
-				amountDrLoc = amountDrLoc.add(feeCenter.getAmountLoc());
-				finAccBills.setAmountDrLoc(feeCenter.getAmountLoc());
 			} else {
-				if (exrateType.equals(feeCenter.getCurCode())) {
-					amountCr = amountCr.add(feeCenter.getAmount());
-					finAccBills.setAmountCr(feeCenter.getAmount());
-					finAccBills.setAmountCrUsd(new BigDecimal("0.00"));
+				feeCenter.setAuditStatus("4");
+				int version = StringUtil.isBlank(feeCenter.getVersion()) ? 1 : Integer.parseInt(feeCenter.getVersion());
+				feeCenter.setVersion(String.valueOf(version + 1));
+				feeCenter.setUpdateUser(AuthUtil.getUserId());
+				feeCenter.setUpdateTime(new Date());
+				feeCenter.setUpdateUserName(AuthUtil.getUserName());
+				feeCenter.setCorpId(feeCenterUpdateRecord.getCorpIdUpdate());
+				feeCenter.setCorpCnName(feeCenterUpdateRecord.getCorpCnNameUpdate());
+				feeCenter.setCorpEnName(feeCenterUpdateRecord.getCorpEnNameUpdate());
+				feeCenter.setShortName(feeCenterUpdateRecord.getShortNameUpdate());
+				feeCenter.setGenerationCorpId(feeCenterUpdateRecord.getGenerationCorpIdUpdate());
+				feeCenter.setGenerationCorpCnName(feeCenterUpdateRecord.getGenerationCorpCnNameUpdate());
+				feeCenter.setGenerationCorpEnName(feeCenterUpdateRecord.getGenerationCorpEnNameUpdate());
+				feeCenter.setCorpType(feeCenterUpdateRecord.getCorpTypeUpdate());
+				feeCenter.setFeeId(feeCenterUpdateRecord.getFeeIdUpdate());
+				feeCenter.setFeeCode(feeCenterUpdateRecord.getFeeCodeUpdate());
+				feeCenter.setFeeCnName(feeCenterUpdateRecord.getFeeCnNameUpdate());
+				feeCenter.setFeeEnName(feeCenterUpdateRecord.getFeeEnNameUpdate());
+				feeCenter.setQuantity(feeCenterUpdateRecord.getQuantityUpdate());
+				feeCenter.setUnitNo(feeCenterUpdateRecord.getUnitNoUpdate());
+				feeCenter.setPrice(feeCenterUpdateRecord.getPriceUpdate());
+				feeCenter.setCurCode(feeCenterUpdateRecord.getCurCodeUpdate());
+				feeCenter.setExrate(feeCenterUpdateRecord.getExrateUpdate());
+				feeCenter.setAmount(feeCenterUpdateRecord.getAmountUpdate());
+				feeCenter.setUnsettledAmount(feeCenterUpdateRecord.getAmountUpdate());
+				feeCenter.setAmountLoc(feeCenterUpdateRecord.getAmountLocUpdate());
+				feeCenter.setTaxRate(feeCenterUpdateRecord.getTaxRateUpdate());
+				feeCenter.setAmountTax(feeCenterUpdateRecord.getAmountTaxUpdate());
+				feeCenter.setAccAmount(feeCenterUpdateRecord.getAmountLocUpdate());
+				feeCenter.setRemarks(feeCenterUpdateRecord.getRemarksUpdate());
+				feeCenterService.updateById(feeCenter);
+				if (feeCenter.getAccBillId() == null) {
+					throw new RuntimeException("账单id不能为空");
+				}
+				if ("D".equals(feeCenter.getDc())) {
+					if (exrateType.equals(feeCenter.getCurCode())) {
+						amountDr = amountDr.add(feeCenter.getAmount());
+						if (finAccBills != null) {
+							finAccBills.setAmountDr(feeCenter.getAmount());
+							finAccBills.setAmountDrUsd(new BigDecimal("0.00"));
+						}
+					} else {
+						amountDrUsd = amountDrUsd.add(feeCenter.getAmount());
+						if (finAccBills != null) {
+							finAccBills.setAmountDrUsd(feeCenter.getAmount());
+							finAccBills.setAmountDr(new BigDecimal("0.00"));
+						}
+					}
+					amountDrLoc = amountDrLoc.add(feeCenter.getAmountLoc());
+					if (finAccBills != null) {
+						finAccBills.setAmountDrLoc(feeCenter.getAmountLoc());
+					}
 				} else {
-					amountCrUsd = amountCrUsd.add(feeCenter.getAmount());
-					finAccBills.setAmountCrUsd(feeCenter.getAmount());
-					finAccBills.setAmountCr(new BigDecimal("0.00"));
-				}
-				amountCrLoc = amountCrLoc.add(feeCenter.getAmountLoc());
-				finAccBills.setAmountCrLoc(feeCenter.getAmountLoc());
-			}
-			finAccBills.setCorpId(feeCenterUpdateRecord.getCorpIdUpdate());
-			finAccBills.setCorpCnName(feeCenterUpdateRecord.getCorpCnNameUpdate());
-			finAccBills.setCorpEnName(feeCenterUpdateRecord.getCorpEnNameUpdate());
-			finAccBills.setGenerationCorpId(feeCenterUpdateRecord.getGenerationCorpIdUpdate());
-			finAccBills.setGenerationCorpCnName(feeCenterUpdateRecord.getGenerationCorpCnNameUpdate());
-			finAccBills.setGenerationCorpEnName(feeCenterUpdateRecord.getGenerationCorpEnNameUpdate());
-			finAccBills.setTaxRate(feeCenterUpdateRecord.getTaxRateUpdate());
-			finAccBills.setAmountTax(feeCenterUpdateRecord.getAmountTaxUpdate());
-			finAccBills.setCurCode(feeCenterUpdateRecord.getCurCodeUpdate());
-			finAccBillsService.updateById(finAccBills);
-		}
-		if ("SE,SI".contains(feeCenter.getBusinessType())) {
-			//利润 = 收 - 付
-			oceanFreightProfit = oceanFreightDr.subtract(oceanFreightCr);
-			amountProfit = amountDr.subtract(amountCr);
-			amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
-			amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
-			bills.setAmountDr(amountDr);
-			bills.setOceanFreightDr(oceanFreightDr);
-			bills.setAmountCr(amountCr);
-			bills.setOceanFreightCr(oceanFreightCr);
-			bills.setAmountProfit(amountProfit);
-			bills.setOceanFreightProfit(oceanFreightProfit);
-			bills.setAmountDrUsd(amountDrUsd);
-			bills.setAmountCrUsd(amountCrUsd);
-			bills.setAmountProfitUsd(amountProfitUsd);
-			bills.setAmountDrLoc(amountDrLoc);
-			bills.setAmountCrLoc(amountCrLoc);
-			bills.setAmountProfitLoc(amountProfitLoc);
-			billsMapper.updateById(bills);
-		} else if ("BUY,SELL,ZR,ZC,DL,OW-N,OW-F,XGFY,XGDX,CCSQ,DXCB,OW-HY".contains(feeCenter.getBusinessType())) {
-			TradingBox tradingBox = tradingBoxMapper.selectById(feeCenter.getPid());
-			if (tradingBox == null) {
-				throw new RuntimeException("未查到费用明细所在单据信息");
+					if (exrateType.equals(feeCenter.getCurCode())) {
+						amountCr = amountCr.add(feeCenter.getAmount());
+						if (finAccBills != null) {
+							finAccBills.setAmountCr(feeCenter.getAmount());
+							finAccBills.setAmountCrUsd(new BigDecimal("0.00"));
+						}
+					} else {
+						amountCrUsd = amountCrUsd.add(feeCenter.getAmount());
+						if (finAccBills != null) {
+							finAccBills.setAmountCrUsd(feeCenter.getAmount());
+							finAccBills.setAmountCr(new BigDecimal("0.00"));
+						}
+					}
+					amountCrLoc = amountCrLoc.add(feeCenter.getAmountLoc());
+					if (finAccBills != null) {
+						finAccBills.setAmountCrLoc(feeCenter.getAmountLoc());
+					}
+				}
+				if (finAccBills != null) {
+					finAccBills.setCorpId(feeCenterUpdateRecord.getCorpIdUpdate());
+					finAccBills.setCorpCnName(feeCenterUpdateRecord.getCorpCnNameUpdate());
+					finAccBills.setCorpEnName(feeCenterUpdateRecord.getCorpEnNameUpdate());
+					finAccBills.setGenerationCorpId(feeCenterUpdateRecord.getGenerationCorpIdUpdate());
+					finAccBills.setGenerationCorpCnName(feeCenterUpdateRecord.getGenerationCorpCnNameUpdate());
+					finAccBills.setGenerationCorpEnName(feeCenterUpdateRecord.getGenerationCorpEnNameUpdate());
+					finAccBills.setTaxRate(feeCenterUpdateRecord.getTaxRateUpdate());
+					finAccBills.setAmountTax(feeCenterUpdateRecord.getAmountTaxUpdate());
+					finAccBills.setCurCode(feeCenterUpdateRecord.getCurCodeUpdate());
+					finAccBillsService.updateById(finAccBills);
+				}
+			}
+			if ("SE,SI".contains(feeCenter.getBusinessType())) {
+				//利润 = 收 - 付
+				oceanFreightProfit = oceanFreightDr.subtract(oceanFreightCr);
+				amountProfit = amountDr.subtract(amountCr);
+				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
+				amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
+				bills.setAmountDr(amountDr);
+				bills.setOceanFreightDr(oceanFreightDr);
+				bills.setAmountCr(amountCr);
+				bills.setOceanFreightCr(oceanFreightCr);
+				bills.setAmountProfit(amountProfit);
+				bills.setOceanFreightProfit(oceanFreightProfit);
+				bills.setAmountDrUsd(amountDrUsd);
+				bills.setAmountCrUsd(amountCrUsd);
+				bills.setAmountProfitUsd(amountProfitUsd);
+				bills.setAmountDrLoc(amountDrLoc);
+				bills.setAmountCrLoc(amountCrLoc);
+				bills.setAmountProfitLoc(amountProfitLoc);
+				billsMapper.updateById(bills);
+			} else if ("BUY,SELL,ZR,ZC,DL,OW-N,OW-F,XGFY,XGDX,CCSQ,DXCB,OW-HY".contains(feeCenter.getBusinessType())) {
+				TradingBox tradingBox = tradingBoxMapper.selectById(feeCenter.getPid());
+				if (tradingBox == null) {
+					throw new RuntimeException("未查到费用明细所在单据信息");
+				}
 			}
 		}
 	}