wfg 1 year ago
parent
commit
25c3805f48

+ 4 - 1
blade-service/blade-los/src/main/java/org/springblade/los/Util/RegularUtils.java

@@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.sun.org.apache.xpath.internal.operations.Bool;
 import io.reactivex.Single;
+import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.edi.dto.InttraSiBillDto;
 import org.springblade.los.edi.dto.InttraSiDto;
 import org.springblade.los.edi.dto.InttraSoDto;
 
+import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
@@ -487,9 +489,10 @@ public class RegularUtils {
 		if (start >= 0 && endIndex <= str.length()) {
 			return str.substring(start, endIndex);
 		} else {
-			return "";
+			return str;
 		}
 	}
+
 }
 
 	/*Class<?> ediObjClass = ediData.getClass();

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

@@ -210,7 +210,8 @@ public class Regular_HMM {
 
 		if("danger".equals(ediData.getCargoType())){
 			if(ObjectUtils.isNull(ediData.getHsCode())){
-				msg += "HS CODE,";
+				// HS CODE 不是必填
+				// msg += "HS CODE,";
 			}
 			if(ObjectUtils.isNull(ediData.getDgImdgCode())){
 				msg += "IMDG CODE,";
@@ -302,7 +303,7 @@ public class Regular_HMM {
 		} else {
 			Map<String, String> mapString = RegularUtils.regularEn(ediData.getMarks(),false);
 			if ("200".equals(mapString.get("code"))) {
-				ediData.setHNotify(mapString.get("susscess"));
+				ediData.setMarks(mapString.get("susscess"));
 			} else {
 				character += "唛头,";
 			}
@@ -313,7 +314,7 @@ public class Regular_HMM {
 		} else {
 			Map<String, String> mapString = RegularUtils.regularEn(ediData.getGoodsDesc(),false);
 			if ("200".equals(mapString.get("code"))) {
-				ediData.setHNotify(mapString.get("susscess"));
+				ediData.setGoodsDesc(mapString.get("susscess"));
 			} else {
 				character += "货描,";
 			}

+ 2 - 0
blade-service/blade-los/src/main/java/org/springblade/los/Util/Regular_ONE.java

@@ -43,6 +43,8 @@ public class Regular_ONE {
 			} else {
 				character += "客户约号,";
 			}
+		}else{
+			ediData.setCorpArgreementNo("");
 		}
 
 		//船司约号

+ 19 - 18
blade-service/blade-los/src/main/java/org/springblade/los/Util/Regular_PIL.java

@@ -284,8 +284,8 @@ public class Regular_PIL {
 			List<Map<String, Object>> mapList = ediData.getPreCntrs();
 			int errCount = 0;
 			for (Map<String, Object> map1 : mapList) {
-				// map.put("pil_commodity_code", "");
-				// map.put("pil_commodity_name", "");
+				map.put("pil_commodity_code", "001");
+				map.put("pil_commodity_name", "TEST-PIL-CNAME");
 				if(ObjectUtils.isNull(map.get("pil_commodity_code"))){
 					if(errCount==0) {
 						msg += "预配箱型箱量缺少 PIL 商品代码和名称,";
@@ -298,27 +298,28 @@ public class Regular_PIL {
 			msg += "预配箱,";
 		}
 
-		if (ObjectUtils.isNotNull(ediData.getLoadedCntrs())) {
-			List<Map<String, Object>> mapList = ediData.getLoadedCntrs();
-			int errCount = 0;
-			for (Map<String, Object> map1 : mapList) {
-				if(ObjectUtils.isNull(map.get("cntrNo"))){
-					if(errCount==0) {
-						msg += "配箱型缺少箱号,";
-						// 只判断一个即可
-						errCount++;
-					}
-				}
-			}
-		}else{
-			msg += "配箱信息,";
-		}
+		// SO 不判断
+//		if (ObjectUtils.isNotNull(ediData.getLoadedCntrs())) {
+//			List<Map<String, Object>> mapList = ediData.getLoadedCntrs();
+//			int errCount = 0;
+//			for (Map<String, Object> map1 : mapList) {
+//				if(ObjectUtils.isNull(map.get("cntrNo"))){
+//					if(errCount==0) {
+//						msg += "配箱型缺少箱号,";
+//						// 只判断一个即可
+//						errCount++;
+//					}
+//				}
+//			}
+//		}else{
+//			msg += "配箱信息,";
+//		}
 
 		if (ObjectUtils.isNull(ediData.getCyCode())) {
 			msg += "场站或场站代码,";
 		}
 
-		msg += "需要客户 8562,8563 的名称";
+		// msg += "需要客户 8562,8563 的名称";
 
 
 		//约号

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

@@ -116,6 +116,22 @@ public class InttraSoDto {
 	 */
 	private String loadType;
 
+	/**
+	 * 客户 id
+	 */
+	private Long corpId;
+	/**
+	 * 客户 code
+	 */
+	private String corpCode;
+	/**
+	 * 客户中文名称
+	 */
+	private String corpCnName;
+	/**
+	 * 客户英文名称
+	 */
+	private String corpEnName;
 	/*   FTX+AAI+++   */
 	/**
 	 * 备注

+ 91 - 72
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EDISenderServiceImpl.java

@@ -37,6 +37,7 @@ import org.springframework.validation.annotation.Validated;
 import java.io.*;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -525,7 +526,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			writer.newLine();
 			count += 1;
 			// wfg IUCA 的处理
-			writer.write("NAD+CA+" + carrierCode + ":160:86++" + inttraSoDto.getCarrierName().substring(0, 35) + "'");
+			writer.write("NAD+CA+" + carrierCode + ":160:86++" + RegularUtils.copySubstring(inttraSoDto.getCarrierName(), 0, 35) + "'");
 			writer.newLine();
 			count += 1;
 			writer.write("NAD+HI+" + inttraSoDto.getSenderCode() + ":160:86++" + inttraSoDto.getSenderCode() + "'");
@@ -2055,7 +2056,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				// 运编号
 				writer.write(":" + (ObjectUtils.isNotNull(oneSoDto.getBookingNo()) ? oneSoDto.getBookingNo() : (ObjectUtils.isNotNull(oneSoDto.getMblNo()) ? oneSoDto.getMblNo() : "")));
 				// 提单号
-				writer.write(":" + (ObjectUtils.isNotNull(oneSoDto.getMblNo()) ? oneSoDto.getMblNo() : ""));
+				writer.write(":" + (RegularUtils.forceEmpty(oneSoDto.getMblNo())));
 				// 交货条款 CY-CY(pier-pier/port):30
 				//CY-CFS(pier/port-door): 29
 				//CFS-CY(door-pier/port): 28
@@ -2065,16 +2066,16 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				writer.write(":" + oneSoDto.getSenderName());
 				// 即接受订舱的人的代码 + 签单人说明 + 询价单位 + 国外订舱单位 + 转船标识 + 分批 + 装期 + 效期 + 运费协议号 + 费率本代码 + 服务合同号 + BOND NO + 舱位互用标识 + Email
 				// ONE 业务缺少服务合同号
-				writer.write(":ONEY::::::::" + oneSoDto.getCorpArgreementNo() + "::" + oneSoDto.getCarrierArgreementNo() + ":::" + oneSoDto.getSenderEmail() + "'");
+				writer.write(":ONEY::::::::" + RegularUtils.forceEmpty(oneSoDto.getCorpArgreementNo()) + "::" + RegularUtils.forceEmpty(oneSoDto.getCarrierArgreementNo()) + ":::" + RegularUtils.forceEmpty(oneSoDto.getSenderEmail()) + "'");
 				writer.newLine();
 				count++;
 
 				// 03 提单信息
 				// 提单类型(ORI: BILL OF LADING EXP: WAYBILL) + 提单签发地代码 + 提单签发地 + 签发日期 + 正本提单份数 + 预付地点 + 到付地点
 				String issueType = "ORI".equals(oneSoDto.getIssueType()) ? "ORI" : ("EXP".equals(oneSoDto.getIssueType()) ? "EXP" : "");
-				writer.write("03:" + issueType + "::" + oneSoDto.getIssuanceLand() + ":" + oneSoDto.getIssueDate() + ":3:"
-					+ ("PP".equals(oneSoDto.getMPayMode()) ? oneSoDto.getMPayPlaceName() : "")
-					+ ("CC".equals(oneSoDto.getMPayMode()) ? oneSoDto.getMPayPlaceName() : "") + "'");
+				writer.write("03:" + issueType + "::" + RegularUtils.forceEmpty(oneSoDto.getIssuanceLand()) + ":" + RegularUtils.forceEmpty(oneSoDto.getIssueDate()) + ":3::"
+					+ ("PP".equals(oneSoDto.getMPayMode()) ? RegularUtils.forceEmpty(oneSoDto.getMPayPlaceName()) : "")
+					+ ("CC".equals(oneSoDto.getMPayMode()) ? RegularUtils.forceEmpty(oneSoDto.getMPayPlaceName()) : "") + "'");
 				writer.newLine();
 				count++;
 
@@ -2082,26 +2083,26 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				// 记录类型标识 + 船舶呼号 +  船名 + 航次 + 船舶经营人
 				// 此处 getVesselCode 取船舶呼号
 				// wfg
-				writer.write("11:" + oneSoDto.getVesselCode() + ":" + oneSoDto.getVesselName() + ":" + oneSoDto.getVoyageNo() + "::::");
+				writer.write("11:" + RegularUtils.forceEmpty(oneSoDto.getVesselCode()) + ":" + RegularUtils.forceEmpty(oneSoDto.getVesselName()) + ":" + RegularUtils.forceEmpty(oneSoDto.getVoyageNo()) + ":::::");
 				// 亿通 航线代码 lineNo
-				writer.write(oneSoDto.getEtd() + ":lineNo:lineNo:::'");
+				writer.write(oneSoDto.getEtd() + ":::::'");
 				writer.newLine();
 				count++;
 
 				// 12	PORTS 地点信息
 				writer.write("12");
 				// 收货地代码 + 收货地代名称
-				writer.write(":" + bill.getPlaceReceiptCode() + ":" + bill.getPlaceReceiptName());
+				writer.write(":" + RegularUtils.forceEmpty(bill.getPlaceReceiptCode()) + ":" + RegularUtils.forceEmpty(bill.getPlaceReceiptName()));
 				// 装货港代码 + 装货港
-				writer.write(":" + bill.getPolCode() + ":" + bill.getPolName());
+				writer.write(":" + RegularUtils.forceEmpty(bill.getPolCode()) + ":" + RegularUtils.forceEmpty(bill.getPolName()));
 				// 卸货港代码 + 卸货港代
-				writer.write(":" + bill.getPodCode() + ":" + bill.getPodName());
+				writer.write(":" + RegularUtils.forceEmpty(bill.getPodCode()) + ":" + RegularUtils.forceEmpty(bill.getPodName()));
 				// 中转港代码 + 中转港 不填
 				writer.write("::");
 				// 交货地代码  + 交货地
-				writer.write(":" + bill.getPlaceDeliveryCode() + ":" + bill.getPlaceDeliveryName());
+				writer.write(":" + RegularUtils.forceEmpty(bill.getPlaceDeliveryCode()) + ":" + RegularUtils.forceEmpty(bill.getPlaceDeliveryName()));
 				// 目的地代码  + 目的地
-				writer.write(":" + bill.getPlaceDestinationCode() + ":" + bill.getPlaceDestinationName());
+				writer.write(":" + RegularUtils.forceEmpty(bill.getPlaceDestinationCode()) + ":" + RegularUtils.forceEmpty(bill.getPlaceDestinationName()));
 				writer.write("'");
 				writer.newLine();
 				count++;
@@ -2119,7 +2120,8 @@ public class EDISenderServiceImpl implements IEDISenderService {
 
 				// 17 REMARKS 订舱备注 其他信息
 				if (ObjectUtils.isNotNull(bill.getBookingRemarks())) {
-					List<String> bookingRemarks = RegularUtils.reformatEDIText(bill.getBookingRemarks(), 35, true);
+					// 已经做过转义
+					List<String> bookingRemarks = RegularUtils.reformatEDIText(bill.getBookingRemarks(), 35, false);
 					writer.write("17"); // 发货人代码为空
 					int lc = 0;
 					for (int l = 0; l < bookingRemarks.size(); l++) {
@@ -2150,6 +2152,9 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					if (l < 5) {
 						writer.write(":" + hShipper.get(l));
 					} else {
+						if(l==5){
+							writer.write("*");
+						}
 						goodsDescAddtionShipperMarks.add("*" + hShipper.get(l));
 					}
 				}
@@ -2165,6 +2170,9 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					if (l < 5) {
 						writer.write(":" + hConsignee.get(l));
 					} else {
+						if(l==5){
+							writer.write("**");
+						}
 						goodsDescAddtionCnee.add("**" + hConsignee.get(l));
 					}
 				}
@@ -2180,6 +2188,9 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					if (l < 5) {
 						writer.write(":" + hNotify.get(l));
 					} else {
+						if(l==5){
+							writer.write("***");
+						}
 						goodsDescAddtionNotify.add("***" + hNotify.get(l));
 					}
 				}
@@ -2187,6 +2198,8 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				writer.newLine();
 				count += 1;
 
+				DecimalFormat df2 = new DecimalFormat("#0.00");
+
 				// 41 CARGO OF BOOKING  订舱货物
 				// 注:1)货物有两种包装,如是大包装(如托盘),则必须同时填小包装件数和包装类型;
 				// 2) CARGO ID (货物标识)的填法: S=普通,  R=冷冻,   D=危险 ,  O=非标
@@ -2196,9 +2209,9 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				// 第一层包装件数 + 第一层包装类型 + 第一层包装说明
 				writer.write(":" + bill.getPackagesNumber() + ":" + bill.getPackagesCode() + ":" + bill.getPackagesDescribe());
 				// 第一层包装皮重 + 第一层包装尺码
-				writer.write(":" + bill.getGrossWeight() + ":" + bill.getVolumeOfGoods() + ":" + bill.getPackagesDescribe());
+				writer.write(":" + df2.format(bill.getGrossWeight().doubleValue()) + ":" + bill.getVolumeOfGoods());
 				// 第二层包装件数 + 第二层包装类型 + 第二层包装说明 + 第二层包装皮重 + 第二层包装尺码 + 货毛重
-				writer.write("::::::" + bill.getGrossWeight() + "'");
+				writer.write("::::::" + df2.format(bill.getGrossWeight()) + "'");
 				writer.newLine();
 				count += 1;
 
@@ -2238,11 +2251,11 @@ public class EDISenderServiceImpl implements IEDISenderService {
 								writer.write("44:" + line);
 							} else {
 								writer.write(":" + line);
-								if (lc % 5 == 4 || lc == (goodsMarks.size() - 1)) {
-									writer.write("'");
-									writer.newLine();
-									count += 1;
-								}
+							}
+							if (lc % 5 == 4 || lc == (goodsMarks.size() - 1)) {
+								writer.write("'");
+								writer.newLine();
+								count += 1;
 							}
 						} else {
 							goodsDescAddtionShipperMarks.add("*" + line);
@@ -2263,11 +2276,11 @@ public class EDISenderServiceImpl implements IEDISenderService {
 								writer.write("47:" + line);
 							} else {
 								writer.write(":" + line);
-								if (lc % 5 == 4 || lc == (goodsDesc.size() - 1)) {
-									writer.write("'");
-									writer.newLine();
-									count += 1;
-								}
+							}
+							if (lc % 5 == 4 || lc == (goodsDesc.size() - 1)) {
+								writer.write("'");
+								writer.newLine();
+								count += 1;
 							}
 						}
 
@@ -2283,11 +2296,11 @@ public class EDISenderServiceImpl implements IEDISenderService {
 							writer.write("47:" + line);
 						} else {
 							writer.write(":" + line);
-							if (lc % 5 == 4 || lc == (goodsDescAddtionShipperMarks.size() - 1)) {
-								writer.write("'");
-								writer.newLine();
-								count += 1;
-							}
+						}
+						if (lc % 5 == 4 || lc == (goodsDescAddtionShipperMarks.size() - 1)) {
+							writer.write("'");
+							writer.newLine();
+							count += 1;
 						}
 
 						lc++;
@@ -2301,11 +2314,11 @@ public class EDISenderServiceImpl implements IEDISenderService {
 							writer.write("47:" + line);
 						} else {
 							writer.write(":" + line);
-							if (lc % 5 == 4 || lc == (goodsDescAddtionCnee.size() - 1)) {
-								writer.write("'");
-								writer.newLine();
-								count += 1;
-							}
+						}
+						if (lc % 5 == 4 || lc == (goodsDescAddtionCnee.size() - 1)) {
+							writer.write("'");
+							writer.newLine();
+							count += 1;
 						}
 
 						lc++;
@@ -2319,11 +2332,11 @@ public class EDISenderServiceImpl implements IEDISenderService {
 							writer.write("47:" + line);
 						} else {
 							writer.write(":" + line);
-							if (lc % 5 == 4 || lc == (goodsDescAddtionNotify.size() - 1)) {
-								writer.write("'");
-								writer.newLine();
-								count += 1;
-							}
+						}
+						if (lc % 5 == 4 || lc == (goodsDescAddtionNotify.size() - 1)) {
+							writer.write("'");
+							writer.newLine();
+							count += 1;
 						}
 
 						lc++;
@@ -2339,7 +2352,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 						// 集装箱状态 + 主拼号 + 装箱方式 自选/内装/自派车队等
 						writer.write(":" + ("FCL".equals(oneSoDto.getLoadType()) ? "F" : "L") + ":" + masterLclNo + "::::");
 						//  装箱地点代码 + 装箱地点说明 + 货主箱标志
-						writer.write(map1.get("isSoc").equals(1) ? "Y" : "N");
+						writer.write(map1.get("isSoc").equals(1) ? "Y'" : "N'");
 						writer.newLine();
 						count += 1;
 					}
@@ -2348,7 +2361,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 
 			// 99 TRAILER RECORD              尾记录
 			// RECORD TOTAL OF FILE   记录总数	9(6)	包括:头、尾记录
-			writer.write("99:" + (++count) + "'");
+			writer.write("99:" + (count) + "'");
 
 			writer.close();
 			String status = sysClient.getParamService("upload.url");
@@ -3665,7 +3678,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				for (Map<String, Object> map1 : mapList) {
 					cargoline++;
 					writer.write("41   " + RegularUtils.paddingLeft("" + cargoline, '0', 3));
-					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_code").toString().substring(0, 6), 9) + "Y");
+					writer.write(RegularUtils.paddingRight(RegularUtils.copySubstring(map1.get("pil_commodity_code").toString(), 0, 6), 9) + "Y");
 					writer.write(RegularUtils.paddingLeft(map1.get("cntrQty").toString(), '0', 6) + "    ");
 					BigDecimal gw = new BigDecimal(ObjectUtils.isNull(map1.get("grossWeight")) ? "0" : map1.get("grossWeight").toString());
 					if (gw.equals(BigDecimal.ZERO)) {
@@ -3691,9 +3704,9 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					// 品名
 					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_name").toString(), 48));
 					// 代码
-					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_code").toString().substring(0, 4), 4));
+					writer.write(RegularUtils.paddingRight(RegularUtils.copySubstring(map1.get("pil_commodity_code").toString(), 0, 4), 4));
 					// 箱型
-					writer.write(RegularUtils.paddingLeft(map1.get("sizeType").toString().substring(0, 4), 4));
+					writer.write(RegularUtils.paddingLeft(RegularUtils.copySubstring(map1.get("sizeType").toString(), 0, 4), 4));
 					writer.write("KGMMTQ" + ("1".equals(map1.get("isSoc")) ? "S" : "Y") + RegularUtils.paddingRight(117));
 					writer.newLine();
 					count += 1;
@@ -4089,7 +4102,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				for (Map<String, Object> map1 : mapList) {
 					cargoline++;
 					writer.write("41   " + RegularUtils.paddingLeft("" + cargoline, '0', 3));
-					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_code").toString().substring(0, 6), 9) + "Y");
+					writer.write(RegularUtils.paddingRight(RegularUtils.copySubstring(map1.get("pil_commodity_code").toString(), 0, 6), 9) + "Y");
 					writer.write(RegularUtils.paddingLeft(map1.get("loaded_CntrQty").toString(), '0', 6) + "    ");
 					BigDecimal gw = new BigDecimal(ObjectUtils.isNull(map1.get("loaded_grossWeight")) ? "0" : map1.get("loaded_grossWeight").toString());
 					js = gw.setScale(3, RoundingMode.HALF_UP).toString();
@@ -4106,9 +4119,9 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					// 品名
 					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_name").toString(), 48));
 					// 代码
-					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_code").toString().substring(0, 4), 4));
+					writer.write(RegularUtils.paddingRight(RegularUtils.copySubstring(map1.get("pil_commodity_code").toString(), 0, 4), 4));
 					// 箱型
-					writer.write(RegularUtils.paddingLeft(map1.get("sizeType").toString().substring(0, 4), 4));
+					writer.write(RegularUtils.paddingLeft(RegularUtils.copySubstring(map1.get("sizeType").toString(), 0, 4), 4));
 					writer.write("KGMMTQ" + ("1".equals(map1.get("isSoc")) ? "S" : "Y") + RegularUtils.paddingRight(117));
 					writer.newLine();
 					count += 1;
@@ -4439,14 +4452,18 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			writer.write("17   " + RegularUtils.paddingRight("CN893004", 10 + 3 + 4));
 			// V_SenderTel
 			// if(CORPID.Asinteger=8562,'0530-8312038',if(CORPID.Asinteger=8563,'0530-8312038','0532-82668811-175'))
+			// SYSID	CORPID	CORPNO				SNAME		CNAME
+			// 1		8562	BKSDJIANONGGUOJI	佳农国际贸易	佳农国际贸易
+			// 1		8563	BKSDJIANONG			佳农果蔬		佳农果蔬
 
 			//V_SenderName
 			// if(CORPID.Asinteger=8562,'SHANDONG GOODFARMER INTERNATIONAL TRADING CO., LTD',
 			// if(CORPID.Asinteger=8563,'SHANDONG GOODFARMER FRUITS AND VEGETABLES CO.,LT D',
 			// 'QINGDAO JET MARINE LOGISTICS CO.,LTD. '))
 			// wfg
-			String senderTel = "0530-8312038";
-			String senderName = "QINGDAO JET MARINE LOGISTICS CO.,LTD.";
+			Long corpId = mellSoDto.getCorpId();
+			String senderTel = corpId==8562?"0530-8312038":(corpId==8563?"0530-8312038":"0532-82668811-175");
+			String senderName = corpId==8562?"SHANDONG GOODFARMER INTERNATIONAL TRADING CO., LTD":(corpId==8563?"SHANDONG GOODFARMER FRUITS AND VEGETABLES CO.,LTD":"QINGDAO JET MARINE LOGISTICS CO.,LTD.");
 			writer.write(RegularUtils.paddingRight(senderName, 70) + RegularUtils.paddingRight(senderTel, 35 + 35 + 35 + 17 + 18 + 4));
 			writer.write(RegularUtils.paddingRight(ObjectUtils.isNotNull(mellSoDto.getCarrierArgreementNo()) ? mellSoDto.getCarrierArgreementNo() : "CN893004", 8 + 6));
 			writer.newLine();
@@ -4530,8 +4547,8 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				for (Map<String, Object> map1 : mapList) {
 					cargoline++;
 					writer.write("41   " + RegularUtils.paddingLeft("" + cargoline, '0', 3));
-					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_code").toString().substring(0, 6), 9) + "Y");
-					writer.write(RegularUtils.paddingLeft(map1.get("cntrQty").toString(), '0', 6 + 4));
+					writer.write(RegularUtils.paddingRight(RegularUtils.copySubstring(map1.get("pil_commodity_code").toString(), 0, 6), 9) + "Y");
+					writer.write(RegularUtils.paddingLeft(map1.get("cntrQty").toString(), '0', 6) + "    ");
 					BigDecimal gw = new BigDecimal(ObjectUtils.isNull(map1.get("grossWeight")) ? "0" : map1.get("grossWeight").toString());
 					if (gw.equals(BigDecimal.ZERO)) {
 						js = mellSoDto.getGrossWeight().setScale(3, RoundingMode.HALF_UP).toString();
@@ -4556,9 +4573,9 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					// 品名
 					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_name").toString(), 48));
 					// 代码
-					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_code").toString().substring(0, 4), 4));
+					writer.write(RegularUtils.paddingRight(RegularUtils.copySubstring(map1.get("pil_commodity_code").toString(), 0, 4), 4));
 					// 箱型
-					writer.write(RegularUtils.paddingLeft(map1.get("sizeType").toString().substring(0, 4), 4));
+					writer.write(RegularUtils.paddingLeft(RegularUtils.copySubstring(map1.get("sizeType").toString(), 0, 4), 4));
 					writer.write("KGMMTQ" + ("1".equals(map1.get("isSoc")) ? "S" : "Y") + RegularUtils.paddingRight(117));
 					writer.newLine();
 					count += 1;
@@ -4648,12 +4665,14 @@ public class EDISenderServiceImpl implements IEDISenderService {
 						writer.write(RegularUtils.paddingLeft("" + dangerLine, '0', 3));
 						writer.write(RegularUtils.paddingRight(mellSoDto.getDgUnCode(), 5));
 						writer.write(RegularUtils.paddingRight(mellSoDto.getDgImdgCode(), 4));
-						writer.write("   KGM" + RegularUtils.paddingRight(mellSoDto.getDgImdgCode(), 4));
+						writer.write("   KGM" + RegularUtils.paddingRight("", 9));
 						// 件重尺根据箱量求平均值
-						BigDecimal nwt = mellSoDto.getGrossWeight().divide(BigDecimal.valueOf(cntrQty), 3, RoundingMode.HALF_UP);
-						writer.write(RegularUtils.paddingLeft(nwt.toString(), '0', 9));
+//						BigDecimal nwt = mellSoDto.getGrossWeight().divide(BigDecimal.valueOf(cntrQty), 3, RoundingMode.HALF_UP);
+//						writer.write(RegularUtils.paddingLeft(nwt.toString(), '0', 9));
 						BigDecimal gwt = mellSoDto.getGrossWeight().divide(BigDecimal.valueOf(cntrQty), 3, RoundingMode.HALF_UP);
-						writer.write(RegularUtils.paddingLeft(gwt.toString(), '0', 9));
+						js = gwt.setScale(3, RoundingMode.HALF_UP).toString();
+						// 毛重
+						writer.write(RegularUtils.paddingLeft(js.replace(".", ""), '0', 9));
 						writer.write(mellSoDto.getDgIsMarinePollutant() == 1 ? "Y" : "N");
 						writer.write(RegularUtils.paddingRight(24 + 25));
 						writer.write(RegularUtils.paddingRight(mellSoDto.getDgPackingLevel(), 3));
@@ -4678,7 +4697,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			writer.write("74   " + RegularUtils.paddingRight(5 + 8 + 4 + 3) + "N0301");
 			// 服务合同
 			writer.write(RegularUtils.paddingRight(10 + 5 + 5));
-			writer.write(RegularUtils.paddingLeft(mellSoDto.getPackagesNumber().setScale(3, RoundingMode.HALF_UP).toString(), 8));
+			writer.write(RegularUtils.paddingLeft(mellSoDto.getPackagesNumber().setScale(0, RoundingMode.HALF_UP).toString(), 8));
 			String pkgsDescr = ObjectUtils.isNull(mellSoDto.getPackagesDescribe()) ? "" : mellSoDto.getPackagesDescribe();
 			writer.write(RegularUtils.paddingRight(RegularUtils.copySubstring(pkgsDescr, 0, 8), 8));
 			writer.write(RegularUtils.paddingRight(12 + 1 + 1 + 8 + 8 + 5 + 5 + 8 + 5 + 5 + 126));
@@ -4953,7 +4972,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 				for (Map<String, Object> map1 : mapList) {
 					cargoline++;
 					writer.write("41   " + RegularUtils.paddingLeft("" + cargoline, '0', 3));
-					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_code").toString().substring(0, 6), 9) + "Y");
+					writer.write(RegularUtils.paddingRight(RegularUtils.copySubstring(map1.get("pil_commodity_code").toString(), 0, 6), 9) + "Y");
 					writer.write(RegularUtils.paddingLeft(map1.get("loaded_CntrQty").toString(), '0', 6) + "    ");
 					BigDecimal gw = new BigDecimal(ObjectUtils.isNull(map1.get("loaded_grossWeight")) ? "0" : map1.get("loaded_grossWeight").toString());
 					js = gw.setScale(3, RoundingMode.HALF_UP).toString();
@@ -4970,9 +4989,9 @@ public class EDISenderServiceImpl implements IEDISenderService {
 					// 品名
 					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_name").toString(), 48));
 					// 代码
-					writer.write(RegularUtils.paddingRight(map1.get("pil_commodity_code").toString().substring(0, 4), 4));
+					writer.write(RegularUtils.paddingRight(RegularUtils.copySubstring(map1.get("pil_commodity_code").toString(), 0, 4), 4));
 					// 箱型
-					writer.write(RegularUtils.paddingLeft(map1.get("sizeType").toString().substring(0, 4), 4));
+					writer.write(RegularUtils.paddingLeft(RegularUtils.copySubstring(map1.get("sizeType").toString(), 0, 4), 4));
 					writer.write("KGMMTQ" + ("1".equals(map1.get("isSoc")) ? "S" : "Y") + RegularUtils.paddingRight(117));
 					writer.newLine();
 					count += 1;
@@ -5253,7 +5272,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			// ACI Canada Aci
 			// V_ACIPROP	IF(ACIPROP='Y','Y',IF(ACIPROP='N','N',IF(ACIPROP='1',' ','')))
 			// ACI NO VarChar(35)
-			writer.write(":'");
+			writer.write("::'");
 			writer.newLine();
 			count++;
 
@@ -5283,12 +5302,12 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			// 14 FREIGHT CLAUSE             运费条款
 			String pm = hmmSoDto.getMPayMode();
 			String pmc = "PP".equals(pm) ? "P" : ("CC".equals(pm) ? "C" : "OTH");
-			writer.write("14:" + pm + ":" + ("PP".equals(pm) ? "FREIGHT PREPAID" : ("CC".equals(pm) ? "FREIGHT COLLECT" : "OTHER")) + "'");
+			writer.write("14:" + pmc + ":" + ("PP".equals(pm) ? "FREIGHT PREPAID" : ("CC".equals(pm) ? "FREIGHT COLLECT" : "OTHER")) + "'");
 			writer.newLine();
 			count++;
 
 			// 15 运费及费用项目
-			writer.write("15::NONE:" + pm + "'");
+			writer.write("15::NONE:" + pmc + "'");
 			writer.newLine();
 			count++;
 
@@ -5386,10 +5405,10 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			// 第一层包装件数 + 第一层包装类型 + 第一层包装说明
 			writer.write(":" + hmmSoDto.getPackagesNumber() + ":" + hmmSoDto.getPackagesCode() + ":" + hmmSoDto.getPackagesDescribe());
 			// 第一层包装皮重 + 第一层包装尺码
-			writer.write(":" + hmmSoDto.getGrossWeight().setScale(3, BigDecimal.ROUND_HALF_UP));
+			writer.write(":" + hmmSoDto.getGrossWeight().setScale(0, BigDecimal.ROUND_HALF_UP));
 			writer.write(":" + hmmSoDto.getVolumeOfGoods().setScale(3, BigDecimal.ROUND_HALF_UP));
 			// 第二层包装件数 + 第二层包装类型 + 第二层包装说明 + 第二层包装皮重 + 第二层包装尺码 + 货毛重
-			writer.write("::::::" + hmmSoDto.getGrossWeight().setScale(3, BigDecimal.ROUND_HALF_UP) + "'");
+			writer.write("::::::" + hmmSoDto.getGrossWeight().setScale(2, BigDecimal.ROUND_HALF_UP) + "'");
 			writer.newLine();
 			count += 1;
 
@@ -5405,7 +5424,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 						throw new SecurityException("温度和通风度必须同时填写!");
 					}
 
-					writer.write("43:"+hmmSoDto.getDgImdgCode()+"::"+hmmSoDto.getDgUnCode()+":::::::" + map.get("ventilation") + ":C:" + map.get("temperature") + "::::::::'");
+					writer.write("43:"+hmmSoDto.getDgImdgCode()+"::"+hmmSoDto.getDgUnCode()+":::::::" + map.get("ventilation") + ":"+(ObjectUtils.isNotNull(map.get("temperature"))?"C":"")+":" + map.get("temperature") + ":::::::'");
 					writer.newLine();
 					count += 1;
 				}
@@ -5426,7 +5445,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			writer.newLine();
 			count += 1;
 
-			// 47 CARGO DESCRIPTION 货物描述 5行一组
+			// 47 CARGO DESCRIPTION 货物描述 5行一组,每行47字符
 			List<String> goodsDesc = RegularUtils.reformatEDIText(hmmSoDto.getGoodsDesc(), 47, true);
 			List<String> goodsDescAddtion2 = new ArrayList<>();
 			writer.write("47");
@@ -5465,7 +5484,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 
 			// 99 TRAILER RECORD              尾记录
 			// RECORD TOTAL OF FILE   记录总数	9(6)	包括:头、尾记录
-			writer.write("99:" + (++count) + "'");
+			writer.write("99:" + (count) + "'");
 
 			writer.close();
 			String status = sysClient.getParamService("upload.url");
@@ -6086,7 +6105,7 @@ public class EDISenderServiceImpl implements IEDISenderService {
 			writer.write("MEA+AAE+AAW+CBM:" + smlSoDto.getVolumeOfGoods() + "'");
 			writer.newLine();
 			count += 1;
-			writer.write("MEA+AAE+G+KGM:" + smlSoDto.getGrossWeight() + "'");
+			writer.write("MEA+AAE+G+KGM:" + smlSoDto.getGrossWeight().setScale(2, BigDecimal.ROUND_HALF_UP) + "'");
 			writer.newLine();
 			count += 1;
 

+ 45 - 4
blade-service/blade-los/src/main/java/org/springblade/los/edi/service/impl/EdiTypesServiceImpl.java

@@ -55,7 +55,9 @@ import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.lang.reflect.Field;
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -179,6 +181,36 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 	 * @param ediCodeName
 	 * @return
 	 */
+	public static void resetBillsNullValuesAsEmptyString(InttraSoDto inttraSoDto){
+		//将字符串为null的赋默认值为""
+		Field[] fields = inttraSoDto.getClass().getDeclaredFields();
+		for (Field field : fields) {
+			try {
+				field.setAccessible(true); // 使得私有属性也可以访问
+				if (field.getType() == String.class) {
+					Object value = field.get(inttraSoDto);
+					if (value == null) {
+						field.set(inttraSoDto, "");
+					}
+				}else
+				if (field.getType() == Long.class) {
+					Object value = field.get(inttraSoDto);
+					if (value == null) {
+						field.set(inttraSoDto, 0);
+					}
+				}else
+				if (field.getType() == BigDecimal.class) {
+					Object value = field.get(inttraSoDto);
+					if (value == null) {
+						field.set(inttraSoDto, 0);
+					}
+				};
+			} catch (IllegalAccessException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
 	public Boolean fill(InttraSoDto inttraSoDto, Bills details, String ediCodeName, JsonNode ediParamCarrier, Boolean mixedCargo) {
 		String bltype = details.getBillType();
 		inttraSoDto.setBillType(bltype);
@@ -249,6 +281,11 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 			}
 		}
 
+		inttraSoDto.setCorpId(details.getCorpId());
+		inttraSoDto.setCorpCode(details.getCorpCode());
+		inttraSoDto.setCorpCnName(details.getCorpCnName());
+		inttraSoDto.setCorpEnName(details.getCorpEnName());
+
 		inttraSoDto.setHblNo(details.getHblno());
 		inttraSoDto.setCorpArgreementNo(details.getCorpArgreementNo());
 		inttraSoDto.setCarrierArgreementNo(details.getCarrierArgreementNo());
@@ -502,11 +539,13 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 				map.put("measurement", item.getMeasurement());
 				map.put("volume", item.getMeasurement());
 
-				map.put("commodity_code", "");
-				map.put("commodity_name", "");
+				String hscode = RegularUtils.forceEmpty(item.getHsCode());
+				String goodsName = RegularUtils.forceEmpty(item.getGoodsName());
+				map.put("commodity_code", ObjectUtils.isNotNull(hscode) ? hscode : RegularUtils.forceEmpty(details.getHscode()));
+				map.put("commodity_name", ObjectUtils.isNotNull(goodsName) ? goodsName : RegularUtils.forceEmpty(details.getCommodityEnName()));
 				// 加 PIL 代码和品名 = commodity_code
-				map.put("pil_commodity_code", "");
-				map.put("pil_commodity_name", "");
+				map.put("pil_commodity_code", ObjectUtils.isNotNull(hscode) ? hscode : RegularUtils.forceEmpty(details.getHscode()));
+				map.put("pil_commodity_name", ObjectUtils.isNotNull(goodsName) ? goodsName : RegularUtils.forceEmpty(details.getCommodityEnName()));
 				preCntrs.add(map);
 			} else {
 				throw new RuntimeException("箱型数据错误");
@@ -619,6 +658,8 @@ public class EdiTypesServiceImpl extends ServiceImpl<EdiTypesMapper, EdiTypes> i
 		inttraSoDto.setRecordRows(new BigDecimal("10"));
 		inttraSoDto.setInformationNoEnd(inttraSoDto.getInformationNo());
 
+		resetBillsNullValuesAsEmptyString(inttraSoDto);
+
 		return true;
 	}