Blame view

src/main/java/com/huaheng/api/acs/controller/AgvTaskCSController.java 18.2 KB
xumiao authored
1
2
3
4
5
6
package com.huaheng.api.acs.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
周鸿 authored
7
8
import com.huaheng.api.acs.domain.AcsStatus;
import com.huaheng.api.acs.domain.AcsWeightHeight;
周鸿 authored
9
import com.huaheng.api.acs.domain.AgvTaskCS;
周鸿 authored
10
import com.huaheng.api.acs.service.AcsCSService;
周鸿 authored
11
import com.huaheng.api.acs.service.AgvTaskCSService;
xumiao authored
12
13
14
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.StringUtils;
周鸿 authored
15
import com.huaheng.common.utils.security.ShiroUtils;
xumiao authored
16
17
18
19
20
21
22
23
24
25
26
27
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.page.PageDomain;
import com.huaheng.framework.web.page.TableDataInfo;
import com.huaheng.framework.web.page.TableSupport;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.containerType.domain.ContainerType;
import com.huaheng.pc.config.containerType.service.ContainerTypeService;
周鸿 authored
28
29
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
周鸿 authored
30
31
import com.huaheng.pc.config.station.domain.Station;
import com.huaheng.pc.config.station.service.StationService;
周鸿 authored
32
33
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
xumiao authored
34
35
36
37
38
39
40
41
42
43
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
xumiao authored
44
import java.util.HashMap;
xumiao authored
45
46
47
48
49
50
51
52
import java.util.List;
import java.util.Map;

/**
 * @author dell
 */
@Controller("AgvTaskController1")
@RequestMapping("/agv")
周鸿 authored
53
public class AgvTaskCSController extends BaseController {
xumiao authored
54
55
56
57

    private String prefix = "task/taskHeader";

    @Resource
周鸿 authored
58
    private AgvTaskCSService agvTaskService;
xumiao authored
59
60
61
62
    @Resource
    private ContainerService containerService;
    @Resource
    private ContainerTypeService containerTypeService;
周鸿 authored
63
64
    @Resource
    private TaskHeaderService taskHeaderService;
周鸿 authored
65
66
67
68
    @Resource
    private AcsCSService acsCSService;
    @Resource
    private LocationService locationService;
周鸿 authored
69
70
    @Resource
    private StationService stationService;
周鸿 authored
71
周鸿 authored
72
xumiao authored
73
74
75
76
77
78
79
80
81

    @RequiresPermissions("task:taskHeader:agvCsView")
    @GetMapping()
    public String taskHeader(HttpServletRequest request, ModelMap mmap) {
        String InternalTaskType = request.getParameter("InternalTaskType");
        mmap.put("InternalTaskType", InternalTaskType);
        return prefix + "/agvHeader";
    }
周鸿 authored
82
83
84
85
86
87
88
89
90
91
92
93
94
95
    @GetMapping("/lookAgvTask/{taskNo}")
    public String taskDetail(@PathVariable("taskNo") String taskNo, ModelMap mmap) {
        mmap.put("taskNo", taskNo);
        return prefix + "/agvHeader";
    }

    @RequiresPermissions("task:taskHeader:agvCsView")
    @GetMapping("/setPort/{taskId}")
    public String setPort(@PathVariable("taskId") Integer taskId,ModelMap mmap) {
        TaskHeader taskHeader=taskHeaderService.getById(taskId);
        mmap.put("taskHeader", taskHeader);
        String containerCode=taskHeader.getContainerCode();
        List<Location> list=locationService.getLocationListByContainerCode(taskHeader.getWarehouseCode(),containerCode,taskHeader.getToLocation());
        mmap.put("locationList", list);
周鸿 authored
96
        List<Station> stationList=stationService.getStationByContainers(taskHeader.getContainerCode(),"3",taskHeader.getWarehouseCode());
周鸿 authored
97
        mmap.put("stationList", stationList);
周鸿 authored
98
99
100
        return prefix + "/agvSetPort";
    }
xumiao authored
101
102
103
104
    @RequiresPermissions("task:taskHeader:list")
    @Log(title = "任务-上架任务", operating = "查看任务列表", action = BusinessType.GRANT)
    @PostMapping("/list")
    @ResponseBody
周鸿 authored
105
    public TableDataInfo list(AgvTaskCS agvTask, @ApiParam(name = "createdBegin", value = "起止时间") String createdBegin,
xumiao authored
106
107
108
109
110
111
112
                              @ApiParam(name = "createdEnd", value = "结束时间") String createdEnd,
                              @ApiParam(name = "taskComplete", value = "完成") String taskComplete) {
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        String isAsc = pageDomain.getIsAsc();
        String orderByColumn = pageDomain.getOrderByColumn();
周鸿 authored
113
        LambdaQueryWrapper<AgvTaskCS> lambdaQueryWrapper = new LambdaQueryWrapper<>();
周鸿 authored
114
        lambdaQueryWrapper.eq(AgvTaskCS::getWarehouseCode, ShiroUtils.getWarehouseCode())
周鸿 authored
115
116
                .eq(StringUtils.isNotNull(agvTask.getId()), AgvTaskCS::getId, agvTask.getId())
                .eq(StringUtils.isNotEmpty(agvTask.getContainerCode()), AgvTaskCS::getContainerCode, agvTask.getContainerCode())
周鸿 authored
117
                .eq(StringUtils.isNotNull(agvTask.getTaskHeaderId()), AgvTaskCS::getTaskHeaderId, agvTask.getTaskHeaderId())
周鸿 authored
118
119
120
121
                .eq(StringUtils.isNotEmpty(agvTask.getFromPort()), AgvTaskCS::getFromPort, agvTask.getFromPort())
                .eq(StringUtils.isNotEmpty(agvTask.getToPort()), AgvTaskCS::getToPort, agvTask.getToPort())
                .eq(StringUtils.isNotNull(agvTask.getPriority()), AgvTaskCS::getPriority, agvTask.getPriority())
                .eq(StringUtils.isNotEmpty(agvTask.getCarNo()), AgvTaskCS::getCarNo, agvTask.getCarNo())
周鸿 authored
122
                .eq(StringUtils.isNotNull(agvTask.getStatus()), AgvTaskCS::getStatus, agvTask.getStatus())
周鸿 authored
123
124
125
                .ge(StringUtils.isNotEmpty(createdBegin), AgvTaskCS::getCreatedTime, createdBegin)
                .le(StringUtils.isNotEmpty(createdEnd), AgvTaskCS::getCreatedTime, createdEnd)
                .le(StringUtils.isNotEmpty(taskComplete), AgvTaskCS::getStatus, taskComplete)
xumiao authored
126
127
128
129
130
131
                .last(!StringUtils.isAnyEmpty(isAsc, orderByColumn), "order by" + " " + orderByColumn + " " + isAsc)
                .last(StringUtils.isAnyEmpty(isAsc, orderByColumn), "order by id desc");
        /**
         * 使用分页查询
         */
        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
周鸿 authored
132
133
134
            Page<AgvTaskCS> page = new Page<>(pageNum, pageSize);
            IPage<AgvTaskCS> iPage = agvTaskService.page(page, lambdaQueryWrapper);
            List<AgvTaskCS> iPages = iPage.getRecords();
xumiao authored
135
136
            return getMpDataTable(iPages, iPage.getTotal());
        } else {
周鸿 authored
137
            List<AgvTaskCS> list = agvTaskService.list(lambdaQueryWrapper);
xumiao authored
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
            return getDataTable(list);
        }
    }


    @GetMapping("/createAGVTask")
    public String create() {
        return prefix + "/agvCreate";
    }

    @ApiOperation(value = "AGV创建任务", httpMethod = "POST")
    @PostMapping("/createAGVTask")
    @ResponseBody
    public AjaxResult createAGVTask(String priority, String sourceLocation, String destinationLocation, String containerCode, String taskType) {
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
周鸿 authored
155
                AgvTaskCS agvTask = new AgvTaskCS();
xumiao authored
156
157
158
159
160
161
162
163
164
165
                agvTask.setFromPort(sourceLocation);
                agvTask.setToPort(destinationLocation);
                agvTask.setContainerCode(containerCode);
                agvTask.setWarehouseCode("CS0001");
                return agvTaskService.createAGVTask(agvTask);
            }
        });
        return ajaxResult;
    }
周鸿 authored
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
    @RequiresPermissions("task:agvtask:createAGVTaskJLK")
    @GetMapping("/createAGVTaskJLK")
    public String createAGVTaskJLK() {
        return prefix + "/agvCreateJLK";
    }
    @RequiresPermissions("task:agvtask:createAGVTaskJLK")
    @ApiOperation(value = "AGV创建任务", httpMethod = "POST")
    @PostMapping("/createAGVTaskJLK")
    @ResponseBody
    public AjaxResult createAGVTaskJLK( String sourceLocation, String destinationLocation, String containerCode) {
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AgvTaskCS agvTask = new AgvTaskCS();
                agvTask.setFromPort(sourceLocation);
                agvTask.setToPort(destinationLocation);
                agvTask.setContainerCode(containerCode);
周鸿 authored
183
                return agvTaskService.createAGVTaskJLK(agvTask);
周鸿 authored
184
185
186
187
188
189
            }
        });
        return ajaxResult;
    }
xumiao authored
190
191
192
193
194
195
196
197

    @Log(title = "任务-任务管理", operating = "下发AGV任务", action = BusinessType.UPDATE)
    @PostMapping("/execute")
    @ResponseBody
    public AjaxResult execute(String taskId) {
        if (StringUtils.isEmpty(taskId)) {
            return AjaxResult.error("taskId不能为空");
        }
周鸿 authored
198
        AjaxResult<AgvTaskCS> ajaxResult = agvTaskService.sendTaskToAGV(Convert.toIntArray(taskId),false);
xumiao authored
199
200
201
202
        return ajaxResult;
    }
203
204
205
xumiao authored
206
207
    @GetMapping("/editagv/{id}")
    public String edit(@PathVariable("id") Integer id, ModelMap mmap) {
周鸿 authored
208
        AgvTaskCS agvTask = agvTaskService.getById(id);
xumiao authored
209
210
211
212
213
214
215
216
        mmap.put("agvTask", agvTask);
        return prefix + "/editagv";
    }

    @RequiresPermissions("task:taskHeader:edit")
    @PostMapping("/editagv")
    @ResponseBody
    @Log(title = "任务-任务管理", operating = "编辑agv任务", action = BusinessType.UPDATE)
周鸿 authored
217
218
    public AjaxResult edit(AgvTaskCS agvTask) {
        AgvTaskCS agvTaskResult = agvTaskService.getById(agvTask.getId());
xumiao authored
219
220
221
222
223
224
225
226
227
228
229
        if (agvTaskResult.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) {
            return AjaxResult.error("任务已经下发了,不允许修改");
        }
        agvTask.setUpdated(new Date());
//        PointPosition pointPosition = pointPositionService.getOne(new LambdaQueryWrapper<PointPosition>().eq(PointPosition::getPositionName, agvTask.getToPort()));
//        if (pointPosition == null) {
//            return AjaxResult.error("目标点位不存在");
//        }
//        if (pointPosition != null && StringUtils.isNotEmpty(pointPosition.getContainerCode())) {
//            return AjaxResult.error("目标点位有托盘,请选择其他点位");
//        }
周鸿 authored
230
        AgvTaskCS one = agvTaskService.getOne(new LambdaQueryWrapper<AgvTaskCS>().eq(AgvTaskCS::getToPort, agvTask.getToPort()).lt(AgvTaskCS::getStatus, QuantityConstant.TASK_STATUS_COMPLETED));
xumiao authored
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
        if (one != null) {
            return AjaxResult.error("目标点位存在未完成的任务");
        }
        return toAjax(agvTaskService.updateById(agvTask));
    }


    @Log(title = "任务-任务管理", operating = "取消AGV任务", action = BusinessType.DELETE)
    @PostMapping("/cancelAGVTask")
    @ResponseBody
    @RequiresPermissions("task:agvTask:remove")
    @ApiLogger(apiName = "删除AGV任务")
    public AjaxResult cancelAGVTask(String ids) {
        if (StringUtils.isEmpty(ids)) {
            return AjaxResult.error("taskId不能为空");
        }
        Integer[] idList = Convert.toIntArray(ids);
        for (int id : idList) {
周鸿 authored
249
            AgvTaskCS agvTask = agvTaskService.getById(id);
xumiao authored
250
            if (agvTask.getStatus().intValue() <= QuantityConstant.TASK_STATUS_BUILD) {
251
//                continue;
xumiao authored
252
            }
周鸿 authored
253
            if(agvTask.getStatus().intValue()>=QuantityConstant.TASK_STATUS_RELEASE){
254
//                return AjaxResult.error("任务已经下发,不能删除");
周鸿 authored
255
256
257
258
259
260
261
            }
            if(StringUtils.isNotNull(agvTask.getPreTaskNo())){
                AgvTaskCS agvTaskPre = agvTaskService.getById(agvTask.getPreTaskNo());
                if(agvTaskPre!=null){
                    return AjaxResult.error("AGV前置任务还存在,不能删除");
                }
            }
xumiao authored
262
263
264
            if (agvTask.getStatus().intValue() == QuantityConstant.TASK_STATUS_COMPLETED) {
                return AjaxResult.error("任务已经完成");
            }
265
266
267
268
            //判断任务id不为空,则将taskheader表状态改成10
            if(StringUtils.isNotNull(agvTask.getTaskHeaderId())){
                TaskHeader taskHeader = taskHeaderService.getById(agvTask.getTaskHeaderId());
                if(taskHeader!=null){
269
270
271
272
273
274
275
                    if(taskHeader.getStatus().intValue()<QuantityConstant.TASK_STATUS_COMPLETED){
                        TaskHeader taskHeader1 = new TaskHeader();
                        taskHeader1.setId(taskHeader.getId());
                        taskHeader1.setStatus(10);
                        taskHeaderService.updateById(taskHeader1);
                    }
276
                }
xumiao authored
277
            }
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
            //将agvtask任务删除
            agvTaskService.removeById(id);

//            String containerCode = agvTask.getContainerCode();
//            if (StringUtils.isEmpty(containerCode)) {
//                return AjaxResult.error("空托盘");
//            }
//            Container container = containerService.getContainerByCode(
//                    containerCode, agvTask.getWarehouseCode());
//            LambdaQueryWrapper<ContainerType> containerTypeLambdaQueryWrapper = Wrappers.lambdaQuery();
//            containerTypeLambdaQueryWrapper.eq(ContainerType::getCode, container.getContainerType());
//            ContainerType containerType = containerTypeService.getContainerTypeByCode(
//                    container.getContainerType(), container.getWarehouseCode());
//            AjaxResult ajaxResult = agvTaskService.cancelTask(id,
//                    agvTask.getWarehouseCode(), containerType.getArea());
//            if (ajaxResult.hasErr()) {
//                return ajaxResult;
//            }
xumiao authored
296
        }
297
298
        return AjaxResult.success("取消成功");
//        return agvTaskService.cancelAGVTask(Convert.toIntArray(ids));
xumiao authored
299
300
301
302
303
304
    }

    @Log(title = "任务-任务管理", operating = "AGV任务状态通知", action = BusinessType.UPDATE)
    @PostMapping("/notifyAGVTask")
    @ResponseBody
    @ApiLogger(apiName = "更新AGV任务状态", from = "AGV")
周鸿 authored
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
    public AjaxResult notifyAGVTask(@RequestBody AcsStatus acsStatus) {
        if(acsStatus == null) {
            return AjaxResult.error("入库组盘信息为空");
        }
        String taskNo = acsStatus.getTaskNo();
        String carNo = acsStatus.getCarNo();
        int status = acsStatus.getStatus();
        String updateBy = acsStatus.getUpdateBy();
        updateBy = "acs";
        if(StringUtils.isEmpty(taskNo) ) {
            return AjaxResult.error("更新AGV状态,任务号为空");
        }
        /*if(StringUtils.isEmpty(carNo)) {
            return AjaxResult.error("更新AGV状态,车辆编号为空");
        }*/
周鸿 authored
320
        if(StringUtils.isEmpty(acsStatus.getWarehouseCode())){
周鸿 authored
321
//            return AjaxResult.error("更新AGV状态,仓库为空");
周鸿 authored
322
        }
周鸿 authored
323
324
325
326
327
328
329
330
        if(status == 0) {
            return AjaxResult.error("更新AGV状态,状态信息为空");
        }
        if(StringUtils.isEmpty(updateBy)) {
            return AjaxResult.error("更新AGV状态,更新者信息为空");
        }
        String finalUpdateBy = updateBy;
        AjaxResult ajaxResult = handleMultiProcessV1("notifyAGVTask",new BaseController.MultiProcessListener() {
xumiao authored
331
332
            @Override
            public AjaxResult doProcess() {
周鸿 authored
333
                AjaxResult ajaxResult = acsCSService.notifyAGVTask(taskNo, carNo, status, finalUpdateBy);
xumiao authored
334
335
336
337
338
339
                return ajaxResult;
            }
        });
        return ajaxResult;
    }
xumiao authored
340
341
342
    @Log(title = "任务-任务管理", operating = "AGV任务完成", action = BusinessType.UPDATE)
    @PostMapping("/completeTaskByWMS")
    @ResponseBody
周鸿 authored
343
    @ApiLogger(apiName = "AGV任务完成", from = "WMSS")
xumiao authored
344
345
346
347
348
349
350
    public AjaxResult completeTaskByWMS(String taskId) {
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                Map map=new HashMap();
                map.put("taskNo",taskId);
                map.put("status","100");
周鸿 authored
351
                AjaxResult ajaxResult = acsCSService.notifyAGVTask(taskId, "", 100, "qq");
xumiao authored
352
353
354
355
356
357
                return ajaxResult;
            }
        });

        return ajaxResult;
    }
周鸿 authored
358
    @PostMapping("/weightAndHeightByContainer")
周鸿 authored
359
    @ApiOperation("agv请求库位")
周鸿 authored
360
    @ResponseBody
周鸿 authored
361
    @ApiLogger(apiName = "agv请求库位", from="acs")
周鸿 authored
362
    public AjaxResult weightAndHeightByContainer(@RequestBody AcsWeightHeight acsWeightHeight) {
xumiao authored
363
周鸿 authored
364
365
366
367
368
369
370
371
372
        AjaxResult ajaxResult = handleMultiProcessV1("weightAndHeightByContainer",new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = acsCSService.weightAndHeightByContainer(acsWeightHeight);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }
周鸿 authored
373
周鸿 authored
374
375
376
377
378
379
380
381
382
383
384
385
    @ApiOperation(value = "AGV设置站台库位", httpMethod = "POST")
    @PostMapping("/setAgvPort")
    @ResponseBody
    public AjaxResult setAgvPort(TaskHeader taskHeader) {
        AjaxResult ajaxResult = handleMultiProcessV1("setAgvPort",new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                return agvTaskService.setAgvPort(taskHeader);
            }
        });
        return ajaxResult;
    }
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406


    @Log(title = "任务-任务管理", operating = "下发AGV任务", action = BusinessType.UPDATE)
    @PostMapping("/executeByContainerCode")
    @ResponseBody
    public AjaxResult executeByContainerCode(@RequestBody AcsWeightHeight acsWeightHeight) {
        if (StringUtils.isNull(acsWeightHeight)) {
            return AjaxResult.error("数据不能为空");
        }
        String containerCode=acsWeightHeight.getContainerCode();
        if (StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("容器号不能为空");
        }
        AjaxResult ajaxResult = handleMultiProcessV1("executeByContainerCode",new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                return agvTaskService.excuteAgvContainer(containerCode);
            }
        });
        return ajaxResult;
    }
xumiao authored
407
408
}