Jelajahi Sumber

完善海控仓库对接

lhm 3 tahun lalu
induk
melakukan
2ed04850e8

+ 1 - 2
kmall-admin/src/main/java/com/kmall/admin/haikong/client/HaiKongWarehouseTemplate.java

@@ -7,7 +7,6 @@ import com.kmall.admin.haikong.dto.WareQueryStockParamDTO;
 import com.kmall.admin.haikong.utils.OkHttpUtils;
 import com.kmall.admin.haikong.utils.WareSysSignUtils;
 import com.kmall.admin.haikong.utils.XmlUtils;
-import com.kmall.common.utils.XmlUtil;
 import okhttp3.MediaType;
 import okhttp3.Request;
 import okhttp3.RequestBody;
@@ -93,7 +92,7 @@ public class HaiKongWarehouseTemplate {
 
         wareQueryStockParamDTO.setCriteriaList(criteriaList);
 
-        String xmlStr = XmlUtils.toXML(wareQueryStockParamDTO, false);
+        String xmlStr = XmlUtils.toXml(wareQueryStockParamDTO, false);
 
         String signUrl = WareSysSignUtils.getSignRequest(url, xmlStr, "GREE1001");
 

+ 250 - 1
kmall-admin/src/main/java/com/kmall/admin/haikong/dto/WareQueryStockResponseDTO.java

@@ -1,13 +1,262 @@
 package com.kmall.admin.haikong.dto;
 
+import javax.xml.bind.annotation.*;
+import java.io.Serializable;
+import java.util.List;
+
 /**
  * 查询海仓库存响应信息
  * @author lhm
  * @createDate 2021-11-01
  */
-public class WareQueryStockResponseDTO {
+@XmlRootElement(name = "response")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class WareQueryStockResponseDTO implements Serializable {
+
+    private static final long serialVersionUID = -9010285449684182199L;
+
+    /**
+     * 成功或失败,success|failure
+     */
+    @XmlElement(name = "flag")
+    private String flag;
+
+    /**
+     * 响应码
+     */
+    @XmlElement(name = "code")
+    private String code;
+
+    /**
+     * 响应信息
+     */
+    @XmlElement(name = "message")
+    private String message;
+
+    /**
+     * 商品库存列表
+     */
+    @XmlElementWrapper(name = "items")
+    @XmlElement(name = "item")
+    private List<WareQueryStockResponseItemDTO> items;
+
+    /**
+     * 商品库存详细信息
+     */
+    @XmlAccessorType(XmlAccessType.FIELD)
+    private static class WareQueryStockResponseItemDTO {
+
+        /**
+         * 仓库编码
+         */
+        @XmlElement
+        private String warehouseCode;
+
+        /**
+         * 商品编码
+         */
+        @XmlElement
+        private String itemCode;
+
+        /**
+         * 仓储系统商品id
+         */
+        @XmlElement
+        private String itemId;
+
+        /**
+         * 库存类型,ZP=正品, CC=残次,JS=机损, XS= 箱损, ZT=在途库存
+         */
+        @XmlElement
+        private String inventoryType;
+
+        /**
+         * 残品等级,AG=一级残,BG=二级残,CG=三级残 ,退货仓使用
+         */
+        @XmlElement
+        private String imperfectGrade;
+
+        /**
+         * 未冻结库存数量
+         */
+        @XmlElement
+        private Integer quantity;
+
+        /**
+         * 冻结库存数量
+         */
+        @XmlElement
+        private Integer lockQuantity;
+
+        /**
+         * 批次编码
+         */
+        @XmlElement
+        private String batchCode;
+
+        /**
+         * 商品生产日期
+         */
+        @XmlElement
+        private String productDate;
+
+        /**
+         * 商品过期日期
+         */
+        @XmlElement
+        private String expireDate;
+
+        /**
+         * 生产批号
+         */
+        @XmlElement
+        private String produceCode;
+
+        public String getWarehouseCode() {
+            return warehouseCode;
+        }
+
+        public void setWarehouseCode(String warehouseCode) {
+            this.warehouseCode = warehouseCode;
+        }
+
+        public String getItemCode() {
+            return itemCode;
+        }
+
+        public void setItemCode(String itemCode) {
+            this.itemCode = itemCode;
+        }
+
+        public String getItemId() {
+            return itemId;
+        }
+
+        public void setItemId(String itemId) {
+            this.itemId = itemId;
+        }
+
+        public String getInventoryType() {
+            return inventoryType;
+        }
+
+        public void setInventoryType(String inventoryType) {
+            this.inventoryType = inventoryType;
+        }
+
+        public String getImperfectGrade() {
+            return imperfectGrade;
+        }
+
+        public void setImperfectGrade(String imperfectGrade) {
+            this.imperfectGrade = imperfectGrade;
+        }
+
+        public Integer getQuantity() {
+            return quantity;
+        }
+
+        public void setQuantity(Integer quantity) {
+            this.quantity = quantity;
+        }
+
+        public Integer getLockQuantity() {
+            return lockQuantity;
+        }
+
+        public void setLockQuantity(Integer lockQuantity) {
+            this.lockQuantity = lockQuantity;
+        }
+
+        public String getBatchCode() {
+            return batchCode;
+        }
+
+        public void setBatchCode(String batchCode) {
+            this.batchCode = batchCode;
+        }
+
+        public String getProductDate() {
+            return productDate;
+        }
+
+        public void setProductDate(String productDate) {
+            this.productDate = productDate;
+        }
+
+        public String getExpireDate() {
+            return expireDate;
+        }
+
+        public void setExpireDate(String expireDate) {
+            this.expireDate = expireDate;
+        }
+
+        public String getProduceCode() {
+            return produceCode;
+        }
+
+        public void setProduceCode(String produceCode) {
+            this.produceCode = produceCode;
+        }
+
+        @Override
+        public String toString() {
+            return "WareQueryStockResponseItemDTO{" +
+                    "warehouseCode='" + warehouseCode + '\'' +
+                    ", itemCode='" + itemCode + '\'' +
+                    ", itemId='" + itemId + '\'' +
+                    ", inventoryType='" + inventoryType + '\'' +
+                    ", imperfectGrade='" + imperfectGrade + '\'' +
+                    ", quantity=" + quantity +
+                    ", lockQuantity=" + lockQuantity +
+                    ", batchCode='" + batchCode + '\'' +
+                    ", productDate='" + productDate + '\'' +
+                    ", expireDate='" + expireDate + '\'' +
+                    ", produceCode='" + produceCode + '\'' +
+                    '}';
+        }
+    }
+
+    public String getFlag() {
+        return flag;
+    }
+
+    public void setFlag(String flag) {
+        this.flag = flag;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
 
+    public void setMessage(String message) {
+        this.message = message;
+    }
 
+    public List<WareQueryStockResponseItemDTO> getItems() {
+        return items;
+    }
 
+    public void setItems(List<WareQueryStockResponseItemDTO> items) {
+        this.items = items;
+    }
 
+    @Override
+    public String toString() {
+        return "WareQueryStockResponseDTO{" +
+                "flag='" + flag + '\'' +
+                ", code='" + code + '\'' +
+                ", message='" + message + '\'' +
+                ", items=" + items +
+                '}';
+    }
 }

+ 71 - 3
kmall-admin/src/main/java/com/kmall/admin/haikong/utils/XmlUtils.java

@@ -1,7 +1,12 @@
 package com.kmall.admin.haikong.utils;
 
+import com.kmall.admin.haikong.dto.WareQueryStockResponseDTO;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import java.io.Reader;
+import java.io.StringReader;
 import java.io.StringWriter;
 
 /**
@@ -10,8 +15,13 @@ import java.io.StringWriter;
  */
 public class XmlUtils {
 
-
-    public static String toXML(Object obj, boolean format) throws Exception {
+    /**
+     * 对象转xml文本
+     * @param obj       对象
+     * @param format    是否格式化
+     * @return          xml文本
+     */
+    public static String toXml(Object obj, boolean format) throws Exception {
         try {
             JAXBContext context = JAXBContext.newInstance(obj.getClass());
             Marshaller marshaller = context.createMarshaller();
@@ -23,7 +33,7 @@ public class XmlUtils {
             // 是否格式化生成的xml串
             if (format) {
                 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
-            }else{
+            } else {
                 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);
             }
 
@@ -39,4 +49,62 @@ public class XmlUtils {
         }
     }
 
+    /**
+     * xml 转对象
+     *
+     * @param xml
+     * @param c
+     * @return
+     */
+    public static <T> Object toObject(String xml, Class<T> c) throws Exception {
+        Object xmlObject = null;
+        Reader reader = null;
+        JAXBContext context = JAXBContext.newInstance(c);
+        // XML 转为对象的接口
+        Unmarshaller unmarshaller = context.createUnmarshaller();
+
+        reader = new StringReader(xml);
+        xmlObject = unmarshaller.unmarshal(reader);
+
+        if (null != reader) {
+            reader.close();
+        }
+
+        return xmlObject;
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        String response = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
+                "<response>\n" +
+                "    <flag>success|failure</flag>\n" +
+                "    <code>响应码</code>\n" +
+                "    <message>响应信息</message>\n" +
+                "    <items>\n" +
+                "        <item>\n" +
+                "            <warehouseCode>仓库编码, string (50)</warehouseCode>\n" +
+                "            <itemCode>商品编码, string (50) , 必填</itemCode>\n" +
+                "            <itemId>仓储系统商品ID, string (50),条件必填</itemId>\n" +
+                "            <inventoryType>库存类型,string (50) , ZP=正品, CC=残次,JS=机损, XS= 箱损, ZT=在途库存</inventoryType>\n" +
+                "            <imperfectGrade>残品等级,string (50) ,AG=一级残,BG=二级残,CG=三级残 ,退货仓使用</imperfectGrade>\n" +
+                "            <quantity>1</quantity>\n" +
+                "            <lockQuantity>1</lockQuantity>\n" +
+                "            <batchCode>批次编码, string (50)</batchCode>\n" +
+                "            <productDate>商品生产日期 YYYY-MM-DD,条件必填</productDate>\n" +
+                "            <expireDate>商品过期日期YYYY-MM-DD,条件必填</expireDate>\n" +
+                "            <produceCode>生产批号, string (50)</produceCode>\n" +
+                "            <extendProps>扩展属性 \n" +
+                "        \n" +
+                "                <key1>value1</key1>\n" +
+                "                <key2>value2</key2>\n" +
+                "            </extendProps>\n" +
+                "        </item>\n" +
+                "    </items>\n" +
+                "</response>";
+
+        WareQueryStockResponseDTO o = (WareQueryStockResponseDTO) toObject(response, WareQueryStockResponseDTO.class);
+
+        System.out.println(o);
+    }
+
 }