Browse Source

1.海运进口增加字段
2.海运出口-增加撤销转单接口
3.海运出口-转单接口修改分单逻辑
4.海运进口-增加接收接口
5.海运进口-增加撤销接收接口
6.海运进口-增加换单接口
7.海运进口-增加撤销换单接口
8.海运进口-增加退押接口
9.海运进口-增加撤销退押接口

纪新园 8 months ago
parent
commit
9c2dc0762b

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

@@ -65,6 +65,11 @@ public class Bills implements Serializable {
 	@ApiModelProperty(value = "分公司 Id")
 	private String branchId;
 	/**
+	 * 分公司
+	 */
+	@ApiModelProperty(value = "分公司")
+	private String branchName;
+	/**
 	 * 创建人 Id
 	 */
 	@ApiModelProperty(value = "创建人 Id")
@@ -1022,7 +1027,7 @@ public class Bills implements Serializable {
 	@ApiModelProperty(value = "进项发票开具状态描述(0  未开 3 部分 9 全开)")
 	private String invoiceCrStatusDescr;
 	/**
-	 * 状态(业务参数配置) 0接单1退舱3完成4出号5开船6到港
+	 * 状态(业务参数配置) 0接单1退舱3完成4出号5开船6到港7全部8返空9换单10通关
 	 */
 	@ApiModelProperty(value = "状态(业务参数配置)")
 	private Integer billStatus;
@@ -1416,6 +1421,72 @@ public class Bills implements Serializable {
 	private Long srcBusId;
 
 	/**
+	 * 换单日期
+	 */
+	@ApiModelProperty(value = "换单日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date changeOrderDate;
+
+	/**
+	 * 退押日期
+	 */
+	@ApiModelProperty(value = "退押日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date returnDate;
+
+	/**
+	 * 返空日期
+	 */
+	@ApiModelProperty(value = "返空日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date returnEmptyDate;
+
+	/**
+	 * 通关日期
+	 */
+	@ApiModelProperty(value = "通关日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date clearanceDate;
+
+	/**
+	 * 报关单号
+	 */
+	@ApiModelProperty(value = "报关单号")
+	private String customsDeclarationNumber;
+
+	/**
+	 * 设备单指示
+	 */
+	@ApiModelProperty(value = "设备单指示")
+	private String equipmentListIndication;
+
+	/**
+	 * 接收状态  录入  已接收
+	 */
+	@ApiModelProperty(value = "接收状态")
+	private String receiveStatus;
+
+	/**
+	 * 换单状态  录入  已换单
+	 */
+	@ApiModelProperty(value = "换单状态")
+	private String changeOrdersStatus;
+
+	/**
+	 * 退押状态  录入  已退押
+	 */
+	@ApiModelProperty(value = "退押状态")
+	private String returningSecurityMoneyStatus;
+
+	/**
 	 * 到港日期
 	 */
 	@TableField(exist = false)

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

@@ -70,8 +70,6 @@ public class BillsController extends BladeController {
 
 	private final IDictBizClient dictBizClient;
 
-	private final ISysClient sysClient;
-
 	private final ISeaBillsDetailService seaBillsDetailService;
 
 	/**
@@ -150,16 +148,22 @@ public class BillsController extends BladeController {
 			.eq(ObjectUtils.isNotNull(bills.getAccountStatus()), Bills::getAccountStatus, bills.getAccountStatus())
 			.eq(ObjectUtils.isNotNull(bills.getStatus()), Bills::getStatus, bills.getStatus());
 		if (ObjectUtils.isNotNull(bills.getBillStatus())){
-			if ("0,1,2,3".contains(bills.getBillStatus()+"")){
+			if ("1,2,3".contains(bills.getBillStatus()+"")){
 				lambdaQueryWrapper.eq(Bills::getBillStatus, bills.getBillStatus());
+			}else if (0 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNull(Bills::getMblno);
 			}else if (4 == bills.getBillStatus()){
 				lambdaQueryWrapper.isNotNull(Bills::getMblno);
 			}else if (5 == bills.getBillStatus()){
 				lambdaQueryWrapper.isNotNull(Bills::getActualEtd);
 			}else if (6 == bills.getBillStatus()){
 				lambdaQueryWrapper.isNotNull(Bills::getActualEta);
-			}else{
-				lambdaQueryWrapper.eq(Bills::getBillStatus, bills.getBillStatus());
+			}else if (8 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNotNull(Bills::getReturnEmptyDate);
+			}else if (9 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNotNull(Bills::getChangeOrderDate);
+			}else if (10 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNotNull(Bills::getClearanceDate);
 			}
 		}
 		if ("SE".equals(bills.getBusinessType())) {
@@ -264,16 +268,22 @@ public class BillsController extends BladeController {
 			.eq(ObjectUtils.isNotNull(bills.getMasterBillNo()), Bills::getMasterBillNo, bills.getMasterBillNo())
 			.eq(ObjectUtils.isNotNull(bills.getMasterId()), Bills::getMasterId, bills.getMasterId());
 		if (ObjectUtils.isNotNull(bills.getBillStatus())){
-			if ("0,1,2,3".contains(bills.getBillStatus()+"")){
+			if ("1,2,3".contains(bills.getBillStatus()+"")){
 				lambdaQueryWrapper.eq(Bills::getBillStatus, bills.getBillStatus());
+			}else if (0 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNull(Bills::getMblno);
 			}else if (4 == bills.getBillStatus()){
 				lambdaQueryWrapper.isNotNull(Bills::getMblno);
 			}else if (5 == bills.getBillStatus()){
 				lambdaQueryWrapper.isNotNull(Bills::getActualEtd);
 			}else if (6 == bills.getBillStatus()){
 				lambdaQueryWrapper.isNotNull(Bills::getActualEta);
-			}else{
-				lambdaQueryWrapper.eq(Bills::getBillStatus, bills.getBillStatus());
+			}else if (8 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNotNull(Bills::getReturnEmptyDate);
+			}else if (9 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNotNull(Bills::getChangeOrderDate);
+			}else if (10 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNotNull(Bills::getClearanceDate);
 			}
 		}
 		if ("SE".equals(bills.getBusinessType())) {
@@ -602,16 +612,22 @@ public class BillsController extends BladeController {
 			.eq(ObjectUtils.isNotNull(bills.getStatus()), Bills::getStatus, bills.getStatus())
 			.orderByDesc(Bills::getCreateTime);
 		if (ObjectUtils.isNotNull(bills.getBillStatus())){
-			if ("0,1,2,3".contains(bills.getBillStatus()+"")){
+			if ("1,2,3".contains(bills.getBillStatus()+"")){
 				lambdaQueryWrapper.eq(Bills::getBillStatus, bills.getBillStatus());
+			}else if (0 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNull(Bills::getMblno);
 			}else if (4 == bills.getBillStatus()){
 				lambdaQueryWrapper.isNotNull(Bills::getMblno);
 			}else if (5 == bills.getBillStatus()){
 				lambdaQueryWrapper.isNotNull(Bills::getActualEtd);
 			}else if (6 == bills.getBillStatus()){
 				lambdaQueryWrapper.isNotNull(Bills::getActualEta);
-			}else{
-				lambdaQueryWrapper.eq(Bills::getBillStatus, bills.getBillStatus());
+			}else if (8 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNotNull(Bills::getReturnEmptyDate);
+			}else if (9 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNotNull(Bills::getChangeOrderDate);
+			}else if (10 == bills.getBillStatus()){
+				lambdaQueryWrapper.isNotNull(Bills::getClearanceDate);
 			}
 		}
 		List<Bills> list = billsService.list(lambdaQueryWrapper);
@@ -700,5 +716,61 @@ public class BillsController extends BladeController {
 	public R transferOrder(@Valid @RequestBody Bills bills) {
 		return billsService.transferOrder(bills);
 	}
+
+	/**
+	 * 撤销转单
+	 */
+	@PostMapping("/revokeTransferOrder")
+	public R revokeTransferOrder(@Valid @RequestBody Bills bills) {
+		return billsService.revokeTransferOrder(bills);
+	}
+
+	/**
+	 * 接收
+	 */
+	@PostMapping("/receive")
+	public R receive(@Valid @RequestBody Bills bills) {
+		return billsService.receive(bills);
+	}
+
+	/**
+	 * 撤销接收
+	 */
+	@PostMapping("/revokeReceive")
+	public R revokeReceive(@Valid @RequestBody Bills bills) {
+		return billsService.revokeReceive(bills);
+	}
+
+	/**
+	 * 换单
+	 */
+	@PostMapping("/changeOrders")
+	public R changeOrders(@Valid @RequestBody Bills bills) {
+		return billsService.changeOrders(bills);
+	}
+
+	/**
+	 * 撤销换单
+	 */
+	@PostMapping("/revokeChangeOrders")
+	public R revokeChangeOrders(@Valid @RequestBody Bills bills) {
+		return billsService.revokeChangeOrders(bills);
+	}
+
+	/**
+	 * 退押
+	 */
+	@PostMapping("/returningSecurityMoney")
+	public R returningSecurityMoney(@Valid @RequestBody Bills bills) {
+		return billsService.returningSecurityMoney(bills);
+	}
+
+	/**
+	 * 撤销退押
+	 */
+	@PostMapping("/revokeReturningSecurityMoney")
+	public R revokeReturningSecurityMoney(@Valid @RequestBody Bills bills) {
+		return billsService.revokeReturningSecurityMoney(bills);
+	}
 }
 

+ 14 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java

@@ -154,4 +154,18 @@ public interface IBillsService extends IService<Bills> {
 	R logisticsRevokeSubmission(Bills bills);
 
 	R transferOrder(Bills bills);
+
+	R revokeTransferOrder(Bills bills);
+
+	R receive(Bills bills);
+
+	R revokeReceive(Bills bills);
+
+	R changeOrders(Bills bills);
+
+	R revokeChangeOrders(Bills bills);
+
+	R returningSecurityMoney(Bills bills);
+
+	R revokeReturningSecurityMoney(Bills bills);
 }

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

@@ -2572,6 +2572,10 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		detail.setUpdateUser(AuthUtil.getUserId());
 		detail.setUpdateUserName(AuthUtil.getUserName());
 		detail.setUpdateTime(new Date());
+		detail.setPodCompanyId(bills.getPodCompanyId());
+		detail.setPodCompanyName(bills.getPodCompanyName());
+		detail.setPodStaffId(bills.getPodStaffId());
+		detail.setPodStaffName(bills.getPodStaffName());
 		baseMapper.updateById(detail);
 		Bills billsJk = new Bills();
 		BeanUtil.copyProperties(detail, billsJk);
@@ -2601,6 +2605,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		billsJk.setApprovedDate(null);
 		billsJk.setIssueStatus(null);
 		billsJk.setSrcBusId(detail.getId());
+		billsJk.setBusinessType("SI");
+		billsJk.setSeaType("I");
 		String deptId = billsJk.getPodCompanyId() + "";
 		String deptName = billsJk.getPodCompanyName();
 		String branchId = billsJk.getPodCompanyId() + "";
@@ -2661,110 +2667,14 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		billsJk.setTenantId(AuthUtil.getTenantId());
 		if (ObjectUtils.isNotNull(branchId)) {
 			billsJk.setBranchId(branchId);
+			billsJk.setBranchName(deptName);
 			billsJk.setCreateDept(deptId);
 			billsJk.setCreateDeptName(deptName);
 		}
 		// 初始创建为1
 		billsJk.setVersion("1");
 		baseMapper.insert(billsJk);
-		if (ObjectUtils.isNotNull(billsJk.getPreContainersList())) {
-			List<PreContainers> preContainersList = new ArrayList<>();
-			for (PreContainers item : billsJk.getPreContainersList()) {
-				item.setSrcId(item.getId());
-				item.setId(null);
-				item.setCreateTime(new Date());
-				item.setCreateUser(AuthUtil.getUserId());
-				item.setCreateUserName(AuthUtil.getUserName());
-				if (ObjectUtils.isNotNull(branchId)) {
-					item.setBranchId(branchId);
-					item.setCreateDept(deptId);
-					item.setCreateDeptName(deptName);
-				}
-				item.setUpdateUser(null);
-				item.setUpdateTime(null);
-				item.setUpdateUserName(null);
-				item.setPid(billsJk.getId());
-				preContainersList.add(item);
-			}
-			preContainersService.saveBatch(preContainersList);
-		}
-		if (ObjectUtils.isNotNull(billsJk.getContainersList())) {
-			List<Containers> containersList = new ArrayList<>();
-			List<ContainersCommodity> containersCommodityList = new ArrayList<>();
-			List<ContainersBills> containersBillsList = new ArrayList<>();
-			for (Containers item : billsJk.getContainersList()) {
-				item.setSrcId(item.getId());
-				item.setId(null);
-				item.setCreateTime(new Date());
-				item.setCreateUser(AuthUtil.getUserId());
-				item.setCreateUserName(AuthUtil.getUserName());
-				if (ObjectUtils.isNotNull(branchId)) {
-					item.setBranchId(branchId);
-					item.setCreateDept(deptId);
-					item.setCreateDeptName(deptName);
-				}
-				item.setUpdateUser(null);
-				item.setUpdateTime(null);
-				item.setUpdateUserName(null);
-				item.setPid(billsJk.getId());
-				if (ObjectUtils.isNotNull(item.getContainersCommodityList()) && !item.getContainersCommodityList().isEmpty()) {
-					containersCommodityList.addAll(item.getContainersCommodityList());
-				}
-				if (ObjectUtils.isNotNull(item.getContainersBillsList()) && !item.getContainersBillsList().isEmpty()) {
-					containersBillsList.addAll(item.getContainersBillsList());
-				}
-				containersList.add(item);
-			}
-			containersService.saveBatch(containersList);
-			if (!containersCommodityList.isEmpty()) {
-				for (ContainersCommodity item : containersCommodityList) {
-					Containers containers = containersList.stream().filter(e -> e.getSrcId().equals(item.getPid())).findFirst().orElse(null);
-					if (containers != null) {
-						item.setId(null);
-						item.setCreateTime(new Date());
-						item.setCreateUser(AuthUtil.getUserId());
-						item.setCreateUserName(AuthUtil.getUserName());
-						if (ObjectUtils.isNotNull(branchId)) {
-							item.setBranchId(branchId);
-							item.setCreateDept(deptId);
-							item.setCreateDeptName(deptName);
-						}
-						item.setUpdateUser(null);
-						item.setUpdateTime(null);
-						item.setUpdateUserName(null);
-						item.setPid(containers.getId());
-						item.setPpId(billsJk.getId());
-					} else {
-						throw new RuntimeException("装箱明细数据错误,请联系管理员");
-					}
-				}
-				containersCommodityService.saveBatch(containersCommodityList);
-			}
-			if (!containersBillsList.isEmpty()) {
-				for (ContainersBills item : containersBillsList) {
-					Containers containers = containersList.stream().filter(e -> e.getSrcId().equals(item.getPid())).findFirst().orElse(null);
-					if (containers != null) {
-						item.setId(null);
-						item.setCreateTime(new Date());
-						item.setCreateUser(AuthUtil.getUserId());
-						item.setCreateUserName(AuthUtil.getUserName());
-						if (ObjectUtils.isNotNull(branchId)) {
-							item.setBranchId(branchId);
-							item.setCreateDept(deptId);
-							item.setCreateDeptName(deptName);
-						}
-						item.setUpdateUser(null);
-						item.setUpdateTime(null);
-						item.setUpdateUserName(null);
-						item.setPid(containers.getId());
-						item.setPpId(billsJk.getId());
-					} else {
-						throw new RuntimeException("装箱明细数据错误,请联系管理员");
-					}
-				}
-				containersBillsService.saveBatch(containersBillsList);
-			}
-		}
+		Bills billsJkNew = this.addItemList(billsJk);
 
 		BigDecimal amountCr = new BigDecimal("0.00");
 		BigDecimal amountProfit;
@@ -2775,95 +2685,15 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 
 		Date date = new Date();
 		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
-		//应收
-		int statusD = 0;
-		if (ObjectUtils.isNotNull(billsJk.getFeeCenterListD())) {
-			List<FeeCenter> feeCenterListAll = new ArrayList<>();
-			List<FeeCenter> feeCenterListD = billsJk.getFeeCenterListD()
-				.stream().filter(e -> e.getCorpId().equals(billsJk.getForeignAgencyId())).collect(Collectors.toList());
-			if (!feeCenterListD.isEmpty()) {
-				statusD += 1;
-				for (FeeCenter item : feeCenterListD) {
-					//计算字段null值处理
-					item.setQuantity(ObjectUtils.isNotNull(item.getQuantity()) ? item.getQuantity() : new BigDecimal("0.00"));
-					item.setPrice(ObjectUtils.isNotNull(item.getPrice()) ? item.getPrice() : new BigDecimal("0.00"));
-					item.setSurchargeRate(ObjectUtils.isNotNull(item.getSurchargeRate()) ? item.getSurchargeRate() : new BigDecimal("0.00"));
-					item.setTaxRate(ObjectUtils.isNotNull(item.getTaxRate()) ? item.getTaxRate() : new BigDecimal("0.00"));
-					item.setAmountDiscount(ObjectUtils.isNotNull(item.getAmountDiscount()) ? item.getAmountDiscount() : new BigDecimal("0.00"));
-					item.setStlTtlAmount(ObjectUtils.isNotNull(item.getStlTtlAmount()) ? item.getStlTtlAmount() : new BigDecimal("0.00"));
 
-					item.setId(null);
-					item.setPid(billsJk.getId());
-					item.setBillNo(bills.getBillNo());
-					item.setBusinessType(billsJk.getBusinessType());
-					item.setDc("C");
-					item.setCreateTime(new Date());
-					item.setCreateUser(AuthUtil.getUserId());
-					item.setCreateUserName(AuthUtil.getUserName());
-					if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
-						item.setCreateDept(deptId);
-						item.setBranchId(branchId);
-						item.setCreateDeptName(deptName);
-					}
-					item.setUpdateUser(null);
-					item.setUpdateTime(null);
-					item.setUpdateUserName(null);
-
-					// 去税金额 = 数量quantity * 单价price
-					BigDecimal amountNet = new BigDecimal("0.00");
-					// 税额 = 去税金额amountNet * 税率taxRateSum
-					BigDecimal amountTax = new BigDecimal("0.00");
-					// 金额,amountTax + 去税金额amountNet - 折扣金额amountDiscount
-					BigDecimal amount = new BigDecimal("0.00");
-					//总税率  = 税率taxRate + 附加税率surchargeRate
-					BigDecimal taxRate = new BigDecimal("0.00");
-					// 税率 = 总税率/100
-					BigDecimal taxRateSum = new BigDecimal("0.00");
-
-					amountNet = amountNet.add(item.getQuantity().multiply(item.getPrice()))
-						.setScale(2, RoundingMode.HALF_UP);
-					taxRate = taxRate.add(item.getTaxRate()).add(item.getSurchargeRate());
-					taxRateSum = taxRateSum.add(taxRate.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
-					amountTax = amountTax.add(amountNet.multiply(taxRateSum)).setScale(2, RoundingMode.HALF_UP);
-					amount = amount.add(amountNet.add(amountTax).subtract(item.getAmountDiscount()));
-
-					//判断是否是本位币
-					if ("CNY".equals(item.getCurCode())) {
-						item.setAmountNetLoc(amountNet);
-						item.setAmountTaxLoc(amountTax);
-						item.setAmountLoc(amount);
-						item.setAmountDiscountLoc(amount);
-						amountCr = amountCr.add(item.getAmount());
-					} else {
-						item.setAmountNetLoc(amountNet.multiply(exrateC));
-						item.setAmountTaxLoc(amountTax.multiply(exrateC));
-						item.setAmountLoc(amount.multiply(exrateC));
-						item.setAmountDiscountLoc(amount.multiply(exrateC));
-						amountCrUsd = amountCrUsd.add(item.getAmount());
-					}
-					item.setAmountNet(amountNet);
-					item.setAmountTax(amountTax);
-					item.setAmount(amount);
-					item.setUnsettledAmount(item.getAmount().subtract(item.getStlTtlAmount()));
-					feeCenterListAll.add(item);
-				}
-			}
-			if (!feeCenterListAll.isEmpty()) {
-				feeCenterService.saveBatch(feeCenterListAll);
-			}
-		}
-		if (0 == statusD) {
-			billsJk.setAccountStatus(0);
-		} else if (1 == statusD) {
-			billsJk.setAccountStatus(2);
-		}
 		//主单应加上分单费用
-		if ("MM".equals(billsJk.getBillType()) && ObjectUtils.isNotNull(billsJk.getId())) {
+		if ("MM".equals(billsJkNew.getBillType()) && ObjectUtils.isNotNull(billsJkNew.getId())) {
 			List<Bills> details = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
 				.eq(Bills::getTenantId, AuthUtil.getTenantId())
 				.eq(Bills::getIsDeleted, 0)
 				.eq(Bills::getMasterId, bills.getId()));
 			if (!details.isEmpty()) {
+				List<Bills> billsList = new ArrayList<>();
 				for (Bills item : details) {
 					item.setSrcBusId(item.getId());
 					item.setId(null);
@@ -2891,8 +2721,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					item.setEdiStatus(null);
 					item.setApprovedDate(null);
 					item.setIssueStatus(null);
-					item.setMasterId(billsJk.getId());
-					item.setMasterBillNo(billsJk.getBillNo());
+					item.setMasterId(billsJkNew.getId());
+					item.setMasterBillNo(billsJkNew.getBillNo());
 					BusinessBillNo businessBillNo1 = new BusinessBillNo();
 					businessBillNo1.setBusinessTypeId(businessType.getId());
 					businessBillNo1.setCode("HYJK");
@@ -2912,11 +2742,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					}
 					// 初始创建为1
 					item.setVersion("1");
+					baseMapper.insert(item);
+					Bills itemNew = this.addItemList(item);
+					billsList.add(itemNew);
 				}
-				this.saveBatch(details);
-				amountCr = amountCr.add(details.stream().map(Bills::getAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-				amountCrUsd = amountCrUsd.add(details.stream().map(Bills::getAmountCrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-				amountCrLoc = amountCrLoc.add(details.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				amountCr = amountCr.add(billsList.stream().map(Bills::getAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				amountCrUsd = amountCrUsd.add(billsList.stream().map(Bills::getAmountCrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				amountCrLoc = amountCrLoc.add(billsList.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 			}
 		}
 		//利润 = 收 - 付
@@ -2928,15 +2760,21 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			amountCrLoc = amountCrLoc.add(amountCr);
 		}
 		amountProfitLoc = new BigDecimal("0.00").subtract(amountCrLoc);
-		billsJk.setAmountCr(amountCr);
-		billsJk.setAmountProfit(amountProfit);
-		billsJk.setAmountCrUsd(amountCrUsd);
-		billsJk.setAmountProfitUsd(amountProfitUsd);
-		billsJk.setAmountCrLoc(amountCrLoc);
-		billsJk.setAmountProfitLoc(amountProfitLoc);
-		this.updateById(billsJk);
-		if (ObjectUtils.isNotNull(billsJk.getDetail())) {
-			SeaBillsDetail seaBillsDetail = billsJk.getDetail();
+		billsJkNew.setAmountCr(billsJkNew.getAmountCr().add(amountCr));
+		billsJkNew.setAmountProfit(billsJkNew.getAmountProfit().add(amountProfit));
+		billsJkNew.setAmountCrUsd(billsJkNew.getAmountCrUsd().add(amountCrUsd));
+		billsJkNew.setAmountProfitUsd(billsJkNew.getAmountProfitUsd().add(amountProfitUsd));
+		billsJkNew.setAmountCrLoc(billsJkNew.getAmountCrLoc().add(amountCrLoc));
+		billsJkNew.setAmountProfitLoc(billsJkNew.getAmountProfitLoc().add(amountProfitLoc));
+		this.updateById(billsJkNew);
+		return R.data(billsJkNew);
+	}
+
+	private Bills addItemList(Bills billsJk) {
+		SeaBillsDetail seaBillsDetail = seaBillsDetailService.getOne(new LambdaQueryWrapper<SeaBillsDetail>()
+			.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
+			.eq(SeaBillsDetail::getPid, billsJk.getSrcBusId()));
+		if (seaBillsDetail != null) {
 			seaBillsDetail.setUpdateUser(null);
 			seaBillsDetail.setUpdateUserName(null);
 			seaBillsDetail.setUpdateTime(null);
@@ -2950,17 +2788,113 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			seaBillsDetail.setCreateTime(new Date());
 			seaBillsDetailService.save(seaBillsDetail);
 		}
-		if (ObjectUtils.isNotNull(billsJk.getFilesList())) {
-			List<FilesCenter> filesList = new ArrayList<>();
-			for (FilesCenter item : billsJk.getFilesList()) {
+		List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+			.eq(PreContainers::getIsDeleted, 0)
+			.eq(PreContainers::getPid, billsJk.getSrcBusId()));
+		if (!preContainersList.isEmpty()) {
+			for (PreContainers item : preContainersList) {
 				item.setId(null);
+				item.setCreateTime(new Date());
+				item.setCreateUser(AuthUtil.getUserId());
+				item.setCreateUserName(AuthUtil.getUserName());
+				item.setBranchId(billsJk.getBranchId());
+				item.setCreateDept(billsJk.getCreateDept());
+				item.setCreateDeptName(billsJk.getCreateDeptName());
+				item.setUpdateUser(null);
+				item.setUpdateTime(null);
+				item.setUpdateUserName(null);
 				item.setPid(billsJk.getId());
+			}
+			preContainersService.saveBatch(preContainersList);
+		}
+		List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
+			.eq(Containers::getTenantId, AuthUtil.getTenantId())
+			.eq(Containers::getIsDeleted, 0)
+			.eq(Containers::getPid, billsJk.getSrcBusId()));
+		if (!containersList.isEmpty()) {
+			for (Containers item : billsJk.getContainersList()) {
+				item.setSrcId(item.getId());
+				item.setId(null);
 				item.setCreateTime(new Date());
 				item.setCreateUser(AuthUtil.getUserId());
 				item.setCreateUserName(AuthUtil.getUserName());
-				if (ObjectUtils.isNotNull(AuthUtil.getDeptId())) {
-					item.setCreateDeptName(deptName);
+				item.setBranchId(billsJk.getBranchId());
+				item.setCreateDept(billsJk.getCreateDept());
+				item.setCreateDeptName(billsJk.getCreateDeptName());
+				item.setUpdateUser(null);
+				item.setUpdateTime(null);
+				item.setUpdateUserName(null);
+				item.setPid(billsJk.getId());
+			}
+			containersService.saveBatch(containersList);
+			List<ContainersCommodity> containersCommodityList = containersCommodityService.list(new LambdaQueryWrapper<ContainersCommodity>()
+				.eq(ContainersCommodity::getTenantId, AuthUtil.getTenantId())
+				.eq(ContainersCommodity::getIsDeleted, 0)
+				.eq(ContainersCommodity::getPpId, billsJk.getSrcBusId()));
+			if (!containersCommodityList.isEmpty()) {
+				for (ContainersCommodity item : containersCommodityList) {
+					Containers containers = containersList.stream().filter(e -> e.getSrcId().equals(item.getPid())).findFirst().orElse(null);
+					if (containers != null) {
+						item.setId(null);
+						item.setCreateTime(new Date());
+						item.setCreateUser(AuthUtil.getUserId());
+						item.setCreateUserName(AuthUtil.getUserName());
+						item.setBranchId(billsJk.getBranchId());
+						item.setCreateDept(billsJk.getCreateDept());
+						item.setCreateDeptName(billsJk.getCreateDeptName());
+						item.setUpdateUser(null);
+						item.setUpdateTime(null);
+						item.setUpdateUserName(null);
+						item.setPid(containers.getId());
+						item.setPpId(billsJk.getId());
+					} else {
+						throw new RuntimeException("装箱明细数据错误,请联系管理员");
+					}
 				}
+				containersCommodityService.saveBatch(containersCommodityList);
+			}
+			List<ContainersBills> containersBillsList = containersBillsService.list(new LambdaQueryWrapper<ContainersBills>()
+				.eq(ContainersBills::getTenantId, AuthUtil.getTenantId())
+				.eq(ContainersBills::getIsDeleted, 0)
+				.eq(ContainersBills::getPpId, billsJk.getSrcBusId()));
+			if (!containersBillsList.isEmpty()) {
+				for (ContainersBills item : containersBillsList) {
+					Containers containers = containersList.stream().filter(e -> e.getSrcId().equals(item.getPid())).findFirst().orElse(null);
+					if (containers != null) {
+						item.setId(null);
+						item.setCreateTime(new Date());
+						item.setCreateUser(AuthUtil.getUserId());
+						item.setCreateUserName(AuthUtil.getUserName());
+						item.setBranchId(billsJk.getBranchId());
+						item.setCreateDept(billsJk.getCreateDept());
+						item.setCreateDeptName(billsJk.getCreateDeptName());
+						item.setUpdateUser(null);
+						item.setUpdateTime(null);
+						item.setUpdateUserName(null);
+						item.setPid(containers.getId());
+						item.setPpId(billsJk.getId());
+					} else {
+						throw new RuntimeException("装箱明细数据错误,请联系管理员");
+					}
+				}
+				containersBillsService.saveBatch(containersBillsList);
+			}
+		}
+		List<FilesCenter> filesList = filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
+			.eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FilesCenter::getIsDeleted, 0)
+			.eq(FilesCenter::getPid, billsJk.getSrcBusId()));
+		if (!filesList.isEmpty()) {
+			for (FilesCenter item : billsJk.getFilesList()) {
+				item.setId(null);
+				item.setPid(billsJk.getId());
+				item.setCreateTime(new Date());
+				item.setCreateUser(AuthUtil.getUserId());
+				item.setCreateUserName(AuthUtil.getUserName());
+				item.setBranchId(billsJk.getBranchId());
+				item.setCreateDept(billsJk.getCreateDept());
+				item.setCreateDeptName(billsJk.getCreateDeptName());
 				item.setUpdateUser(null);
 				item.setUpdateTime(null);
 				item.setUpdateUserName(null);
@@ -2968,7 +2902,371 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			}
 			filesCenterService.saveBatch(filesList);
 		}
+		BigDecimal amountCr = new BigDecimal("0.00");
+		BigDecimal amountProfit = new BigDecimal("0.00");
+		BigDecimal amountCrUsd = new BigDecimal("0.00");
+		BigDecimal amountProfitUsd = new BigDecimal("0.00");
+		BigDecimal amountCrLoc = new BigDecimal("0.00");
+		BigDecimal amountProfitLoc = new BigDecimal("0.00");
+		Date date = new Date();
+		BigDecimal exrateC = bCurrencyService.getCnyExrate(date, "USD", "C", "1");
+		//应收
+		int statusD = 0;
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getPid, billsJk.getSrcBusId())
+			.eq(FeeCenter::getCorpId, billsJk.getForeignAgencyId())
+			.eq(FeeCenter::getDc, "D")
+		);
+		if (!feeCenterList.isEmpty()) {
+			statusD += 1;
+			for (FeeCenter item : feeCenterList) {
+				//计算字段null值处理
+				item.setQuantity(ObjectUtils.isNotNull(item.getQuantity()) ? item.getQuantity() : new BigDecimal("0.00"));
+				item.setPrice(ObjectUtils.isNotNull(item.getPrice()) ? item.getPrice() : new BigDecimal("0.00"));
+				item.setSurchargeRate(ObjectUtils.isNotNull(item.getSurchargeRate()) ? item.getSurchargeRate() : new BigDecimal("0.00"));
+				item.setTaxRate(ObjectUtils.isNotNull(item.getTaxRate()) ? item.getTaxRate() : new BigDecimal("0.00"));
+				item.setAmountDiscount(ObjectUtils.isNotNull(item.getAmountDiscount()) ? item.getAmountDiscount() : new BigDecimal("0.00"));
+				item.setStlTtlAmount(ObjectUtils.isNotNull(item.getStlTtlAmount()) ? item.getStlTtlAmount() : new BigDecimal("0.00"));
+
+				item.setId(null);
+				item.setPid(billsJk.getId());
+				item.setBillNo(billsJk.getBillNo());
+				item.setBusinessType(billsJk.getBusinessType());
+				item.setDc("C");
+				item.setCreateTime(new Date());
+				item.setCreateUser(AuthUtil.getUserId());
+				item.setCreateUserName(AuthUtil.getUserName());
+				item.setBranchId(billsJk.getBranchId());
+				item.setCreateDept(billsJk.getCreateDept());
+				item.setCreateDeptName(billsJk.getCreateDeptName());
+				item.setUpdateUser(null);
+				item.setUpdateTime(null);
+				item.setUpdateUserName(null);
+
+				// 去税金额 = 数量quantity * 单价price
+				BigDecimal amountNet = new BigDecimal("0.00");
+				// 税额 = 去税金额amountNet * 税率taxRateSum
+				BigDecimal amountTax = new BigDecimal("0.00");
+				// 金额,amountTax + 去税金额amountNet - 折扣金额amountDiscount
+				BigDecimal amount = new BigDecimal("0.00");
+				//总税率  = 税率taxRate + 附加税率surchargeRate
+				BigDecimal taxRate = new BigDecimal("0.00");
+				// 税率 = 总税率/100
+				BigDecimal taxRateSum = new BigDecimal("0.00");
+
+				amountNet = amountNet.add(item.getQuantity().multiply(item.getPrice()))
+					.setScale(2, RoundingMode.HALF_UP);
+				taxRate = taxRate.add(item.getTaxRate()).add(item.getSurchargeRate());
+				taxRateSum = taxRateSum.add(taxRate.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
+				amountTax = amountTax.add(amountNet.multiply(taxRateSum)).setScale(2, RoundingMode.HALF_UP);
+				amount = amount.add(amountNet.add(amountTax).subtract(item.getAmountDiscount()));
+
+				//判断是否是本位币
+				if ("CNY".equals(item.getCurCode())) {
+					item.setAmountNetLoc(amountNet);
+					item.setAmountTaxLoc(amountTax);
+					item.setAmountLoc(amount);
+					item.setAmountDiscountLoc(amount);
+					amountCr = amountCr.add(item.getAmount());
+				} else {
+					item.setAmountNetLoc(amountNet.multiply(exrateC));
+					item.setAmountTaxLoc(amountTax.multiply(exrateC));
+					item.setAmountLoc(amount.multiply(exrateC));
+					item.setAmountDiscountLoc(amount.multiply(exrateC));
+					amountCrUsd = amountCrUsd.add(item.getAmount());
+				}
+				item.setAmountNet(amountNet);
+				item.setAmountTax(amountTax);
+				item.setAmount(amount);
+				item.setUnsettledAmount(item.getAmount().subtract(item.getStlTtlAmount()));
+			}
+			feeCenterService.saveBatch(feeCenterList);
+		}
+		if (0 == statusD) {
+			billsJk.setAccountStatus(0);
+		} else if (1 == statusD) {
+			billsJk.setAccountStatus(2);
+		}
+		billsJk.setAmountCr(billsJk.getAmountCr().add(amountCr));
+		billsJk.setAmountProfit(billsJk.getAmountProfit().add(amountProfit));
+		billsJk.setAmountCrUsd(billsJk.getAmountCrUsd().add(amountCrUsd));
+		billsJk.setAmountProfitUsd(billsJk.getAmountProfitUsd().add(amountProfitUsd));
+		billsJk.setAmountCrLoc(billsJk.getAmountCrLoc().add(amountCrLoc));
+		billsJk.setAmountProfitLoc(billsJk.getAmountProfitLoc().add(amountProfitLoc));
+		return billsJk;
+	}
+
+	@Override
+	public R revokeTransferOrder(Bills bills) {
+		if (bills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills detail = baseMapper.selectById(bills.getId());
+		detail.setTransferOrderStatus("录入");
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateTime(new Date());
+		baseMapper.updateById(detail);
+		Bills billsJk = baseMapper.selectOne(new LambdaQueryWrapper<Bills>()
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.eq(Bills::getSrcBusId, detail.getId()));
+		if (billsJk == null) {
+			throw new RuntimeException("未找到进口单据");
+		}
+		this.removeItemList(billsJk.getId());
+		baseMapper.deleteById(billsJk.getId());
+		//主单应加上分单费用
+		if ("MM".equals(billsJk.getBillType())) {
+			List<Bills> details = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
+				.eq(Bills::getTenantId, AuthUtil.getTenantId())
+				.eq(Bills::getIsDeleted, 0)
+				.eq(Bills::getMasterId, billsJk.getId()));
+			if (!details.isEmpty()) {
+				for (Bills item : details) {
+					this.removeItemList(item.getId());
+				}
+				this.removeByIds(details.stream().map(Bills::getId).collect(Collectors.toList()));
+			}
+		}
 		return R.data(billsJk);
 	}
 
+	@Override
+	public R receive(Bills bills) {
+		if (bills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills detail = baseMapper.selectById(bills.getId());
+		if ("已接收".equals(detail.getReceiveStatus())) {
+			throw new RuntimeException("已接收,请勿重复提交");
+		}
+		detail.setReceiveStatus("已接收");
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateTime(new Date());
+		baseMapper.updateById(detail);
+		LocalDateTime now = LocalDateTime.now();
+		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+		String formatted = now.format(formatter);
+		//发送消息
+		if (ObjectUtils.isNotNull(bills.getShippingStaffId())) {
+			R<User> userR = userClient.userInfoById(bills.getShippingStaffId());
+			if (userR.isSuccess() && ObjectUtils.isNotNull(userR.getData())) {
+				User datum = userR.getData();
+				Message sendMessage = new Message();
+				sendMessage.setParameter(detail.getId() + "");
+				sendMessage.setUserName(AuthUtil.getUserName());
+				sendMessage.setUserId(null);
+				sendMessage.setToUserId(datum.getId());
+				sendMessage.setToUserName(datum.getName());
+				sendMessage.setMessageType(1);
+				sendMessage.setTenantId(AuthUtil.getTenantId());
+				sendMessage.setCreateUser(null);
+				sendMessage.setCreateTime(new Date());
+				sendMessage.setUrl("/iosBasicData/SeafreightExportF/bills/index");
+				sendMessage.setPageLabel("海运出口");
+				sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
+				sendMessage.setMessageBody("您有新的海运出口物流已提交,请及时待处理!提单号:" + detail.getMblno() + "时间:" + formatted);
+				R save = messageClient.save(sendMessage);
+				System.out.println("发送结果:" + save);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			} else {
+				throw new SecurityException("未查到船务员工用户信息");
+			}
+		} else {
+			throw new SecurityException("请选择接收船务员工");
+		}
+		return R.data(detail);
+	}
+
+	@Override
+	public R revokeReceive(Bills bills) {
+		if (bills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills detail = baseMapper.selectById(bills.getId());
+		if ("录入".equals(detail.getReceiveStatus())) {
+			throw new RuntimeException("已撤销接收,请勿重复撤销");
+		}
+		LocalDateTime now = LocalDateTime.now();
+		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+		String formatted = now.format(formatter);
+		//发送消息
+		if (ObjectUtils.isNotNull(detail.getShippingStaffId())) {
+			R<User> userR = userClient.userInfoById(detail.getShippingStaffId());
+			if (userR.isSuccess() && ObjectUtils.isNotNull(userR.getData())) {
+				User datum = userR.getData();
+				Message sendMessage = new Message();
+				sendMessage.setParameter(detail.getId() + "");
+				sendMessage.setUserName(AuthUtil.getUserName());
+				sendMessage.setUserId(null);
+				sendMessage.setToUserId(datum.getId());
+				sendMessage.setToUserName(datum.getName());
+				sendMessage.setMessageType(1);
+				sendMessage.setTenantId(AuthUtil.getTenantId());
+				sendMessage.setCreateUser(null);
+				sendMessage.setCreateTime(new Date());
+				sendMessage.setUrl("/iosBasicData/SeafreightExportF/bills/index");
+				sendMessage.setPageLabel("海运出口");
+				sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
+				sendMessage.setMessageBody("您的海运出口物流提交已撤销!提单号:" + detail.getMblno() + "时间:" + formatted);
+				R save = messageClient.save(sendMessage);
+				System.out.println("发送结果:" + save);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			} else {
+				throw new SecurityException("未查到船务员工用户信息");
+			}
+		} else {
+			throw new SecurityException("请选择接收船务员工");
+		}
+		detail.setReceiveStatus("录入");
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateTime(new Date());
+		baseMapper.updateById(detail);
+		return R.data(detail);
+	}
+
+	@Override
+	public R changeOrders(Bills bills) {
+		if (bills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills detail = baseMapper.selectById(bills.getId());
+		if ("已换单".equals(detail.getChangeOrdersStatus())) {
+			throw new RuntimeException("已换单,请勿重复提交");
+		}
+		detail.setChangeOrdersStatus("已换单");
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateTime(new Date());
+		detail.setChangeOrderDate(new Date());
+		baseMapper.updateById(detail);
+		return R.data(detail);
+	}
+
+	@Override
+	public R revokeChangeOrders(Bills bills) {
+		if (bills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills detail = baseMapper.selectById(bills.getId());
+		if ("录入".equals(detail.getChangeOrdersStatus())) {
+			throw new RuntimeException("已撤销换单,请勿重复撤销");
+		}
+		detail.setChangeOrdersStatus("录入");
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateTime(new Date());
+		detail.setChangeOrderDate(null);
+		baseMapper.updateById(detail);
+		return R.data(detail);
+	}
+
+	@Override
+	public R returningSecurityMoney(Bills bills) {
+		if (bills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills detail = baseMapper.selectById(bills.getId());
+		if ("已退押".equals(detail.getReturningSecurityMoneyStatus())) {
+			throw new RuntimeException("已退押,请勿重复提交");
+		}
+		detail.setReturningSecurityMoneyStatus("已退押");
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateTime(new Date());
+		baseMapper.updateById(detail);
+		return R.data(detail);
+	}
+
+	@Override
+	public R revokeReturningSecurityMoney(Bills bills) {
+		if (bills.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills detail = baseMapper.selectById(bills.getId());
+		if ("录入".equals(detail.getReturningSecurityMoneyStatus())) {
+			throw new RuntimeException("已撤销退押,请勿重复撤销");
+		}
+		detail.setReturningSecurityMoneyStatus("录入");
+		detail.setUpdateUser(AuthUtil.getUserId());
+		detail.setUpdateUserName(AuthUtil.getUserName());
+		detail.setUpdateTime(new Date());
+		baseMapper.updateById(detail);
+		return R.data(detail);
+	}
+
+	/**
+	 * 删除海运进出口明细表
+	 *
+	 * @param id 主表id
+	 */
+	private void removeItemList(Long id) {
+		SeaBillsDetail seaBillsDetail = seaBillsDetailService.getOne(new LambdaQueryWrapper<SeaBillsDetail>()
+			.eq(SeaBillsDetail::getTenantId, AuthUtil.getTenantId())
+			.eq(SeaBillsDetail::getPid, id));
+		if (seaBillsDetail != null) {
+			seaBillsDetailService.removeById(seaBillsDetail.getId());
+		}
+		List<PreContainers> preContainersList = preContainersService.list(new LambdaQueryWrapper<PreContainers>()
+			.eq(PreContainers::getTenantId, AuthUtil.getTenantId())
+			.eq(PreContainers::getIsDeleted, 0)
+			.eq(PreContainers::getPid, id));
+		if (!preContainersList.isEmpty()) {
+			preContainersService.removeByIds(preContainersList.stream().map(PreContainers::getId).collect(Collectors.toList()));
+		}
+		List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
+			.eq(Containers::getTenantId, AuthUtil.getTenantId())
+			.eq(Containers::getIsDeleted, 0)
+			.eq(Containers::getPid, id));
+		if (!containersList.isEmpty()) {
+			containersService.removeByIds(containersList.stream().map(Containers::getId).collect(Collectors.toList()));
+		}
+		List<ContainersCommodity> containersCommodityList = containersCommodityService.list(new LambdaQueryWrapper<ContainersCommodity>()
+			.eq(ContainersCommodity::getTenantId, AuthUtil.getTenantId())
+			.eq(ContainersCommodity::getIsDeleted, 0)
+			.eq(ContainersCommodity::getPpId, id));
+		if (!containersCommodityList.isEmpty()) {
+			containersCommodityService.removeByIds(containersCommodityList.stream().map(ContainersCommodity::getId).collect(Collectors.toList()));
+		}
+		List<ContainersBills> containersBillsList = containersBillsService.list(new LambdaQueryWrapper<ContainersBills>()
+			.eq(ContainersBills::getTenantId, AuthUtil.getTenantId())
+			.eq(ContainersBills::getIsDeleted, 0)
+			.eq(ContainersBills::getPpId, id));
+		if (!containersBillsList.isEmpty()) {
+			containersBillsService.removeByIds(containersBillsList.stream().map(ContainersBills::getId).collect(Collectors.toList()));
+		}
+		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0)
+			.eq(FeeCenter::getPid, id));
+		if (!feeCenterList.isEmpty()) {
+			for (FeeCenter item : feeCenterList) {
+				if (1 == item.getAccStatus()) {
+					throw new RuntimeException("费用:" + item.getFeeCnName() + "已生成账单");
+				}
+				if (item.getStlPid() != null) {
+					throw new RuntimeException("费用:" + item.getFeeCnName() + "已申请");
+				}
+			}
+			feeCenterService.removeByIds(feeCenterList.stream().map(FeeCenter::getId).collect(Collectors.toList()));
+		}
+
+		List<FilesCenter> filesList = filesCenterService.list(new LambdaQueryWrapper<FilesCenter>()
+			.eq(FilesCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FilesCenter::getIsDeleted, 0)
+			.eq(FilesCenter::getPid, id));
+		if (!filesList.isEmpty()) {
+			filesCenterService.removeByIds(filesList.stream().map(FilesCenter::getId).collect(Collectors.toList()));
+		}
+	}
+
 }