Blame view

src/main/java/com/huaheng/api/wcs/service/RequestContainerNumberService.java 11.4 KB
1
2
package com.huaheng.api.wcs.service;
3
import java.math.BigDecimal;
周鸿 authored
4
import java.util.Comparator;
5
import java.util.Date;
6
import java.util.List;
周鸿 authored
7
import java.util.stream.Collectors;
8
9
10
11
12
13
14
15

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
周鸿 authored
16
import com.huaheng.api.wcs.domain.RobotReturn;
17
import com.huaheng.api.wcs.domain.RobotView;
18
19
20
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.framework.web.domain.AjaxResult;
21
22
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
23
24
25
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
26
import com.huaheng.pc.task.taskHeader.domain.TaskRequestContainer;
27
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
28
import com.huaheng.pc.task.taskHeader.service.TaskRequestContainerService;
29
30
31
32
33
34
35
36

@Service
public class RequestContainerNumberService {

    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private TaskDetailService taskDetailService;
37
38
    @Resource
    private InventoryDetailService inventoryDetailService;
39
40
    @Resource
    private TaskRequestContainerService taskRequestContainerService;
41
42
    //
43
    // 请求一个位置
44
    @Transactional
45
46
47
48
49
50
51
52
    public AjaxResult requestContainerNumberByWcs(String containerCode) {
        AjaxResult ajaxResult = new AjaxResult();
        if (StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("容器为空");
        }
        LambdaQueryWrapper<TaskHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
        lambdaQueryWrapper.eq(TaskHeader::getContainerCode, containerCode);
        lambdaQueryWrapper.eq(TaskHeader::getZoneCode, "B");
周鸿 authored
53
//        lambdaQueryWrapper.eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_ARRIVED_STATION);
54
55
56
57
58
59
60
61
        lambdaQueryWrapper.in(TaskHeader::getInternalTaskType, QuantityConstant.TASK_INTENERTYPE_SHIPMENT);
        lambdaQueryWrapper.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED);
        lambdaQueryWrapper.last("limit 1");
        TaskHeader taskHeader = taskHeaderService.getOne(lambdaQueryWrapper);

        if (taskHeader == null) {
            return AjaxResult.error("容器号:" + containerCode + " 未找到未完成的出库任务。");
        }
周鸿 authored
62
63
        List<TaskDetail> list = taskDetailService.findByTaskId(taskHeader.getId());
周鸿 authored
64
65
66

        if (list == null || list.size() <= 0) {
            return AjaxResult.error("容器号:" + containerCode + " 未找到任务详情。");
67
        }
周鸿 authored
68
69
        List<TaskDetail> taskDetails1 = list.stream().sorted(Comparator.comparing(TaskDetail::getContainerDetailNumber).reversed()).collect(Collectors.toList());
70
71
72
        LambdaQueryWrapper<InventoryDetail> query = Wrappers.lambdaQuery();
        query.eq(InventoryDetail::getContainerCode, taskHeader.getContainerCode());
        List<InventoryDetail> inventorydetaillist = inventoryDetailService.list(query);
周鸿 authored
73
74
75
        Integer boxNumber = 12;
        String boxType = inventorydetaillist.get(0).getBoxType();
        if (boxType.equals("0")) {
周鸿 authored
76
            // 小箱子
周鸿 authored
77
78
            boxNumber = 9;
        }
79
80
81
82
83
84
85
        // 检查task_request_container表有无数据,没有则增加
        TaskRequestContainer taskRequestContainer = taskRequestContainerService.findTaskRequestContainer(taskHeader.getContainerCode(), taskHeader.getId());
        if (taskRequestContainer == null) {
            taskRequestContainer = new TaskRequestContainer();
            taskRequestContainer.setContainerCode(containerCode);
            taskRequestContainer.setNowNumber(boxNumber);
//            taskHeaderService.updateById(taskHeader);
86
87
88
89
90
91
92
93
94
95
96
        } else {
            // 未执行,则直接返回原有状态
            if (taskRequestContainer.getStatus() == 0) {
                RobotReturn robotReturn = new RobotReturn();
                robotReturn.setOperator(taskRequestContainer.getOperator());
                robotReturn.setBoxType(taskRequestContainer.getBoxType());
                robotReturn.setState(taskRequestContainer.getPreState());
                robotReturn.setContainerNumber(taskRequestContainer.getNowNumber());
                robotReturn.setFormPallet(taskRequestContainer.getFormPallet());
                return AjaxResult.success().setData(robotReturn);
            }
周鸿 authored
97
        }
98
99
        taskRequestContainer.setTaskId(taskHeader.getId());
        taskRequestContainer.setStatus(0);
100
101
102
103
//        if (StringUtils.isNull(taskHeader.getNowNumber())) {
//            taskHeader.setNowNumber(boxNumber);
//            taskHeaderService.updateById(taskHeader);
//        }
周鸿 authored
104
105
106
107
108
109
110
        taskHeader.setBoxType(boxType);
        BigDecimal taskqty = new BigDecimal(0);
        Integer[] containerNumberdata = new Integer[taskDetails1.size()];
        Integer miniNumber = 0;
        for (int a = 0; a < taskDetails1.size(); a++) {
            TaskDetail detail = taskDetails1.get(a);
            taskqty = taskqty.add(detail.getQty());
111
112
113
//            if (a == taskDetails1.size() - 1) {
//                miniNumber = detail.getContainerDetailNumber();
//            }
周鸿 authored
114
            containerNumberdata[a] = detail.getContainerDetailNumber();
115
        }
周鸿 authored
116
117
118
119
120
121
122
123
124
125
126
127
        LambdaQueryWrapper<TaskDetail> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(TaskDetail::getTaskId, taskHeader.getId());
        wrapper.eq(TaskDetail::getNumber, 1);
        wrapper.orderByDesc(TaskDetail::getContainerDetailNumber);
        wrapper.last("limit 1");
        TaskDetail taskDetail = taskDetailService.getOne(wrapper);

        RobotReturn robotReturn = new RobotReturn();
        robotReturn.setOperator(0);
        robotReturn.setBoxType(Integer.parseInt(boxType));
        robotReturn.setState(1);
128
129
130
        taskRequestContainer.setOperator(robotReturn.getOperator());
        taskRequestContainer.setBoxType(robotReturn.getBoxType());
        taskRequestContainer.setPreState(robotReturn.getState());
周鸿 authored
131
132
//        TaskHeader task = taskHeaderService.getById(taskHeader.getId());
133
        if (taskDetail != null) {
134
            AjaxResult ajaxResult1 = zhua(taskHeader, taskDetail, taskRequestContainer, robotReturn);
135
            return ajaxResult1;
136
        } else {
周鸿 authored
137
138
            // 放
            robotReturn.setOperator(1);
周鸿 authored
139
            robotReturn.setFormPallet(0);
140
141
142
143

            taskRequestContainer.setOperator(1);
            taskRequestContainer.setFormPallet(0);
周鸿 authored
144
145
146
            LambdaQueryWrapper<InventoryDetail> query1 = Wrappers.lambdaQuery();
            query1.eq(InventoryDetail::getContainerCode, taskHeader.getContainerCode());
            query1.notIn(InventoryDetail::getContainerDetailNumber, containerNumberdata);
周鸿 authored
147
//            query1.gt(InventoryDetail::getContainerDetailNumber, miniNumber);
周鸿 authored
148
149
150
            query1.orderByAsc(InventoryDetail::getContainerDetailNumber);
            List<InventoryDetail> inventoryDetails = inventoryDetailService.list(query1);
周鸿 authored
151
152
153
            // 放按照顺序放
            for (int a = 0; a < inventoryDetails.size(); a++) {
                InventoryDetail detail = inventoryDetails.get(a);
周鸿 authored
154
                Integer inventoryNumber = detail.getContainerDetailNumber();
155
                Integer taskNumber = taskRequestContainer.getNowNumber();
周鸿 authored
156
157
                if (inventoryNumber > taskNumber) {
                    // 放的位置
周鸿 authored
158
159
//                    robotReturn.setContainerNumber(detail.getContainerDetailNumber());
                    robotReturn.setContainerNumber(a + 1);
160
周鸿 authored
161
                    if (inventoryNumber >= taskNumber) {
162
                        taskRequestContainer.setNowNumber(inventoryNumber);
周鸿 authored
163
                    } else {
164
                        taskRequestContainer.setNowNumber(taskNumber + 1);
周鸿 authored
165
166
                    }
167
//                    taskHeaderService.updateById(task);
周鸿 authored
168
                    break;
169
                } else if (taskRequestContainer.getNowNumber() == boxNumber) {
周鸿 authored
170
171
                    // 分拣出库,托盘回库
                    robotReturn.setState(0);
172
                    taskRequestContainer.setPreState(robotReturn.getState());
周鸿 authored
173
174
175
176
177
178
                    break;
                }
            }
            if (inventoryDetails == null || inventoryDetails.size() == 0) {
                // 整盘出库,空托盘前进
                robotReturn.setState(100);
179
180
                taskRequestContainer.setPreState(robotReturn.getState());
                taskRequestContainerService.saveOrUpdate(taskRequestContainer);
周鸿 authored
181
182
                return AjaxResult.success().setData(robotReturn);
            }
183
        }
184
        taskRequestContainerService.saveOrUpdate(taskRequestContainer);
周鸿 authored
185
186
        return AjaxResult.success().setData(robotReturn);
187
188
    }
189
190
191
192
193
194
195
196
197
    // 从托盘到地上
    public AjaxResult zhua(TaskHeader task, TaskDetail taskDetail, TaskRequestContainer taskRequestContainer, RobotReturn robotReturn) {
        if (taskDetail.getContainerDetailNumber() < taskRequestContainer.getNowNumber()) {
            // 存放位置 右
            robotReturn.setFormPallet(1);
            robotReturn.setContainerNumber(taskRequestContainer.getNowNumber());
            taskRequestContainer.setFormPallet(1);
            taskRequestContainer.setOperator(0);
            if (taskRequestContainer.getNowNumber() != 1) {
198
199
200
//                task.setNowNumber(task.getNowNumber() - 1);
//                taskHeaderService.updateById(task);
                taskRequestContainer.setNowNumber(taskRequestContainer.getNowNumber() - 1);
201
            }
202
            taskRequestContainerService.saveOrUpdate(taskRequestContainer);
203
204
205
206
            return AjaxResult.success().setData(robotReturn);
        } else {
            // 需要抓取 左
            robotReturn.setFormPallet(0);
207
            robotReturn.setContainerNumber(taskRequestContainer.getNowNumber());
208
209
210
211
212
213
214
            taskRequestContainer.setFormPallet(robotReturn.getFormPallet());
            taskRequestContainer.setNowNumber(taskRequestContainer.getNowNumber());
            if (taskRequestContainer.getNowNumber() != 1) {
//                task.setNowNumber(task.getNowNumber() - 1);
//                taskHeaderService.updateById(task);
                taskRequestContainer.setNowNumber(taskRequestContainer.getNowNumber() - 1);
215
216
217
218
            }
            // 抓取查找还未出库的物料
            taskDetail.setNumber(2);
            taskDetailService.updateById(taskDetail);
219
            taskRequestContainerService.saveOrUpdate(taskRequestContainer);
220
221
222
223
            return AjaxResult.success().setData(robotReturn);
        }
    }
224
225
226
227
228
229
230
231
    public AjaxResult requestContainerNumberByWcsClear(RobotView robotView) {
        if (StringUtils.isEmpty(robotView.getTaskNo())) {
            return AjaxResult.error("机器手清除信号:任务号无");
        }
        // 检查task_request_container表有无数据,没有则增加
        TaskRequestContainer taskRequestContainer = taskRequestContainerService.findTaskRequestContainerByTaskId(Integer.parseInt(robotView.getTaskNo()));
        if (taskRequestContainer == null) {
            return AjaxResult.error("机器手清除信号:找不到该任务");
232
        }
233
234
235
236
        taskRequestContainer.setStatus(1);
        taskRequestContainer.setLastUpdated(new Date());
        taskRequestContainerService.updateById(taskRequestContainer);
        return AjaxResult.success();
237
238
    }
239
}