From a4c02621b8a3fa96cfb7b7839a9c7e5e23df785f Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期五, 28 五月 2021 11:02:59 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/WorkService.java          |    2 
 src/main/java/com/zy/common/service/wms/Result.java         |   25 ++
 src/main/java/com/zy/asrs/controller/OpenController.java    |    4 
 src/main/java/com/zy/common/model/UploadBillDetail.java     |   24 ++
 src/main/java/com/zy/common/service/wms/ReplenishParam.java |   15 +
 src/main/java/com/zy/common/model/UploadBill.java           |   32 ++
 src/main/java/com/zy/common/service/Result.java             |   18 +
 src/main/java/com/zy/common/service/wms/ReplenishDto.java   |   15 +
 src/main/java/com/zy/common/utils/HttpHandler.java          |  213 +++++++++++++++++++
 src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java  |   97 ++++++++
 src/main/java/com/zy/common/model/MatnrDto.java             |   15 +
 pom.xml                                                     |    6 
 src/main/java/com/zy/asrs/controller/WorkController.java    |   10 
 src/main/java/com/zy/common/model/BillDto.java              |   15 +
 src/main/java/com/zy/asrs/task/AbstractHandler.java         |    3 
 src/main/java/com/zy/common/service/ErpService.java         |   90 ++++++++
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |    7 
 src/main/java/com/zy/common/service/wms/WmsService.java     |   37 +++
 src/main/resources/application.yml                          |    8 
 19 files changed, 618 insertions(+), 18 deletions(-)

diff --git a/pom.xml b/pom.xml
index 9256a75..1e4ac87 100644
--- a/pom.xml
+++ b/pom.xml
@@ -97,6 +97,12 @@
             <version>1.16.22</version>
             <scope>provided</scope>
         </dependency>
+        <!-- okHttp3 -->
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+            <version>3.10.0</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index f0c1f00..901b4e0 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -148,7 +148,7 @@
                             dto.setLocDetl(locDetl);
                             dto.setCount(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
                             detlDtos.add(dto);
-                            workService.stockOut(staNo, detlDtos, 101, 9527L, param.getAllotNo());
+                            workService.stockOut(staNo, detlDtos, 101, 9527L, param.getAllotNo(), Cools.isEmpty(param.getAllotNo()));
                         // 鎷f枡
                         } else {
                             BasDevp staNo = basDevpService.checkSiteStatus(107);
@@ -157,7 +157,7 @@
                             dto.setLocDetl(locDetl);
                             dto.setCount(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
                             detlDtos.add(dto);
-                            workService.stockOut(staNo, detlDtos, 103, 9527L, param.getAllotNo());
+                            workService.stockOut(staNo, detlDtos, 103, 9527L, param.getAllotNo(), Cools.isEmpty(param.getAllotNo()));
                         }
 
                         PakoutVo pakoutVo = new PakoutVo();
diff --git a/src/main/java/com/zy/asrs/controller/WorkController.java b/src/main/java/com/zy/asrs/controller/WorkController.java
index f5b8749..899af2e 100644
--- a/src/main/java/com/zy/asrs/controller/WorkController.java
+++ b/src/main/java/com/zy/asrs/controller/WorkController.java
@@ -33,19 +33,19 @@
     private BasDevpService basDevpService;
 
     @RequestMapping("/available/put/site")
-    @ManagerAuth(memo = "鑾峰彇鍏ュ簱绔欑偣")
+    @ManagerAuth()
     public R availablePutSite(){
         return R.ok().add(basDevpService.getAvailableInSite());
     }
 
     @RequestMapping("/available/empty/put/site")
-    @ManagerAuth(memo = "鑾峰彇绌烘澘鍏ュ簱绔欑偣")
+    @ManagerAuth()
     public R availableEmptyPutSite(){
         return R.ok().add(basDevpService.getAvailableEmptyInSite());
     }
 
     @RequestMapping("/available/take/site")
-    @ManagerAuth(memo = "鑾峰彇鍑哄簱绔欑偣")
+    @ManagerAuth()
     public R availableTakeSite(){
         List<Map<String, Object>> result = new ArrayList<>();
         List<Integer> outSite = basDevpService.getAvailableOutSite(101);
@@ -66,13 +66,13 @@
     }
 
     @RequestMapping("/available/take/check/site")
-    @ManagerAuth(memo = "鑾峰彇鐩樼偣鍑哄簱绔欑偣")
+    @ManagerAuth()
     public R availableTakeCheckSite(){
         return R.ok().add(basDevpService.getAvailableOutSite(107));
     }
 
     @RequestMapping("/available/empty/take/site")
-    @ManagerAuth(memo = "鑾峰彇绌烘澘鍑哄簱绔欑偣")
+    @ManagerAuth()
     public R availableEmptyTakeSite(){
         return R.ok().add(basDevpService.getAvailableEmptyOutSite());
     }
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
index b41422f..ae85a2c 100644
--- a/src/main/java/com/zy/asrs/service/WorkService.java
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -28,7 +28,7 @@
      * @param locDetls 寰呭嚭搴撶墿鏂�
      * @param ioType 鍏ュ嚭搴撶被鍨�
      */
-    void stockOut(BasDevp staNo, List<LocDetlDto> locDetls, Integer ioType, Long userId, String allotNo);
+    void stockOut(BasDevp staNo, List<LocDetlDto> locDetls, Integer ioType, Long userId, String allotNo, Boolean sell);
 
     /**
      * 绌烘澘鍏ュ簱
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 1f66bb6..1c91ccf 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -149,7 +149,7 @@
         }
         if (!locDetlDtos.isEmpty()) {
             // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
-            stockOut(staNo, locDetlDtos, null, userId, null);
+            stockOut(staNo, locDetlDtos, null, userId, null, false);
         } else {
             throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
         }
@@ -157,7 +157,7 @@
 
     @Override
     @Transactional
-    public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Integer ioType, Long userId, String allotNo) {
+    public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Integer ioType, Long userId, String allotNo, Boolean sell) {
         // 鍚堝苟鍚岀被椤�
         Set<String> locNos = new HashSet<>();
         locDetlDtos.forEach(dto -> locNos.add(dto.getLocDetl().getLocNo()));
@@ -210,6 +210,7 @@
             wrkMast.setEmptyMk("N"); // 绌烘澘
             wrkMast.setLinkMis("N");
             wrkMast.setPacked(allotNo); // 骞充粨琛ヤ粨鍗曞彿
+            wrkMast.setPdcType(sell?"Y":"N"); // ERP閿�鍞鍗曞嚭搴撲换鍔�
             wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
             wrkMast.setAppeTime(new Date());
             wrkMast.setModiUser(userId);
@@ -386,7 +387,7 @@
         }
         if (!locDetlDtos.isEmpty()) {
             // 鍚姩鍑哄簱寮�濮� 107.鐩樼偣鍑哄簱
-            stockOut(staNo, locDetlDtos, 107, userId, null);
+            stockOut(staNo, locDetlDtos, 107, userId, null, false);
         } else {
             throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
         }
diff --git a/src/main/java/com/zy/asrs/task/AbstractHandler.java b/src/main/java/com/zy/asrs/task/AbstractHandler.java
index 9e630fb..8cb5d61 100644
--- a/src/main/java/com/zy/asrs/task/AbstractHandler.java
+++ b/src/main/java/com/zy/asrs/task/AbstractHandler.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.task;
 
+import com.core.exception.CoolException;
 import com.zy.asrs.task.core.AsrsException;
 import com.zy.asrs.task.core.ReturnT;
 
@@ -20,7 +21,7 @@
     }
 
     protected void exceptionHandle(String errorMsg, Object... args){
-        throw new AsrsException(MessageFormat.format(errorMsg, args));
+        throw new CoolException(MessageFormat.format(errorMsg, args));
     }
 
 }
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
index 7492ff1..add9e2a 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -2,16 +2,26 @@
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
+import com.core.common.SnowflakeIdWorker;
 import com.zy.asrs.entity.WaitPakin;
 import com.zy.asrs.entity.WrkDetl;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.*;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
+import com.zy.common.model.BillDto;
+import com.zy.common.model.MatnrDto;
+import com.zy.common.service.ErpService;
+import com.zy.common.service.wms.ReplenishDto;
+import com.zy.common.service.wms.Result;
+import com.zy.common.service.wms.WmsService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Created by vincent on 2020/7/6
@@ -31,18 +41,95 @@
     private WaitPakinService waitPakinService;
     @Autowired
     private WaitPakinLogService waitPakinLogService;
+    @Autowired
+    private ErpService erpService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private WmsService wmsService;
 
     @Transactional
     public ReturnT<String> start(WrkMast wrkMast) {
         try {
 
-            if (!Cools.isEmpty(wrkMast.getBarcode())) {
-                // 淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。
-                waitPakinLogService.save(wrkMast.getBarcode());
-                // 鍒犻櫎鍏ュ簱閫氱煡妗�
-                waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
+            // 鍏ュ簱
+            if (wrkMast.getWrkSts() == 5) {
+
+                // 鍏ㄦ澘鍏ュ簱
+                if (wrkMast.getIoType() == 1) {
+                    String docNum = "PU-" + String.valueOf(snowflakeIdWorker.nextId()).substring(0, 15);
+                    // 涓婃姤缁檈rp
+                    List<MatnrDto> matnrDtos = new ArrayList<>();
+                    List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    for (WrkDetl wrkDetl : wrkDetls) {
+                        MatnrDto dto = new MatnrDto();
+                        dto.setMatnr(wrkDetl.getMatnr());
+                        dto.setCount(wrkDetl.getAnfme());
+                        matnrDtos.add(dto);
+                    }
+                    List<BillDto> dtos = new ArrayList<>();
+                    for (MatnrDto dto : matnrDtos) {
+                        BillDto billDto = new BillDto();
+                        billDto.setMatnr(dto.getMatnr());
+                        billDto.setQty(dto.getCount());
+                        dtos.add(billDto);
+                    }
+                    if (!erpService.uploadBill(dtos, 34, docNum)) {
+                        exceptionHandle("鏃犳硶涓婃姤鑷砮rp[workNo={0}]澶辫触", wrkMast.getWrkNo());
+                    }
+
+                    // 鍏ュ簱閫氱煡鍗�
+                    if (!Cools.isEmpty(wrkMast.getBarcode())) {
+                        // 淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。
+                        if (!waitPakinLogService.save(wrkMast.getBarcode())) {
+                            exceptionHandle("淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。[workNo={0}]澶辫触", wrkMast.getWrkNo());
+                        }
+                        // 鍒犻櫎鍏ュ簱閫氱煡妗�
+                        if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()))) {
+                            exceptionHandle("鍒犻櫎鍏ュ簱閫氱煡妗workNo={0}]澶辫触", wrkMast.getWrkNo());
+                        }
+                    }
+                // 鎷f枡鍐嶅叆搴�
+                } else if (wrkMast.getIoType() == 53) {
+                    // 闈為攢鍞鍗曞嚭搴擄紝闇�瑕佽ˉ璐у埌骞充粨
+                    if (!wrkMast.getPdcType().equals("Y")) {
+                        List<ReplenishDto> replenishDtos = new ArrayList<>();
+                        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                        for (WrkDetl wrkDetl : wrkDetls) {
+                            ReplenishDto param = new ReplenishDto();
+                            param.setMatnr(wrkDetl.getMatnr());
+                            param.setCount(wrkDetl.getAnfme());
+                            replenishDtos.add(param);
+                        }
+                        Result result = wmsService.replenish(replenishDtos);
+                        if (result.getCode() != 200) {
+                            exceptionHandle("琛ヨ揣鍒板钩浠揫workNo={0}]澶辫触", wrkMast.getWrkNo());
+                        }
+                    }
+
+                }
+
+            // 鍑哄簱
+            } else if (wrkMast.getWrkSts() == 15) {
+                // 闈為攢鍞鍗曞嚭搴擄紝闇�瑕佽ˉ璐у埌骞充粨
+                if (!wrkMast.getPdcType().equals("Y")) {
+                    List<ReplenishDto> replenishDtos = new ArrayList<>();
+                    List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+                    for (WrkDetl wrkDetl : wrkDetls) {
+                        ReplenishDto param = new ReplenishDto();
+                        param.setMatnr(wrkDetl.getMatnr());
+                        param.setCount(wrkDetl.getAnfme());
+                        replenishDtos.add(param);
+                    }
+                    Result result = wmsService.replenish(replenishDtos);
+                    if (result.getCode() != 200) {
+                        exceptionHandle("琛ヨ揣鍒板钩浠揫workNo={0}]澶辫触", wrkMast.getWrkNo());
+                    }
+                }
             }
 
+
+
             // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
             if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
                 exceptionHandle("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
diff --git a/src/main/java/com/zy/common/model/BillDto.java b/src/main/java/com/zy/common/model/BillDto.java
new file mode 100644
index 0000000..640e560
--- /dev/null
+++ b/src/main/java/com/zy/common/model/BillDto.java
@@ -0,0 +1,15 @@
+package com.zy.common.model;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2021/3/23
+ */
+@Data
+public class BillDto {
+
+    private String matnr;
+
+    private Double qty;
+
+}
diff --git a/src/main/java/com/zy/common/model/MatnrDto.java b/src/main/java/com/zy/common/model/MatnrDto.java
new file mode 100644
index 0000000..df53438
--- /dev/null
+++ b/src/main/java/com/zy/common/model/MatnrDto.java
@@ -0,0 +1,15 @@
+package com.zy.common.model;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2021/3/31
+ */
+@Data
+public class MatnrDto {
+
+    private String matnr;
+
+    private Double count;
+
+}
diff --git a/src/main/java/com/zy/common/model/UploadBill.java b/src/main/java/com/zy/common/model/UploadBill.java
new file mode 100644
index 0000000..e59a788
--- /dev/null
+++ b/src/main/java/com/zy/common/model/UploadBill.java
@@ -0,0 +1,32 @@
+package com.zy.common.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2021/3/23
+ */
+@Data
+public class UploadBill {
+
+    private String number;
+
+    private Integer vchType;
+
+    private String billDate;
+
+    private String bTypeID;
+
+    private String kTypeID;
+
+    private String summary;
+
+    // 鑷
+    private Double Vchcode;
+
+    private Integer difAtype;
+
+    private List<UploadBillDetail> detail;
+
+}
diff --git a/src/main/java/com/zy/common/model/UploadBillDetail.java b/src/main/java/com/zy/common/model/UploadBillDetail.java
new file mode 100644
index 0000000..8a9d9f2
--- /dev/null
+++ b/src/main/java/com/zy/common/model/UploadBillDetail.java
@@ -0,0 +1,24 @@
+package com.zy.common.model;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2021/3/23
+ */
+@Data
+public class UploadBillDetail {
+
+    private String userCode;
+
+    private Double qty;
+
+    private Integer Price;
+
+    private String comment;
+
+    private String unit;
+
+    // 鍟嗗搧鏄庣粏琛屽彿
+    private Double RowNo;
+
+}
diff --git a/src/main/java/com/zy/common/service/ErpService.java b/src/main/java/com/zy/common/service/ErpService.java
new file mode 100644
index 0000000..322db8a
--- /dev/null
+++ b/src/main/java/com/zy/common/service/ErpService.java
@@ -0,0 +1,90 @@
+package com.zy.common.service;
+
+import com.alibaba.fastjson.JSON;
+import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.zy.asrs.entity.MatCode;
+import com.zy.asrs.service.MatCodeService;
+import com.zy.common.model.BillDto;
+import com.zy.common.model.UploadBill;
+import com.zy.common.model.UploadBillDetail;
+import com.zy.common.utils.HttpHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by vincent on 2021/3/23
+ */
+@Slf4j
+@Service("erpService")
+public class ErpService {
+
+    @Value("${erp.url}")
+    private String url;
+    
+    public static final String UPLOAD_BILL = "cM/basis/uploadBill";
+
+    @Autowired
+    private MatCodeService matCodeService;
+    /**
+     * 鍗曟嵁涓婃姤
+     */
+    public Boolean uploadBill(List<BillDto> dtos, Integer docId, String docNumber){
+        try {
+            if (Cools.isEmpty(dtos)) {
+                return false;
+            }
+
+            UploadBill uploadBill = new UploadBill();
+            uploadBill.setNumber(docNumber);
+            uploadBill.setBillDate(DateUtils.convert(new Date(), DateUtils.yyyyMMdd_F));
+            uploadBill.setBTypeID("SHHT");
+            uploadBill.setKTypeID("瀹忔尯浠撳簱");
+            uploadBill.setVchType(docId);
+            if (docId == 9) {
+                uploadBill.setDifAtype(22);
+            } else if (docId == 14) {
+                uploadBill.setDifAtype(23);
+            }
+            uploadBill.setSummary("閲囪喘鍗� - " + DateUtils.convert(new Date(), "yyyy-MM-dd HH:mm"));
+            List<UploadBillDetail> detail = new ArrayList<>();
+            uploadBill.setDetail(detail);
+            for (BillDto dto : dtos) {
+                MatCode mat = matCodeService.selectById(dto.getMatnr());
+                UploadBillDetail detl = new UploadBillDetail();
+                detl.setUserCode(dto.getMatnr());
+                detl.setQty(dto.getQty());
+                detl.setPrice(0);
+                detl.setUnit(mat==null?"鏆傛棤":"绠�");
+                detail.add(detl);
+            }
+            System.out.println(JSON.toJSONString(uploadBill));
+            String response = new HttpHandler.Builder()
+                    .setUri(url)
+                    .setPath(UPLOAD_BILL)
+                    .setJson(JSON.toJSONString(uploadBill))
+                    .build()
+                    .doPost();
+
+            if (!Cools.isEmpty(response)) {
+                log.warn(response);
+                Result result = JSON.parseObject(response, Result.class);
+                if (result.getCode() != 1) {
+                    return false;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return Boolean.TRUE;
+    }
+
+
+}
diff --git a/src/main/java/com/zy/common/service/Result.java b/src/main/java/com/zy/common/service/Result.java
new file mode 100644
index 0000000..efc9bb7
--- /dev/null
+++ b/src/main/java/com/zy/common/service/Result.java
@@ -0,0 +1,18 @@
+package com.zy.common.service;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2021/3/1
+ */
+@Data
+public class Result {
+
+    private Integer code;
+
+    private String msg;
+
+    private String data;
+
+}
+
diff --git a/src/main/java/com/zy/common/service/wms/ReplenishDto.java b/src/main/java/com/zy/common/service/wms/ReplenishDto.java
new file mode 100644
index 0000000..dc6f8a2
--- /dev/null
+++ b/src/main/java/com/zy/common/service/wms/ReplenishDto.java
@@ -0,0 +1,15 @@
+package com.zy.common.service.wms;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2021/5/27
+ */
+@Data
+public class ReplenishDto {
+
+    private String matnr;
+
+    private Double count;
+
+}
diff --git a/src/main/java/com/zy/common/service/wms/ReplenishParam.java b/src/main/java/com/zy/common/service/wms/ReplenishParam.java
new file mode 100644
index 0000000..093a451
--- /dev/null
+++ b/src/main/java/com/zy/common/service/wms/ReplenishParam.java
@@ -0,0 +1,15 @@
+package com.zy.common.service.wms;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2021/5/27
+ */
+@Data
+public class ReplenishParam {
+
+    private List<ReplenishDto> list;
+
+}
diff --git a/src/main/java/com/zy/common/service/wms/Result.java b/src/main/java/com/zy/common/service/wms/Result.java
new file mode 100644
index 0000000..54ae05d
--- /dev/null
+++ b/src/main/java/com/zy/common/service/wms/Result.java
@@ -0,0 +1,25 @@
+package com.zy.common.service.wms;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2021/3/20
+ */
+@Data
+public class Result {
+
+    private Integer code;
+
+    private String msg;
+
+    private Object data;
+
+    public Result() {
+    }
+
+    public Result(Integer code, String msg, Object data) {
+        this.code = code;
+        this.msg = msg;
+        this.data = data;
+    }
+}
diff --git a/src/main/java/com/zy/common/service/wms/WmsService.java b/src/main/java/com/zy/common/service/wms/WmsService.java
new file mode 100644
index 0000000..d74537c
--- /dev/null
+++ b/src/main/java/com/zy/common/service/wms/WmsService.java
@@ -0,0 +1,37 @@
+package com.zy.common.service.wms;
+
+import com.alibaba.fastjson.JSON;
+import com.zy.common.utils.HttpHandler;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Created by vincent on 2021/5/27
+ */
+@Component
+public class WmsService {
+
+    @Value("${wms.url}")
+    private String wmsUrl;
+
+    public Result replenish(List<ReplenishDto> dtos) {
+        try {
+            ReplenishParam param = new ReplenishParam();
+            param.setList(dtos);
+            String response = new HttpHandler.Builder()
+                    .setUri(wmsUrl)
+                    .setPath("/open/api/replenish")
+                    .setJson(JSON.toJSONString(param))
+                    .build()
+                    .doPost();
+            return JSON.parseObject(response, Result.class);
+        } catch (IOException e) {
+            e.printStackTrace();
+            return new Result(500, "鏈嶅姟鍣ㄥ紓甯�", null);
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/common/utils/HttpHandler.java b/src/main/java/com/zy/common/utils/HttpHandler.java
new file mode 100644
index 0000000..70adcc7
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/HttpHandler.java
@@ -0,0 +1,213 @@
+package com.zy.common.utils;
+
+
+import okhttp3.*;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Http鍗忚瀹㈡埛绔�
+ * @author luxiaotao
+ * @date 2018-9-27
+ */
+public class HttpHandler {
+
+    private static final Integer DEFAULT_TIMEOUT_SECONDS = 5;
+    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json;charset=utf-8");
+
+    private String uri;
+    private String path;
+    private String json;
+    private Map<String, Object> params;
+    private Map<String, Object> headers;
+    private boolean https;
+    private Integer timeout;
+    private TimeUnit timeUnit;
+
+    public HttpHandler(Builder builder){
+        this.uri = builder.uri;
+        this.path = builder.path;
+        this.json = builder.json;
+        this.params = builder.params;
+        this.headers = builder.headers;
+        this.https = builder.https;
+        this.timeout = builder.timeout;
+        this.timeUnit = builder.timeUnit;
+    }
+
+    /**
+     * GET璇锋眰鎵ц
+     * @return the HttpHandler response
+     */
+    public String doGet() throws IOException {
+        String url = paramsToUrl(uri, path, params, https);
+        Request.Builder headerBuilder = new Request.Builder();
+        if (headers != null && headers.size()>0){
+            for (Map.Entry<String, Object> entry : headers.entrySet()){
+                headerBuilder.addHeader(entry.getKey(), String.valueOf(entry.getValue()));
+            }
+        }
+        Request request = headerBuilder.url(url).build();
+        Response response = getClient(timeout, timeUnit).newCall(request).execute();
+        return response.isSuccessful() ? response.body().string() : null;
+    }
+
+    /**
+     * POST璇锋眰鎵ц
+     * @return the HttpHandler response
+     */
+    public String doPost() throws IOException {
+        Request request;
+        Request.Builder headerBuilder = new Request.Builder();
+        if (headers != null && headers.size()>0){
+            for (Map.Entry<String, Object> entry : headers.entrySet()){
+                headerBuilder.addHeader(entry.getKey(), String.valueOf(entry.getValue()));
+            }
+        }
+        if (json == null || "".equals(json)){
+            FormBody.Builder builder = new FormBody.Builder();
+            for (Map.Entry<String, Object> entry : params.entrySet()){
+                builder.add(entry.getKey(), String.valueOf(entry.getValue()));
+            }
+            FormBody body = builder.build();
+            request = headerBuilder
+                    .url((https?"https://":"http://")+uri+path)
+                    .post(body)
+                    .build();
+        } else {
+            RequestBody body = RequestBody.create(MEDIA_TYPE, json);
+            Request.Builder builder = headerBuilder.url((https?"https://":"http://")+uri+path);
+            builder.header("Content-Type", "application/json;charset=UTF-8");
+            request = builder.post(body).build();
+
+        }
+        Call call = getClient(timeout, timeUnit).newCall(request);
+        Response response = call.execute();
+        return response.body().string();
+
+    }
+
+    /**
+     * get璇锋眰鍙傛暟鎷兼帴鏂规硶
+     * @return 璇锋眰琛�
+     */
+    private String paramsToUrl(String uri, String path, Map<String, Object> params, boolean isHttps) {
+        StringBuilder res = new StringBuilder();
+        res.append(isHttps ? "https://" : "http://");
+        res.append(uri);
+        if (path.length() > 0 && !(path.charAt(0) == '/')){
+            res.append("/");
+        }
+        res.append(path);
+        Optional.ofNullable(params).ifPresent(
+                args -> {
+                    res.append("?");
+                    args.forEach((key, value) -> {
+                        res.append(key);
+                        res.append("=");
+                        res.append(value);
+                        res.append("&");
+                    });
+                }
+        );
+        String url = res.toString();
+        if ("&".equals(url.substring(url.length()-1, url.length()))){
+            url = url.substring(0, url.length()-1);
+        }
+        return url;
+    }
+
+    /**
+     * 鑾峰彇 okHttpClient
+     * @return the HttpHandler instance
+     */
+    private OkHttpClient getClient(Integer timeout, TimeUnit timeUnit){
+        return new OkHttpClient
+                .Builder()
+                .connectTimeout(timeout, timeUnit)
+                .readTimeout(timeout, timeUnit)
+                .build();
+    }
+
+    /**
+     * Http鍗忚鎶ユ枃寤洪�犺��
+     */
+    public static class Builder {
+
+        private String uri;
+        private String path;
+        private String json;
+        private Map<String, Object> params;
+        private Map<String, Object> headers;
+        private boolean https;
+        private Integer timeout;
+        private TimeUnit timeUnit;
+
+        {
+            // 榛樿5s瓒呮椂
+            timeout = DEFAULT_TIMEOUT_SECONDS;
+            timeUnit = TimeUnit.SECONDS;
+            path = "";
+        }
+
+        /**
+         * 寤洪�犲櫒
+         * @return the HttpHandler instance
+         */
+        public HttpHandler build(){
+            if (null == this.uri || "".equals(this.uri)){
+                throw new RuntimeException("uri is null");
+            }
+            if (this.uri.startsWith("http://")){
+                this.uri = this.uri.substring(6,uri.length());
+            } else if (this.uri.startsWith("https://")){
+                this.uri = this.uri.substring(7,uri.length());
+            }
+            return new HttpHandler(this);
+        }
+
+        public Builder setUri(String uri) {
+            this.uri = uri;
+            return this;
+        }
+
+        public Builder setPath(String path) {
+            if (!path.startsWith("/")){
+                path = "/" + path;
+            }
+            this.path = path;
+            return this;
+        }
+
+        public Builder setTimeout(Integer timeout, TimeUnit timeUnit) {
+            this.timeout = timeout;
+            this.timeUnit = timeUnit;
+            return this;
+        }
+
+        public Builder setParams(Map<String, Object> params) {
+            this.params = params;
+            return this;
+        }
+
+        public Builder setHeaders(Map<String, Object> headers) {
+            this.headers = headers;
+            return this;
+        }
+
+        public Builder setHttps(boolean https) {
+            this.https = https;
+            return this;
+        }
+
+        public Builder setJson(String json) {
+            this.json = json;
+            return this;
+        }
+
+    }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 169f6b8..84eb112 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -54,4 +54,10 @@
   # 鍙屾繁搴撲綅鎺掑彿
   doubleLocs: 1,4,5,8
   # 涓�涓爢鍨涙満璐熻矗鐨勮揣鏋舵帓鏁�
-  groupCount: 4
\ No newline at end of file
+  groupCount: 4
+
+wms:
+  url: http://192.168.110.57:8080/wms
+
+erp:
+  url: http://8.133.182.21:6220/api
\ No newline at end of file

--
Gitblit v1.9.1