From 9891b042e48b186bbb850ab2ed445308bf5eec72 Mon Sep 17 00:00:00 2001
From: 王佳豪 <g675230687@126.com>
Date: 星期五, 04 六月 2021 15:51:53 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/com/zy/asrs/entity/param/CombParam.java          |   11 +
 src/main/webapp/views/pda/combAgv.html                         |   50 ++--
 src/main/java/com/zy/asrs/service/BasDevpService.java          |    6 
 src/main/java/com/zy/common/utils/HttpHandler.java             |  213 +++++++++++++++++++++
 src/main/java/com/zy/asrs/mapper/BasDevpMapper.java            |    4 
 src/main/java/com/zy/common/model/agv/AgvCommand.java          |   41 ++++
 pom.xml                                                        |    5 
 src/main/java/com/zy/asrs/controller/WorkController.java       |    6 
 src/main/java/com/zy/asrs/service/BasAgvService.java           |    4 
 src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java  |   42 ++++
 src/main/java/com/zy/common/model/agv/AgvResult.java           |   25 ++
 src/main/java/com/zy/common/model/agv/AgvInfo.java             |   76 +++++++
 src/main/java/com/zy/common/model/enums/AgvStatusType.java     |   51 +++++
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java  |   42 ++++
 src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java |    5 
 src/main/resources/application.yml                             |    3 
 16 files changed, 559 insertions(+), 25 deletions(-)

diff --git a/pom.xml b/pom.xml
index 778ccd0..012479b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -97,6 +97,11 @@
             <version>1.16.22</version>
             <scope>provided</scope>
         </dependency>
+        <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/WorkController.java b/src/main/java/com/zy/asrs/controller/WorkController.java
index ec04118..34d71da 100644
--- a/src/main/java/com/zy/asrs/controller/WorkController.java
+++ b/src/main/java/com/zy/asrs/controller/WorkController.java
@@ -29,6 +29,12 @@
     @Autowired
     private BasDevpService basDevpService;
 
+    @RequestMapping("/agv/put/site")
+    @ManagerAuth(memo = "鑾峰彇AGV宸ヤ綔鍖�")
+    public R availableAgvSite(){
+        return R.ok().add(basDevpService.getAgvAvailableInSite());
+    }
+
     @RequestMapping("/available/put/site")
     @ManagerAuth(memo = "鑾峰彇鍏ュ簱绔欑偣")
     public R availablePutSite(){
diff --git a/src/main/java/com/zy/asrs/entity/param/CombParam.java b/src/main/java/com/zy/asrs/entity/param/CombParam.java
index 51f4e35..d68b66a 100644
--- a/src/main/java/com/zy/asrs/entity/param/CombParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -23,6 +23,9 @@
 
     private String billNo;
 
+    // 灏忚溅鍙栬揣鐐�
+    private Integer agvSite;
+
     public String getWarehouse() {
         return warehouse;
     }
@@ -117,4 +120,12 @@
     public void setBillNo(String billNo) {
         this.billNo = billNo;
     }
+
+    public Integer getAgvSite() {
+        return agvSite;
+    }
+
+    public void setAgvSite(Integer agvSite) {
+        this.agvSite = agvSite;
+    }
 }
diff --git a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java b/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
index 668d2ca..701f745 100644
--- a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java
@@ -4,6 +4,7 @@
 import com.zy.asrs.entity.BasDevp;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -12,6 +13,9 @@
 @Repository
 public interface BasDevpMapper extends BaseMapper<BasDevp> {
 
+    @Select("select dev_no from asr_bas_devp where 1=1 and fronting = 'Y' order by dev_no")
+    List<Integer> getAgvInArea();
+
     List<Integer> getAvailableInSite(@Param("typeNo") Integer typeNo);
 
     List<Integer> getAvailableOutSite(@Param("typeNo") Integer typeNo);
diff --git a/src/main/java/com/zy/asrs/service/BasAgvService.java b/src/main/java/com/zy/asrs/service/BasAgvService.java
index a412369..9d5bc4b 100644
--- a/src/main/java/com/zy/asrs/service/BasAgvService.java
+++ b/src/main/java/com/zy/asrs/service/BasAgvService.java
@@ -5,4 +5,8 @@
 
 public interface BasAgvService extends IService<BasAgv> {
 
+    BasAgv selectIdleAgv();
+
+    String getAgvWorkNo();
+
 }
diff --git a/src/main/java/com/zy/asrs/service/BasDevpService.java b/src/main/java/com/zy/asrs/service/BasDevpService.java
index 8628feb..888dd5c 100644
--- a/src/main/java/com/zy/asrs/service/BasDevpService.java
+++ b/src/main/java/com/zy/asrs/service/BasDevpService.java
@@ -8,6 +8,12 @@
 public interface BasDevpService extends IService<BasDevp> {
 
     /**
+     * Agv宸ヤ綔鍖�
+     * @return
+     */
+    List<Integer> getAgvAvailableInSite();
+
+    /**
      * 鍏ュ簱绔�
      * @return
      */
diff --git a/src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java
index c1ab0d6..4bc5994 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasAgvServiceImpl.java
@@ -1,12 +1,54 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
 import com.zy.asrs.mapper.BasAgvMapper;
 import com.zy.asrs.entity.BasAgv;
 import com.zy.asrs.service.BasAgvService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Random;
+
+@Slf4j
 @Service("basAgvService")
 public class BasAgvServiceImpl extends ServiceImpl<BasAgvMapper, BasAgv> implements BasAgvService {
 
+    @Override
+    public BasAgv selectIdleAgv() {
+        List<BasAgv> idleAgvs = this.selectList(new EntityWrapper<BasAgv>()
+                .eq("in_enable", "Y")
+                .eq("is_user", 1)
+                .eq("status", 6)
+        );
+        if (Cools.isEmpty(idleAgvs)) {
+            log.warn("娌℃湁绌洪棽鐨凙gv灏忚溅");
+            throw new CoolException("娌℃湁绌洪棽鐨凙gv灏忚溅");
+        }
+        return idleAgvs.get(0);
+    }
+
+    @Override
+    public String getAgvWorkNo() {
+        String workNo = null;
+        for (int i = 0; i < 10; i++) {
+            workNo = getRandom();
+            int count = this.selectCount(new EntityWrapper<BasAgv>().eq("task_code", workNo));
+            if (count == 0) {
+                break;
+            }
+        }
+        if (Cools.isEmpty(workNo)) {
+            throw new CoolException("涓嬪彂AGV浠诲姟閿欒锛屽伐浣滃彿寮傚父");
+        }
+        return workNo;
+    }
+
+    private String getRandom() {
+        return String.format("%04d",new Random().nextInt(9999));
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
index e505de8..df975a3 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java
@@ -18,6 +18,11 @@
     private WrkMastService wrkMastService;
 
     @Override
+    public List<Integer> getAgvAvailableInSite() {
+        return this.baseMapper.getAgvInArea();
+    }
+
+    @Override
     public List<Integer> getAvailableInSite() {
         return this.baseMapper.getAvailableInSite(1);
     }
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 3b05adb..cd015e6 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1,34 +1,48 @@
 package com.zy.asrs.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
+import com.zy.asrs.entity.BasAgv;
 import com.zy.asrs.entity.MatCode;
 import com.zy.asrs.entity.WaitPakin;
 import com.zy.asrs.entity.param.CombParam;
+import com.zy.asrs.service.BasAgvService;
 import com.zy.asrs.service.MatCodeService;
 import com.zy.asrs.service.MobileService;
 import com.zy.asrs.service.WaitPakinService;
 import com.zy.asrs.utils.VersionUtils;
+import com.zy.common.model.agv.AgvCommand;
+import com.zy.common.model.agv.AgvResult;
+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 org.springframework.transaction.annotation.Transactional;
 
+import java.io.IOException;
 import java.util.Date;
 
 /**
  * 绉诲姩绔湇鍔℃牳蹇冪被
  * Created by vincent on 2020/6/28
  */
+@Slf4j
 @Service
 public class MobileServiceImpl implements MobileService {
 
+    @Value("${agv.url}")
+    private String agvUrl;
     @Autowired
     private MatCodeService matCodeService;
     @Autowired
     private WaitPakinService waitPakinService;
+    @Autowired
+    private BasAgvService basAgvService;
 
     @Override
     @Transactional
@@ -66,6 +80,34 @@
                         throw new CoolException("淇濆瓨鏁版嵁澶辫触");
                     }
                 }
+                // 灏忚溅鍏ュ簱鎼繍鍛戒护 ----------------------------------------------------
+                if (!Cools.isEmpty(param.getAgvSite())) {
+                    BasAgv idleAgv = basAgvService.selectIdleAgv();
+                    AgvCommand command = new AgvCommand();
+                    command.setAgvId(idleAgv.getAgvId());
+                    command.setInterCode(basAgvService.getAgvWorkNo());
+                    command.setBeginLoc(String.valueOf(param.getAgvSite()));
+                    command.setEndLoc("1088");
+                    log.info(JSON.toJSONString(command));
+                    String result;
+                    try {
+                        result = new HttpHandler.Builder()
+                                .setUri(agvUrl + "/api/interfaceTask/SendTaskByThirdParty")
+                                .setJson(JSON.toJSONString(command))
+                                .build()
+                                .doPost();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        throw new CoolException("璁块棶AGV鎺ュ彛澶辫触");
+                    }
+                    AgvResult agvResult = JSON.parseObject(result, AgvResult.class);
+                    log.info(JSON.toJSONString(agvResult));
+                    if (!agvResult.getResult()) {
+                        log.error("agv鍛戒护鍙戦�佸け璐agvId={}]锛岄敊璇俊鎭�={}", command.getAgvId(), agvResult.getExplain());
+                        throw new CoolException("agv鍛戒护鍙戦�佸け璐agvId=" + command.getAgvId() + "]锛岄敊璇俊鎭�=" + agvResult.getExplain());
+                    }
+                }
+
             } else {
                 WaitPakin waitPakin = new WaitPakin();
                 waitPakin.setZpallet(param.getBarcode());   // 鎵樼洏鐮�
diff --git a/src/main/java/com/zy/common/model/agv/AgvCommand.java b/src/main/java/com/zy/common/model/agv/AgvCommand.java
new file mode 100644
index 0000000..cfaf0f9
--- /dev/null
+++ b/src/main/java/com/zy/common/model/agv/AgvCommand.java
@@ -0,0 +1,41 @@
+package com.zy.common.model.agv;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2021/5/19
+ */
+@Data
+public class AgvCommand {
+
+    // 灏忚溅鍙�
+    private Integer AgvId;
+
+    // 浠诲姟鍙�
+    private String InterCode;
+
+    // 浠诲姟浼樺厛绾� 鍥哄畾 - 5
+    private String Sort = "5";
+
+    // 寮�濮嬭揣浣�
+    private String BeginLoc;
+
+    // 寮�濮嬭揣浣嶅眰绾� 鍥哄畾 - 1
+    private String BeginLevel = "1";
+
+    // 鐩殑璐т綅
+    private String EndLoc;
+
+    // 鐩殑璐т綅灞傜骇
+    private String EndLevel = "1";
+
+    // 浠诲姟绫诲瀷锛�3锛氬彇鏀捐揣锛�5锛氬彇璐�+杞借揣琛岃蛋锛�6锛� 杞借揣琛岃蛋+鏀捐揣锛� 鍥哄畾 3
+    private String TaskType = "3";
+
+    // 鎵樼洏鐮�
+    private String TrayCode;
+
+    // 鎵樼洏绫诲瀷 鍥哄畾 1
+    private String SalverType = "1";
+
+}
diff --git a/src/main/java/com/zy/common/model/agv/AgvInfo.java b/src/main/java/com/zy/common/model/agv/AgvInfo.java
new file mode 100644
index 0000000..ca004f5
--- /dev/null
+++ b/src/main/java/com/zy/common/model/agv/AgvInfo.java
@@ -0,0 +1,76 @@
+package com.zy.common.model.agv;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.core.common.Cools;
+import com.zy.asrs.entity.BasAgv;
+import com.zy.common.model.enums.AgvStatusType;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by vincent on 2021/5/19
+ */
+@Data
+public class AgvInfo implements Cloneable, Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    // 灏忚溅缂栧彿
+    private Integer Id;
+
+    // 鏄惁鍚敤锛坱rue:鍚敤,false:绂佺敤锛�
+    private Boolean IsUse;
+
+    // 褰撳墠浣嶇疆鐐逛綅
+    private String CurrentNode;
+
+    // 褰撳墠鐢甸噺
+    private String Power;
+
+    // 涓�鑸姸鎬侊紙01:鍓嶅線鍙栬揣鐐�,02:鍙栬揣鐐瑰彇璐�,03:鍓嶅線閫佽揣鐐�,04:閫佽揣鐐规斁璐�,05:浠诲姟瀹屾垚,06:绌洪棽,07:鏁呴殰,08:鍏呯數涓�,09:鎵嬪姩,10:澶辫仈,11:绂荤嚎,12:琛岃蛋锛�
+    private String Status;
+
+    @JSONField(serialize = false)
+    private transient AgvStatusType agvStatus;
+
+    // 鏁呴殰鐮�
+    private String Fault;
+
+    // 浠诲姟鍙�
+    private String taskcode;
+
+    // 浠诲姟鐐�
+    private String Point_Number;
+
+    // 浠诲姟绫诲瀷锛�1:琛岃蛋,2:鍙栬揣,3:鏀捐揣,4:鍏呯數锛�
+    private String ActionType;
+
+
+    @Override
+    public AgvInfo clone() {
+        try {
+            return (AgvInfo) super.clone();
+        } catch (CloneNotSupportedException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public BasAgv toSqlModel(){
+        BasAgv basAgv = new BasAgv();
+        basAgv.setAgvId(this.getId());
+        basAgv.setIsUser(this.getIsUse()?1:0);
+        basAgv.setCurrentNode(this.getCurrentNode());
+        basAgv.setPower(this.getPower());
+        basAgv.setStatus(Cools.isEmpty(this.getAgvStatus())?0:Integer.parseInt(this.getAgvStatus().id));
+        basAgv.setFault(this.getFault());
+        basAgv.setTaskCode(this.getTaskcode());
+        basAgv.setEndLoc(this.getPoint_Number());
+        basAgv.setAction(Cools.isEmpty(this.getActionType())?0:Integer.parseInt(this.getActionType()));
+        basAgv.setModiTime(new Date());
+        return basAgv;
+    }
+
+}
diff --git a/src/main/java/com/zy/common/model/agv/AgvResult.java b/src/main/java/com/zy/common/model/agv/AgvResult.java
new file mode 100644
index 0000000..3e8b47e
--- /dev/null
+++ b/src/main/java/com/zy/common/model/agv/AgvResult.java
@@ -0,0 +1,25 @@
+package com.zy.common.model.agv;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2021/5/19
+ */
+@Data
+public class AgvResult {
+
+    // 鍙嶉缁撴灉
+    private Boolean Result;
+
+    // 缁撴灉璇存槑
+    private String Explain;
+
+    public AgvResult() {
+    }
+
+    public AgvResult(Boolean result, String explain) {
+        Result = result;
+        Explain = explain;
+    }
+
+}
diff --git a/src/main/java/com/zy/common/model/enums/AgvStatusType.java b/src/main/java/com/zy/common/model/enums/AgvStatusType.java
new file mode 100644
index 0000000..f757a97
--- /dev/null
+++ b/src/main/java/com/zy/common/model/enums/AgvStatusType.java
@@ -0,0 +1,51 @@
+package com.zy.common.model.enums;
+
+public enum AgvStatusType {
+
+    GOTO_TAKE("01", "鍓嶅線鍙栬揣鐐�"),
+    TAKING("02", "鍙栬揣鐐瑰彇璐�"),
+    GOTO_PUT("03", "鍓嶅線閫佽揣鐐�"),
+    PUTTING("04", "閫佽揣鐐规斁璐�"),
+    COMPLETE("05", "浠诲姟瀹屾垚"),
+    IDLE("06", "绌洪棽"),
+    ERROR("07", "鏁呴殰"),
+    CHARGING("08", "鍏呯數涓�"),
+    HANDLE("09", "鎵嬪姩"),
+    DISPLAY("010", "澶辫仈"),
+    SOS("011" , "绂荤嚎"),
+    WORKING("012", "琛岃蛋"),
+
+    ;
+
+    public String id;
+    public String desc;
+    AgvStatusType(String id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static AgvStatusType get(String id) {
+        if (null == id) {
+            return null;
+        }
+        for (AgvStatusType type : AgvStatusType.values()) {
+            if (type.id.equals(id)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static AgvStatusType get(AgvStatusType type) {
+        if (null == type) {
+            return null;
+        }
+        for (AgvStatusType agvStatusType : AgvStatusType.values()) {
+            if (agvStatusType == type) {
+                return agvStatusType;
+            }
+        }
+        return 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 3d87198..f94f1a1 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -56,3 +56,6 @@
   doubleLocs: 1,4,5,8,9,12
   # 涓�涓爢鍨涙満璐熻矗鐨勮揣鏋舵帓鏁�
   groupCount: 4
+
+agv:
+  url: http://192.168.0.251:8088
diff --git a/src/main/webapp/views/pda/combAgv.html b/src/main/webapp/views/pda/combAgv.html
index 3a580f6..f132cf1 100644
--- a/src/main/webapp/views/pda/combAgv.html
+++ b/src/main/webapp/views/pda/combAgv.html
@@ -27,11 +27,9 @@
             <button id="mat-btn" type="button" class="layui-btn layui-btn-normal" onclick="getMat()"><i class="layui-icon">+</i>鎻愬彇</button>
         </div>
         <div style="display: inline-block">
-            宸ヤ綔鍖�
             <!-- 宸ヤ綔鍖� -->
             <div class="layui-inline" style="width: 100px; margin-left: 10px">
                 <select id="devpSelect">
-                    <option value="">宸ヤ綔鍖�</option>
                 </select>
             </div>
         </div>
@@ -82,12 +80,13 @@
     // 鑾峰彇宸ヤ綔鍖�
     function getDevp(){
         $.ajax({
-            url: baseUrl+"/available/put/site",
+            url: baseUrl+"/agv/put/site",
             headers: {'token': localStorage.getItem('token')},
             method: 'POST',
             async: false,
             success: function (res) {
                 if (res.code === 200){
+                    $('#devpSelect').html('');
                     var tpl = $("#devpSelectTemplate").html();
                     var template = Handlebars.compile(tpl);
                     var html = template(res);
@@ -178,28 +177,28 @@
             tips("璇烽�夋嫨宸ヤ綔鍖�", true);
             return;
         }
-        alert("灏忚溅缁勬墭鍏ュ簱瀹屾垚锛堝姛鑳借繕鏈疄鐜帮級");
-//        $.ajax({
-//            url: baseUrl+"/mobile/comb/auth",
-//            headers: {'token': localStorage.getItem('token')},
-//            data: JSON.stringify({
-//                barcode: barcode,
-//                combMats: matData
-//            }),
-//            contentType:'application/json;charset=UTF-8',
-//            method: 'POST',
-//            async: false,
-//            success: function (res) {
-//                if (res.code === 200) {
-//                    reset();
-//                    tips("缁勬墭鎴愬姛")
-//                } else if (res.code === 403) {
-//                    top.location.href = baseUrl + "/pda";
-//                } else {
-//                    tips(res.msg, true)
-//                }
-//            }
-//        })
+       $.ajax({
+           url: baseUrl+"/mobile/comb/auth",
+           headers: {'token': localStorage.getItem('token')},
+           data: JSON.stringify({
+               barcode: barcode,
+               combMats: matData,
+               agvSite: devp
+           }),
+           contentType:'application/json;charset=UTF-8',
+           method: 'POST',
+           async: false,
+           success: function (res) {
+               if (res.code === 200) {
+                   reset();
+                   tips("缁勬墭鎴愬姛")
+               } else if (res.code === 403) {
+                   top.location.href = baseUrl + "/pda";
+               } else {
+                   tips(res.msg, true)
+               }
+           }
+       })
     }
 
     /**
@@ -233,6 +232,7 @@
 </script>
 
 <script type="text/template" id="devpSelectTemplate">
+    <option value="">宸ヤ綔鍖�</option>
     {{#each data}}
     <option value="{{this}}">{{this}}</option>
     {{/each}}

--
Gitblit v1.9.1