Browse Source

1.增加主单同步分单信息接口
2.海运进出口,订舱样本导入接口增加箱型判断
3.海运出口配箱信息导入增加箱型判断

纪新园 6 months ago
parent
commit
528b7654ce

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

@@ -892,7 +892,7 @@ public class BillsController extends BladeController {
 	}
 
 	/**
-	 * 同步分单数据
+	 * 同步分单数据  分单》主单
 	 */
 	@GetMapping("/synchronizeData")
 	@RepeatSubmit
@@ -901,6 +901,15 @@ public class BillsController extends BladeController {
 	}
 
 	/**
+	 * 同步分单数据 主单》分单
+	 */
+	@GetMapping("/synchronizeDataMM")
+	@RepeatSubmit
+	public R synchronizeDataMM(@RequestParam("billId") Long billId) {
+		return billsService.synchronizeDataMM(billId);
+	}
+
+	/**
 	 * 批量修改提单类型
 	 *
 	 * @param ids      单据ids

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.java

@@ -60,4 +60,6 @@ public interface BillsMapper extends BaseMapper<Bills> {
 
 	List<Map<String, Object>> trend(@Param("tenantId") String tenantId, @Param("deptPid") Long deptPid, @Param("businessType") String businessType,
 									@Param("date") String date,@Param("type") String type,@Param("userId") Long userId);
+
+    List<String> cntrTypeList(@Param("billId")String billId);
 }

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

@@ -893,5 +893,11 @@
         ORDER BY
         seb.create_time
     </select>
+    <select id="cntrTypeList" resultType="java.lang.String">
+        select cntr_type_code
+        from los_sea_pre_containers
+        where is_deleted = '0'
+          and pid = #{billId}
+    </select>
 
 </mapper>

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

@@ -199,4 +199,8 @@ public interface IBillsService extends IService<Bills> {
 	R billLadingConfirm(Bills bills);
 
 	R submitConfirm(Bills bills) throws Exception;
+
+    List<String> cntrTypeList(Long billId);
+
+	R synchronizeDataMM(Long billId);
 }

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

@@ -1259,9 +1259,6 @@ 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() + "已添加主单,请勿重复添加");
 				}
@@ -1349,46 +1346,19 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				item.setUpdateUserName(AuthUtil.getUserName());
 			}
 			this.updateBatchById(billsList);
-			/*BigDecimal amountDr = bills.getAmountDr();
-			BigDecimal amountCr = bills.getAmountCr();
-			BigDecimal amountProfit = bills.getAmountProfit();
-			BigDecimal amountDrUsd = bills.getAmountDrUsd();
-			BigDecimal amountCrUsd = bills.getAmountCrUsd();
-			BigDecimal amountProfitUsd = bills.getAmountProfitUsd();
-			BigDecimal amountDrLoc = bills.getAmountDrLoc();
-			BigDecimal amountCrLoc = bills.getAmountCrLoc();
-			BigDecimal amountProfitLoc = bills.getAmountProfitLoc();*/
 			Integer teuTotal = bills.getTeuTotal();
 			String marks = "";
 			String commodityDescr = "";
 			if (!billsList.isEmpty()) {
-				/*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));
-				amountCrUsd = amountCrUsd.add(billsList.stream().map(Bills::getAmountCrUsd).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-				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));*/
 				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));
 				measurement = measurement.add(billsList.stream().map(Bills::getMeasurement).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				marks = billsList.stream().map(Bills::getMarks).filter(Objects::nonNull).collect(Collectors.joining("&|&"));
 				commodityDescr = billsList.stream().map(Bills::getCommodityDescr).filter(Objects::nonNull).collect(Collectors.joining("&|&"));
-				this.itemCopy(bills, billsList);
+				this.itemCopy(bills, billsList,false);
 			}
 			bills.setTeuTotal(teuTotal);
-			/*bills.setAmountDr(amountDr);
-			bills.setAmountCr(amountCr);
-			bills.setAmountProfit(amountProfit);
-			bills.setAmountDrUsd(amountDrUsd);
-			bills.setAmountCrUsd(amountCrUsd);
-			bills.setAmountProfitUsd(amountProfitUsd);
-			bills.setAmountDrLoc(amountDrLoc);
-			bills.setAmountCrLoc(amountCrLoc);
-			bills.setAmountProfitLoc(amountProfitLoc);*/
 			bills.setGrossWeight(grossWeight);
 			bills.setQuantity(quantity);
 			bills.setMeasurement(measurement);
@@ -1405,12 +1375,31 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		return R.data("操作成功");
 	}
 
-	private void itemCopy(Bills bills, List<Bills> billsList) {
+	private void itemCopy(Bills bills, List<Bills> billsList,boolean status) {
 		List<Containers> containersList = containersService.list(new LambdaQueryWrapper<Containers>()
 			.eq(Containers::getTenantId, AuthUtil.getTenantId())
 			.eq(Containers::getIsDeleted, 0)
 			.in(Containers::getPid, billsList.stream().map(Bills::getId).collect(Collectors.toList())));
 		if (!containersList.isEmpty()) {
+			StringBuilder hblno = new StringBuilder();
+			for (Bills item : billsList) {
+				List<Containers> containers = containersList.stream().filter(e -> e.getPid().equals(item.getId()))
+					.collect(Collectors.toList());
+				if (containers.isEmpty()) {
+					hblno.append(item.getHblno()).append(",");
+				} else {
+					BigDecimal quantity = containers.stream().map(Containers::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal grossWeight = containers.stream().map(Containers::getGrossWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal measurement = containers.stream().map(Containers::getMeasurement).reduce(BigDecimal.ZERO, BigDecimal::add);
+					if (quantity.compareTo(new BigDecimal("0.00")) == 0 && grossWeight.compareTo(new BigDecimal("0.00")) == 0 &&
+						measurement.compareTo(new BigDecimal("0.00")) == 0) {
+						hblno.append(item.getHblno()).append(",");
+					}
+				}
+			}
+			if (status && ObjectUtils.isNotNull(hblno.toString())) {
+				throw new RuntimeException("分单号:" + hblno + "未分配件重尺,同步失败");
+			}
 			for (Containers item : containersList) {
 				item.setMblno(bills.getMblno());
 			}
@@ -1485,6 +1474,11 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				}
 				containersBillsService.saveBatch(containersBillsListNew);
 			}
+		} else {
+			if (status){
+				throw new RuntimeException("分单号:" + billsList.stream().map(Bills::getHblno).collect(Collectors.joining(","))
+					+ "未分配件重尺,同步失败");
+			}
 		}
 		List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
@@ -1593,6 +1587,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		for (Bills item : billsList) {
 			item.setEta(bills.getEta());
 			item.setActualEta(bills.getActualEta());
+
 		}
 		if (!billsList.isEmpty()) {
 			this.updateBatchById(billsList);
@@ -4969,24 +4964,6 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		}
 		Bills bills = baseMapper.selectById(billId);
 		if (bills != null) {
-			/*if (3 == bills.getBillStatus()) {
-				throw new RuntimeException("主单已完成,操作失败");
-			}
-			if (1 == bills.getBillStatus()) {
-				throw new RuntimeException("主单已退舱,操作失败");
-			}
-			if (bills.getStatus() > 0 && bills.getStatus() < 3) {
-				throw new RuntimeException("主单提交请核,操作失败");
-			}
-			if (ObjectUtils.isNull(bills.getMblno())) {
-				throw new RuntimeException("主单提单号不能为空,操作失败");
-			}
-			if (ObjectUtils.isNull(bills.getPodId())) {
-				throw new RuntimeException("卸货港不能为空,操作失败");
-			}
-			if (ObjectUtils.isNull(bills.getPolId())) {
-				throw new RuntimeException("装货港不能为空,操作失败");
-			}*/
 			List<Bills> billsList = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
 				.eq(Bills::getTenantId, AuthUtil.getTenantId())
 				.eq(Bills::getIsDeleted, 0)
@@ -5011,7 +4988,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 				measurement = measurement.add(billsList.stream().map(Bills::getMeasurement).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				marks = billsList.stream().map(Bills::getMarks).filter(Objects::nonNull).collect(Collectors.joining("&|&"));
 				commodityDescr = billsList.stream().map(Bills::getCommodityDescr).filter(Objects::nonNull).collect(Collectors.joining("&|&"));
-				this.itemCopy(bills, billsList);
+				this.itemCopy(bills, billsList,true);
 			}
 			bills.setTeuTotal(teuTotal);
 			bills.setGrossWeight(grossWeight);
@@ -5385,10 +5362,10 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 	@Transactional(rollbackFor = Exception.class)
 	public R submitConfirm(Bills bills) throws Exception {
 		Bills billsFd = baseMapper.selectOne(new LambdaQueryWrapper<Bills>()
-			.eq(Bills::getTenantId,AuthUtil.getTenantId())
-			.eq(Bills::getIsDeleted,0)
-			.eq(Bills::getTemporaryId,bills.getId()));
-		if (billsFd != null){
+			.eq(Bills::getTenantId, AuthUtil.getTenantId())
+			.eq(Bills::getIsDeleted, 0)
+			.eq(Bills::getTemporaryId, bills.getId()));
+		if (billsFd != null) {
 			if (ObjectUtils.isNotNull(billsFd.getCyTrailerTime()) && billsFd.getCyTrailerTime().compareTo(new Date()) < 0) {
 				throw new RuntimeException("当前时间已超过截单日期,不允许修改");
 			}
@@ -5549,6 +5526,62 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		return R.data(bills);
 	}
 
+	@Override
+	public List<String> cntrTypeList(Long billId) {
+		return baseMapper.cntrTypeList(billId + "");
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R synchronizeDataMM(Long billId) {
+		if (ObjectUtils.isNull(billId)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		Bills bills = baseMapper.selectById(billId);
+		if (bills != null) {
+			List<Bills> billsList = baseMapper.selectList(new LambdaQueryWrapper<Bills>()
+				.eq(Bills::getTenantId, AuthUtil.getTenantId())
+				.eq(Bills::getIsDeleted, 0)
+				.eq(Bills::getMasterId, billId));
+			if (!billsList.isEmpty()) {
+				for (Bills item : billsList) {
+					item.setEtd(bills.getEtd());
+					item.setEta(bills.getEta());
+					item.setActualEta(bills.getActualEta());
+					item.setActualEtd(bills.getActualEtd());
+					item.setVesselId(bills.getVesselId());
+					item.setVesselCnName(bills.getVesselCnName());
+					item.setVesselEnName(bills.getVesselEnName());
+					item.setVoyageNo(bills.getVoyageNo());
+					item.setCarrierId(bills.getCarrierId());
+					item.setCarrierCnName(bills.getCarrierCnName());
+					item.setCarrierEnName(bills.getCarrierEnName());
+					item.setIssueDate(bills.getIssueDate());
+					item.setBranchId(bills.getBranchId());
+					item.setBranchName(bills.getBranchName());
+					item.setHpaymode(bills.getHpaymode());
+					item.setMpaymode(bills.getMpaymode());
+					item.setCyRemarks(bills.getCyRemarks());
+					item.setPolId(bills.getPolId());
+					item.setPolCode(bills.getPolCode());
+					item.setPolCnName(bills.getPolCnName());
+					item.setPolEnName(bills.getPolEnName());
+					item.setPodId(bills.getPodId());
+					item.setPodCode(bills.getPodCode());
+					item.setPodCnName(bills.getPodCnName());
+					item.setPodEnName(bills.getPodEnName());
+					item.setPlaceDeliveryId(bills.getPlaceDeliveryId());
+					item.setPlaceDeliveryName(bills.getPlaceDeliveryName());
+					item.setPlaceDeliveryCode(bills.getPlaceDeliveryCode());
+					item.setIssueAtId(bills.getIssueAtId());
+					item.setIssueAt(bills.getIssueAt());
+				}
+				this.updateBatchById(billsList);
+			}
+		}
+		return R.data("操作成功");
+	}
+
 	/**
 	 * 删除海运进出口明细表
 	 *

+ 12 - 5
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/ContainersServiceImpl.java

@@ -45,7 +45,6 @@ import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
 import java.util.*;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -410,7 +409,15 @@ public class ContainersServiceImpl extends ServiceImpl<ContainersMapper, Contain
 		List<String> sealNo = new ArrayList<>();
 		List<String> cntrNo = new ArrayList<>();
 		Bills bills = billsMapper.selectById(billId);
+		List<String> cntrTypeList = billsMapper.cntrTypeList(billId);
 		for (BoxAndLeadSealNoExcel item : excelList) {
+			if (!cntrTypeList.isEmpty()) {
+				if (!cntrTypeList.contains(item.getCntrTypeCode())) {
+					throw new RuntimeException("箱型" + item.getCntrTypeCode() + "与单据箱型不符");
+				}
+			}else{
+				throw new RuntimeException("请先维护单据箱型");
+			}
 			if (bills != null) {
 				if ("MH".equals(bills.getBillType())) {
 					if (!bills.getHblno().equals(item.getHblno())) {
@@ -461,10 +468,10 @@ public class ContainersServiceImpl extends ServiceImpl<ContainersMapper, Contain
 			containers.setCntrTypeCode(item.getCntrTypeCode());
 			containers.setCntrNo(item.getCntrNo().toUpperCase());
 			containers.setSealNo(item.getSealNo());
-			containers.setMeasurement(ObjectUtils.isNotNull(item.getMeasurement()) ? item.getMeasurement(): new BigDecimal("0.00"));
-			containers.setQuantity(ObjectUtils.isNotNull(item.getQuantity()) ? item.getQuantity(): new BigDecimal("0.00"));
-			containers.setGrossWeight(ObjectUtils.isNotNull(item.getGrossWeight()) ? item.getGrossWeight(): new BigDecimal("0.00"));
-			containers.setTare(ObjectUtils.isNotNull(item.getTare()) ? item.getTare(): new BigDecimal("0.00"));
+			containers.setMeasurement(ObjectUtils.isNotNull(item.getMeasurement()) ? item.getMeasurement() : new BigDecimal("0.00"));
+			containers.setQuantity(ObjectUtils.isNotNull(item.getQuantity()) ? item.getQuantity() : new BigDecimal("0.00"));
+			containers.setGrossWeight(ObjectUtils.isNotNull(item.getGrossWeight()) ? item.getGrossWeight() : new BigDecimal("0.00"));
+			containers.setTare(ObjectUtils.isNotNull(item.getTare()) ? item.getTare() : new BigDecimal("0.00"));
 			containers.setVgmWeight(containers.getGrossWeight().add(containers.getTare()));
 			containers.setHblno(item.getHblno());
 			containersList.add(containers);

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

@@ -1365,16 +1365,12 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 					}
 				}
 				bills.setVoyageNo(voy);
-				System.out.println("vsl:" + vsl);
-				System.out.println("voy:" + voy);
-				System.out.println("vslVoy:" + vslVoy);
 			} else {
 				throw new RuntimeException("船名航次不能为空");
 			}
 		}
 		//pol
 		String pol = getSheetCellValueAsString(sheet, 19, 0);
-		System.out.println("Port of Loading:" + pol);
 		if (ObjectUtils.isNotNull(pol)) {
 			bills.setPolNamePrint(pol);
 			/*BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
@@ -1393,7 +1389,6 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 		}
 		//pod
 		String pod = getSheetCellValueAsString(sheet, 19, 2);
-		System.out.println("Port of Discharge:" + pod);
 		if (ObjectUtils.isNotNull(pod)) {
 			bills.setPodNamePrint(pod);
 			/*BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
@@ -1412,7 +1407,6 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 		}
 		//交货地
 		String placeDelivery = getSheetCellValueAsString(sheet, 19, 10);
-		System.out.println("Place of delivery:" + placeDelivery);
 		if (ObjectUtils.isNotNull(placeDelivery)) {
 			bills.setPlaceDeliveryNamePrint(placeDelivery);
 			/*BPorts ports = bPortsService.getOne(new LambdaQueryWrapper<BPorts>()
@@ -1437,7 +1431,6 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 				bills.setGrossWeight(new BigDecimal(number));
 			}
 		}
-		System.out.println("gw:" + gw);
 		//件数
 		String quantity = getSheetCellValueAsString(sheet, 21, 1);
 		if (ObjectUtils.isNotNull(quantity)) {
@@ -1460,7 +1453,6 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 				}
 			}
 		}
-		System.out.println("quantity:" + quantity);
 		//体积
 		String measurement = getSheetCellValueAsString(sheet, 21, 13);
 		if (ObjectUtils.isNotNull(measurement)) {
@@ -1470,7 +1462,6 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 				bills.setMeasurement(new BigDecimal(number));
 			}
 		}
-		System.out.println("measurement:" + measurement);
 		//货物描述
 		String commodityDescr = getSheetCellValueAsString(sheet, 21, 3);
 		if (ObjectUtils.isNotNull(commodityDescr)) {
@@ -1573,6 +1564,16 @@ public class TemplateImportServiceImpl implements ITemplateImportService {
 				}
 			}
 			if (!containersList.isEmpty()) {
+				List<String> cntrTypeList = billsService.cntrTypeList(billId);
+				for (Containers item : containersList){
+					if (!cntrTypeList.isEmpty()) {
+						if (!cntrTypeList.contains(item.getCntrTypeCode())) {
+							throw new RuntimeException("箱型" + item.getCntrTypeCode() + "与单据箱型不符");
+						}
+					}else{
+						throw new RuntimeException("请先维护单据箱型");
+					}
+				}
 				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());