From 22a8875b365c568790f6115ceb6acf0f49bb8c47 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期四, 10 四月 2025 15:43:29 +0800
Subject: [PATCH] 测试写入数据库

---
 src/main/java/com/gs/xiaomi/service/impl/DeliveryMainServiceImpl.java     |   31 +
 src/main/java/com/gs/xiaomi/service/DeliveryMainService.java              |   14 
 src/main/resources/mapper/DeliveryDetailMapper.xml                        |    7 
 src/main/java/com/gs/xiaomi/XiaomiApplication.java                        |    4 
 src/main/resources/mapper/DeliveryMainMapper.xml                          |   11 
 src/main/java/com/gs/xiaomi/service/PackageDetailService.java             |   13 
 src/main/java/com/gs/xiaomi/service/impl/DeliveryDetailServiceImpl.java   |   26 +
 src/main/java/com/gs/xiaomi/dto/EtHeader.java                             |    6 
 src/main/java/com/gs/xiaomi/mapper/DeliveryDetailMapper.java              |   18 
 src/main/java/com/gs/xiaomi/service/DeliveryDetailService.java            |   13 
 src/main/java/com/gs/xiaomi/entity/LogisticsPackage.java                  |  171 ++++++
 src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java                   |  144 -----
 src/main/java/com/gs/xiaomi/service/impl/PackageDetailServiceImpl.java    |   26 +
 src/main/resources/mapper/LogisticsPackageMapper.xml                      |    7 
 src/main/java/com/gs/xiaomi/service/LogisticsPackageService.java          |   13 
 src/main/java/com/gs/xiaomi/entity/DeliveryMain.java                      |  308 ++++++++++++
 src/main/java/com/gs/xiaomi/service/XM104Service.java                     |  167 ++++++
 src/main/java/com/gs/xiaomi/entity/DeliveryDetail.java                    |  196 +++++++
 src/main/java/com/gs/xiaomi/mapper/DeliveryMainMapper.java                |   19 
 src/main/java/com/gs/xiaomi/service/impl/LogisticsPackageServiceImpl.java |   26 +
 src/main/java/com/gs/xiaomi/entity/PackageDetail.java                     |  171 ++++++
 src/main/java/com/gs/xiaomi/mapper/PackageDetailMapper.java               |   18 
 src/main/java/com/gs/xiaomi/service/SoapApiService.java                   |   13 
 src/main/resources/mapper/PackageDetailMapper.xml                         |    7 
 src/main/java/com/gs/xiaomi/mapper/LogisticsPackageMapper.java            |   18 
 src/main/resources/application.yml                                        |   10 
 26 files changed, 1,304 insertions(+), 153 deletions(-)

diff --git a/src/main/java/com/gs/xiaomi/XiaomiApplication.java b/src/main/java/com/gs/xiaomi/XiaomiApplication.java
index 4043c9c..c5a8a8c 100644
--- a/src/main/java/com/gs/xiaomi/XiaomiApplication.java
+++ b/src/main/java/com/gs/xiaomi/XiaomiApplication.java
@@ -1,9 +1,13 @@
 package com.gs.xiaomi;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 @SpringBootApplication
+@MapperScan(value = " com.gs.xiaomi.mapper")
+@EnableScheduling
 public class XiaomiApplication {
 
     public static void main(String[] args) {
diff --git a/src/main/java/com/gs/xiaomi/dto/EtHeader.java b/src/main/java/com/gs/xiaomi/dto/EtHeader.java
index 60dbaf1..74675c6 100644
--- a/src/main/java/com/gs/xiaomi/dto/EtHeader.java
+++ b/src/main/java/com/gs/xiaomi/dto/EtHeader.java
@@ -199,13 +199,13 @@
     /* 闄勪欢淇℃伅鍧� */
     @XmlElementWrapper(name = "items")
     @XmlElement(name = "item")
-    private List<Item> items;// 琛岄」鐩槑缁�
+    private List<Item> items;// 琛岄」鐩槑缁�  瀵瑰簲琛―ELIVERY_DETAIL
 
     @XmlElementWrapper(name = "box_items")
     @XmlElement(name = "boxItems")
-    private List<BoxItem> boxItems; // 绠卞崟鏄庣粏
+    private List<BoxItem> boxItems; // 绠卞崟鏄庣粏  瀵瑰簲琛≒ACKAGE_DETAIL
 
     @XmlElementWrapper(name = "box_sums")
     @XmlElement(name = "boxSum")
-    private List<BoxSum> boxSums; // 绠辨暟姹囨��
+    private List<BoxSum> boxSums; // 绠辨暟姹囨��  瀵瑰簲琛↙OGISTICS_PACKAGE
 }
diff --git a/src/main/java/com/gs/xiaomi/entity/DeliveryDetail.java b/src/main/java/com/gs/xiaomi/entity/DeliveryDetail.java
new file mode 100644
index 0000000..e98dd06
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/entity/DeliveryDetail.java
@@ -0,0 +1,196 @@
+package com.gs.xiaomi.entity;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @TableName DELIVERY_DETAIL
+ */
+@TableName(value = "DELIVERY_DETAIL")
+@Data
+@KeySequence(value = "SEQ_DELIVERY_DETAIL", dbType = DbType.ORACLE)
+public class DeliveryDetail {
+    /**
+     * SEQ_DELIVERY_DETAIL
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * DELIVERY_MAIN鐨刬d
+     */
+    private Long pid;
+
+    /**
+     * 閫佽揣鍗曞彿锛堜富涓氬姟鏍囪瘑锛�
+     */
+    private String zzasn;
+
+    /**
+     * 閫佽揣鍗曡鍙�
+     */
+    private String zzitemId;
+
+    /**
+     * 閲囪喘鍑瘉鍙凤紙PO鍗曞彿锛�
+     */
+    private String zzpoNo;
+
+    /**
+     * 閲囪喘璁㈠崟琛岄」鐩�
+     */
+    private String zzpoItemId;
+
+    /**
+     * 灏忕背閫�鎹㈣揣鍗曞彿
+     */
+    private String zzreqnr;
+
+    /**
+     * 閫�鎹㈣揣鐢宠鍗曡鍙�
+     */
+    private String zzreqln;
+
+    /**
+     * 灏忕背鍐呴儴鐗╂枡缂栫爜
+     */
+    private String zzproductId;
+
+    /**
+     * 宸ュ巶瀹為檯浣跨敤鏂欏彿
+     */
+    private String zzvproductId;
+
+    /**
+     * 搴撳瓨鍗曚綅缂栫爜
+     */
+    private String zzsku;
+
+    /**
+     * 鐗╂枡鎻忚堪锛堝锛氭墜鏈哄睆骞曠粍浠讹級
+     */
+    private String maktx;
+
+    /**
+     * 浜у搧鍨嬪彿锛堢ず渚嬶細Xiaomi 14 Ultra锛�
+     */
+    private String modelnumber;
+
+    /**
+     * 璁㈠崟闇�姹傛暟閲�
+     */
+    private String zzquantity;
+
+    /**
+     * 璁¢噺鍗曚綅锛堝锛氫釜/绠憋級
+     */
+    private String zzunit;
+
+    /**
+     * 鏈畬鎴愭暟閲忥紙寰呰ˉ璐ч噺锛�
+     */
+    private String zzopenQty;
+
+    /**
+     * 瀹為檯鏀惰揣鏁伴噺
+     */
+    private String actGrQty;
+
+    /**
+     * Shipment鎵规鏁伴噺
+     */
+    private String shipmentidNum;
+
+    /**
+     * 鍝佺墝鍚嶇О锛堝锛歑iaomi锛�
+     */
+    private String brand;
+
+    /**
+     * 鐢熶骇鍦帮紙绀轰緥锛氫腑鍥芥繁鍦筹級
+     */
+    private String place;
+
+    /**
+     * 鍝佺墝绫诲瀷锛堣嚜鏈�/ODM/OEM锛�
+     */
+    private String brandType;
+
+    /**
+     * 鐗╂祦鎵规鍞竴鏍囪瘑
+     */
+    private String zshipmentId;
+
+    /**
+     * 璇︾粏閰嶉�佸湴鍧�锛堢渷甯傚尯琛楅亾闂ㄧ墝鍙凤級
+     */
+    private String addressDetail;
+
+    /**
+     * 璋冨嚭椤圭洰鍙凤紙璋冩嫧鏉ユ簮鏍囪瘑锛�
+     */
+    private String bednr;
+
+    /**
+     * 璋冨嚭浠撶被鍨嬶紙鎴愬搧浠�/鍘熸枡浠擄級
+     */
+    private String wareTypeFrom;
+
+    /**
+     * 璋冨叆浠撶被鍨�
+     */
+    private String wareTypeTo;
+
+    /**
+     * 鐗╂帶璋冩嫧鍗曞彿
+     */
+    private String xmstoNo;
+
+    /**
+     * 璋冩嫧鍗曡椤�
+     */
+    private String xmstoItemNo;
+
+    /**
+     * 鏈�鍚庝慨鏀规椂闂达紙鏍煎紡锛歽yyyMMddHHmmss锛�
+     */
+    private String changedAt;
+
+    /**
+     * 鏁版嵁鍒涘缓鏃堕棿锛堟牸寮忥細yyyyMMddHHmmss锛�
+     */
+    private String createdAt;
+
+    /**
+     * 鍏宠仈椤圭洰鏈哄瀷锛堝鍊奸�楀彿鍒嗛殧锛�
+     */
+    private String appModels;
+
+    /**
+     * 澶栭儴绯荤粺鍑瘉鍙凤紙濡侲RP鍗曞彿锛�
+     */
+    private String extDocNo;
+
+    /**
+     * 澶栭儴鍑瘉琛岄」鐩�
+     */
+    private String extDocItem;
+
+    /**
+     * 娴峰叧HS缂栫爜锛堣繘鍑哄彛鎶ュ叧鐢級
+     */
+    private String batchId;
+
+    /**
+     * 浼樺厛閲囪喘鏍囪瘑锛堢揣鎬ュ鏂欐爣璁帮級
+     */
+    private String batchRow;
+
+    /**
+     * 涓插彿绠$悊鏍囪瘑锛圷/N锛屾帶鍒跺簭鍒楀彿閲囬泦锛�
+     */
+    private String isIdentification;
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/xiaomi/entity/DeliveryMain.java b/src/main/java/com/gs/xiaomi/entity/DeliveryMain.java
new file mode 100644
index 0000000..e09aabb
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/entity/DeliveryMain.java
@@ -0,0 +1,308 @@
+package com.gs.xiaomi.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @TableName DELIVERY_MAIN
+ */
+@TableName(value = "DELIVERY_MAIN")
+@Data
+public class DeliveryMain {
+    /**
+     * SEQ_DELIVERY_MAIN
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 閫佽揣鍗曞彿
+     */
+    private String zzasn;
+
+    /**
+     * 鍗曟嵁绫诲瀷(鏅��/绱ф��)
+     */
+    private String zzasnType;
+
+    /**
+     * 鏀惰揣绫诲瀷(鏍囧噯/閫�璐�)
+     */
+    private String migoType;
+
+    /**
+     * 椤圭洰璋冩嫧缂栧彿
+     */
+    private String zrproject;
+
+    /**
+     * 閲囪喘缁勭粐缂栫爜
+     */
+    private String ekorg;
+
+    /**
+     * 閲囪喘缁勭粐鎻忚堪
+     */
+    private String ekotx;
+
+    /**
+     * 璋冨嚭搴撳瓨缁勭粐缂栫爜
+     */
+    private String stockOrgFrom;
+
+    /**
+     * 璋冨嚭搴撳瓨鎻忚堪
+     */
+    private String stockOrgFromDesc;
+
+    /**
+     * 璋冨叆搴撳瓨缁勭粐缂栫爜
+     */
+    private String stockOrgTo;
+
+    /**
+     * 璋冨叆搴撳瓨鎻忚堪
+     */
+    private String stockOrgToDesc;
+
+    /**
+     * 渚涘簲鍟嗙紪鐮�(绀轰緥鍊�:130479)
+     */
+    private String lifnr;
+
+    /**
+     * 渚涘簲鍟嗗叏绉�
+     */
+    private String vendorName;
+
+    /**
+     * 渚涘簲鍟嗙畝绉�
+     */
+    private String shortName;
+
+    /**
+     * HUB渚涘簲鍟嗙紪鐮�
+     */
+    private String hubLifnr;
+
+    /**
+     * 鎵胯繍鍟嗗悕绉�
+     */
+    private String zzcarrier;
+
+    /**
+     * 鎵胯繍鍗曞彿
+     */
+    private String zzcarrierNo;
+
+    /**
+     * 杩愯緭鍗曟嵁鍙�
+     */
+    private String roadTransportNo;
+
+    /**
+     * 杩愯緭杞﹀瀷
+     */
+    private String zztransModel;
+
+    /**
+     * 杞︾墝鍙�
+     */
+    private String zzlicenseNumb;
+
+    /**
+     * 閾呭皝鍙�
+     */
+    private String zzsealNo;
+
+    /**
+     * 鐗╂祦鍗曞彿
+     */
+    private String logisticsNo;
+
+    /**
+     * 鐗╂祦鍏徃缂栫爜
+     */
+    private String logisticsCompany;
+
+    /**
+     * 鐗╂祦鍏徃鍏ㄧО
+     */
+    private String logisticsCompanyName;
+
+    /**
+     * 鍙戣揣浜哄鍚�
+     */
+    private String zzshipName;
+
+    /**
+     * 鍙戣揣浜虹數璇�
+     */
+    private String zzshipPhon;
+
+    /**
+     * 鍙告満濮撳悕
+     */
+    private String zzdriverName;
+
+    /**
+     * 鍙告満鐢佃瘽
+     */
+    private String zzdriverPhon;
+
+    /**
+     * 鎵嬫満灏惧彿
+     */
+    private String last4PhoneNumber;
+
+    /**
+     * 鏀惰揣浜�
+     */
+    private String receiver;
+
+    /**
+     * 鏀惰揣鐢佃瘽
+     */
+    private String receivePhone;
+
+    /**
+     * 鏈�缁堟敹璐т汉
+     */
+    private String finalContact;
+
+    /**
+     * 鏈�缁堣仈绯荤數璇�
+     */
+    private String finalPhone;
+
+    /**
+     * 鍙戣揣鍦板潃
+     */
+    private String zzshipAddr;
+
+    /**
+     * 鏍囧噯鏀惰揣鍦板潃
+     */
+    private String zzreceiveAddr;
+
+    /**
+     * 瀹為檯鏀惰揣鍦板潃
+     */
+    private String receiveAddr;
+
+    /**
+     * 鏈�缁堥厤閫佸湴鍧�
+     */
+    private String finalAddr;
+
+    /**
+     * 鏈�缁堟敹璐у崟浣�
+     */
+    private String finalCompany;
+
+    /**
+     * 鍙戣揣鏃ユ湡(yyyyMMdd)
+     */
+    private String zzshipDate;
+
+    /**
+     * 棰勮鍒拌揣鏃ユ湡(yyyyMMdd)
+     */
+    private String zzarriveTime;
+
+    /**
+     * 棰勮鍒拌揣鏃堕棿(HHmm)
+     */
+    private String zzarriveTime1;
+
+    /**
+     * 棰勭害鏃ユ湡(yyyyMMdd)
+     */
+    private String reserveDate;
+
+    /**
+     * 棰勭害鏃堕棿娈�
+     */
+    private String reserveTime;
+
+    /**
+     * 浠撳簱鍞竴鏍囪瘑
+     */
+    private String zzwarehouseId;
+
+    /**
+     * 鏀惰揣浠撳簱ID
+     */
+    private String receiveWarehouseId;
+
+    /**
+     * 浠撳簱绠�绉�
+     */
+    private String receiveWarehouseShort;
+
+    /**
+     * 鍏徃浠g爜
+     */
+    private String bukrs;
+
+    /**
+     * 鍗曟嵁鐘舵��(鏂板缓/宸插彂璐�/宸插畬鎴�)
+     */
+    private String status;
+
+    /**
+     * 鏉$爜鐘舵��(宸蹭笂浼�/鏈笂浼�)
+     */
+    private String statusSn;
+
+    /**
+     * 浣滃簾鏍囪瘑(Y/N)
+     */
+    private String zzcanceled;
+
+    /**
+     * 浠锋牸瀹℃牳鐘舵��
+     */
+    private String priceStat;
+
+    /**
+     * 浠撳簱浣滀笟鎸囧绫诲瀷
+     */
+    private String purchaseMode;
+
+    /**
+     * 閲囪喘妯″紡(VMI/JIT)
+     */
+    private String purchaseMode2;
+
+    /**
+     * 浜ゆ枡妯″紡(鑷彁/閰嶉��)
+     */
+    private String businessModel;
+
+    /**
+     * 鍗曟嵁鎻忚堪
+     */
+    private String asnDesc;
+
+    /**
+     * 杩涘彛鎶ュ叧鏍囪瘑(Y/N)
+     */
+    private String imclr;
+
+    /**
+     * 澶栭儴宸ュ巶浠g爜
+     */
+    private String lifnrDg;
+
+    /**
+     * 鐢熶骇绫诲瀷(鑷埗/澶栬喘)
+     */
+    private String productType;
+
+    /**
+     * 椹鹃┒璇佸彿
+     */
+    private String zzdriverLicense;
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/xiaomi/entity/LogisticsPackage.java b/src/main/java/com/gs/xiaomi/entity/LogisticsPackage.java
new file mode 100644
index 0000000..d6e8217
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/entity/LogisticsPackage.java
@@ -0,0 +1,171 @@
+package com.gs.xiaomi.entity;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @TableName LOGISTICS_PACKAGE
+ */
+@TableName(value = "LOGISTICS_PACKAGE")
+@Data
+@KeySequence(value = "LOGISTICS_PACKAGE_SEQ", dbType = DbType.ORACLE)
+public class LogisticsPackage {
+    /**
+     * LOGISTICS_PACKAGE_SEQ
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * DELIVERY_MAIN鐨刬d
+     */
+    private Long pid;
+
+    /**
+     * 绠卞崟娴佹按鍙�
+     */
+    private String boxSeq;
+
+    /**
+     * 鐗╃悊鍖呰鏍囪瘑
+     */
+    private String boxNo;
+
+    /**
+     * 灏忕背涓撶敤鍔犲瘑绠卞彿锛圓ES-256鍔犲瘑瀛樺偍锛�
+     */
+    private String cartonid;
+
+    /**
+     * 鍏ㄧ悆缁熶竴閫佽揣鍗曞彿锛堝叧鑱旂墿娴佺郴缁燂級
+     */
+    private String zzasn;
+
+    /**
+     * SAP鏍囧噯鐗╂枡缂栫爜
+     */
+    private String matnr;
+
+    /**
+     * 澶氳瑷�鐗╂枡鎻忚堪
+     */
+    private String maktx;
+
+    /**
+     * 瀹為檯鍙戣揣浠舵暟锛堟渶灏忛攢鍞崟浣嶇粺璁★級
+     */
+    private String pcQty;
+
+    /**
+     * 鐗╂祦鎵樼洏缂栧彿
+     */
+    private String lotNo;
+
+    /**
+     * 鍗曚欢鍑�閲�
+     */
+    private String ntgewP;
+
+    /**
+     * 鍗曠姣涢噸
+     */
+    private String brgewP;
+
+    /**
+     * 鎵樼洏瑁呰浇瑙勬牸
+     */
+    private String lotSize;
+
+    /**
+     * 鏍囧噯绠变綋灏哄
+     */
+    private String boxSize;
+
+    /**
+     * 鍚墭鐩樻�讳綋绉�
+     */
+    private String totalVlume;
+
+    /**
+     * 鎵樼洏闀垮害
+     */
+    private String lM;
+
+    /**
+     * 鎵樼洏瀹藉害
+     */
+    private String wM;
+
+    /**
+     * 鎵樼洏鍫嗛珮锛堝畨鍏ㄩ檺楂橈紝闃插�惧�掓帶鍒讹級
+     */
+    private String hM;
+
+    /**
+     * 閲囪喘璁㈠崟鍙凤紙鍏宠仈SAP閲囪喘鍑瘉锛�
+     */
+    private String ebeln;
+
+    /**
+     * 閲囪喘璁㈠崟琛屽彿锛堢簿纭埌鐗╂枡灞傜骇锛�
+     */
+    private String ebelp;
+
+    /**
+     * 鍗曠瀹归噺瑙勬牸锛堥槻瓒呰鏍¢獙锛�
+     */
+    private String boxSpec;
+
+    /**
+     * 鎬诲寘瑁呯鏁帮紙涓庨噰璐鍗曞尮閰嶆牎楠岋級
+     */
+    private String boxQty;
+
+    /**
+     * 鎬诲噣閲嶏紙鍏紡锛歯tgew_p 脳 pc_qty锛�
+     */
+    private String ntgew;
+
+    /**
+     * 鎬绘瘺閲嶏紙鍏紡锛歜rgew_p 脳 box_qty锛�
+     */
+    private String brgew;
+
+    /**
+     * 鍥介檯璁¢噺鍗曚綅锛圲N/CEFACT鏍囧噯锛�
+     */
+    private String meins;
+
+    /**
+     * 鍝佺墝璁よ瘉鏍囪瘑锛堥渶娴峰叧澶囨锛�
+     */
+    private String brand;
+
+    /**
+     * 鍘熶骇鍦扮紪鐮侊紙鑱斿悎鍥経N/LOCODE鏍囧噯锛�
+     */
+    private String place;
+
+    /**
+     * 鎶ュ叧鏍囪瘑锛堟帶鍒舵姤鍏虫祦绋嬭Е鍙戯級
+     */
+    private String imclr;
+
+    /**
+     * 鍥介檯鍨嬪彿缂栫爜锛堝叏鐞冨競鍦哄敮涓�鏍囪瘑锛�
+     */
+    private String modelnumber;
+
+    /**
+     * 娴峰叧鐩戠鏉′欢锛堝3C/鑳芥晥鏍囪瘑锛�
+     */
+    private String matnrJg;
+
+    /**
+     * 妫�楠屾鐤唬鐮侊紙濡侳DA/CE璁よ瘉锛�
+     */
+    private String matnrJyjy;
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/xiaomi/entity/PackageDetail.java b/src/main/java/com/gs/xiaomi/entity/PackageDetail.java
new file mode 100644
index 0000000..b8b9ae7
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/entity/PackageDetail.java
@@ -0,0 +1,171 @@
+package com.gs.xiaomi.entity;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @TableName PACKAGE_DETAIL
+ */
+@TableName(value = "PACKAGE_DETAIL")
+@Data
+@KeySequence(value = "PACKAGE_DETAIL_SEQ", dbType = DbType.ORACLE)
+public class PackageDetail {
+    /**
+     * PACKAGE_DETAIL_SEQ
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * DELIVERY_MAIN鐨刬d
+     */
+    private Long pid;
+
+    /**
+     * 绠卞崟娴佹按鍙凤紙鎸夊勾鏈堟棩+搴忓垪鐢熸垚锛�
+     */
+    private String boxSeq;
+
+    /**
+     * 鍖呰绠卞敮涓�鏍囪瘑锛堣鍒欙細椤圭洰+鏃ユ湡+娴佹按锛�
+     */
+    private String boxNo;
+
+    /**
+     * 灏忕背涓撶敤鍔犲瘑绠卞彿锛圫HA-256绠楁硶鍔犲瘑锛�
+     */
+    private String cartonid;
+
+    /**
+     * 鍏ㄧ悆缁熶竴閫佽揣鍗曞彿锛堜富涓氬姟鏍囪瘑锛�
+     */
+    private String zzasn;
+
+    /**
+     * 鍥介檯鐗╂枡缂栫爜锛堝叏鐞冨敮涓�鎬т繚闅滐級
+     */
+    private String matnr;
+
+    /**
+     * 澶氳瑷�鐗╂枡鎻忚堪锛堟敮鎸佷腑/鑻�/瑗胯锛�
+     */
+    private String maktx;
+
+    /**
+     * 瀹為檯鍙戣揣浠舵暟锛堟寜鏈�灏忛攢鍞崟浣嶇粺璁★級
+     */
+    private String pcQty;
+
+    /**
+     * 鎵樼洏鍞竴缂栧彿锛堜笌鐗╂祦绯荤粺鑱斿姩锛�
+     */
+    private String lotNo;
+
+    /**
+     * 鍗曚欢鍑�閲嶏紙绮剧‘鍒板厠锛岀敤浜庢姤鍏筹級
+     */
+    private String ntgewP;
+
+    /**
+     * 鍗曠姣涢噸锛堝惈鍖呰鏉愭枡閲嶉噺锛�
+     */
+    private String brgewP;
+
+    /**
+     * 鎵樼洏瑁呰浇瑙勬牸锛堟渶澶ф壙杞界鏁帮級
+     */
+    private String lotSize;
+
+    /**
+     * 鏍囧噯鍖栫浣撳昂瀵革紙闀縳瀹絰楂橈級
+     */
+    private String boxSize;
+
+    /**
+     * 鍚墭鐩樻�讳綋绉紙鐢ㄤ簬杩愯緭鎴愭湰璁$畻锛�
+     */
+    private String totalVlume;
+
+    /**
+     * 鎬荤鏁帮紙涓庨噰璐鍗曟牎楠岋級
+     */
+    private String boxQty;
+
+    /**
+     * 閲囪喘璁㈠崟鍙凤紙鍏宠仈ERP绯荤粺锛�
+     */
+    private String ebeln;
+
+    /**
+     * 閲囪喘璁㈠崟琛屽彿锛堢簿纭埌鐗╂枡灞傜骇锛�
+     */
+    private String ebelp;
+
+    /**
+     * 鍗曠瀹归噺锛堜欢/绠憋紝闃茶秴瑁呮帶鍒讹級
+     */
+    private String boxSpec;
+
+    /**
+     * 鎬诲噣閲嶏紙鑷姩璁$畻锛氬崟浠跺噣閲嵜楁�讳欢鏁帮級
+     */
+    private String ntgew;
+
+    /**
+     * 鎬绘瘺閲嶏紙鍚墭鐩樺拰鍖呰鏉愭枡锛�
+     */
+    private String brgew;
+
+    /**
+     * 鍥介檯璁¢噺鍗曚綅锛圲N/CEFACT鏍囧噯锛�
+     */
+    private String meins;
+
+    /**
+     * 鎵樼洏闀垮害锛堢鍚圛SO 6780鏍囧噯锛�
+     */
+    private String lM;
+
+    /**
+     * 鎵樼洏瀹藉害锛堟娲叉爣鍑嗭細1.0m锛�
+     */
+    private String wM;
+
+    /**
+     * 鎵樼洏鍫嗛珮锛堝畨鍏ㄩ檺楂樻爣璇嗭級
+     */
+    private String hM;
+
+    /**
+     * 鍝佺墝璁よ瘉鏍囪瘑锛堥渶娴峰叧澶囨锛�
+     */
+    private String brand;
+
+    /**
+     * 鍘熶骇鍦扮紪鐮侊紙鑱斿悎鍥経N/LOCODE锛�
+     */
+    private String place;
+
+    /**
+     * 娴峰叧鎶ュ叧鏍囪瘑锛圷-闇�鎶ュ叧/N-鍏嶆姤鍏筹級
+     */
+    private String imclr;
+
+    /**
+     * 鍥介檯鍨嬪彿缂栫爜锛堝叏鐞冨競鍦哄敮涓�锛�
+     */
+    private String modelnumber;
+
+    /**
+     * 娴峰叧鐩戠鏉′欢锛堝3C/鑳芥晥鏍囪瘑锛�
+     */
+    private String matnrJg;
+
+    /**
+     * 妫�楠屾鐤唬鐮侊紙濡侳DA/CE璁よ瘉锛�
+     */
+    private String matnrJyjy;
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/xiaomi/mapper/DeliveryDetailMapper.java b/src/main/java/com/gs/xiaomi/mapper/DeliveryDetailMapper.java
new file mode 100644
index 0000000..28e1f07
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/mapper/DeliveryDetailMapper.java
@@ -0,0 +1,18 @@
+package com.gs.xiaomi.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gs.xiaomi.entity.DeliveryDetail;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怐ELIVERY_DETAIL銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2025-04-10 14:16:44
+ * @Entity generator.domain.DeliveryDetail
+ */
+public interface DeliveryDetailMapper extends BaseMapper<DeliveryDetail> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xiaomi/mapper/DeliveryMainMapper.java b/src/main/java/com/gs/xiaomi/mapper/DeliveryMainMapper.java
new file mode 100644
index 0000000..8079827
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/mapper/DeliveryMainMapper.java
@@ -0,0 +1,19 @@
+package com.gs.xiaomi.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gs.xiaomi.entity.DeliveryMain;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怐ELIVERY_MAIN銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2025-04-10 14:16:52
+ * @Entity generator.domain.DeliveryMain
+ */
+public interface DeliveryMainMapper extends BaseMapper<DeliveryMain> {
+
+    long getNextVal();
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xiaomi/mapper/LogisticsPackageMapper.java b/src/main/java/com/gs/xiaomi/mapper/LogisticsPackageMapper.java
new file mode 100644
index 0000000..ede5ecd
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/mapper/LogisticsPackageMapper.java
@@ -0,0 +1,18 @@
+package com.gs.xiaomi.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gs.xiaomi.entity.LogisticsPackage;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怢OGISTICS_PACKAGE銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2025-04-10 14:17:13
+ * @Entity generator.domain.LogisticsPackage
+ */
+public interface LogisticsPackageMapper extends BaseMapper<LogisticsPackage> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xiaomi/mapper/PackageDetailMapper.java b/src/main/java/com/gs/xiaomi/mapper/PackageDetailMapper.java
new file mode 100644
index 0000000..e506089
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/mapper/PackageDetailMapper.java
@@ -0,0 +1,18 @@
+package com.gs.xiaomi.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gs.xiaomi.entity.PackageDetail;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怭ACKAGE_DETAIL銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2025-04-10 14:17:48
+ * @Entity generator.domain.PackageDetail
+ */
+public interface PackageDetailMapper extends BaseMapper<PackageDetail> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xiaomi/service/DeliveryDetailService.java b/src/main/java/com/gs/xiaomi/service/DeliveryDetailService.java
new file mode 100644
index 0000000..a9f8b42
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/DeliveryDetailService.java
@@ -0,0 +1,13 @@
+package com.gs.xiaomi.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gs.xiaomi.entity.DeliveryDetail;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怐ELIVERY_DETAIL銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2025-04-10 14:16:44
+ */
+public interface DeliveryDetailService extends IService<DeliveryDetail> {
+
+}
diff --git a/src/main/java/com/gs/xiaomi/service/DeliveryMainService.java b/src/main/java/com/gs/xiaomi/service/DeliveryMainService.java
new file mode 100644
index 0000000..ca8c008
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/DeliveryMainService.java
@@ -0,0 +1,14 @@
+package com.gs.xiaomi.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gs.xiaomi.entity.DeliveryMain;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怐ELIVERY_MAIN銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2025-04-10 14:16:52
+ */
+public interface DeliveryMainService extends IService<DeliveryMain> {
+
+    long getId();
+}
diff --git a/src/main/java/com/gs/xiaomi/service/LogisticsPackageService.java b/src/main/java/com/gs/xiaomi/service/LogisticsPackageService.java
new file mode 100644
index 0000000..d33a147
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/LogisticsPackageService.java
@@ -0,0 +1,13 @@
+package com.gs.xiaomi.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gs.xiaomi.entity.LogisticsPackage;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怢OGISTICS_PACKAGE銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2025-04-10 14:17:13
+ */
+public interface LogisticsPackageService extends IService<LogisticsPackage> {
+
+}
diff --git a/src/main/java/com/gs/xiaomi/service/PackageDetailService.java b/src/main/java/com/gs/xiaomi/service/PackageDetailService.java
new file mode 100644
index 0000000..7f883fd
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/PackageDetailService.java
@@ -0,0 +1,13 @@
+package com.gs.xiaomi.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gs.xiaomi.entity.PackageDetail;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怭ACKAGE_DETAIL銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2025-04-10 14:17:48
+ */
+public interface PackageDetailService extends IService<PackageDetail> {
+
+}
diff --git a/src/main/java/com/gs/xiaomi/service/SoapApiService.java b/src/main/java/com/gs/xiaomi/service/SoapApiService.java
index 696917a..e563848 100644
--- a/src/main/java/com/gs/xiaomi/service/SoapApiService.java
+++ b/src/main/java/com/gs/xiaomi/service/SoapApiService.java
@@ -12,11 +12,19 @@
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
 import java.io.StringReader;
+import java.util.concurrent.TimeUnit;
 
 @Service
 public class SoapApiService {
 
-    private static final OkHttpClient client = new OkHttpClient.Builder().build();
+
+    private final OkHttpClient client;
+
+    public SoapApiService() {
+        this.client = new OkHttpClient.Builder().connectTimeout(3000, TimeUnit.SECONDS) // Set connection timeout
+                .readTimeout(90, TimeUnit.SECONDS)    // Set read timeout
+                .build();
+    }
 
     public BizDocumentResult callAndParse(String url, ZfmWsApiRequest request) throws Exception {
         String soapXml = SoapXmlBuilder.build(request);
@@ -53,13 +61,10 @@
         Request request = new Request.Builder()
                 .url(url)
                 .method("POST", body)
-//                .addHeader("User-Agent", "Apifox/1.0.0 (https://apifox.com)")
                 .addHeader("Content-Type", "application/xml")
                 .addHeader("Authorization", "Basic " + auth)
                 .addHeader("Accept", "*/*")
-//                .addHeader("Host", "mipoq.p.mi.com")
                 .addHeader("Connection", "keep-alive")
-//                .addHeader("Cookie", "saplb_*=(J2EE4281420)4281450; MYSAPSSO2=AjExMDAgABJwb3J0YWw6UkZDWkpYSUFPQlWIAAdkZWZhdWx0AQALUkZDWkpYSUFPQlUCAAMwMDADAANQT1EEAAwyMDI1MDQwOTAwMTcFAAQAAAAICgALUkZDWkpYSUFPQlX%2FAQUwggEBBgkqhkiG9w0BBwKggfMwgfACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHATGB0DCBzQIBATAiMB0xDDAKBgNVBAMTA1BPUTENMAsGA1UECxMESjJFRQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjUwNDA5MDAxNzU2WjAjBgkqhkiG9w0BCQQxFgQUvvJ1HSnOLckboGYaMR9Wiaem6z4wCQYHKoZIzjgEAwQvMC0CFQDKLPrpUC19VM2gcslWaHAnh7dfxQIUNs2dTxwGcKdNU%2FdAQPs4f08yaw4%3D; JSESSIONID=_6bPldDq9mFJPXEd11bc-GvrWMAVlgFqVEEA_SAPF-GrpRbcuqxMK_gShBYGdmdp; JSESSIONMARKID=QPmRVwktCDxMazp0fUbEMC40LWvmuqOMUbIGpUQQA")
                 .build();
 
         return client.newCall(request).execute();
diff --git a/src/main/java/com/gs/xiaomi/service/XM104Service.java b/src/main/java/com/gs/xiaomi/service/XM104Service.java
new file mode 100644
index 0000000..6c15296
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/XM104Service.java
@@ -0,0 +1,167 @@
+package com.gs.xiaomi.service;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSON;
+import com.gs.xiaomi.config.DataAcquisitionConfiguration;
+import com.gs.xiaomi.dto.*;
+import com.gs.xiaomi.entity.DeliveryDetail;
+import com.gs.xiaomi.entity.DeliveryMain;
+import com.gs.xiaomi.entity.LogisticsPackage;
+import com.gs.xiaomi.entity.PackageDetail;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class XM104Service {
+
+    private static final Logger log = LoggerFactory.getLogger(XM104Service.class);
+    private final SoapApiService soapApiService;
+
+    private final DeliveryMainService deliveryMainService;
+
+    private final PackageDetailService packageDetailService;
+
+    private final DeliveryDetailService deliveryDetailService;
+
+    private final LogisticsPackageService logisticsPackageService;
+
+    public void getDb() {
+
+        String format = DateUtil.format(new Date(), "yyyy-MM-dd");
+
+        ZfmWsApiRequest req = new ZfmWsApiRequest();
+        req.setIvCode(DataAcquisitionConfiguration.IV_CODEXM104);
+        req.setIvEvent("");
+        req.setIvFlag("");
+        BizDocument doc = new BizDocument();
+        doc.setBizDate(format);
+        doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
+        req.setIvInfo(doc);
+        req.setIvPass(DataAcquisitionConfiguration.getIvPass(DataAcquisitionConfiguration.IV_CODEXM104));
+        req.setIvUser(DataAcquisitionConfiguration.IV_USER);
+
+        try {
+            BizDocumentResult deliveryNo = getDeliveryNo(req);
+
+            if (CollUtil.isNotEmpty(deliveryNo.getEtHeaders())) {
+                log.info("銆怋izDocumentResult銆戣繑鍥炲垪琛ㄤ负绌猴紝璺宠繃澶勭悊");
+                log.info("鑾峰彇鎺ュ彛鍒楄〃杩斿洖: {}", deliveryNo.getEvMessage());
+                return;
+            }
+
+            //鑾峰彇鎵�鏈夌殑ASN鍙�
+            List<EtHeader> etHeaders = deliveryNo.getEtHeaders();
+
+            etHeaders.forEach(etHeader -> {
+
+                log.info("1.鑾峰彇鍒伴�佽揣鍗曞彿: {}", etHeader.getZzasn());
+
+                //鏍规嵁姣忚ASN鍙疯幏鍙栬缁嗙殑鏄庣粏
+                doc.setZzasn(etHeader.getZzasn());
+                req.setIvInfo(doc);
+
+                try {
+                    BizDocumentResult result = getDeliveryNo(req);
+
+                    if (result == null) {
+                        log.info("銆怋izDocumentResult銆戣幏鍙栭�佽揣鍗曡鎯呬俊鎭负绌猴紝璺宠繃澶勭悊");
+                        return;
+                    }
+
+                    log.info("2.鍐欏叆鏁版嵁搴�: {}", etHeader.getZzasn());
+
+                    //鍐欏叆鍒版暟鎹簱涓�
+                    setDeliveryMain(result);
+
+                } catch (Exception e) {
+                    log.error("銆愬啓鍏ユ暟鎹簱寮傚父銆戦�佽揣鍗�: {}, 寮傚父: {}", etHeader.getZzasn(), e.getMessage(), e);
+                    throw new RuntimeException(e);
+                }
+
+            });
+
+        } catch (Exception e) {
+            log.error("銆愯鍙栧垪琛ㄥ紓甯搞�戝弬鏁�: {} 寮傚父: {}", JSON.toJSONString(req), e.getMessage(), e);
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    private BizDocumentResult getDeliveryNo(ZfmWsApiRequest request) throws Exception {
+
+        BizDocumentResult bizDocumentResult = soapApiService.callAndParse(DataAcquisitionConfiguration.XM104_URL, request);
+
+        return bizDocumentResult;
+    }
+
+    private void setDeliveryMain(BizDocumentResult result) {
+        List<EtHeader> etHeaders = result.getEtHeaders();
+
+        etHeaders.forEach(etHeader -> {
+            DeliveryMain deliveryMain = new DeliveryMain();
+
+            BeanUtil.copyProperties(etHeader, deliveryMain);
+
+            long id = deliveryMainService.getId();
+            deliveryMain.setId(id);
+
+            deliveryMainService.save(deliveryMain);
+
+            List<Item> items = etHeader.getItems();
+            if (CollUtil.isNotEmpty(items)) {
+
+                List<DeliveryDetail> deliveryDetails = new ArrayList<>();
+                for (Item item : items) {
+                    DeliveryDetail deliveryDetail = new DeliveryDetail();
+                    BeanUtil.copyProperties(item, deliveryDetail);
+                    deliveryDetail.setPid(deliveryMain.getId());
+                    deliveryDetails.add(deliveryDetail);
+                }
+
+                deliveryDetailService.saveBatch(deliveryDetails);
+
+            }
+
+            List<BoxItem> boxItems = etHeader.getBoxItems();
+            if (CollUtil.isNotEmpty(boxItems)) {
+                List<PackageDetail> list = new ArrayList<>();
+                for (BoxItem boxItem : boxItems) {
+                    PackageDetail packageDetail = new PackageDetail();
+                    BeanUtil.copyProperties(boxItem, packageDetail);
+                    packageDetail.setPid(deliveryMain.getId());
+                    list.add(packageDetail);
+                }
+
+                packageDetailService.saveBatch(list);
+
+            }
+
+            List<BoxSum> boxSums = etHeader.getBoxSums();
+            if (CollUtil.isNotEmpty(boxSums)) {
+                List<LogisticsPackage> list = new ArrayList<>();
+                for (BoxSum boxSum : boxSums) {
+                    LogisticsPackage logisticsPackage = new LogisticsPackage();
+                    BeanUtil.copyProperties(boxSum, logisticsPackage);
+                    logisticsPackage.setPid(deliveryMain.getId());
+                    list.add(logisticsPackage);
+                }
+
+                logisticsPackageService.saveBatch(list);
+
+            }
+
+        });
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/xiaomi/service/impl/DeliveryDetailServiceImpl.java b/src/main/java/com/gs/xiaomi/service/impl/DeliveryDetailServiceImpl.java
new file mode 100644
index 0000000..15213d6
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/impl/DeliveryDetailServiceImpl.java
@@ -0,0 +1,26 @@
+package com.gs.xiaomi.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gs.xiaomi.entity.DeliveryDetail;
+import com.gs.xiaomi.mapper.DeliveryDetailMapper;
+import com.gs.xiaomi.service.DeliveryDetailService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怐ELIVERY_DETAIL銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2025-04-10 14:16:44
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class DeliveryDetailServiceImpl extends ServiceImpl<DeliveryDetailMapper, DeliveryDetail>
+        implements DeliveryDetailService {
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xiaomi/service/impl/DeliveryMainServiceImpl.java b/src/main/java/com/gs/xiaomi/service/impl/DeliveryMainServiceImpl.java
new file mode 100644
index 0000000..3011aff
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/impl/DeliveryMainServiceImpl.java
@@ -0,0 +1,31 @@
+package com.gs.xiaomi.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gs.xiaomi.entity.DeliveryMain;
+import com.gs.xiaomi.mapper.DeliveryMainMapper;
+import com.gs.xiaomi.service.DeliveryMainService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怐ELIVERY_MAIN銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2025-04-10 14:16:52
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class DeliveryMainServiceImpl extends ServiceImpl<DeliveryMainMapper, DeliveryMain>
+        implements DeliveryMainService {
+
+
+    @Override
+    public long getId() {
+        return baseMapper.getNextVal();
+    }
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xiaomi/service/impl/LogisticsPackageServiceImpl.java b/src/main/java/com/gs/xiaomi/service/impl/LogisticsPackageServiceImpl.java
new file mode 100644
index 0000000..97597c1
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/impl/LogisticsPackageServiceImpl.java
@@ -0,0 +1,26 @@
+package com.gs.xiaomi.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gs.xiaomi.entity.LogisticsPackage;
+import com.gs.xiaomi.mapper.LogisticsPackageMapper;
+import com.gs.xiaomi.service.LogisticsPackageService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怢OGISTICS_PACKAGE銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2025-04-10 14:17:13
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class LogisticsPackageServiceImpl extends ServiceImpl<LogisticsPackageMapper, LogisticsPackage>
+        implements LogisticsPackageService {
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xiaomi/service/impl/PackageDetailServiceImpl.java b/src/main/java/com/gs/xiaomi/service/impl/PackageDetailServiceImpl.java
new file mode 100644
index 0000000..511296f
--- /dev/null
+++ b/src/main/java/com/gs/xiaomi/service/impl/PackageDetailServiceImpl.java
@@ -0,0 +1,26 @@
+package com.gs.xiaomi.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gs.xiaomi.entity.PackageDetail;
+import com.gs.xiaomi.mapper.PackageDetailMapper;
+import com.gs.xiaomi.service.PackageDetailService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怭ACKAGE_DETAIL銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2025-04-10 14:17:48
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class PackageDetailServiceImpl extends ServiceImpl<PackageDetailMapper, PackageDetail>
+        implements PackageDetailService {
+
+}
+
+
+
+
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 23d7f85..003b73f 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -6,8 +6,8 @@
     type: com.alibaba.druid.pool.DruidDataSource
     driver-class-name: oracle.jdbc.OracleDriver
     url: jdbc:oracle:thin:@122.226.249.238:5936/ORCL
-    username: zmz_prd
-    password: zmzprd
+    username: xb_prd
+    password: xbprd
     druid:
       initialSize: 5
       minIdle: 5
@@ -37,15 +37,15 @@
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     map-underscore-to-camel-case: true
     jdbc-type-for-null: 'null'
-  type-aliases-package: com.gs.xky.entity.*
+  type-aliases-package: com.gs.xiaomi.entity.*
   mapper-locations: classpath:mapper/*.xml
 
 logging:
   level:
     root: info
-    com.gs.xky.service.XkyService: debug  # 鎸囧畾 XkyService 璁板綍 debug 绾у埆鐨勬棩蹇�
+    com.gs.xiaomi.service.XM104Service: debug  # 鎸囧畾 XkyService 璁板綍 debug 绾у埆鐨勬棩蹇�
   file:
-    name: logs/xky_service.log  # 鎸囧畾鏃ュ織鏂囦欢璺緞
+    name: logs/xm104_service.log  # 鎸囧畾鏃ュ織鏂囦欢璺緞
   pattern:
     file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
     console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
diff --git a/src/main/resources/mapper/DeliveryDetailMapper.xml b/src/main/resources/mapper/DeliveryDetailMapper.xml
new file mode 100644
index 0000000..88b1fdc
--- /dev/null
+++ b/src/main/resources/mapper/DeliveryDetailMapper.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gs.xiaomi.mapper.DeliveryDetailMapper">
+
+</mapper>
diff --git a/src/main/resources/mapper/DeliveryMainMapper.xml b/src/main/resources/mapper/DeliveryMainMapper.xml
new file mode 100644
index 0000000..94554cf
--- /dev/null
+++ b/src/main/resources/mapper/DeliveryMainMapper.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gs.xiaomi.mapper.DeliveryMainMapper">
+
+    <select id="getNextVal" resultType="java.lang.Long">
+        SELECT SEQ_DELIVERY_MAIN.NEXTVAL
+        FROM DUAL
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/LogisticsPackageMapper.xml b/src/main/resources/mapper/LogisticsPackageMapper.xml
new file mode 100644
index 0000000..0c5a61c
--- /dev/null
+++ b/src/main/resources/mapper/LogisticsPackageMapper.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gs.xiaomi.mapper.LogisticsPackageMapper">
+
+</mapper>
diff --git a/src/main/resources/mapper/PackageDetailMapper.xml b/src/main/resources/mapper/PackageDetailMapper.xml
new file mode 100644
index 0000000..bbc38d5
--- /dev/null
+++ b/src/main/resources/mapper/PackageDetailMapper.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gs.xiaomi.mapper.PackageDetailMapper">
+
+</mapper>
diff --git a/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java b/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
index 4b5ac5c..cc8dbe1 100644
--- a/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
+++ b/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
@@ -1,156 +1,18 @@
 package com.gs.xiaomi;
 
-import com.alibaba.fastjson.JSON;
-import com.gs.xiaomi.config.DataAcquisitionConfiguration;
-import com.gs.xiaomi.dto.BizDocument;
-import com.gs.xiaomi.dto.BizDocumentResult;
-import com.gs.xiaomi.dto.ZfmWsApiRequest;
-import com.gs.xiaomi.service.SoapApiService;
-import com.gs.xiaomi.util.SoapXmlBuilder;
-import okhttp3.*;
+import com.gs.xiaomi.service.XM104Service;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import java.io.IOException;
-import java.io.StringReader;
 
 @SpringBootTest
 class XiaomiApplicationTests {
 
     @Autowired
-    private SoapApiService service;
+    private XM104Service xm104Service;
 
     @Test
     void contextLoads() throws Exception {
-        ZfmWsApiRequest req = new ZfmWsApiRequest();
-        req.setIvCode(DataAcquisitionConfiguration.IV_CODEXM104);
-        req.setIvEvent("");
-        req.setIvFlag("");
-        BizDocument doc = new BizDocument();
-        doc.setBizDate("2025-04-01");
-        doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
-        req.setIvInfo(doc);
-        req.setIvPass(DataAcquisitionConfiguration.getIvPass(DataAcquisitionConfiguration.IV_CODEXM104));
-        req.setIvUser(DataAcquisitionConfiguration.IV_USER);
-        String soapXml = SoapXmlBuilder.build(req);
-        System.out.println(soapXml);
+        xm104Service.getDb();
     }
-
-    @Test
-    void testService() throws Exception {
-        ZfmWsApiRequest req = new ZfmWsApiRequest();
-        req.setIvCode(DataAcquisitionConfiguration.IV_CODEXM104);
-        req.setIvEvent("");
-        req.setIvFlag("");
-        BizDocument doc = new BizDocument();
-        doc.setBizDate("2025-04-01");
-        doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
-        req.setIvInfo(doc);
-        req.setIvPass(DataAcquisitionConfiguration.getIvPass(DataAcquisitionConfiguration.IV_CODEXM104));
-        req.setIvUser(DataAcquisitionConfiguration.IV_USER);
-
-        BizDocumentResult bizDocumentResult = service.callAndParse(DataAcquisitionConfiguration.XM104_URL, req);
-
-        System.out.println(JSON.toJSONString(bizDocumentResult));
-    }
-
-    @Test
-    void sta() throws IOException, JAXBException {
-        OkHttpClient client = new OkHttpClient().newBuilder()
-                .build();
-        MediaType mediaType = MediaType.parse("application/xml");
-        RequestBody body = RequestBody.create(mediaType, "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:rfc:functions\">\r\n    <soapenv:Header/>\r\n    <soapenv:Body>\r\n        <urn:ZFM_WS_API>\r\n            <IV_CODE>VDATA.XM104</IV_CODE>\r\n            <IV_EVENT></IV_EVENT>\r\n            <IV_FLAG></IV_FLAG>\r\n            <IV_INFO><![CDATA[<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<document>\r\n    <BIZ_DATE>2025-04-01</BIZ_DATE>\r\n    <I_LIFNR>177301</I_LIFNR>\r\n</document>]]></IV_INFO>\r\n            <IV_PASS>D25932DF5772D0A2DF9620A2A0AB121A</IV_PASS>\r\n            <IV_USER>V177301</IV_USER>\r\n        </urn:ZFM_WS_API>\r\n    </soapenv:Body>\r\n</soapenv:Envelope>");
-        Request request = new Request.Builder()
-                .url("https://mipoq.p.mi.com/XISOAPAdapter/MessageServlet?p=ic/9e8a118fb0b7379aa11c2a5c2860982a&senderParty=&senderService=ZJ_XIAOBU_QAS&receiverParty=&receiverService=&interface=SI_ZFM_WS_API_OUT&interfaceNamespace=http://xiaomi.com/srm/b2b")
-                .method("POST", body)
-//                .addHeader("User-Agent", "Apifox/1.0.0 (https://apifox.com)")
-                .addHeader("Content-Type", "application/xml")
-                .addHeader("Authorization", "Basic UkZDWkpYSUFPQlU6cHBCOVIhSGU=")
-                .addHeader("Accept", "*/*")
-//                .addHeader("Host", "mipoq.p.mi.com")
-                .addHeader("Connection", "keep-alive")
-//                .addHeader("Cookie", "saplb_*=(J2EE4281420)4281450; MYSAPSSO2=AjExMDAgABJwb3J0YWw6UkZDWkpYSUFPQlWIAAdkZWZhdWx0AQALUkZDWkpYSUFPQlUCAAMwMDADAANQT1EEAAwyMDI1MDQwOTAwMTcFAAQAAAAICgALUkZDWkpYSUFPQlX%2FAQUwggEBBgkqhkiG9w0BBwKggfMwgfACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHATGB0DCBzQIBATAiMB0xDDAKBgNVBAMTA1BPUTENMAsGA1UECxMESjJFRQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjUwNDA5MDAxNzU2WjAjBgkqhkiG9w0BCQQxFgQUvvJ1HSnOLckboGYaMR9Wiaem6z4wCQYHKoZIzjgEAwQvMC0CFQDKLPrpUC19VM2gcslWaHAnh7dfxQIUNs2dTxwGcKdNU%2FdAQPs4f08yaw4%3D; JSESSIONID=_6bPldDq9mFJPXEd11bc-GvrWMAVlgFqVEEA_SAPF-GrpRbcuqxMK_gShBYGdmdp; JSESSIONMARKID=nUs7PQMlYui9UqFCm4Z-ZRqUiI8YQ_hLJPJWpUQQA")
-                .build();
-        Response response = client.newCall(request).execute();
-
-        if (response.isSuccessful() && response.body() != null) {
-            String bodyStr = response.body().string();
-
-            String evCode = extractEvCode(bodyStr);
-            if (!"Y".equalsIgnoreCase(evCode)) {
-                throw new RuntimeException("SOAP business failed, EV_CODE: " + evCode);
-            }
-
-            String decodedXml = decodeXmlEntities(bodyStr);
-
-            String innerXml = extractCdata(decodedXml);
-            if (innerXml == null) throw new RuntimeException("No CDATA <document> found in response");
-
-//            JAXBContext context = JAXBContext.newInstance(BizDocumentResult.class);
-//            Unmarshaller unmarshaller = context.createUnmarshaller();
-            //BizDocumentResult unmarshal = (BizDocumentResult) unmarshaller.unmarshal(new StringReader(decodedXml));
-            System.out.println(JSON.toJSONString(innerXml));
-        } else {
-            throw new RuntimeException("SOAP request failed: " + response.code() + " - " + response.message());
-        }
-    }
-
-
-    @Test
-    void contextLoads2() throws Exception {
-        String bodyStr = "<SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'>" +
-                "  <SOAP:Header/>" +
-                "  <SOAP:Body xmlns:urn='urn:sap-com:document:sap:rfc:functions'>" +
-                "    <n0:ZFM_WS_APIResponse xmlns:n0='urn:sap-com:document:sap:rfc:functions' xmlns:prx='urn:sap.com:proxy:FRD:/1SAI/TAS82FD47019F21003C052D:752'>" +
-                "      <EV_CODE>Y</EV_CODE>" +
-                "      <EV_EVENT/>" +
-                "      <EV_FLAG/>" +
-                "      <EV_RESULT>&#60;?xml version=\"1.0\" encoding=\"utf-8\"?&#62;&#60;document&#62;&#60;et_headers type=\"h\"&#62;&#60;et_header idx=\"1\"&#62;&#60;zzasn&#62;9311031471&#60;/zzasn&#62;&#60;zzasn_type&#62;BL&#60;/zzasn_type&#62;&#60;imclr&#62;&#60;/imclr&#62;&#60;lifnr&#62;0000177301&#60;/lifnr&#62;&#60;vendor_name&#62;娴欐睙灏忔鍑鸿鏈夐檺鍏徃&#60;/vendor_name&#62;&#60;zzship_addr&#62;娴嬭瘯&#60;/zzship_addr&#62;&#60;zzship_name&#62;11&#60;/zzship_name&#62;&#60;zzship_phon&#62;1111&#60;/zzship_phon&#62;&#60;zzship_date&#62;2025-04-01&#60;/zzship_date&#62;&#60;zzwarehouse_id&#62;0000017560&#60;/zzwarehouse_id&#62;&#60;zzwarehouse&#62;涓皬浠�-鍖椾含涓績浠�&#60;/zzwarehouse&#62;&#60;zzreceive_addr&#62;鍖椾含甯傚ぇ鍏村尯缁忔祹寮�鍙戝尯绉戝垱鍗佽鍗佷簲鍙�(浜﹀簞灏忕背浜т笟鍥�)T1妤�1灞�&#60;/zzreceive_addr&#62;&#60;zzcarrier&#62;&#60;/zzcarrier&#62;&#60;zzdriver_name&#62;&#60;/zzdriver_name&#62;&#60;zzdriver_phon&#62;&#60;/zzdriver_phon&#62;&#60;zzarrive_time&#62;20250402&#60;/zzarrive_time&#62;&#60;zzarrive_time1&#62;00:00:00&#60;/zzarrive_time1&#62;&#60;zzcarrier_no&#62;&#60;/zzcarrier_no&#62;&#60;road_transport_no&#62;&#60;/road_transport_no&#62;&#60;zztrans_model&#62;&#60;/zztrans_model&#62;&#60;zzdriver_license&#62;&#60;/zzdriver_license&#62;&#60;zzlicense_numb&#62;&#60;/zzlicense_numb&#62;&#60;zzseal_no&#62;&#60;/zzseal_no&#62;&#60;zzcanceled&#62;&#60;/zzcanceled&#62;&#60;ship_email&#62;11@163.com&#60;/ship_email&#62;&#60;lifnr_dg&#62;&#60;/lifnr_dg&#62;&#60;short_name&#62;&#60;/short_name&#62;&#60;reserve_date&#62;&#60;/reserve_date&#62;&#60;reserve_time&#62;&#60;/reserve_time&#62;&#60;bukrs&#62;1110&#60;/bukrs&#62;&#60;asn_desc&#62;&#60;/asn_desc&#62;&#60;price_stat&#62;&#60;/price_stat&#62;&#60;final_contact&#62;&#60;/final_contact&#62;&#60;final_phone&#62;&#60;/final_phone&#62;&#60;final_addr&#62;&#60;/final_addr&#62;&#60;final_company&#62;&#60;/final_company&#62;&#60;status&#62;S002&#60;/status&#62;&#60;status_sn&#62;&#60;/status_sn&#62;&#60;purchase_mode&#62;&#60;/purchase_mode&#62;&#60;hub_lifnr&#62;&#60;/hub_lifnr&#62;&#60;items type=\"h\"&#62;&#60;item idx=\"1\"&#62;&#60;zzasn&#62;9311031471&#60;/zzasn&#62;&#60;zzitem_id&#62;0000000010&#60;/zzitem_id&#62;&#60;zzpo_no&#62;4500173648&#60;/zzpo_no&#62;&#60;zzpo_item_id&#62;0000000010&#60;/zzpo_item_id&#62;&#60;zzreqnr&#62;&#60;/zzreqnr&#62;&#60;zzreqln&#62;&#60;/zzreqln&#62;&#60;zzproduct_id&#62;950102000010&#60;/zzproduct_id&#62;&#60;zzvproduct_id&#62;&#60;/zzvproduct_id&#62;&#60;zzsku&#62;BHR4008CN&#60;/zzsku&#62;&#60;zzquantity&#62;5.000&#60;/zzquantity&#62;&#60;zzunit&#62;ST&#60;/zzunit&#62;&#60;brand&#62;&#60;/brand&#62;&#60;place&#62;&#60;/place&#62;&#60;brand_type&#62;&#60;/brand_type&#62;&#60;is_identification&#62;&#60;/is_identification&#62;&#60;zzopen_qty&#62;5.000&#60;/zzopen_qty&#62;&#60;changed_at&#62;20250401071304&#60;/changed_at&#62;&#60;created_at&#62;20250401071304&#60;/created_at&#62;&#60;app_models&#62;11-AD&#60;/app_models&#62;&#60;ext_doc_no&#62;8897300&#60;/ext_doc_no&#62;&#60;ext_doc_item&#62;2884654&#60;/ext_doc_item&#62;&#60;address_detail&#62;鍖椾含甯傚ぇ鍏村尯缁忔祹寮�鍙戝尯绉戝垱鍗佽鍗佷簲鍙�(浜﹀簞灏忕背浜т笟鍥�)T1妤�1灞�&#60;/address_detail&#62;&#60;batch_id&#62;&#60;/batch_id&#62;&#60;batch_row&#62;&#60;/batch_row&#62;&#60;xmsto_no&#62;&#60;/xmsto_no&#62;&#60;xmsto_item_no&#62;&#60;/xmsto_item_no&#62;&#60;modelnumber&#62;&#60;/modelnumber&#62;&#60;shipment_id&#62;&#60;/shipment_id&#62;&#60;shipmentid_num&#62;0&#60;/shipmentid_num&#62;&#60;maktx&#62;绫冲鏅鸿兘渚у惛娌圭儫鏈�&#60;/maktx&#62;&#60;bednr&#62;&#60;/bednr&#62;&#60;ware_type_from&#62;&#60;/ware_type_from&#62;&#60;ware_type_to&#62;&#60;/ware_type_to&#62;&#60;act_gr_qty&#62;0.000&#60;/act_gr_qty&#62;&#60;pn_matnr_l&#62;&#60;/pn_matnr_l&#62;&#60;pn_matnr_name&#62;&#60;/pn_matnr_name&#62;&#60;/item&#62;&#60;/items&#62;&#60;box_items type=\"h\"&#62;&#60;/box_items&#62;&#60;box_sums type=\"h\"&#62;&#60;/box_sums&#62;&#60;purchase_mode2&#62;&#60;/purchase_mode2&#62;&#60;receiver&#62;鏉ㄤ腹涓�,鍛ㄦ櫒鍏�&#60;/receiver&#62;&#60;receive_phone&#62;18811578183,13002157815&#60;/receive_phone&#62;&#60;receive_addr&#62;鍖椾含甯傚ぇ鍏村尯缁忔祹寮�鍙戝尯绉戝垱鍗佽鍗佷簲鍙�(浜﹀簞灏忕背浜т笟鍥�)T1妤�1灞�&#60;/receive_addr&#62;&#60;receive_warehouse_id&#62;0000017560&#60;/receive_warehouse_id&#62;&#60;receive_warehouse_short&#62;涓皬浠�-鍖椾含涓績浠�&#60;/receive_warehouse_short&#62;&#60;product_type&#62;GM&#60;/product_type&#62;&#60;ekorg&#62;2120&#60;/ekorg&#62;&#60;ekotx&#62;&#60;/ekotx&#62;&#60;stock_org_from&#62;&#60;/stock_org_from&#62;&#60;stock_org_from_desc&#62;&#60;/stock_org_from_desc&#62;&#60;stock_org_to&#62;MI_IOT&#60;/stock_org_to&#62;&#60;stock_org_to_desc&#62;鐢熸�侀摼搴撳瓨缁勭粐(IOT)&#60;/stock_org_to_desc&#62;&#60;migo_type&#62;&#60;/migo_type&#62;&#60;zrproject&#62;A1&#60;/zrproject&#62;&#60;logistics_no&#62;&#60;/logistics_no&#62;&#60;logistics_company&#62;&#60;/logistics_company&#62;&#60;last4_phone_number&#62;&#60;/last4_phone_number&#62;&#60;logistics_company_name&#62;&#60;/logistics_company_name&#62;&#60;business_model&#62;&#60;/business_model&#62;&#60;/et_header&#62;&#60;/et_headers&#62;&#60;ev_message&#62;&#60;/ev_message&#62;&#60;ev_msgty&#62;S&#60;/ev_msgty&#62;&#60;/document&#62;</EV_RESULT>" +
-                "    </n0:ZFM_WS_APIResponse>" +
-                "  </SOAP:Body>" +
-                "</SOAP:Envelope>";
-
-        String evCode = extractEvCode(bodyStr);
-        if (!"Y".equalsIgnoreCase(evCode)) {
-            throw new RuntimeException("SOAP business failed, EV_CODE: " + evCode);
-        }
-
-        String decodedXml = decodeXmlEntities(bodyStr);
-
-        String innerXml = extractCdata(decodedXml);
-        if (innerXml == null) throw new RuntimeException("No CDATA <document> found in response");
-
-
-        JAXBContext context = JAXBContext.newInstance(BizDocumentResult.class);
-        Unmarshaller unmarshaller = context.createUnmarshaller();
-        BizDocumentResult unmarshal = (BizDocumentResult) unmarshaller.unmarshal(new StringReader(innerXml));
-        System.out.println(JSON.toJSONString(unmarshal));
-    }
-
-    private String extractEvCode(String xml) {
-        int start = xml.indexOf("<EV_CODE>");
-        int end = xml.indexOf("</EV_CODE>", start);
-        if (start == -1 || end == -1) return null;
-        return xml.substring(start + 9, end).trim();
-    }
-
-    private String decodeXmlEntities(String xml) {
-        return xml.replace("&#60;", "<")
-                .replace("&#62;", ">")
-                .replace("&lt;", "<")
-                .replace("&gt;", ">")
-                .replace("&amp;", "&");
-    }
-
-    private String extractCdata(String xml) {
-        int cdataStart = xml.indexOf("<EV_RESULT>");
-        int cdataEnd = xml.indexOf("</EV_RESULT>", cdataStart);
-        if (cdataStart == -1 || cdataEnd == -1) return null;
-        return xml.substring(cdataStart + 11, cdataEnd).trim();
-    }
-
 }

--
Gitblit v1.9.3