Browse Source

SI 添加件重尺校验

wfg 6 months ago
parent
commit
c26edd1e67

+ 21 - 0
blade-service/blade-los/src/main/java/org/springblade/los/edi/dto/InttraSoDto.java

@@ -606,10 +606,26 @@ public class InttraSoDto {
 	 */
 	private BigDecimal measurement;
 
+	/**
+	 * 装箱件数
+	 */
+	private BigDecimal cntrPackagesNumber;
+
 	/*      PCI++   */
 	/**
 	 * 麦头
 	 */
+	/**
+	 * 装箱重量
+	 */
+	private BigDecimal cntrGrossWeight;
+
+	/*     MEA+AAE+AAW+MTQ:   */
+	/**
+	 * 装箱体积
+	 */
+	private BigDecimal cntrMeasurement;
+
 	private String marks;
 
 	/*      DGS+IMD+   */
@@ -757,6 +773,11 @@ public class InttraSoDto {
 	private Boolean alreadySend;
 
 	/**
+	 * 是否需要检测件重尺
+	 */
+	private Boolean needVerifyPkgs;
+
+	/**
 	 * 是否 DOOR TO 服务方式
 	 */
 	public Boolean isDoorToServiceTerm (){

+ 57 - 3
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java

@@ -59,6 +59,7 @@ import org.stringtemplate.v4.ST;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -484,7 +485,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 		}
 		inttraSoDto.setBillLadingNumber(RegularUtils.englishToNumber(details.getNumberOfObl()));
 		inttraSoDto.setBillLadingNumberOfCopy(RegularUtils.englishToNumber(details.getNumberOfCopy()));
-		inttraSoDto.setPackagesNumber(details.getQuantity());
+		inttraSoDto.setPackagesNumber(details.getQuantity().setScale(3, BigDecimal.ROUND_HALF_UP));
 		if (ObjectUtils.isNotNull(details.getPackingUnitId())) {
 			BPackages bPackages = bPackagesService.getOne(new LambdaQueryWrapper<BPackages>()
 				.eq(BPackages::getId, details.getPackingUnitId()));
@@ -496,8 +497,13 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 		inttraSoDto.setPackagesDescribe(details.getPackingUnit());//包装描述
 		inttraSoDto.setGoodsName(details.getCommodityEnName());
 		inttraSoDto.setGoodsDesc(details.getCommodityDescr());
-		inttraSoDto.setGrossWeight(details.getGrossWeight());
-		inttraSoDto.setMeasurement(details.getMeasurement());
+		inttraSoDto.setGrossWeight(details.getGrossWeight().setScale(3, BigDecimal.ROUND_HALF_UP));
+		inttraSoDto.setMeasurement(details.getMeasurement().setScale(3, BigDecimal.ROUND_HALF_UP));
+
+		inttraSoDto.setCntrPackagesNumber(BigDecimal.ZERO);
+		inttraSoDto.setCntrGrossWeight(BigDecimal.ZERO);
+		inttraSoDto.setCntrMeasurement(BigDecimal.ZERO);
+
 		inttraSoDto.setMarks(details.getMarks());
 		inttraSoDto.setHsCode(ObjectUtils.isNotNull(details.getHscode()) ? details.getHscode().trim() : "");
 		inttraSoDto.setCargoType(details.getCargoType());
@@ -597,6 +603,7 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			.apply("find_in_set(id,'" + boxType + "')")
 			.eq(BCntrTypes::getIsDeleted, 0));
 		List<Map<String, Object>> cntrs = new ArrayList<>();
+		List<Map<String, Object>> uiCntrs = new ArrayList<>();
 		for (Containers item : containersList) {
 			BCntrTypes bCntrTypes = bCntrTypesList.stream().filter(e -> e.getId().toString().equals(item.getCntrTypeCodeId())).findFirst().orElse(null);
 			if (bCntrTypes != null) {
@@ -622,6 +629,11 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				map.put("volume", item.getMeasurement());
 				map.put("sizeType", ediCode);
 				map.put("cntrTypeName", RegularUtils.forceEmpty(bCntrTypes.getEnName()));
+
+				inttraSoDto.setCntrPackagesNumber(inttraSoDto.getCntrPackagesNumber().add(item.getQuantity()).setScale(3, RoundingMode.HALF_UP));
+				inttraSoDto.setCntrGrossWeight(inttraSoDto.getCntrGrossWeight().add(item.getGrossWeight()).setScale(3, RoundingMode.HALF_UP));
+				inttraSoDto.setCntrMeasurement(inttraSoDto.getCntrMeasurement().add(item.getMeasurement()).setScale(3, RoundingMode.HALF_UP));
+
 				String ccc = RegularUtils.forceEmpty(bCntrTypes.getCode()), cntrType = "", cntrSize="";
 				if(ccc.length()>=4){
 					cntrSize = RegularUtils.copySubstring(ccc, 0, 2);
@@ -668,12 +680,31 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				}
 				map.put("commodityList", ccList);
 
+				// uiCntrs
+				if(ObjectUtils.isNotNull(map.get("cntrNo"))){
+					Map<String, Object> obj1 = uiCntrs.stream().filter(c->c.get("cntrNo")==map.get("cntrNo")).findAny().orElse(null);
+					if(ObjectUtils.isNotNull(obj1)){
+						obj1.replace("count", Integer.parseInt(obj1.get("count").toString()) + 1);
+					}else{
+						obj1 = new HashMap<>();
+						obj1.put("cntrNo", map.get("cntrNo"));
+						obj1.put("count", 1);
+						uiCntrs.add(obj1);
+					}
+				}
+
 				cntrs.add(map);
 			} else {
 				throw new RuntimeException("箱型数据错误");
 			}
 		}
 		inttraSoDto.setLoadedCntrs(cntrs);
+
+		List<Map<String, Object>> duiCntrs = uiCntrs.stream().filter(c->Integer.parseInt(c.get("count").toString())>1).collect(Collectors.toList());
+		if(duiCntrs.size()>0){
+			throw new RuntimeException("配箱信息中,箱号重复!");
+		}
+
 		inttraSoDto.setHasMixedCargo(mixedCargoCount > 0);
 
 		inttraSoDto.setAMSProp("");
@@ -821,6 +852,8 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				}
 			}
 
+			inttraSoDto.setNeedVerifyPkgs(readEdiParamBooleanValue(ediParamCarrier, "verifyPkgs", false));
+
 			// 默认发送方
 			String defaultSenderId = "JMSLOGQDSO";
 			inttraSoDto.setSenderId(readEdiParamStringValue(ediParamCarrier, "senderId", defaultSenderId));
@@ -887,6 +920,27 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				inttraSoDto.setHblBillsList(hbls);
 			}
 
+			if(inttraSoDto.getNeedVerifyPkgs()==true){
+				System.out.println("PackagesNumber = " + inttraSoDto.getPackagesNumber());
+				System.out.println("CntrPackagesNumber = " + inttraSoDto.getCntrPackagesNumber());
+				System.out.println("compareTo = " + inttraSoDto.getPackagesNumber().compareTo(inttraSoDto.getCntrPackagesNumber()));
+
+				System.out.println("GrossWeight = " + inttraSoDto.getGrossWeight());
+				System.out.println("CntrGrossWeight = " + inttraSoDto.getCntrGrossWeight());
+				System.out.println("compareTo = " + inttraSoDto.getGrossWeight().compareTo(inttraSoDto.getCntrGrossWeight()));
+
+				System.out.println("Measurement = " + inttraSoDto.getMeasurement());
+				System.out.println("CntrMeasurement = " + inttraSoDto.getCntrMeasurement());
+				System.out.println("compareTo = " + inttraSoDto.getMeasurement().compareTo(inttraSoDto.getCntrMeasurement()));
+
+				if(inttraSoDto.getPackagesNumber().compareTo(inttraSoDto.getCntrPackagesNumber())!=0
+					|| inttraSoDto.getGrossWeight().compareTo(inttraSoDto.getCntrGrossWeight())!=0
+					|| inttraSoDto.getMeasurement().compareTo(inttraSoDto.getCntrMeasurement())!=0
+				){
+					return R.fail("业务的件重尺与配箱的件重尺不相等!");
+				};
+			}
+
 			FilesCenter filesCenter = null;
 			Map<String, Object> status = null;