Browse Source

21号之前永发bug

纪新园 7 months ago
parent
commit
22df08e8ba
18 changed files with 591 additions and 143 deletions
  1. 88 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/box/excel/BoxFeeItemExcel.java
  2. 5 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  3. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/invoices/entity/FinInvoices.java
  4. 25 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/invoices/entity/FinInvoicesItems.java
  5. 18 4
      blade-service/blade-los/src/main/java/org/springblade/los/Util/CurrencyUtils.java
  6. 14 10
      blade-service/blade-los/src/main/java/org/springblade/los/basic/fees/service/impl/LosBFeesTemplateServiceImpl.java
  7. 19 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/RouteCostController.java
  8. 6 2
      blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxItemController.java
  9. 4 0
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/IRouteCostService.java
  10. 10 3
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/ExpenseApplicationServiceImpl.java
  11. 41 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/RouteCostServiceImpl.java
  12. 152 2
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxItemServiceImpl.java
  13. 4 1
      blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/TradingBoxServiceImpl.java
  14. 3 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java
  15. 101 97
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  16. 83 16
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/TemplateImportServiceImpl.java
  17. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/service/impl/FeeCenterServiceImpl.java
  18. 10 4
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

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

@@ -0,0 +1,88 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.box.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class BoxFeeItemExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 箱号
+	 */
+	@ExcelProperty(value = "箱号*")
+	private String code;
+	/**
+	 * 箱类型
+	 */
+	@ExcelProperty(value = "箱型*")
+	private String boxType;
+	/**
+	 * 箱好坏
+	 */
+	@ExcelProperty(value = "箱好坏*")
+	private String boxStatus;
+
+	/**
+	 * 箱况
+	 */
+	@ExcelProperty(value = "箱况(新/旧)*")
+	private String boxCondition;
+	/**
+	 * 金额
+	 */
+	@ExcelProperty(value = "金额*")
+	private BigDecimal amount;
+
+	/**
+	 * 币别
+	 */
+	@ExcelProperty(value = "币别*")
+	private String currency;
+
+	/**
+	 * 维修部位
+	 */
+	@ExcelProperty(value = "维修部位")
+	private String repairLocation;
+
+	/**
+	 * 限制港口
+	 */
+	@ExcelProperty(value = "限制港口")
+	private String restrictedPortsName;
+
+	/**
+	 * 限制船公司
+	 */
+	@ExcelProperty(value = "限制船公司")
+	private String restrictingShippingCompaniesName;
+
+
+}

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

@@ -1554,6 +1554,11 @@ public class Bills implements Serializable {
 	 */
 	@ApiModelProperty(value = "集港码头备注")
 	private String portTerminalCyRemarks;
+	/**
+	 * 收发货人
+	 */
+	@ApiModelProperty(value = "收发货人")
+	private String receivingAndShipping;
 
 	/**
 	 * 到港日期

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/invoices/entity/FinInvoices.java

@@ -663,6 +663,12 @@ public class FinInvoices implements Serializable {
 	private String feeEnName;
 
 	/**
+	 * 收/付
+	 */
+	@ApiModelProperty(value = "收/付")
+	private String dc;
+
+	/**
 	 * 业务员
 	 */
 	@TableField(exist = false)

+ 25 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/invoices/entity/FinInvoicesItems.java

@@ -571,5 +571,30 @@ public class FinInvoicesItems implements Serializable {
 	@ApiModelProperty(value = "是否生成发票")
 	private String generateInvoices;
 
+	/**
+	 * 付费申请金额
+	 */
+	@ApiModelProperty(value = "付费申请金额")
+	private BigDecimal appliedAmount;
+
+	/**
+	 * 发票申请金额
+	 */
+	@ApiModelProperty(value = "发票申请金额")
+	private BigDecimal appliedInvoiceAmount;
+
+	/**
+	 * 已开票金额
+	 */
+	@ApiModelProperty(value = "已开票金额")
+	private BigDecimal uninvoicedAmount;
+
+	/**
+	 * 已结算金额
+	 */
+	@ApiModelProperty(value = "已结算金额")
+	private BigDecimal stlTtlAmount;
+
+
 
 }

+ 18 - 4
blade-service/blade-los/src/main/java/org/springblade/los/Util/CurrencyUtils.java

@@ -127,10 +127,24 @@ public class CurrencyUtils {
 							.eq(BCurExrate::getType, bCurrency.getParitiesType());
 					}
 				}
-			}
-			//获取具体日期汇率
-			BCurExrate bCurExrate = bCurExrateService.getOne(lambdaQueryWrapper);
-			if (bCurExrate != null) {
+				//获取具体日期汇率
+				BCurExrate bCurExrate = bCurExrateService.getOne(lambdaQueryWrapper);
+				if (bCurExrate != null) {
+					curExrateList.add(bCurExrate);
+				}
+			} else {
+				BCurExrate bCurExrate = new BCurExrate();
+				bCurExrate.setCode(bCurrency.getCode());
+				bCurExrate.setCnName(bCurrency.getCode());
+				bCurExrate.setEnName(bCurrency.getCode());
+				bCurExrate.setExrateReceivable(new BigDecimal("1"));
+				bCurExrate.setExratePayable(new BigDecimal("1"));
+				bCurExrate.setExrateReceipts(new BigDecimal("1"));
+				bCurExrate.setExratePayment(new BigDecimal("1"));
+				bCurExrate.setExrateUsdReceivable(new BigDecimal("1"));
+				bCurExrate.setExrateUsdPayable(new BigDecimal("1"));
+				bCurExrate.setExrateUsdReceipts(new BigDecimal("1"));
+				bCurExrate.setExrateUsdPayment(new BigDecimal("1"));
 				curExrateList.add(bCurExrate);
 			}
 		}

+ 14 - 10
blade-service/blade-los/src/main/java/org/springblade/los/basic/fees/service/impl/LosBFeesTemplateServiceImpl.java

@@ -321,18 +321,22 @@ public class LosBFeesTemplateServiceImpl extends ServiceImpl<LosBFeesTemplateMap
 			if (!templateSonItemsList.isEmpty()) {
 				List<FeesTemplateSonItems> templateSonItems = templateSonItemsList.stream().filter(e -> e.getPpid().equals(item.getId()))
 					.collect(Collectors.toList());
+				List<FeesTemplateSonItems> templateSonItemsNew = new ArrayList<>();
 				for (FeesTemplateSonItems sonItems : templateSonItems) {
-					sonItems.setId(null);
-					sonItems.setPid(null);
-					sonItems.setPpid(null);
-					sonItems.setCreateTime(null);
-					sonItems.setCreateUserName(null);
-					sonItems.setCreateUser(null);
-					sonItems.setUpdateTime(null);
-					sonItems.setUpdateUser(null);
-					sonItems.setUpdateUserName(null);
+					FeesTemplateSonItems feesTemplateSonItems = new FeesTemplateSonItems();
+					BeanUtil.copyProperties(sonItems, feesTemplateSonItems);
+					feesTemplateSonItems.setId(null);
+					feesTemplateSonItems.setPid(null);
+					feesTemplateSonItems.setPpid(null);
+					feesTemplateSonItems.setCreateTime(null);
+					feesTemplateSonItems.setCreateUserName(null);
+					feesTemplateSonItems.setCreateUser(null);
+					feesTemplateSonItems.setUpdateTime(null);
+					feesTemplateSonItems.setUpdateUser(null);
+					feesTemplateSonItems.setUpdateUserName(null);
+					templateSonItemsNew.add(feesTemplateSonItems);
 				}
-				item.setSonItemsList(templateSonItems.isEmpty() ? new ArrayList<>() : templateSonItems);
+				item.setSonItemsList(templateSonItemsNew);
 			}
 			item.setId(null);
 			item.setPid(null);

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

@@ -339,7 +339,7 @@ public class RouteCostController extends BladeController {
 		LambdaQueryWrapper<RouteCost> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(RouteCost::getTenantId, AuthUtil.getTenantId())
 			.eq(RouteCost::getIsDeleted, 0)
-//			.eq(RouteCost::getStatus, "审核通过")
+			.eq(RouteCost::getStatus, "审核通过")
 			.eq(ObjectUtils.isNotNull(routeCost.getPodId()), RouteCost::getPodId, routeCost.getPodId())
 			.eq(ObjectUtils.isNotNull(routeCost.getDestinationId()), RouteCost::getDestinationId, routeCost.getDestinationId())
 			.eq(ObjectUtils.isNotNull(routeCost.getShippingCompanyId()), RouteCost::getActualShippingCompanyId, routeCost.getShippingCompanyId());
@@ -368,5 +368,23 @@ public class RouteCostController extends BladeController {
 		return R.data(list);
 	}
 
+	/**
+	 * 批量提交
+	 */
+	@GetMapping("/batchSubmission")
+	@RepeatSubmit
+	public R batchSubmission(@RequestParam("ids") String ids) {
+		return routeCostService.batchSubmission(ids);
+	}
+
+	/**
+	 * 批量撤销
+	 */
+	@GetMapping("/batchRevoke")
+	@RepeatSubmit
+	public R batchRevoke(@RequestParam("ids") String ids) {
+		return routeCostService.batchRevoke(ids);
+	}
+
 
 }

+ 6 - 2
blade-service/blade-los/src/main/java/org/springblade/los/box/controller/TradingBoxItemController.java

@@ -32,9 +32,11 @@ 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.Util.BoxNumUtils;
 import org.springblade.los.box.entity.TradingBox;
 import org.springblade.los.box.entity.TradingBoxItem;
 import org.springblade.los.box.excel.AgentBoxItemExcel;
+import org.springblade.los.box.excel.BoxFeeItemExcel;
 import org.springblade.los.box.excel.RentalBoxItemExcel;
 import org.springblade.los.box.excel.TradingBoxItemExcel;
 import org.springblade.los.box.service.ITradingBoxItemService;
@@ -118,6 +120,7 @@ public class TradingBoxItemController extends BladeController {
 	@ApiOperation(value = "新增或修改", notes = "传入tradingBoxItem")
 	@RepeatSubmit
 	public R submit(@Valid @RequestBody TradingBoxItem tradingBoxItem) {
+		BoxNumUtils.containerNumberVerification(tradingBoxItem.getCode());
 		TradingBox tradingBox;
 		if (ObjectUtils.isNotNull(tradingBoxItem.getPid())) {
 			tradingBox = tradingBoxService.getById(tradingBoxItem.getPid());
@@ -217,6 +220,7 @@ public class TradingBoxItemController extends BladeController {
 					item.setCode(item.getCode().trim());
 					item.setCode(item.getCode().toUpperCase());
 				}
+				BoxNumUtils.containerNumberVerification(item.getCode());
 				if ("BUY".equals(tradingBox.getType())) {
 					item.setOriginalBoxEastId(tradingBox.getPurchaseCompanyId());
 					item.setOriginalBoxEastName(tradingBox.getPurchaseCompanyName());
@@ -306,8 +310,8 @@ public class TradingBoxItemController extends BladeController {
 			List<RentalBoxItemExcel> list = new ArrayList<>();
 			ExcelUtil.export(response, "导入箱明细模板-租箱", "箱明细", list, RentalBoxItemExcel.class);
 		}else if ("4".equals(type)){
-			List<TradingBoxItemExcel> list = new ArrayList<>();
-			ExcelUtil.export(response, "导入箱明细模板-箱管费用", "箱明细", list, TradingBoxItemExcel.class);
+			List<BoxFeeItemExcel> list = new ArrayList<>();
+			ExcelUtil.export(response, "导入箱明细模板-箱管费用", "箱明细", list, BoxFeeItemExcel.class);
 		}
 	}
 

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

@@ -71,4 +71,8 @@ public interface IRouteCostService extends IService<RouteCost> {
 	R submitItemList(List<RouteCostItem> routeCostItemList);
 
 	R removeItemList(List<Long> longList);
+
+	R batchSubmission(String ids);
+
+	R batchRevoke(String ids);
 }

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

@@ -41,6 +41,7 @@ import org.springblade.los.check.service.IAuditPathsLevelsService;
 import org.springblade.los.check.service.IAuditProecessService;
 import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.service.IFeeCenterService;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -75,6 +76,8 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 
 	private final CurrencyUtils currencyUtils;
 
+	private final ISysClient sysClient;
+
 	@Override
 	public IPage<ExpenseApplicationVO> selectExpenseApplicationPage(IPage<ExpenseApplicationVO> page, ExpenseApplicationVO expenseApplication) {
 		return page.setRecords(baseMapper.selectExpenseApplicationPage(page, expenseApplication));
@@ -169,6 +172,10 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 			expenseApplication.setCorpCnName(tradingBox.getPurchaseCompanyName());
 			expenseApplication.setCorpEnName(tradingBox.getPurchaseCompanyName());
 			expenseApplication.setBranchId(AuthUtil.getDeptId());
+			R<String> res = sysClient.getDeptName(Long.parseLong(AuthUtil.getDeptId()));
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())){
+				expenseApplication.setBranchName(res.getData());
+			}
 		} else if ("HYJK,HYCK".contains(expenseApplication.getSrcType())) {
 			Bills bills = billsService.getById(expenseApplication.getSrcId());
 			if (bills == null) {
@@ -249,9 +256,9 @@ public class ExpenseApplicationServiceImpl extends ServiceImpl<ExpenseApplicatio
 			// 绑定审核类型
 			auditProecessDTO.setCheckType(checkType);
 			// 追加跳转路由url
-			auditProecessDTO.setUrl(expenseApplication.getUrl());
-			auditProecessDTO.setPageStatus(expenseApplication.getPageStatus());
-			auditProecessDTO.setPageLabel(expenseApplication.getPageLabel());
+			auditProecessDTO.setUrl("/iosBasicData/feeApplication/index");
+			auditProecessDTO.setPageStatus("this.$store.getters.feeApproval");
+			auditProecessDTO.setPageLabel("费用申请(F)");
 			auditProecessDTO.setOrderRemark(expenseApplication.getRemarks());
 			List<LosAuditPathsLevels> pathsLevelsList = expenseApplication.getAuditPathsLevels();
 			if (ObjectUtils.isNotNull(pathsLevelsList) && !pathsLevelsList.isEmpty()) {

+ 41 - 1
blade-service/blade-los/src/main/java/org/springblade/los/box/service/impl/RouteCostServiceImpl.java

@@ -24,7 +24,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
-import org.springblade.los.Util.IDeptUtils;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
 import org.springblade.los.billno.entity.BusinessBillNo;
@@ -747,6 +747,46 @@ public class RouteCostServiceImpl extends ServiceImpl<RouteCostMapper, RouteCost
 		return R.success("操作成功");
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R batchSubmission(String ids) {
+		if (ObjectUtils.isNull(ids)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		List<RouteCost> routeCostList = baseMapper.selectList(new LambdaQueryWrapper<RouteCost>()
+			.eq(RouteCost::getTenantId, AuthUtil.getTenantId())
+			.eq(RouteCost::getIsDeleted, 0)
+			.in(RouteCost::getId, Func.toLongList(ids)));
+		for (RouteCost item : routeCostList) {
+			item.setUpdateTime(new Date());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setStatus("审核通过");
+		}
+		this.updateBatchById(routeCostList);
+		return R.data("操作成功");
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R batchRevoke(String ids) {
+		if (ObjectUtils.isNull(ids)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		List<RouteCost> routeCostList = baseMapper.selectList(new LambdaQueryWrapper<RouteCost>()
+			.eq(RouteCost::getTenantId, AuthUtil.getTenantId())
+			.eq(RouteCost::getIsDeleted, 0)
+			.in(RouteCost::getId, Func.toLongList(ids)));
+		for (RouteCost item : routeCostList) {
+			item.setUpdateTime(new Date());
+			item.setUpdateUserName(AuthUtil.getUserName());
+			item.setUpdateUser(AuthUtil.getUserId());
+			item.setStatus("录入");
+		}
+		this.updateBatchById(routeCostList);
+		return R.data("操作成功");
+	}
+
 
 	/**
 	 * 合计费用成本

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

@@ -25,6 +25,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.los.Util.BoxNumUtils;
 import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.basic.cntr.entity.BCntrTypes;
 import org.springblade.los.basic.cntr.service.IBCntrTypesService;
@@ -36,6 +37,7 @@ import org.springblade.los.basic.ports.service.IBPortsService;
 import org.springblade.los.box.entity.TradingBox;
 import org.springblade.los.box.entity.TradingBoxItem;
 import org.springblade.los.box.excel.AgentBoxItemExcel;
+import org.springblade.los.box.excel.BoxFeeItemExcel;
 import org.springblade.los.box.excel.RentalBoxItemExcel;
 import org.springblade.los.box.excel.TradingBoxItemExcel;
 import org.springblade.los.box.mapper.TradingBoxItemMapper;
@@ -105,7 +107,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 		String stationName = "";
 		String cyCname = "";
 		List<TradingBoxItem> tradingBoxItemList = new ArrayList<>();
-		if ("1,4".contains(type)) {
+		if ("1".contains(type)) {
 			//导入数据
 			List<TradingBoxItemExcel> excelList = ExcelUtil.read(file, TradingBoxItemExcel.class);
 			if (CollectionUtils.isEmpty(excelList)) {
@@ -120,6 +122,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				if (ObjectUtils.isNull(item.getCode())) {
 					throw new RuntimeException("箱号不能为空");
 				}
+				BoxNumUtils.containerNumberVerification(item.getCode());
 				if (ObjectUtils.isNull(item.getBoxType())) {
 					throw new RuntimeException("箱型不能为空");
 				}
@@ -160,6 +163,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				if (ObjectUtils.isNull(item.getCode())) {
 					throw new RuntimeException("箱号不能为空");
 				}
+				BoxNumUtils.containerNumberVerification(item.getCode());
 				if (ObjectUtils.isNull(item.getBoxType())) {
 					throw new RuntimeException("箱型不能为空");
 				}
@@ -200,6 +204,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				if (ObjectUtils.isNull(item.getCode())) {
 					throw new RuntimeException("箱号不能为空");
 				}
+				BoxNumUtils.containerNumberVerification(item.getCode());
 				if (ObjectUtils.isNull(item.getBoxType())) {
 					throw new RuntimeException("箱型不能为空");
 				}
@@ -228,6 +233,47 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				.distinct().collect(Collectors.joining(","));
 			cyCname = excelList.stream().map(AgentBoxItemExcel::getStationCname).filter(Objects::nonNull)
 				.distinct().collect(Collectors.joining(","));
+		} else if ("4".contains(type)) {
+			//导入数据
+			List<BoxFeeItemExcel> excelList = ExcelUtil.read(file, BoxFeeItemExcel.class);
+			if (CollectionUtils.isEmpty(excelList)) {
+				throw new SecurityException("数据不能为空");
+			}
+			//箱号拼接字符串
+			codes = excelList.stream().map(BoxFeeItemExcel::getCode).distinct().collect(Collectors.toList());
+			if (excelList.size() != codes.size()) {
+				throw new RuntimeException("本单据明细存在重复箱号,操作失败!");
+			}
+			for (BoxFeeItemExcel item : excelList) {
+				if (ObjectUtils.isNull(item.getCode())) {
+					throw new RuntimeException("箱号不能为空");
+				}
+				BoxNumUtils.containerNumberVerification(item.getCode());
+				if (ObjectUtils.isNull(item.getBoxType())) {
+					throw new RuntimeException("箱型不能为空");
+				}
+				item.setBoxType(item.getBoxType().toUpperCase());
+				if (ObjectUtils.isNull(item.getBoxStatus())) {
+					throw new RuntimeException("箱好坏不能为空");
+				}
+				if (ObjectUtils.isNull(item.getBoxCondition())) {
+					throw new RuntimeException("箱况不能为空");
+				}
+				if (ObjectUtils.isNull(item.getCurrency())) {
+					throw new RuntimeException("币别不能为空");
+				}
+				if ("1".contains(type)) {
+					if (ObjectUtils.isNull(item.getAmount())) {
+						throw new RuntimeException("金额不能为空");
+					}
+				}
+			}
+			boxType = excelList.stream().map(BoxFeeItemExcel::getBoxType).filter(Objects::nonNull)
+				.distinct().collect(Collectors.toList());
+			portName = excelList.stream().map(BoxFeeItemExcel::getRestrictedPortsName).filter(Objects::nonNull)
+				.distinct().collect(Collectors.joining(","));
+			stationName = excelList.stream().map(BoxFeeItemExcel::getRestrictingShippingCompaniesName).filter(Objects::nonNull)
+				.distinct().collect(Collectors.joining(","));
 		}
 		List<TradingBoxItem> itemList = baseMapper.selectList(new LambdaQueryWrapper<TradingBoxItem>()
 			.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
@@ -263,7 +309,7 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 			.eq(BCorps::getTenantId, AuthUtil.getTenantId())
 			.eq(BCorps::getIsDeleted, 0)
 			.apply("find_in_set(cn_name,'" + stationName + "')"));
-		if ("1,4".contains(type)) {
+		if ("1".contains(type)) {
 			List<TradingBoxItemExcel> excelList = ExcelUtil.read(file, TradingBoxItemExcel.class);
 			for (TradingBoxItemExcel item : excelList) {
 				TradingBoxItem tradingBoxItem;
@@ -585,6 +631,110 @@ public class TradingBoxItemServiceImpl extends ServiceImpl<TradingBoxItemMapper,
 				tradingBoxItem.setPid(tradingBox.getId());
 				tradingBoxItemList.add(tradingBoxItem);
 			}
+		}else if ("4".contains(type)) {
+			List<BoxFeeItemExcel> excelList = ExcelUtil.read(file, BoxFeeItemExcel.class);
+			for (BoxFeeItemExcel item : excelList) {
+				TradingBoxItem tradingBoxItem;
+				if (!itemList.isEmpty()) {
+					tradingBoxItem = itemList.stream().filter(e -> e.getCode().equals(item.getCode())).findFirst().orElse(null);
+					if (tradingBoxItem == null) {
+						tradingBoxItem = new TradingBoxItem();
+					}
+				} else {
+					tradingBoxItem = new TradingBoxItem();
+				}
+				if (ObjectUtils.isNotNull(item.getCode())) {
+					tradingBoxItem.setCode(item.getCode().trim());
+					tradingBoxItem.setCode(item.getCode().toUpperCase());
+				}
+				if (!exrateType.equals(item.getCurrency())) {
+					tradingBoxItem.setCurrency(item.getCurrency());
+					tradingBoxItem.setExrate(exrateC);
+				} else {
+					tradingBoxItem.setCurrency(exrateType);
+					tradingBoxItem.setExrate(new BigDecimal("1"));
+				}
+				tradingBoxItem.setRepairLocation(item.getRepairLocation());
+				tradingBoxItem.setAmount(item.getAmount());
+				tradingBoxItem.setBoxCondition(item.getBoxCondition());
+				tradingBoxItem.setBoxStatus(item.getBoxStatus());
+				BCntrTypes bCntrTypes = cntrTypesList.stream().filter(e -> e.getCnName().equals(item.getBoxType())).findFirst().orElse(null);
+				if (bCntrTypes == null) {
+					throw new RuntimeException("箱型:" + item.getBoxType() + "不存在,请先维护基础资料");
+				}
+				tradingBoxItem.setBoxType(bCntrTypes.getCnName());
+				tradingBoxItem.setBoxTypeId(bCntrTypes.getId());
+				if (!portsList.isEmpty() && ObjectUtils.isNotNull(item.getRestrictedPortsName())) {
+					String[] arr = item.getRestrictedPortsName().split(",");
+					StringBuilder portsIds = new StringBuilder();
+					for (String name : arr) {
+						BPorts bPorts = portsList.stream().filter(e -> name.equals(e.getCnName())).findFirst().orElse(null);
+						if (bPorts == null) {
+							throw new RuntimeException("港口:" + name + "不存在,请先维护基础资料");
+						}
+						portsIds.append(bPorts.getId()).append(",");
+					}
+					if (ObjectUtils.isNotNull(portsIds.toString())) {
+						tradingBoxItem.setRestrictedPortsIds(portsIds.substring(0, portsIds.length() - 1));
+						tradingBoxItem.setRestrictedPortsName(item.getRestrictedPortsName());
+					}
+				}
+				if (!corpsList.isEmpty()) {
+					if (ObjectUtils.isNotNull(item.getRestrictingShippingCompaniesName())) {
+						String[] arr = item.getRestrictingShippingCompaniesName().split(",");
+						StringBuilder corpIds = new StringBuilder();
+						for (String name : arr) {
+							BCorps bCorps = corpsList.stream().filter(e -> name.equals(e.getCnName())).findFirst().orElse(null);
+							if (bCorps == null) {
+								throw new RuntimeException("船公司:" + name + "不存在,请先维护基础资料");
+							}
+							corpIds.append(bCorps.getId()).append(",");
+						}
+						if (ObjectUtils.isNotNull(corpIds.toString())) {
+							tradingBoxItem.setRestrictingShippingCompaniesIds(corpIds.substring(0, corpIds.length() - 1));
+							tradingBoxItem.setRestrictingShippingCompaniesName(item.getRestrictingShippingCompaniesName());
+						}
+					}
+					BCorps bCorps = corpsList.stream().filter(e -> "WFL".equals(e.getCode())).findFirst().orElse(null);
+					if (bCorps == null) {
+						throw new RuntimeException("箱东:WFL不存在,请先维护基础资料");
+					}
+					if ("BUY".equals(tradingBox.getType())) {
+						tradingBoxItem.setBoxEastId(bCorps.getId());
+						tradingBoxItem.setBoxEastName(bCorps.getCnName());
+						tradingBoxItem.setOriginalBoxEastId(tradingBox.getPurchaseCompanyId());
+						tradingBoxItem.setOriginalBoxEastName(tradingBox.getPurchaseCompanyName());
+					} else if ("DL".equals(tradingBox.getType())) {
+						tradingBoxItem.setBoxEastId(tradingBox.getPurchaseCompanyId());
+						tradingBoxItem.setBoxEastName(tradingBox.getPurchaseCompanyName());
+					} else if ("ZR".equals(tradingBox.getType())) {
+						tradingBoxItem.setBoxEastId(bCorps.getId());
+						tradingBoxItem.setBoxEastName(bCorps.getCnName());
+						tradingBoxItem.setOriginalBoxEastId(tradingBox.getPurchaseCompanyId());
+						tradingBoxItem.setOriginalBoxEastName(tradingBox.getPurchaseCompanyName());
+					}
+				}
+				if ("BUY".equals(tradingBox.getType())) {
+					tradingBoxItem.setBoxCategory("自有箱");
+				} else if ("DL".equals(tradingBox.getType())) {
+					tradingBoxItem.setBoxCategory("代理箱");
+				} else if ("ZR".equals(tradingBox.getType())) {
+					tradingBoxItem.setBoxCategory("自有箱");
+				} else {
+					tradingBoxItem.setBoxCategory("自有箱");
+				}
+				tradingBoxItem.setBoxBelongsTo("SOC");
+				tradingBoxItem.setStatus("待使用");
+				tradingBoxItem.setStationId(tradingBox.getStationId());
+				tradingBoxItem.setStationCname(tradingBox.getStationCname());
+				tradingBoxItem.setStationEname(tradingBox.getStationEname());
+				tradingBoxItem.setStationCode(tradingBox.getStationCode());
+				tradingBoxItem.setCreateUser(AuthUtil.getUserId());
+				tradingBoxItem.setCreateUserName(AuthUtil.getUserName());
+				tradingBoxItem.setCreateTime(new Date());
+				tradingBoxItem.setPid(tradingBox.getId());
+				tradingBoxItemList.add(tradingBoxItem);
+			}
 		}
 		if (!tradingBoxItemList.isEmpty()) {
 			this.saveOrUpdateBatch(tradingBoxItemList);

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

@@ -23,6 +23,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.los.Util.BoxNumUtils;
 import org.springblade.los.Util.CurrencyUtils;
 import org.springblade.los.basic.business.entity.BusinessType;
 import org.springblade.los.basic.business.service.IBusinessTypeService;
@@ -316,6 +317,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					item.setCode(item.getCode().trim());
 					item.setCode(item.getCode().toUpperCase());
 				}
+				BoxNumUtils.containerNumberVerification(item.getCode());
 				if ("BUY".equals(tradingBox.getType())) {
 					item.setOriginalBoxEastId(tradingBox.getPurchaseCompanyId());
 					item.setOriginalBoxEastName(tradingBox.getPurchaseCompanyName());
@@ -1628,6 +1630,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 						archives1.setStationCode(detail.getStationCode());
 						archives1.setStationCname(detail.getStationCname());
 						archives1.setStationEname(detail.getStationEname());
+						archives1.setContractNo(tradingBox.getContractNo());
 						if ("BUY".equals(tradingBox.getType())) {
 							archives1.setContainerNumberType("自有箱");
 						} else if ("SELL".equals(tradingBox.getType())) {
@@ -2188,7 +2191,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 			int dayLength;
 			BigDecimal amount = new BigDecimal("0.00");
 			for (RentTerm term : rentTermList) {
-				dayLength = term.getStopDays() - term.getRiseDays() + 1;
+				dayLength = term.getStopDays() - term.getRiseDays()+1;
 				if (earlySumDays >= dayLength) {
 					earlySumDays -= dayLength;
 					continue;

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

@@ -89,6 +89,8 @@ public class BillsController extends BladeController {
 		LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(Bills::getIsDeleted, 0)
 			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(ObjectUtils.isNotNull(bills.getTransferOrderStatus()), Bills::getTransferOrderStatus, bills.getTransferOrderStatus())
+			.eq(ObjectUtils.isNotNull(bills.getLogisticsStatus()), Bills::getLogisticsStatus, bills.getLogisticsStatus())
 			.like(ObjectUtils.isNotNull(bills.getBillNo()), Bills::getBillNo, bills.getBillNo())
 			.like(ObjectUtils.isNotNull(bills.getMblno()), Bills::getMblno, bills.getMblno())
 			.like(ObjectUtils.isNotNull(bills.getHblno()), Bills::getHblno, bills.getHblno())
@@ -98,6 +100,7 @@ public class BillsController extends BladeController {
 			.and(ObjectUtils.isNotNull(bills.getVesselCnName()), i -> i.like(Bills::getVesselCnName, bills.getVesselCnName()).or()
 				.like(Bills::getVesselEnName, bills.getVesselCnName()))
 			.like(ObjectUtils.isNotNull(bills.getVoyageNo()), Bills::getVoyageNo, bills.getVoyageNo())
+			.like(ObjectUtils.isNotNull(bills.getReceivingAndShipping()), Bills::getReceivingAndShipping, bills.getReceivingAndShipping())
 			.and(ObjectUtils.isNotNull(bills.getCorpCnName()), i -> i.like(Bills::getCorpCnName, bills.getCorpCnName()).or()
 				.like(Bills::getCorpEnName, bills.getCorpCnName()))
 			.and(ObjectUtils.isNotNull(bills.getCorpAttnName()), i -> i.like(Bills::getCorpAttnName, bills.getCorpAttnName()).or()

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

@@ -550,12 +550,12 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			//主单信息同步分单
 			List<Bills> details = this.synchronous(bills);
 			if (!details.isEmpty()) {
-				amountDr = amountDr.add(details.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				/*amountDr = amountDr.add(details.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountCr = amountCr.add(details.stream().map(Bills::getAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountDrUsd = amountDrUsd.add(details.stream().map(Bills::getAmountDrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountCrUsd = amountCrUsd.add(details.stream().map(Bills::getAmountCrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountDrLoc = amountDrLoc.add(details.stream().map(Bills::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-				amountCrLoc = amountCrLoc.add(details.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				amountCrLoc = amountCrLoc.add(details.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));*/
 				quantity = quantity.add(details.stream().map(Bills::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				grossWeight = grossWeight.add(details.stream().map(Bills::getGrossWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				measurement = measurement.add(details.stream().map(Bills::getMeasurement).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -569,7 +569,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			//重新计算主单合计
 			if (details != null) {
 				String exrateType = currencyUtils.standardCurrency(branchId);
-				BigDecimal amountDrM = new BigDecimal("0.00");
+				/*BigDecimal amountDrM = new BigDecimal("0.00");
 				BigDecimal amountCrM = new BigDecimal("0.00");
 				BigDecimal amountProfitM;
 				BigDecimal amountDrUsdM = new BigDecimal("0.00");
@@ -577,11 +577,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				BigDecimal amountProfitUsdM;
 				BigDecimal amountDrLocM = new BigDecimal("0.00");
 				BigDecimal amountCrLocM = new BigDecimal("0.00");
-				BigDecimal amountProfitLocM;
+				BigDecimal amountProfitLocM;*/
 				BigDecimal quantityM = bills.getQuantity();
 				BigDecimal grossWeightM = bills.getGrossWeight();
 				BigDecimal measurementM = bills.getMeasurement();
-				List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			/*	List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 					.select(FeeCenter::getCurCode, FeeCenter::getAmount, FeeCenter::getDc)
 					.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 					.eq(FeeCenter::getIsDeleted, 0)
@@ -604,23 +604,23 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 							amountDrLocM = amountDrLocM.add(item.getAmount().multiply(item.getExrate()));
 						}
 					}
-				}
+				}*/
 				List<Bills> billsList = this.synchronous(details);
 				if (!billsList.isEmpty()) {
 					List<Bills> billsLists = billsList.stream().filter(e -> !e.getId().equals(bills.getId())).collect(Collectors.toList());
 					if (!billsLists.isEmpty()) {
-						amountDrM = amountDrM.add(billsLists.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						/*amountDrM = amountDrM.add(billsLists.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						amountCrM = amountCrM.add(billsLists.stream().map(Bills::getAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						amountDrUsdM = amountDrUsdM.add(billsLists.stream().map(Bills::getAmountDrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						amountCrUsdM = amountCrUsdM.add(billsLists.stream().map(Bills::getAmountCrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						amountDrLocM = amountDrLocM.add(billsLists.stream().map(Bills::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-						amountCrLocM = amountCrLocM.add(billsLists.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+						amountCrLocM = amountCrLocM.add(billsLists.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));*/
 						quantityM = quantityM.add(billsLists.stream().map(Bills::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						grossWeightM = grossWeightM.add(billsLists.stream().map(Bills::getGrossWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 						measurementM = measurementM.add(billsLists.stream().map(Bills::getMeasurement).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 					}
 				}
-				amountDrM = amountDrM.add(amountDr);
+				/*amountDrM = amountDrM.add(amountDr);
 				amountCrM = amountCrM.add(amountCr);
 				amountDrUsdM = amountDrUsdM.add(amountDrUsd);
 				amountCrUsdM = amountCrUsdM.add(amountCrUsd);
@@ -638,7 +638,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				details.setAmountProfitUsd(amountProfitUsdM);
 				details.setAmountDrLoc(amountDrLocM);
 				details.setAmountCrLoc(amountCrLocM);
-				details.setAmountProfitLoc(amountProfitLocM);
+				details.setAmountProfitLoc(amountProfitLocM);*/
 				details.setQuantity(quantityM);
 				details.setGrossWeight(grossWeightM);
 				details.setMeasurement(measurementM);
@@ -679,6 +679,17 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				seaBillsDetail.setCreateTime(new Date());
 			}
 			seaBillsDetailService.saveOrUpdate(seaBillsDetail);
+			String text = "";
+			if (ObjectUtils.isNotNull(seaBillsDetail.getHconsigneeDetails())) {
+				text = text + seaBillsDetail.getHconsigneeDetails() + ";";
+			}
+			if (ObjectUtils.isNotNull(seaBillsDetail.getHnotifyDetails())) {
+				text = text + seaBillsDetail.getHnotifyDetails() + ";";
+			}
+			if (ObjectUtils.isNotNull(seaBillsDetail.getHshipperDetails())) {
+				text = text + seaBillsDetail.getHshipperDetails() + ";";
+			}
+			bills.setReceivingAndShipping(text);
 		}
 		if (ObjectUtils.isNotNull(bills.getHmmEdi())) {
 			if (bills.getHmmEdi().getId() != null) {
@@ -1026,7 +1037,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			.eq(FeeCenter::getDc, "D")
 			.eq(FeeCenter::getBillNo, detail.getBillNo())
 		));
-		List<Amends> amendsList = amendsMapper.selectList(new LambdaQueryWrapper<Amends>()
+		/*List<Amends> amendsList = amendsMapper.selectList(new LambdaQueryWrapper<Amends>()
 			.eq(Amends::getTenantId, AuthUtil.getTenantId())
 			.eq(Amends::getIsDeleted, 0)
 			.eq(Amends::getStatus, 3)
@@ -1081,7 +1092,8 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		detail.setAmountProfitUsdAmend(amountProfitUsd);
 		detail.setAmountDrLocAmend(amountDrLoc);
 		detail.setAmountCrLocAmend(amountCrLoc);
-		detail.setAmountProfitLocAmend(amountProfitLoc);
+		detail.setAmountProfitLocAmend(amountProfitLoc);*/
+		detail.setFeeCenterAmendList(new ArrayList<>());
 		return detail;
 	}
 
@@ -1156,6 +1168,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				.eq(Bills::getIsDeleted, 0)
 				.in(Bills::getId, idArr));
 			for (Bills item : billsList) {
+				if (!item.getQuantity().equals(item.getCfsQuantity())) {
+					throw new RuntimeException("分单号:" + item.getBillNo() + "请先配箱后再操作");
+				}
 				if (ObjectUtils.isNotNull(item.getMasterId()) && item.getMasterId() != 0) {
 					throw new RuntimeException("分单号:" + item.getBillNo() + "已添加主单,请勿重复添加");
 				}
@@ -1202,7 +1217,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setUpdateUserName(AuthUtil.getUserName());
 			}
 			this.updateBatchById(billsList);
-			BigDecimal amountDr = bills.getAmountDr();
+			/*BigDecimal amountDr = bills.getAmountDr();
 			BigDecimal amountCr = bills.getAmountCr();
 			BigDecimal amountProfit = bills.getAmountProfit();
 			BigDecimal amountDrUsd = bills.getAmountDrUsd();
@@ -1210,7 +1225,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			BigDecimal amountProfitUsd = bills.getAmountProfitUsd();
 			BigDecimal amountDrLoc = bills.getAmountDrLoc();
 			BigDecimal amountCrLoc = bills.getAmountCrLoc();
-			BigDecimal amountProfitLoc = bills.getAmountProfitLoc();
+			BigDecimal amountProfitLoc = bills.getAmountProfitLoc();*/
 			BigDecimal grossWeight = bills.getGrossWeight();
 			BigDecimal quantity = bills.getQuantity();
 			BigDecimal measurement = bills.getMeasurement();
@@ -1218,7 +1233,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			String marks = "";
 			String commodityDescr = "";
 			if (!billsList.isEmpty()) {
-				amountDr = amountDr.add(billsList.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				/*amountDr = amountDr.add(billsList.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountCr = amountCr.add(billsList.stream().map(Bills::getAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountProfit = amountProfit.add(billsList.stream().map(Bills::getAmountProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountDrUsd = amountDrUsd.add(billsList.stream().map(Bills::getAmountDrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -1226,7 +1241,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				amountProfitUsd = amountProfitUsd.add(billsList.stream().map(Bills::getAmountProfitUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountDrLoc = amountDrLoc.add(billsList.stream().map(Bills::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountCrLoc = amountCrLoc.add(billsList.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-				amountProfitLoc = amountProfitLoc.add(billsList.stream().map(Bills::getAmountProfitLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				amountProfitLoc = amountProfitLoc.add(billsList.stream().map(Bills::getAmountProfitLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));*/
 				teuTotal = teuTotal + billsList.stream().map(Bills::getTeu).filter(Objects::nonNull).reduce(0, Integer::sum);
 				grossWeight = grossWeight.add(billsList.stream().map(Bills::getGrossWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				quantity = quantity.add(billsList.stream().map(Bills::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -1236,7 +1251,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				this.itemCopy(bills, billsList);
 			}
 			bills.setTeuTotal(teuTotal);
-			bills.setAmountDr(amountDr);
+			/*bills.setAmountDr(amountDr);
 			bills.setAmountCr(amountCr);
 			bills.setAmountProfit(amountProfit);
 			bills.setAmountDrUsd(amountDrUsd);
@@ -1244,7 +1259,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			bills.setAmountProfitUsd(amountProfitUsd);
 			bills.setAmountDrLoc(amountDrLoc);
 			bills.setAmountCrLoc(amountCrLoc);
-			bills.setAmountProfitLoc(amountProfitLoc);
+			bills.setAmountProfitLoc(amountProfitLoc);*/
 			bills.setGrossWeight(grossWeight);
 			bills.setQuantity(quantity);
 			bills.setMeasurement(measurement);
@@ -1362,7 +1377,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setUpdateUserName(AuthUtil.getUserName());
 			}
 			this.updateBatchById(billsList);
-			BigDecimal amountDr = bills.getAmountDr();
+		/*	BigDecimal amountDr = bills.getAmountDr();
 			BigDecimal amountCr = bills.getAmountCr();
 			BigDecimal amountProfit = bills.getAmountProfit();
 			BigDecimal amountDrUsd = bills.getAmountDrUsd();
@@ -1370,13 +1385,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			BigDecimal amountProfitUsd = bills.getAmountProfitUsd();
 			BigDecimal amountDrLoc = bills.getAmountDrLoc();
 			BigDecimal amountCrLoc = bills.getAmountCrLoc();
-			BigDecimal amountProfitLoc = bills.getAmountProfitLoc();
+			BigDecimal amountProfitLoc = bills.getAmountProfitLoc();*/
 			BigDecimal grossWeight = bills.getGrossWeight();
 			BigDecimal quantity = bills.getQuantity();
 			BigDecimal measurement = bills.getMeasurement();
 			Integer teuTotal = bills.getTeuTotal();
 			if (!billsList.isEmpty()) {
-				amountDr = amountDr.subtract(billsList.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				/*amountDr = amountDr.subtract(billsList.stream().map(Bills::getAmountDr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountCr = amountCr.subtract(billsList.stream().map(Bills::getAmountCr).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountProfit = amountProfit.subtract(billsList.stream().map(Bills::getAmountProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountDrUsd = amountDrUsd.subtract(billsList.stream().map(Bills::getAmountDrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -1384,8 +1399,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				amountProfitUsd = amountProfitUsd.subtract(billsList.stream().map(Bills::getAmountProfitUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountDrLoc = amountDrLoc.subtract(billsList.stream().map(Bills::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				amountCrLoc = amountCrLoc.subtract(billsList.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-				amountProfitLoc = amountProfitLoc.subtract(billsList.stream().map(Bills::getAmountProfitLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-				amountProfitLoc = amountProfitLoc.subtract(billsList.stream().map(Bills::getAmountProfitLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				amountProfitLoc = amountProfitLoc.subtract(billsList.stream().map(Bills::getAmountProfitLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));*/
 				teuTotal = teuTotal - billsList.stream().map(Bills::getTeu).filter(Objects::nonNull).reduce(0, Integer::sum);
 				grossWeight = grossWeight.subtract(billsList.stream().map(Bills::getGrossWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				quantity = quantity.subtract(billsList.stream().map(Bills::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
@@ -1408,14 +1422,18 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				}
 			} else {
 				if (ObjectUtils.isNotNull(bills.getMarks())) {
-					bills.setMarks(bills.getMarks().substring(0, bills.getMarks().indexOf("&|&")));
+					if (bills.getMarks().indexOf("&|&") > 0) {
+						bills.setMarks(bills.getMarks().substring(0, bills.getMarks().indexOf("&|&")));
+					}
 				}
 				if (ObjectUtils.isNotNull(bills.getCommodityDescr())) {
-					bills.setCommodityDescr(bills.getCommodityDescr().substring(0, bills.getCommodityDescr().indexOf("&|&")));
+					if (bills.getCommodityDescr().indexOf("&|&") > 0) {
+						bills.setCommodityDescr(bills.getCommodityDescr().substring(0, bills.getCommodityDescr().indexOf("&|&")));
+					}
 				}
 			}
 			bills.setTeuTotal(teuTotal);
-			bills.setAmountDr(amountDr);
+			/*bills.setAmountDr(amountDr);
 			bills.setAmountCr(amountCr);
 			bills.setAmountProfit(amountProfit);
 			bills.setAmountDrUsd(amountDrUsd);
@@ -1423,7 +1441,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			bills.setAmountProfitUsd(amountProfitUsd);
 			bills.setAmountDrLoc(amountDrLoc);
 			bills.setAmountCrLoc(amountCrLoc);
-			bills.setAmountProfitLoc(amountProfitLoc);
+			bills.setAmountProfitLoc(amountProfitLoc);*/
 			bills.setGrossWeight(grossWeight);
 			bills.setQuantity(quantity);
 			bills.setMeasurement(measurement);
@@ -2780,6 +2798,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			throw new RuntimeException("生成订单编号失败");
 		}
 		billsJk.setBillNo((String) clientBillNo.getData());
+		if ("MM".equals(billsJk.getBillType())) {
+			billsJk.setMasterBillNo(billsJk.getBillNo());
+		}
 		billsJk.setCreateTime(new Date());
 		billsJk.setCreateUser(AuthUtil.getUserId());
 		billsJk.setCreateUserName(AuthUtil.getUserName());
@@ -2792,17 +2813,24 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		}
 		// 初始创建为1
 		billsJk.setVersion("1");
+		billsJk.setAmountCr(new BigDecimal("0.00"));
+		billsJk.setAmountDr(new BigDecimal("0.00"));
+		billsJk.setAmountProfit(new BigDecimal("0.00"));
+		billsJk.setAmountCrUsd(new BigDecimal("0.00"));
+		billsJk.setAmountDrUsd(new BigDecimal("0.00"));
+		billsJk.setAmountProfitUsd(new BigDecimal("0.00"));
+		billsJk.setAmountCrLoc(new BigDecimal("0.00"));
+		billsJk.setAmountDrLoc(new BigDecimal("0.00"));
+		billsJk.setAmountProfitLoc(new BigDecimal("0.00"));
 		baseMapper.insert(billsJk);
 		Bills billsJkNew = this.addItemList(billsJk);
 
-		BigDecimal amountCr = new BigDecimal("0.00");
+		/*BigDecimal amountCr = new BigDecimal("0.00");
 		BigDecimal amountProfit;
 		BigDecimal amountCrUsd = new BigDecimal("0.00");
 		BigDecimal amountProfitUsd;
 		BigDecimal amountCrLoc = new BigDecimal("0.00");
-		BigDecimal amountProfitLoc;
-
-		Date date = new Date();
+		BigDecimal amountProfitLoc;*/
 		//主单应加上分单费用
 		if ("MM".equals(billsJkNew.getBillType()) && ObjectUtils.isNotNull(billsJkNew.getId())) {
 			List<Bills> details = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
@@ -2843,7 +2871,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					item.setApprovedDate(null);
 					item.setIssueStatus(null);
 					item.setMasterId(billsJkNew.getId());
-					item.setMasterBillNo(billsJkNew.getBillNo());
+					item.setMasterBillNo(billsJkNew.getMasterBillNo());
 					item.setBusinessType("SI");
 					item.setSeaType("I");
 					BusinessBillNo businessBillNo1 = new BusinessBillNo();
@@ -2866,17 +2894,27 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 					}
 					// 初始创建为1
 					item.setVersion("1");
+					item.setAmountCr(new BigDecimal("0.00"));
+					item.setAmountDr(new BigDecimal("0.00"));
+					item.setAmountProfit(new BigDecimal("0.00"));
+					item.setAmountCrUsd(new BigDecimal("0.00"));
+					item.setAmountDrUsd(new BigDecimal("0.00"));
+					item.setAmountProfitUsd(new BigDecimal("0.00"));
+					item.setAmountCrLoc(new BigDecimal("0.00"));
+					item.setAmountDrLoc(new BigDecimal("0.00"));
+					item.setAmountProfitLoc(new BigDecimal("0.00"));
 					baseMapper.insert(item);
 					Bills itemNew = this.addItemList(item);
+					baseMapper.updateById(itemNew);
 					billsList.add(itemNew);
 				}
-				amountCr = amountCr.add(billsList.stream().map(Bills::getAmountCr).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));
+				amountCrLoc = amountCrLoc.add(billsList.stream().map(Bills::getAmountCrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));*/
 			}
 		}
 		//利润 = 收 - 付
-		amountProfit = new BigDecimal("0.00").subtract(amountCr);
+		/*amountProfit = new BigDecimal("0.00").subtract(amountCr);
 		amountProfitUsd = new BigDecimal("0.00").subtract(amountCrUsd);
 		amountProfitLoc = new BigDecimal("0.00").subtract(amountCrLoc);
 		billsJkNew.setAmountCr(billsJkNew.getAmountCr().add(amountCr));
@@ -2884,7 +2922,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		billsJkNew.setAmountCrUsd(billsJkNew.getAmountCrUsd().add(amountCrUsd));
 		billsJkNew.setAmountProfitUsd(billsJkNew.getAmountProfitUsd().add(amountProfitUsd));
 		billsJkNew.setAmountCrLoc(billsJkNew.getAmountCrLoc().add(amountCrLoc));
-		billsJkNew.setAmountProfitLoc(billsJkNew.getAmountProfitLoc().add(amountProfitLoc));
+		billsJkNew.setAmountProfitLoc(billsJkNew.getAmountProfitLoc().add(amountProfitLoc));*/
 		this.updateById(billsJkNew);
 		LocalDateTime now = LocalDateTime.now();
 		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -3120,12 +3158,15 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		} 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));
+		amountProfit = new BigDecimal("0.00").subtract(amountCr);
+		amountProfitUsd = new BigDecimal("0.00").subtract(amountCrUsd);
+		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);
 		return billsJk;
 	}
 
@@ -3135,6 +3176,9 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 			throw new RuntimeException("缺少必要参数");
 		}
 		Bills detail = baseMapper.selectById(bills.getId());
+		if ("已接收".equals(detail.getReceiveStatus())) {
+			throw new RuntimeException("已接收,撤销转单失败");
+		}
 		detail.setTransferOrderStatus("录入");
 		detail.setUpdateUser(AuthUtil.getUserId());
 		detail.setUpdateUserName(AuthUtil.getUserName());
@@ -3208,33 +3252,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		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(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/OceanFreightImport/bills/index");
-				sendMessage.setPageLabel("海运进口");
-				sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
-				sendMessage.setMessageBody("您有新的海运进口已接收,请及时待处理!提单号:" + detail.getMblno() + "时间:" + formatted);
-				R save = messageClient.save(sendMessage);
-				if (!save.isSuccess()) {
-					throw new SecurityException("发送消息失败");
-				}
-			}
+		Bills bills1 = baseMapper.selectById(bills.getSrcBusId());
+		if (bills1 != null) {
+			bills1.setReceiveStatus("已接收");
+			bills1.setUpdateUser(AuthUtil.getUserId());
+			bills1.setUpdateUserName(AuthUtil.getUserName());
+			bills1.setUpdateTime(new Date());
+			baseMapper.updateById(bills1);
 		}
 		return R.data(detail);
 	}
@@ -3249,39 +3273,19 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		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/OceanFreightImport/bills/index");
-				sendMessage.setPageLabel("海运进口");
-				sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
-				sendMessage.setMessageBody("您的海运进口已撤销接收!时间:" + formatted);
-				R save = messageClient.save(sendMessage);
-				if (!save.isSuccess()) {
-					throw new SecurityException("发送消息失败");
-				}
-			}
-		}
 		detail.setReceiveStatus("录入");
 		detail.setUpdateUser(AuthUtil.getUserId());
 		detail.setUpdateUserName(AuthUtil.getUserName());
 		detail.setUpdateTime(new Date());
 		baseMapper.updateById(detail);
+		Bills bills1 = baseMapper.selectById(bills.getSrcBusId());
+		if (bills1 != null) {
+			bills1.setReceiveStatus("录入");
+			bills1.setUpdateUser(AuthUtil.getUserId());
+			bills1.setUpdateUserName(AuthUtil.getUserName());
+			bills1.setUpdateTime(new Date());
+			baseMapper.updateById(bills1);
+		}
 		return R.data(detail);
 	}
 

+ 83 - 16
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/TemplateImportServiceImpl.java

@@ -6,6 +6,8 @@ import lombok.AllArgsConstructor;
 import org.apache.poi.ss.usermodel.*;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.los.Util.BigDecimalUtils;
+import org.springblade.los.Util.BoxNumUtils;
 import org.springblade.los.basic.packages.entity.BPackages;
 import org.springblade.los.basic.packages.service.IBPackagesService;
 import org.springblade.los.basic.ports.entity.BPorts;
@@ -16,6 +18,7 @@ import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.entity.Containers;
 import org.springblade.los.business.sea.entity.SeaBillsDetail;
 import org.springblade.los.business.sea.service.IBillsService;
+import org.springblade.los.business.sea.service.IContainersService;
 import org.springblade.los.business.sea.service.ITemplateImportService;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -28,12 +31,7 @@ import java.math.RoundingMode;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.*;
 
 /**
  * @author :jixinyuan
@@ -50,6 +48,8 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 
 	private final IBillsService billsService;
 
+	private final IContainersService containersService;
+
 	public static double splitNumericPrefixFromString(String str) {
 		str = str.replace(" ", "").trim();
 		String str2 = "", str3 = "";
@@ -1306,7 +1306,6 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 		Workbook workbook = null;
 		Sheet sheet = null;
 		String errMsg = "";
-
 		try {
 			workbook = WorkbookFactory.create(fis);
 			sheet = workbook.getSheetAt(0); // 获取第一个工作表
@@ -1315,20 +1314,14 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 			sheet = null;
 			errMsg = e.getMessage();
 		}
-
 		if (ObjectUtils.isNull(workbook) || ObjectUtils.isNull(sheet)) {
 			throw new RuntimeException("文件读取失败,该文件可能不是 Excel 文件!" + errMsg);
 		}
-
-		String stringCellValue = "";
-
 		int firstRow = sheet.getFirstRowNum();
 		int lastRow = sheet.getLastRowNum();
 		if (firstRow <= 0 && lastRow < 0) {
 			throw new RuntimeException("文件内容为空!");
 		}
-
-		StringBuilder sbLines = new StringBuilder();
 		//发货人提单描述
 		String hshipper = getSheetCellValueAsString(sheet, 1, 0);
 		if (ObjectUtils.isNotNull(hshipper)) {
@@ -1472,7 +1465,83 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 				bills.setHpaymode("CC");
 			}
 		}
-		bills.setContainersList(new ArrayList<>());
+		List<Containers> containersList = new ArrayList<>();
+		BigDecimal sumQty = new BigDecimal(0L);
+		BigDecimal sumGw = new BigDecimal(0L);
+		BigDecimal sumVol = BigDecimal.ZERO;
+		int rowIndex = 0;
+		int cellIndex = 0;
+		//定位箱号位置
+		for (Row row : sheet) {
+			for (Cell cell : row) {
+				String data = getSheetCellValueAsString(sheet, cell.getRowIndex(), cell.getColumnIndex());
+				if ("箱号".equals(data)) {
+					rowIndex = cell.getRowIndex();
+					cellIndex = cell.getColumnIndex();
+				}
+			}
+		}
+		for (int r = rowIndex + 1; r <= lastRow; r++) {
+			Containers containers = new Containers();
+			containers.setId(null);
+			containers.setPid(bills.getId());
+			containers.setBranchId(bills.getBranchId());
+			containers.setBillNo(bills.getBillNo());
+			containers.setCreateUser(bills.getCreateUser());
+			containers.setCreateUserName(bills.getCreateUserName());
+			containers.setTenantId(bills.getTenantId());
+			containers.setBillNo(bills.getBillNo());
+			containers.setPolId(bills.getPolId());
+			containers.setPolCode(bills.getPolCode());
+			containers.setPolCnName(bills.getPolCnName());
+			containers.setPolEnName(bills.getPolEnName());
+			containers.setPodId(bills.getPodId());
+			containers.setPodCode(bills.getPodCode());
+			containers.setPodCnName(bills.getPodCnName());
+			containers.setPodEnName(bills.getPodEnName());
+			containers.setMblno(bills.getMblno());
+			containers.setHblno(bills.getHblno());
+			containers.setHscode(bills.getHscode());
+			containers.setCommodityShName(bills.getCommodityShName());
+			containers.setCommodityCnName(bills.getCommodityCnName());
+			containers.setCommodityEnName(bills.getCommodityEnName());
+			containers.setCommodityDescr(bills.getCommodityDescr());
+			containers.setMarks(bills.getMarks());
+			containers.setPackingUnitId(bills.getPackingUnitId());
+			containers.setPackingUnit(bills.getPackingUnit());
+			if (ObjectUtils.isNotNull(getSheetCellValueAsString(sheet, r, cellIndex)) &&
+				ObjectUtils.isNotNull(getSheetCellValueAsString(sheet, r, cellIndex + 2))) {
+				BoxNumUtils.containerNumberVerification(getSheetCellValueAsString(sheet, r, cellIndex));
+				containers.setCntrNo(getSheetCellValueAsString(sheet, r, cellIndex));
+				containers.setSealNo(getSheetCellValueAsString(sheet, r, cellIndex + 1));
+				containers.setCntrTypeCode(getSheetCellValueAsString(sheet, r, cellIndex + 2));
+				double tare = getSheetCellValueAsDouble(sheet, r, cellIndex + 3);
+				containers.setTare(BigDecimal.valueOf(tare));
+				double vgmWeight = getSheetCellValueAsDouble(sheet, r, cellIndex + 4);
+				containers.setVgmWeight(BigDecimal.valueOf(vgmWeight));
+				double q1 = getSheetCellValueAsDouble(sheet, r, cellIndex + 5);
+				containers.setQuantity(BigDecimal.valueOf(q1));
+				sumQty = sumQty.add(new BigDecimal(q1));
+				double w1 = getSheetCellValueAsDouble(sheet, r, cellIndex + 6);
+				containers.setGrossWeight(BigDecimal.valueOf(w1));
+				sumGw = sumGw.add(new BigDecimal(w1));
+				double v1 = getSheetCellValueAsDouble(sheet, r, cellIndex + 7);
+				containers.setMeasurement(BigDecimal.valueOf(v1));
+				sumVol = sumVol.add(new BigDecimal(v1));
+				containersList.add(containers);
+			}
+		}
+		if (!containersList.isEmpty()) {
+			bills.setQuantity(containersList.stream().map(Containers::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP));
+			bills.setQuantityPackingDescr("SAY " + BigDecimalUtils.convertToEnglish(bills.getQuantity()) + " " + bills.getPackingUnit() + " ONLY.");
+			bills.setCfsQuantity(bills.getQuantity());
+			bills.setGrossWeight(containersList.stream().map(Containers::getGrossWeight).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP));
+			bills.setCfsGrossWeight(bills.getGrossWeight());
+			bills.setMeasurement(containersList.stream().map(Containers::getMeasurement).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP));
+			bills.setCfsMeasurement(bills.getMeasurement());
+			containersService.saveBatch(containersList);
+		}
+		bills.setContainersList(containersList);
 		bills.setPreContainersList(new ArrayList<>());
 		bills.setContainersReportsList(new ArrayList<>());
 		bills.setFeeCenterListC(new ArrayList<>());
@@ -1481,8 +1550,6 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 		bills.setWaitingBoxList(new ArrayList<>());
 		bills.setDetail(seaBillsDetail);
 		//将字符串为null的赋默认值为""
-		resetBillsNullValuesAsEmptyString(bills);
-
 		return R.data(bills);
 	}
 

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

@@ -650,7 +650,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 
 			if (status) {
 				//主单应加上分单费用
-				if ("MM".equals(bills.getBillType())) {
+				/*if ("MM".equals(bills.getBillType())) {
 					List<Bills> details = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
 						.eq(Bills::getTenantId, AuthUtil.getTenantId())
 						.eq(Bills::getIsDeleted, 0)
@@ -744,7 +744,7 @@ public class FeeCenterServiceImpl extends ServiceImpl<FeeCenterMapper, FeeCenter
 						details.setMeasurement(measurementM);
 						billsMapper.updateById(details);
 					}
-				}
+				}*/
 				//利润 = 收 - 付
 				amountProfit = amountDr.subtract(amountCr);
 				amountProfitUsd = amountDrUsd.subtract(amountCrUsd);

+ 10 - 4
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

@@ -151,7 +151,6 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			branchId = finStlBills.getBranchId();
 		}
 		String exrateType = currencyUtils.standardCurrency(branchId);
-		List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "2", branchId);
 		//获取部门ids对应中文名
 		R<String> res = sysClient.getDeptName(Long.parseLong(branchId));
 		if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
@@ -276,11 +275,18 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 			finStlBills.setAmountCr(amountCrCNY);
 			finStlBills.setAmountDrUsd(amountDrUSD);
 			finStlBills.setAmountCrUsd(amountCrUSD);
-			finStlBills.setAmountSub(finStlBills.getAmountCr().subtract(finStlBills.getAmountDr()));
-			finStlBills.setAmountSubUsd(finStlBills.getAmountCrUsd().subtract(finStlBills.getAmountDrUsd()));
 			finStlBills.setAmountDrLoc(amountDrLoc);
 			finStlBills.setAmountCrLoc(amountCrLoc);
-			finStlBills.setAmountSubLoc(finStlBills.getAmountCrLoc().subtract(finStlBills.getAmountDrLoc()));
+			if ("C".equals(finStlBills.getDc())){
+				finStlBills.setAmountSub(finStlBills.getAmountCr().subtract(finStlBills.getAmountDr()));
+				finStlBills.setAmountSubUsd(finStlBills.getAmountCrUsd().subtract(finStlBills.getAmountDrUsd()));
+				finStlBills.setAmountSubLoc(finStlBills.getAmountCrLoc().subtract(finStlBills.getAmountDrLoc()));
+			}else{
+				finStlBills.setAmountSub(finStlBills.getAmountDr().subtract(finStlBills.getAmountCr()));
+				finStlBills.setAmountSubUsd(finStlBills.getAmountDrUsd().subtract(finStlBills.getAmountCrUsd()));
+				finStlBills.setAmountSubLoc(finStlBills.getAmountDrLoc().subtract(finStlBills.getAmountCrLoc()));
+			}
+
 
 		} else {
 			throw new RuntimeException("请选择明细");