#
zwl
2025-07-19 6193eddf242c4b879402367704b8b5b2e8df84a4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
package com.zy.asrs.controller;
 
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;
import com.core.exception.CoolException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.BasShuttleServiceImpl;
import com.zy.asrs.utils.Utils;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
 
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.*;
 
import static org.apache.ibatis.ognl.OgnlRuntime.setFieldValue;
 
@Slf4j
@RestController
@RequestMapping("/open")
public class OpenController extends BaseController {
 
    @Autowired
    private OpenService openService;
    @Autowired
    private TaskWrkService taskWrkService;
    @Autowired
    private CommandInfoService commandInfoService;
    @Autowired
    private TaskWrkController taskWrkController;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private StaDescService staDescService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private BasCrnErrorService basCrnErrorService;
 
    @Value("${wms.url}")
    private String wmsUrl;
 
    private static final boolean auth = true;
 
    public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{
        add("ea1f0459efc02a79f046f982767939ae");
    }};
    @Autowired
    private BasShuttleServiceImpl basShuttleService;
 
    private void auth(String appkey, Object obj, HttpServletRequest request) {
        log.info("{}接口被访问;appkey:{};请求数据:{}", request.getServletPath(), appkey, JSON.toJSONString(obj));
        request.setAttribute("cache", obj);
        if (Cools.isEmpty(appkey)) {
            throw new CoolException("认证失败,请确认appkey无误!");
        }
        if (!APP_KEY_LIST.contains(appkey)) {
            throw new CoolException("认证失败,请确认appkey无误!");
        }
    }
 
    //任务下发接口
    @PostMapping("/outboundTaskSend")
//    @Transactional
    public HashMap<String, Object> outboundTaskSend(@RequestBody HashMap<String,Object> hashMap) {
        String jsonString = JSON.toJSONString(hashMap.get("TaskList"));
        List<CarryParam> params= JSONObject.parseArray(jsonString,CarryParam.class);
        HashMap<String, Object> map = new HashMap<>();
        for (CarryParam param:params){
            if (Cools.isEmpty(param)){
                map.put("Code","0");
                map.put("Msg","参数为空!");
                return map;
            } else if (Cools.isEmpty(param.getTaskNo())){
                map.put("Code","0");
                map.put("Msg","任务号为空!");
                return map;
            } else if (Cools.isEmpty(param.getStereoscopicTaskType())){
                map.put("Code","0");
                map.put("Msg","任务类型为空!");
                return map;
            }
            String fusion = Utils.Fusion(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo());
            param.setOriginStartPoint(fusion);
            LocMast locMast = locMastService.selectByLocNo(fusion);
            if(Cools.isEmpty(locMast)){
                map.put("Code","0");
                map.put("Msg","初始库位无法找到!");
                return map;
            }
 
            HashMap<String,Object> r = new HashMap<>();
 
            if(param.getStereoscopicTaskType() == 2){
                //出库任务创建
                StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                        .eq("type_no",2)
                        .eq("stn_no",param.getTerminalNo()));
                if(Cools.isEmpty(staDesc)){
                    map.put("Code","0");
                    map.put("Msg","出库路劲不存在!");
                    return map;
                }
                r = openService.taskCreate(param);
                if(r.get("Code").equals("0")){
                    return r;
                }
            }else if (param.getStereoscopicTaskType() == 3){
                String fusion1 = Utils.Fusion(param.getGoalRowNo(), param.getGoalFloorNo(), param.getGoalColumnNo());
                param.setTerminalNo(fusion1);
                //移库任务创建
                r = openService.taskCreate(param);
                if(r.get("Code").equals("0")){
                    return r;
                }
            }
            apiLogService.save("Wms任务下发接口"
                    ,request.getRemoteAddr()+request.getRequestURI()
                    ,""
                    ,request.getRemoteAddr()
                    ,JSON.toJSONString(param)
                    ,r.toString()
                    ,true
            );
        }
        map.put("Code","1");
        map.put("Msg","ok");
        return map;
    }
 
    //任务取消接口
    @PostMapping("/taskCancel")
    public R taskCancel(@RequestHeader String appkey,
                               @RequestBody WMSAndAGVInterfaceParam param,
                               HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param)){
            return R.error("参数为空!");
        } else if (Cools.isEmpty(param.getTaskNo())){
            return R.error("工作号为空!");
        } else if (Cools.isEmpty(param.getIoType())){
            return R.error("操作类型为空!");
        } else if (Cools.isEmpty(param.getBarcode())){
            return R.error("托盘码不能为空!");
        }
 
        TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>()
                .eq("task_no", param.getTaskNo())
                .eq("io_type",param.getIoType())
                .eq("barcode",param.getBarcode()));
        if (Cools.isEmpty(taskWrk)){
            return R.error("未查到当前任务---"+param);
        }
        boolean sign =false;
        switch (param.getTaskStatus()){
            case 1://正常取消
                if (taskWrk.getStatus()>1){
                    return R.error("任务已开始执行");
                }
                break;
            case 2://正常完成
                if (taskWrk.getStatus()>1){
                    return R.error("任务已开始执行");
                }
                sign=true;
                break;
            default:
                return R.error("未知操作");
        }
        return taskWrkOperate(taskWrk,sign);
    }
 
    //任务操作
    private R taskWrkOperate(TaskWrk taskWrk,boolean sign){
        try{
            if (sign){//完成
                return taskWrkController.complete(taskWrk.getTaskNo());
            }else {//取消
                return taskWrkController.cancel(taskWrk.getTaskNo());
            }
        }catch (Exception e){
            return R.error();
        }
    }
 
    //设备状态查询接口
    @GetMapping("/deviceStatus")
    @Transactional
    public R deviceStatus() {
        HashMap<String,Object> map = new HashMap<>();
        List<BasShuttle> basShuttle = basShuttleService.selectList(null);
        List<BasDevp> basDevp = basDevpService.selectList(null);
        map.put("basShuttle",basShuttle);
        map.put("basDevp",basDevp);
        return R.ok(map);
    }
 
    //设备状态查询接口
    @PostMapping("/devpdeviceStatus")
    @Transactional
    public String devpDeviceStatus(@RequestBody HashMap staNo) {
        BasDevp basDevp=basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no",staNo.get("staNo")));
        if(basDevp==null||basDevp.getLoading().equals("Y")||basDevp.getOutEnable().equals("N")){
            return "no";
        }
        return "ok";
    }
 
    //rcs和wcs校验入库工作号是否一致
    //设备状态查询接口
    @PostMapping("/devpdeviceStatusTaskNo")
    @Transactional
    public String devpDeviceStatusTaskNo(@RequestBody HashMap staNo) {
        BasDevp basDevp=basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no",staNo.get("staNo")));
        String taskNo=staNo.get("superTaskNo").toString();
        if(Cools.isEmpty(basDevp)&&Cools.isEmpty(taskNo)){
            return "no";
        }else if(!basDevp.getWrkNo().equals(Integer.valueOf(taskNo))){
            return "no";
        }
        return "ok";
    }
 
}