Browse Source

【越加红】【WMS对接】【转XML 清理可能包含非法字符的字段】

wuyx 5 tháng trước cách đây
mục cha
commit
b74ba53507

+ 27 - 2
src/main/java/com/uas/eis/service/Impl/DocCommonServiceImpl.java

@@ -86,9 +86,35 @@ public class DocCommonServiceImpl implements DocCommonService {
                 prodInOut.setToMasterCode("YJH_HK");
             }
         }*/
+        // 清理可能包含非法字符的字段
+        cleanInvalidChars(prodInOut);
         return prodInOut;
     }
-
+    // 添加清理方法
+    private void cleanInvalidChars(ProdInout prodInOut) {
+        if(prodInOut == null) return;
+        // 清理主表字段
+        prodInOut.setPiTitle(cleanInvalidXmlChars(prodInOut.getPiTitle()));
+        prodInOut.setPiRemark(cleanInvalidXmlChars(prodInOut.getPiRemark()));
+        prodInOut.setPiLxr(cleanInvalidXmlChars(prodInOut.getPiLxr()));
+        prodInOut.setPiLxdh(cleanInvalidXmlChars(prodInOut.getPiLxdh()));
+        prodInOut.setPiKhdz(cleanInvalidXmlChars(prodInOut.getPiKhdz()));
+        // 清理明细字段
+        if(prodInOut.getDetails() != null) {
+            for(Prodiodetail detail : prodInOut.getDetails()) {
+                detail.setPdProdname(cleanInvalidXmlChars(detail.getPdProdname()));
+                detail.setPdRemark(cleanInvalidXmlChars(detail.getPdRemark()));
+                detail.setPdCustProdCode(cleanInvalidXmlChars(detail.getPdCustProdCode()));
+                detail.setPdCustProdDetail(cleanInvalidXmlChars(detail.getPdCustProdDetail()));
+                detail.setPdCustProdSpec(cleanInvalidXmlChars(detail.getPdCustProdSpec()));
+            }
+        }
+    }
+    private String cleanInvalidXmlChars(String input) {
+        if (input == null) return null;
+        // 保留连字符"-"、点"."和斜杠"/"
+        return input.replaceAll("[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F&&[^-./]]", " ");
+    }
     private ProdInout queryMainTable(String master, String id) {
         String sql = new StringBuilder()
                 .append("select pi_Wmsordertype piOrderType,pi_id piId,pi_inoutno piInoutno,pi_class piClass,pi_type piType,")
@@ -282,7 +308,6 @@ public class DocCommonServiceImpl implements DocCommonService {
         //TODO 写入表:WMS_IO_RECORD_SEQ
         return doPostToWms(xml,method);
     }
-
     @Override
     public String sendInToWms(ProdInout prodInOut,String masterName){
         EntryOrder entryOrder = new EntryOrder();

+ 7 - 7
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -47,7 +47,7 @@ public class UasEisApplicationTests {
 		String master = "YUEJH";
 		String emCode = "ADMIN";
 		SqlRowList toSendList = baseDao.queryForRowSet("select pi_id,pi_inoutno,pi_class,ds_table from "+master+".prodinout left join documentsetup on ds_name = pi_class " +
-				"where PI_INOUTNO ='SD25063480'"+
+				"where PI_INOUTNO ='SD25064606'"+
 //				" -- pi_status ='未过账' and PI_WMSORDERTYPE is not null and nvl(PI_SENDWMSFLAG,0) = 0 and ds_inorout in ('-IN','OUT') AND PI_CLASS = '拨出单'" +
 				" order by pi_id");
 		if(toSendList.hasNext()){
@@ -57,12 +57,12 @@ public class UasEisApplicationTests {
 				// 调用待测方法
 				Map<String, Object> result = erpService.sendIO(master, id, emCode,caller);
 				System.out.println("result:"+result.toString());
-//				if (result.get("success") != null && "true".equals(result.get("success").toString())) {
-//					baseDao.execute("update "+master+".prodinout set "+(StringUtil.hasText(result.get("OrderId"))?"pi_wmsordercode='"+result.get("OrderId")+"',":"")+"pi_sendwmsstatus='同步成功' ,pi_sendwmserr=null,pi_sendwmsflag=-1 where pi_id = "+id);
-//				}else{
-//					String message = result.get("message") == null ? "同步失败" : result.get("message").toString().replaceAll("'", "''");
-//					baseDao.execute("update "+master+".prodinout set pi_sendwmsstatus='同步失败',pi_sendwmserr=('" + message + "') where pi_id = " + id);
-//				}
+				if (result.get("success") != null && "true".equals(result.get("success").toString())) {
+					baseDao.execute("update "+master+".prodinout set "+(StringUtil.hasText(result.get("OrderId"))?"pi_wmsordercode='"+result.get("OrderId")+"',":"")+"pi_sendwmsstatus='同步成功' ,pi_sendwmserr=null,pi_sendwmsflag=-1 where pi_id = "+id);
+				}else{
+					String message = result.get("message") == null ? "同步失败" : result.get("message").toString().replaceAll("'", "''");
+					baseDao.execute("update "+master+".prodinout set pi_sendwmsstatus='同步失败',pi_sendwmserr=('" + message + "') where pi_id = " + id);
+				}
 			}
 		}
 	}