From 630fd6132b59f0593d88d6de2c35ba82cc6ef434 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期三, 06 十二月 2023 17:07:37 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/controller/SiteController.java      |    5 
 src/main/java/com/zy/asrs/controller/ApiLogController.java    |  123 ++++++
 src/main/webapp/views/apiLog/apiLog.html                      |  186 ++++++++++
 src/main/java/com/zy/asrs/controller/OpenController.java      |   55 ++
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java   |    6 
 src/main/webapp/static/wms/js/apiLog/apiLog.js                |    2 
 src/main/resources/application-prod.yml                       |   54 ++
 src/main/java/com/zy/asrs/service/OpenService.java            |    1 
 src/main/java/com/zy/common/CodeBuilder.java                  |    6 
 src/main/java/com/zy/asrs/entity/ApiLog.java                  |  194 ++++++++++
 src/main/java/com/zy/asrs/controller/StaDescController.java   |    5 
 src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java |   45 ++
 src/main/java/com/zy/asrs/mapper/ApiLogMapper.java            |   12 
 src/main/java/com/zy/asrs/service/ApiLogService.java          |   10 
 src/main/resources/mapper/ApiLogMapper.xml                    |   25 +
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java   |  142 ++++++-
 src/main/resources/license.lic                                |    0 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java       |  157 ++++++++
 18 files changed, 975 insertions(+), 53 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/ApiLogController.java b/src/main/java/com/zy/asrs/controller/ApiLogController.java
new file mode 100644
index 0000000..9f0a8df
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/ApiLogController.java
@@ -0,0 +1,123 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import com.zy.asrs.entity.ApiLog;
+import com.zy.asrs.service.ApiLogService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class ApiLogController extends BaseController {
+
+    @Autowired
+    private ApiLogService apiLogService;
+
+    @RequestMapping(value = "/apiLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(apiLogService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/apiLog/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<ApiLog> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(apiLogService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/apiLog/add/auth")
+    @ManagerAuth
+    public R add(ApiLog apiLog) {
+        apiLogService.insert(apiLog);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/apiLog/update/auth")
+	@ManagerAuth
+    public R update(ApiLog apiLog){
+        if (Cools.isEmpty(apiLog) || null==apiLog.getId()){
+            return R.error();
+        }
+        apiLogService.updateById(apiLog);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/apiLog/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            apiLogService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/apiLog/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<ApiLog> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("apiLog"));
+        convert(map, wrapper);
+        List<ApiLog> list = apiLogService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/apiLogQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<ApiLog> wrapper = new EntityWrapper<>();
+        wrapper.like("uuid", condition);
+        Page<ApiLog> page = apiLogService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (ApiLog apiLog : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", apiLog.getId());
+            map.put("value", apiLog.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/apiLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<ApiLog> wrapper = new EntityWrapper<ApiLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != apiLogService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(ApiLog.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 316e934..6f30d10 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.annotations.AppAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.R;
@@ -42,6 +43,11 @@
     private TaskWrkController taskWrkController;
     @Autowired
     private BasDevpService basDevpService;
+    @Autowired
+    private ApiLogService apiLogService;
+
+    @Autowired
+    private StaDescService staDescService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -53,6 +59,7 @@
     }};
     //agv浠诲姟瀹屾垚
     @PostMapping("/toAgvTaskOver")
+    @AppAuth(memo = "agv浠诲姟瀹屾垚鎺ュ彛")
     public R getAgvTaskOver(@RequestHeader String appkey,
                            @RequestBody TaskOverParam param,
                            HttpServletRequest request){
@@ -133,6 +140,7 @@
 
     //AGV璇锋眰鍏ュ簱鐮佸ご鎺ュ彛
     @PostMapping("/targetWharfApply")
+    @AppAuth(memo = "AGV璇锋眰鍏ュ簱鐮佸ご鎺ュ彛")
     public R targetWharfApply(@RequestHeader String appkey,
                               @RequestBody WMSAndAGVInterfaceParam param,
                               HttpServletRequest request) throws IOException {
@@ -150,11 +158,20 @@
             return R.error("绌洪棽鐨勫叆搴撶爜澶达紙AGV锛変负绌猴紒");
         }
         R r = openService.AgvToWCSToWms(param);
+        apiLogService.save("AGV璇锋眰鍏ュ簱鐮佸ご鎺ュ彛"
+                ,request.getRemoteAddr()+request.getRequestURI()
+                ,appkey
+                ,request.getRemoteAddr()
+                ,JSON.toJSONString(param)
+                ,r.toString()
+                ,true
+        );
         return r;
     }
 
     //AGV璇锋眰鍔ㄤ綔鎺ュ彛
     @PostMapping("/agvTaskRequest")
+    @AppAuth(memo = "AGV璇锋眰鍔ㄤ綔鎺ュ彛")
     public R agvTaskRequest(@RequestHeader String appkey,
                               @RequestBody WMSAndAGVInterfaceParam param,
                               HttpServletRequest request) {
@@ -175,17 +192,37 @@
         map.put("J-1109",118);map.put("J-1110",117);
         map.put("J-1111",122);map.put("J-1112",121);
 
-        try{
-            BasDevp basDevp = basDevpService.selectById(map.get(param.getWharfCode()));
-            if (basDevp.getAutoing().equals("Y") && basDevp.getLoading().equals("N")){
-                return R.ok();
-            }else {
-                return R.error("绔欑偣鐘舵�佷笉鍙叆");
-            }
-        }catch (Exception e){
-            log.error("AGV璇锋眰鍔ㄤ綔鎺ュ彛鎶ラ敊:"+e);
+        StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>().eq("stn_desc", param.getWharfCode()));
+
+        if (Cools.isEmpty(staDesc)){
             return R.error("绋嬪簭鎶ラ敊锛屾湭鏌ヨ鍒扮珯鐐�");
         }
+        BasDevp basDevp = basDevpService.selectById(map.get(param.getWharfCode()));
+        if (basDevp.getAutoing().equals("Y")){
+            apiLogService.save("AGV璇锋眰鍏ュ簱鐮佸ご鎺ュ彛"
+                    ,request.getRemoteAddr()+request.getRequestURI()
+                    ,appkey
+                    ,request.getRemoteAddr()
+                    ,JSON.toJSONString(param)
+                    ,R.ok().toString()
+                    ,true
+            );
+            return R.ok();
+        }else {
+            apiLogService.save("AGV璇锋眰鍏ュ簱鐮佸ご鎺ュ彛"
+                    ,request.getRemoteAddr()+request.getRequestURI()
+                    ,appkey
+                    ,request.getRemoteAddr()
+                    ,JSON.toJSONString(param)
+                    ,R.error("绔欑偣鐘舵�佷笉鍙叆").toString()
+                    ,true
+            );
+            return R.error("绔欑偣鐘舵�佷笉鍙叆");
+        }
+
+
+
+
 
     }
 
diff --git a/src/main/java/com/zy/asrs/controller/SiteController.java b/src/main/java/com/zy/asrs/controller/SiteController.java
index 0270d59..1305824 100644
--- a/src/main/java/com/zy/asrs/controller/SiteController.java
+++ b/src/main/java/com/zy/asrs/controller/SiteController.java
@@ -126,7 +126,10 @@
             Map<Integer, StaProtocol> station = devpThread.getStation();
 
             for(Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
-                list = staPlcErr(entry);
+                if (!Cools.isEmpty(staPlcErr(entry))){
+                    list.add(staPlcErr(entry).get(0)) ;
+                }
+
             }
         }
         return R.ok().add(list);
diff --git a/src/main/java/com/zy/asrs/controller/StaDescController.java b/src/main/java/com/zy/asrs/controller/StaDescController.java
index 02f253a..f4c8c7e 100644
--- a/src/main/java/com/zy/asrs/controller/StaDescController.java
+++ b/src/main/java/com/zy/asrs/controller/StaDescController.java
@@ -40,7 +40,10 @@
         excludeTrash(param);
         EntityWrapper<StaDesc> wrapper = new EntityWrapper<>();
         convert(param, wrapper);
-        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        if (!Cools.isEmpty(orderByField)){
+            wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));
+        }
+        wrapper.orderAsc(Collections.singleton("crn_no"));
         return R.ok(staDescService.selectPage(new Page<>(curr, limit), wrapper));
     }
 
diff --git a/src/main/java/com/zy/asrs/entity/ApiLog.java b/src/main/java/com/zy/asrs/entity/ApiLog.java
new file mode 100644
index 0000000..78fa188
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/ApiLog.java
@@ -0,0 +1,194 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("man_api_log")
+public class ApiLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鏃ュ織缂栧彿
+     */
+    @ApiModelProperty(value= "鏃ュ織缂栧彿")
+    private String uuid;
+
+    /**
+     * 鍚嶇О绌洪棿
+     */
+    @ApiModelProperty(value= "鍚嶇О绌洪棿")
+    private String namespace;
+
+    /**
+     * 鎺ュ彛鍦板潃
+     */
+    @ApiModelProperty(value= "鎺ュ彛鍦板潃")
+    private String url;
+
+    /**
+     * 骞冲彴瀵嗛挜
+     */
+    @ApiModelProperty(value= "骞冲彴瀵嗛挜")
+    private String appkey;
+
+    /**
+     * 鏃堕棿鎴�
+     */
+    @ApiModelProperty(value= "鏃堕棿鎴�")
+    private String timestamp;
+
+    /**
+     * 瀹㈡埛绔疘P
+     */
+    @ApiModelProperty(value= "瀹㈡埛绔疘P")
+    @TableField("client_ip")
+    private String clientIp;
+
+    /**
+     * 璇锋眰鍐呭
+     */
+    @ApiModelProperty(value= "璇锋眰鍐呭")
+    private String request;
+
+    /**
+     * 鍝嶅簲鍐呭
+     */
+    @ApiModelProperty(value= "鍝嶅簲鍐呭")
+    private String response;
+
+    /**
+     * 寮傚父鍐呭
+     */
+    @ApiModelProperty(value= "寮傚父鍐呭")
+    private String err;
+
+    /**
+     * 缁撴灉 1: 鎴愬姛  0: 澶辫触  
+     */
+    @ApiModelProperty(value= "缁撴灉 1: 鎴愬姛  0: 澶辫触  ")
+    private Integer result;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public ApiLog() {}
+
+    public ApiLog(String uuid,String namespace,String url,String appkey,String timestamp,String clientIp,String request,String response,String err,Integer result,Integer status,Date createTime,Date updateTime,String memo) {
+        this.uuid = uuid;
+        this.namespace = namespace;
+        this.url = url;
+        this.appkey = appkey;
+        this.timestamp = timestamp;
+        this.clientIp = clientIp;
+        this.request = request;
+        this.response = response;
+        this.err = err;
+        this.result = result;
+        this.status = status;
+        this.createTime = createTime;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+//    ApiLog apiLog = new ApiLog(
+//            null,    // 鏃ュ織缂栧彿
+//            null,    // 鍚嶇О绌洪棿
+//            null,    // 鎺ュ彛鍦板潃
+//            null,    // 骞冲彴瀵嗛挜
+//            null,    // 鏃堕棿鎴�
+//            null,    // 瀹㈡埛绔疘P
+//            null,    // 璇锋眰鍐呭
+//            null,    // 鍝嶅簲鍐呭
+//            null,    // 寮傚父鍐呭
+//            null,    // 缁撴灉
+//            null,    // 鐘舵��
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 淇敼鏃堕棿
+//            null    // 澶囨敞
+//    );
+
+    public String getResult$(){
+        if (null == this.result){ return null; }
+        switch (this.result){
+            case 1:
+                return "鎴愬姛";
+            case 0:
+                return "澶辫触";
+            default:
+                return String.valueOf(this.result);
+        }
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/ApiLogMapper.java b/src/main/java/com/zy/asrs/mapper/ApiLogMapper.java
new file mode 100644
index 0000000..7f9c418
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/ApiLogMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.ApiLog;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface ApiLogMapper extends BaseMapper<ApiLog> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/ApiLogService.java b/src/main/java/com/zy/asrs/service/ApiLogService.java
new file mode 100644
index 0000000..aa01c8f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/ApiLogService.java
@@ -0,0 +1,10 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.ApiLog;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface ApiLogService extends IService<ApiLog> {
+
+    void save(String namespace, String url, String appkey, String ip, String request, String response, boolean success);
+
+}
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index 0af74f2..bd1c6c8 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -5,6 +5,7 @@
 import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
 import com.zy.asrs.entity.param.taskCreateParam;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 
 public interface OpenService {
diff --git a/src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java
new file mode 100644
index 0000000..1ca14f4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/ApiLogServiceImpl.java
@@ -0,0 +1,45 @@
+package com.zy.asrs.service.impl;
+
+import com.core.common.SnowflakeIdWorker;
+import com.zy.asrs.mapper.ApiLogMapper;
+import com.zy.asrs.entity.ApiLog;
+import com.zy.asrs.service.ApiLogService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+@Slf4j
+@Service("apiLogService")
+public class ApiLogServiceImpl extends ServiceImpl<ApiLogMapper, ApiLog> implements ApiLogService {
+
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
+
+    @Async
+    @Override
+    public void save(String namespace, String url, String appkey, String ip, String request, String response, boolean success) {
+        Date now = new Date();
+        ApiLog apiLog = new ApiLog(
+                String.valueOf(snowflakeIdWorker.nextId()),    // 鏃ュ織缂栧彿
+                namespace,    // 鍚嶇О绌洪棿
+                url,    // 鎺ュ彛鍦板潃
+                appkey,    // 骞冲彴瀵嗛挜
+                String.valueOf(now.getTime()),    // 鏃堕棿鎴�
+                ip,    // 瀹㈡埛绔疘P
+                request,    // 璇锋眰鍐呭
+                response,
+                null,    // 寮傚父鍐呭
+                success?1:0 ,    // 缁撴灉
+                1,    // 鐘舵��
+                now,    // 娣诲姞鏃堕棿
+                now,    // 淇敼鏃堕棿
+                null    // 澶囨敞
+        );
+        if (!this.insert(apiLog)) {
+            log.error("鎺ュ彛璋冪敤鏃ュ織淇濆瓨澶辫触锛�");
+        }
+    }
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index a5eeb4e..6f2523e 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -148,7 +148,7 @@
                         staProtocol.setWorkNo(workNo);
                         staProtocol.setStaNo(inSta.getBackSta().shortValue());
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
-                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
 
                         TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo));
                         if (taskWrk != null) {
@@ -172,10 +172,10 @@
                         if (Cools.isEmpty(taskWrk)){
                             continue;
                         }
-                        if (taskWrk.getTargetPoint() != null && taskWrk.getStartPoint() != null && taskWrk.getWrkNo() != null){
+                        if (taskWrk.getTargetPoint() != null && taskWrk.getStartPoint() != null && taskWrk.getWrkNo() != null && taskWrk.getWrkNo().shortValue() != workNo){
                             staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                             staProtocol.setStaNo(inSta.getStaNo().shortValue());
-                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                         }else {
                             //TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo());
                             toWmsDTO.setWarehouseId("1688469798893297665");
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 4c3b4fe..99237bb 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -2,17 +2,22 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.common.R;
 import com.core.exception.CoolException;
 import com.zy.asrs.domain.enums.TaskStatusType;
+import com.zy.asrs.entity.StaDesc;
 import com.zy.asrs.entity.TaskWrk;
 import com.zy.asrs.entity.ToWmsDTO;
 import com.zy.asrs.entity.param.TaskOverParam;
 import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
 import com.zy.asrs.entity.param.taskCreateParam;
+import com.zy.asrs.service.ApiLogService;
 import com.zy.asrs.service.OpenService;
+import com.zy.asrs.service.StaDescService;
 import com.zy.asrs.service.TaskWrkService;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.utils.HttpHandler;
 import com.zy.core.DevpThread;
 import com.zy.core.cache.MessageQueue;
@@ -26,6 +31,7 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.util.*;
 
@@ -36,12 +42,21 @@
     private TaskWrkService taskWrkService;
     @Autowired
     private SlaveProperties slaveProperties;
+    @Autowired
+    private ApiLogService apiLogService;
+
+    @Autowired
+    private StaDescService staDescService;
+
+
 
     @Value("${wms.url}")
     private String wmsUrl;
     public ArrayList<String> wharfCode1 = new ArrayList<String>(){{
         add("J-1101"); add("J-1103"); add("J-1105"); add("J-1107"); add("J-1109"); add("J-1111");
     }};
+
+
 
     @Override
     public void taskCreate(taskCreateParam param) {
@@ -69,10 +84,12 @@
         }
 
         if (!Cools.isEmpty(param.getStartPoint())) {
-            taskWrk.setStartPoint(param.getStartPoint());//璧风偣
+            taskWrk.setStartPoint(Utils.getWcsLocNo(param.getStartPoint()));//璧风偣
+            taskWrk.setOriginStartPoint(param.getStartPoint());
         }
         if (!Cools.isEmpty(param.getTargetPoint())) {
-            taskWrk.setTargetPoint(param.getTargetPoint());//缁堢偣
+            taskWrk.setTargetPoint(Utils.getWcsLocNo(param.getTargetPoint()));//缁堢偣
+            taskWrk.setOriginTargetPoint(param.getTargetPoint());
         }
         if (!Cools.isEmpty(param.getMemo())) {
             taskWrk.setMemo(param.getMemo());//澶囨敞
@@ -88,7 +105,13 @@
         ToWmsDTO toWmsDTO = new ToWmsDTO();
         Map<String, Object> map = new HashMap<>();
         map.put("x-api-key","7a15b5db-29b6-552c-8cff-0cfec3756da2");
-        List<Integer> list = getInEnableRoadway();
+        List<Integer> list = new ArrayList<>();
+        if (param.getWharfSource().contains("J")){
+            list = getInEnableRoadway();
+        }else {
+            list = getInEnableRoadway2();
+        }
+
 
         //TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo());
         toWmsDTO.setWarehouseId("1688469798893297665");
@@ -110,35 +133,70 @@
         }
 
         JSONObject jsonObject = JSON.parseObject(response);
+
+        apiLogService.save("wms璇锋眰鍏ュ簱鐮佸ご鎺ュ彛"
+                ,wmsUrl+"wcsManager/wcsInterface/inboundTaskApply"
+                ,null
+                ,"127.0.0.1"
+                ,JSON.toJSONString(param)
+                ,response
+                ,true
+        );
+
         if (jsonObject.getInteger("code").equals(200)) {
             //瑙f瀽
             List<WMSAndAGVInterfaceParam> params = new ArrayList<>();
             params.add(param);
             WMSAndAGVInterfaceParam data = JSONObject.parseObject(jsonObject.get("data").toString(), WMSAndAGVInterfaceParam.class);
-
-            taskCreate(new taskCreateParam(data));
-            return R.ok(jsonObject.get("data"));
-        }else {
-            return R.error((String) jsonObject.get("msg"));
+            String msg = null;
+            try {
+                taskCreate(new taskCreateParam(data));
+            }catch (Exception e){
+                msg = e.getMessage();
+            }
+            if (msg != null){
+                return R.error(msg);
+            }
+            Map<String,String> map1 = new HashMap<>();
+            StaDesc staDesc = new StaDesc();
+            if (param.getWharfSource().contains("J")){
+                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
+                        .eq("crn_no",data.getTaskTunnel())
+                        .eq("type_no",1)
+                        .lt("crn_stn",200));
+            }else {
+                staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
+                        .eq("crn_no",data.getTaskTunnel())
+                        .eq("type_no",1)
+                        .ge("crn_stn",200));
+            }
+            //map1.put("taskTunnel", staDesc.getStnDesc());
+            map1.put("taskTunnel", "J-1104");
+            return R.ok(map1);
         }
-
+        return R.error((String) jsonObject.get("msg"));
     }
 
     @Override
     public void getAgvTaskOver(TaskOverParam param) {
-        Map<String,Integer> map = new HashMap<>();
-        map.put("J-1101",102);map.put("J-1102",101);
-        map.put("J-1103",106);map.put("J-1104",105);
-        map.put("J-1105",110);map.put("J-1106",109);
-        map.put("J-1107",114);map.put("J-1108",113);
-        map.put("J-1109",118);map.put("J-1110",117);
-        map.put("J-1111",122);map.put("J-1112",121);
-        map.put("H-1101",305);map.put("H-1102",300);
+//        Map<String,Integer> map = new HashMap<>();
+//        put("J-1101",102);put("J-1102",101);
+//        put("J-1103",106);put("J-1104",105);
+//        put("J-1105",110);put("J-1106",109);
+//        put("J-1107",114);put("J-1108",113);
+//        put("J-1109",118);put("J-1110",117);
+//        put("J-1111",122);put("J-1112",121);
+//        put("H-1101",305);put("H-1102",300);
         // 鏍规嵁杈撻�佺嚎plc閬嶅巻
         for (DevpSlave devp : slaveProperties.getDevp()) {
+            StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
+                    .eq("stn_desc", param.getWharfCode()));
+            if (Cools.isEmpty(staDesc)){
+                throw new RuntimeException("鏈煡璇㈠埌绔欑偣淇℃伅");
+            }
             // 鑾峰彇鍏ュ簱绔欎俊鎭�
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-            StaProtocol staProtocol = devpThread.getStation().get(map.get(param.getWharfCode()));
+            StaProtocol staProtocol = devpThread.getStation().get(staDesc.getStnNo());
             if (staProtocol == null) {
                 continue;
             } else {
@@ -146,7 +204,7 @@
             }
             Short workNo = staProtocol.getWorkNo();
             for (DevpSlave.Sta inSta : devp.getInSta()) {
-                if (inSta.getBackSta().equals(map.get(param.getWharfCode()))){
+                if (inSta.getBackSta().equals(staDesc.getStnNo())){
                     if (wharfCode1.contains(param.getWharfCode())){
                         if (!staProtocol.isLoading() && !staProtocol.isCar()){
                             //AGV鍑哄簱瀹屾垚浠ュ悗
@@ -157,7 +215,7 @@
                             //AGV鍏ュ簱瀹屾垚浠ュ悗
                             staProtocol.setWorkNo((short) 9999);
                             staProtocol.setStaNo(inSta.getStaNo().shortValue());
-                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol));
                             if (result) {
 
                             } else {
@@ -184,7 +242,7 @@
         map.put(115,4);
         map.put(119,5);
         map.put(123,6);
-        //map.put(301,7);
+        //put(301,7);
         // 鏍规嵁杈撻�佺嚎plc閬嶅巻
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鍏ュ簱鍙�
@@ -199,14 +257,52 @@
                 }
                 Short workNo = staProtocol.getWorkNo();
                 if (workNo == 0 && !staProtocol.isLoading()){
-                    if (Cools.isEmpty(map.get(inSta.getStaNo()))){
+                    if (Cools.isEmpty( map.get(inSta.getStaNo()))){
                         continue;
                     }
-                    list.add(map.get(inSta.getStaNo()));
+                    list.add( map.get(inSta.getStaNo()));
                 }
             }
         }
         //roadway = list.stream().mapToInt(Integer::intValue).toArray();
         return list;
     }
+
+    public List<Integer> getInEnableRoadway2(){
+        int[] roadway = null;
+        List<Integer> list = new ArrayList<>();
+        Map<Integer,Integer> map = new HashMap<>();
+        map.put(205,1);
+        map.put(211,2);
+        map.put(217,3);
+        map.put(223,4);
+        map.put(229,5);
+        map.put(235,6);
+        //put(301,7);
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻鍏ュ簱鍙�
+            for (DevpSlave.Sta inSta : devp.getInSta()) {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(inSta.getBackSta());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+                Short workNo = staProtocol.getWorkNo();
+                if (workNo == 0 && !staProtocol.isLoading()){
+                    if (Cools.isEmpty( map.get(inSta.getStaNo()))){
+                        continue;
+                    }
+                    list.add( map.get(inSta.getStaNo()));
+                }
+            }
+        }
+        //roadway = list.stream().mapToInt(Integer::intValue).toArray();
+        return list;
+    }
+
+
 }
diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index e9a0cdd..79cbcbc 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -17,10 +17,10 @@
 //        generator.table="sys_host";
         // sqlserver
         generator.sqlOsType = SqlOsType.SQL_SERVER;
-        generator.url="127.0.0.1:1433;databasename=wcs_dev";
+        generator.url="127.0.0.1:1433;databasename=ghtzasrs";
         generator.username="sa";
-        generator.password="sa";
-        generator.table="wcs_data_resource";
+        generator.password="sa@123";
+        generator.table="man_api_log";
         generator.packagePath="com.zy.asrs";
         generator.js = false;
         generator.html = false;
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 4278b5e..931fedf 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -125,6 +125,8 @@
                     case 2:
                         write((StaProtocol)task.getData());
                         break;
+                    case 3:
+                        write2((StaProtocol)task.getData());
                     default:
                         break;
                 }
@@ -250,7 +252,7 @@
 
             // 澶栧舰妫�娴� - 102
             Thread.sleep(100);
-            OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB101.150", (short)1);
+            OperateResultExOne<byte[]> result4 = siemensS7Net.Read("DB101.160", (short)1);
             if (result4.IsSuccess) {
                 boolean[] status = siemensS7Net.getByteTransform().TransBool(result4.Content, 0, 1);
                 StaProtocol staProtocol = station.get(103);
@@ -264,7 +266,7 @@
             }
             // 澶栧舰妫�娴� - 107
             Thread.sleep(50);
-            OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB101.154", (short)1);
+            OperateResultExOne<byte[]> result5 = siemensS7Net.Read("DB101.164", (short)1);
             if (result5.IsSuccess) {
                 boolean[] status = siemensS7Net.getByteTransform().TransBool(result5.Content, 0, 1);
                 StaProtocol staProtocol = station.get(107);
@@ -278,7 +280,7 @@
             }
             // 澶栧舰妫�娴� - 111
             Thread.sleep(50);
-            OperateResultExOne<byte[]> result6 = siemensS7Net.Read("DB101.158", (short)1);
+            OperateResultExOne<byte[]> result6 = siemensS7Net.Read("DB101.168", (short)1);
             if (result6.IsSuccess) {
                 boolean[] status = siemensS7Net.getByteTransform().TransBool(result6.Content, 0, 1);
                 StaProtocol staProtocol = station.get(111);
@@ -292,7 +294,7 @@
             }
             // 澶栧舰妫�娴� - 115
             Thread.sleep(50);
-            OperateResultExOne<byte[]> result7 = siemensS7Net.Read("DB101.162", (short)1);
+            OperateResultExOne<byte[]> result7 = siemensS7Net.Read("DB101.172", (short)1);
             if (result7.IsSuccess) {
                 boolean[] status = siemensS7Net.getByteTransform().TransBool(result7.Content, 0, 1);
                 StaProtocol staProtocol = station.get(115);
@@ -306,7 +308,7 @@
             }
             // 澶栧舰妫�娴� - 119
             Thread.sleep(50);
-            OperateResultExOne<byte[]> result8 = siemensS7Net.Read("DB101.166", (short)1);
+            OperateResultExOne<byte[]> result8 = siemensS7Net.Read("DB101.176", (short)1);
             if (result8.IsSuccess) {
                 boolean[] status = siemensS7Net.getByteTransform().TransBool(result8.Content, 0, 1);
                 StaProtocol staProtocol = station.get(119);
@@ -320,7 +322,7 @@
             }
             // 澶栧舰妫�娴� - 123
             Thread.sleep(50);
-            OperateResultExOne<byte[]> result9 = siemensS7Net.Read("DB101.170", (short)1);
+            OperateResultExOne<byte[]> result9 = siemensS7Net.Read("DB101.180", (short)1);
             if (result9.IsSuccess) {
                 boolean[] status = siemensS7Net.getByteTransform().TransBool(result9.Content, 0, 1);
                 StaProtocol staProtocol = station.get(123);
@@ -573,6 +575,149 @@
         }
 
     }
+    private void write2(StaProtocol staProtocol) throws InterruptedException {
+        if (null == staProtocol) {
+            return;
+        }
+        ArrayList<Integer> staNos = getStaNo();
+
+        int index = staNos.indexOf(staProtocol.getSiteId());
+        short[] array = new short[2];
+        array[0] = staProtocol.getWorkNo();
+        array[1] = staProtocol.getStaNo();
+//        OperateResult write = siemensS7Net.Write("DB100." + index*4, array);
+
+        //鏇存柊鍛戒护鏃ュ織
+//        CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class);
+//        CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
+//        CommandInfo commandInfo = commandInfoService.selectById(staProtocol.getCommandId());
+//        CommandInfoLog commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class);
+//        commandInfoLog.setId(null);
+//        CommandInfoLog commandInfoLog = new CommandInfoLog();
+//        if (commandInfo != null) {
+//            commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class);
+//            commandInfoLog.setId(null);
+//        }else {
+//            Date now = new Date();
+//            commandInfoLog.setCommand(JSON.toJSONString(staProtocol));
+//            commandInfoLog.setCommandStatus(3);
+//            commandInfoLog.setStartTime(now);
+//            commandInfoLog.setExecuteTime(now);
+//            commandInfoLog.setCompleteTime(now);
+//            commandInfoLog.setDevice(SlaveType.Devp.toString());
+//            commandInfoLog.setWrkNo(9999);
+//            commandInfoLog.setTaskNo("9999");
+//            commandInfoLog.setCommandDesc("鎵嬪姩鍛戒护");
+//        }
+
+        OperateResult writeResult;
+        //浠诲姟涓嬪彂娆℃暟
+        int writeCount = 0;
+        //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
+        boolean writeFlag = false;
+        while(writeCount < 5){
+            writeResult = siemensS7Net.Write("DB100." + index*4, array);    // 宸ヤ綔鍙枫�佺洰鏍囩珯
+
+            if(writeResult.IsSuccess){
+                Thread.sleep(200);
+                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index*4, (short)4);
+                if(readResult.IsSuccess){
+                    short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
+                    short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);
+                    if(staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)){
+                        //浠诲姟鍛戒护鍐欏叆鎴愬姛
+                        writeFlag = true;
+                        log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+
+                        Date now = new Date();
+
+//                        //鏇存柊鎸囦护鐘舵��
+//                        commandInfo.setCommandStatus(CommandStatusType.COMPLETE.id);//杈撻�佺嚎鐩存帴瀹屾垚鐘舵��
+//                        commandInfo.setExecuteTime(now);
+//                        commandInfo.setCompleteTime(now);
+//                        commandInfoService.updateById(commandInfo);
+//
+//                        //鏇存柊鎸囦护鏃ュ織
+//                        commandInfoLog.setDeviceLog("鎸囦护涓嬪彂鎴愬姛");
+//                        commandInfoLog.setCommandStatus(CommandStatusType.COMPLETE.id);//杈撻�佺嚎鐩存帴瀹屾垚鐘舵��
+//                        commandInfoLog.setExecuteTime(now);
+//                        commandInfoLog.setCompleteTime(now);
+//                        commandInfoLogService.insert(commandInfoLog);
+
+                        //鏇存柊浠诲姟姝ュ簭
+                        TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
+                        TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo().intValue());
+                        if (taskWrk != null) {
+                            taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//鏇存柊鎸囦护姝ュ簭
+                            taskWrkService.updateById(taskWrk);
+                        }
+
+                        break;
+                    } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
+                        writeCount++;
+                        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+                                slave.getId(), JSON.toJSON(staProtocol),writeCount));
+                        log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+//                        //鏇存柊鎸囦护鏃ュ織
+//                        commandInfoLog.setDeviceLog("鎸囦护涓嬪彂澶辫触");
+//                        commandInfoLogService.insert(commandInfoLog);
+                    }
+                } else {
+                    writeCount++;
+                    OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+                            slave.getId(), JSON.toJSON(staProtocol), writeCount));
+                    log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+
+//                    //鏇存柊鎸囦护鏃ュ織
+//                    commandInfoLog.setDeviceLog("鎸囦护涓嬪彂澶辫触");
+//                    commandInfoLogService.insert(commandInfoLog);
+                }
+            } else {
+                writeCount++;
+                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+                        slave.getId(), JSON.toJSON(staProtocol),writeCount));
+                log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+
+//                //鏇存柊鎸囦护鏃ュ織
+//                commandInfoLog.setDeviceLog("鎸囦护涓嬪彂澶辫触");
+//                commandInfoLogService.insert(commandInfoLog);
+            }
+            Thread.sleep(200);
+        }
+
+        //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
+        if(!writeFlag){
+            staProtocol = station.get(staProtocol.getSiteId());
+            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+                staProtocol.setPakMk(true);
+            }
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+            log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+
+            //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒�
+            boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol));
+            read();//璇诲彇1娆¤澶囩姸鎬�
+            return;
+        } else {
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+            log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}",  slave.getId(), JSON.toJSON(staProtocol));
+
+            Integer siteId = staProtocol.getSiteId();
+            staProtocol = station.get(siteId);
+            if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
+                staProtocol.setPakMk(true);
+            }
+
+            //鏇存柊浠诲姟姝ュ簭
+            TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class);
+            TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo().intValue());
+            if (taskWrk != null) {
+                taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//鏇存柊鎸囦护姝ュ簭
+                taskWrkService.updateById(taskWrk);
+            }
+        }
+
+    }
 
 //    /**
 //     * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 7759046..5ab5873 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -219,34 +219,34 @@
     emptyInSta[5]: #绌烘澘鍏ュ簱鍙�5
       staNo: 121
     inSta[0]: #鍏ュ簱鍙�1
-      scale: ${wcs-slave.scale[0].id}
+      #scale: ${wcs-slave.scale[0].id}
       staNo: 103
       backSta: 102
       barcode: ${wcs-slave.barcode[0].id}
     inSta[1]: #鍏ュ簱鍙�2
-      scale: ${wcs-slave.scale[1].id}
+      #scale: ${wcs-slave.scale[1].id}
       staNo: 107
       backSta: 106
       barcode: ${wcs-slave.barcode[1].id}
       #slot: 0
     inSta[2]: #鍏ュ簱鍙�1
-      scale: ${wcs-slave.scale[0].id}
+      #scale: ${wcs-slave.scale[0].id}
       staNo: 111
       backSta: 110
       barcode: ${wcs-slave.barcode[2].id}
     inSta[3]: #鍏ュ簱鍙�1
-      scale: ${wcs-slave.scale[0].id}
+      #scale: ${wcs-slave.scale[0].id}
       staNo: 115
       backSta: 114
       barcode: ${wcs-slave.barcode[3].id}
     inSta[4]: #鍏ュ簱鍙�2
-      scale: ${wcs-slave.scale[1].id}
+      #scale: ${wcs-slave.scale[1].id}
       staNo: 119
       backSta: 118
       barcode: ${wcs-slave.barcode[4].id}
       #slot: 0
     inSta[5]: #鍏ュ簱鍙�1
-      scale: ${wcs-slave.scale[0].id}
+      #scale: ${wcs-slave.scale[0].id}
       staNo: 123
       backSta: 122
       barcode: ${wcs-slave.barcode[5].id}
@@ -268,6 +268,48 @@
     rack: 0
     port: 102
     slot: 0
+    inSta[0]: #鍏ュ簱鍙�2
+      #scale: ${wcs-slave.scale[1].id}
+      staNo: 205
+      backSta: 203
+      #barcode: ${wcs-slave.barcode[4].id}
+    inSta[1]: #鍏ュ簱鍙�2
+      #scale: ${wcs-slave.scale[1].id}
+      staNo: 211
+      backSta: 209
+      #barcode: ${wcs-slave.barcode[4].id}
+    inSta[2]: #鍏ュ簱鍙�2
+      #scale: ${wcs-slave.scale[1].id}
+      staNo: 217
+      backSta: 215
+      #barcode: ${wcs-slave.barcode[4].id}
+    inSta[3]: #鍏ュ簱鍙�2
+      #scale: ${wcs-slave.scale[1].id}
+      staNo: 223
+      backSta: 221
+      #barcode: ${wcs-slave.barcode[4].id}
+    inSta[4]: #鍏ュ簱鍙�2
+      #scale: ${wcs-slave.scale[1].id}
+      staNo: 229
+      backSta: 227
+      #barcode: ${wcs-slave.barcode[4].id}
+    inSta[5]: #鍏ュ簱鍙�2
+      #scale: ${wcs-slave.scale[1].id}
+      staNo: 235
+      backSta: 232
+      #barcode: ${wcs-slave.barcode[4].id}
+    outSta[0]: #鍑哄簱鍙�1
+      staNo: 200
+    outSta[1]: #鍑哄簱鍙�1
+      staNo: 206
+    outSta[2]: #鍑哄簱鍙�1
+      staNo: 212
+    outSta[3]: #鍑哄簱鍙�1
+      staNo: 218
+    outSta[4]: #鍑哄簱鍙�1
+      staNo: 224
+    outSta[5]: #鍑哄簱鍙�1
+      staNo: 230
   devp[2]: #杈撻�佺嚎
     id: 3
     ip: 172.17.8.201
diff --git a/src/main/resources/license.lic b/src/main/resources/license.lic
index 0c3a8f4..ec0b4bc 100644
--- a/src/main/resources/license.lic
+++ b/src/main/resources/license.lic
Binary files differ
diff --git a/src/main/resources/mapper/ApiLogMapper.xml b/src/main/resources/mapper/ApiLogMapper.xml
new file mode 100644
index 0000000..ce84aac
--- /dev/null
+++ b/src/main/resources/mapper/ApiLogMapper.xml
@@ -0,0 +1,25 @@
+<?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.zy.asrs.mapper.ApiLogMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.ApiLog">
+        <id column="id" property="id" />
+        <result column="uuid" property="uuid" />
+        <result column="namespace" property="namespace" />
+        <result column="url" property="url" />
+        <result column="appkey" property="appkey" />
+        <result column="timestamp" property="timestamp" />
+        <result column="client_ip" property="clientIp" />
+        <result column="request" property="request" />
+        <result column="response" property="response" />
+        <result column="err" property="err" />
+        <result column="result" property="result" />
+        <result column="status" property="status" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="memo" property="memo" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/webapp/static/wms/js/apiLog/apiLog.js b/src/main/webapp/static/wms/js/apiLog/apiLog.js
index 9e7dd31..2b523a8 100644
--- a/src/main/webapp/static/wms/js/apiLog/apiLog.js
+++ b/src/main/webapp/static/wms/js/apiLog/apiLog.js
@@ -1,6 +1,6 @@
 var pageCurr;
 layui.config({
-    base: baseUrl + "/static/layui/lay/modules/"
+    base: baseUrl + "/static/wms/layui/lay/modules/"
 }).use(['table','laydate', 'form', 'admin'], function(){
     var table = layui.table;
     var $ = layui.jquery;
diff --git a/src/main/webapp/views/apiLog/apiLog.html b/src/main/webapp/views/apiLog/apiLog.html
new file mode 100644
index 0000000..d8fb528
--- /dev/null
+++ b/src/main/webapp/views/apiLog/apiLog.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/wms/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/wms/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/wms/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="namespace" placeholder="鍚嶇О绌洪棿" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="apiLog" lay-filter="apiLog"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+<!--    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>-->
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/html" id="resTpl">
+    <span name="settle"
+    {{# if( d.result === 1){ }}
+        class="layui-badge layui-badge-green" >{{d.result$}}</span>
+    {{# }else { }}
+        class="layui-badge layui-badge-red" >{{d.result$}}</span>
+    {{# } }}
+</script>
+
+<script type="text/javascript" src="../../static/wms/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/wms/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/wms/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/wms/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/wms/js/apiLog/apiLog.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏃ュ織缂栧彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="uuid" placeholder="璇疯緭鍏ユ棩蹇楃紪鍙�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍚嶇О绌洪棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="namespace" placeholder="璇疯緭鍏ュ悕绉扮┖闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎺ュ彛鍦板潃: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="url" placeholder="璇疯緭鍏ユ帴鍙e湴鍧�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">骞冲彴瀵嗛挜: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="appkey" placeholder="璇疯緭鍏ュ钩鍙板瘑閽�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏃堕棿鎴�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="timestamp" placeholder="璇疯緭鍏ユ椂闂存埑">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瀹㈡埛绔疘P: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="clientIp" placeholder="璇疯緭鍏ュ鎴风IP">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">璇锋眰鍐呭: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="request" placeholder="璇疯緭鍏ヨ姹傚唴瀹�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍝嶅簲鍐呭: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="response" placeholder="璇疯緭鍏ュ搷搴斿唴瀹�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">寮傚父鍐呭: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="err" placeholder="璇疯緭鍏ュ紓甯稿唴瀹�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">缁撴灉: </label>
+                    <div class="layui-input-block">
+                        <select name="result">
+                            <option value="">璇烽�夋嫨缁撴灉</option>
+                            <option value="1">鎴愬姛</option>
+                            <option value="0">澶辫触</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐘舵��: </label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">璇烽�夋嫨鐘舵��</option>
+                            <option value="1">姝e父</option>
+                            <option value="0">绂佺敤</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娣诲姞鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="createTime" id="createTime$" placeholder="璇疯緭鍏ユ坊鍔犳椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">澶囨敞: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+

--
Gitblit v1.9.1