|
1
2
|
package com.huaheng.api.wcs.service;
|
|
3
|
import java.math.BigDecimal;
|
|
4
|
import java.util.Comparator;
|
|
5
|
import java.util.Date;
|
|
6
|
import java.util.List;
|
|
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;
|
|
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");
|
|
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 + " 未找到未完成的出库任务。");
}
|
|
62
|
|
|
63
|
List<TaskDetail> list = taskDetailService.findByTaskId(taskHeader.getId());
|
|
64
65
66
|
if (list == null || list.size() <= 0) {
return AjaxResult.error("容器号:" + containerCode + " 未找到任务详情。");
|
|
67
|
}
|
|
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);
|
|
73
74
75
|
Integer boxNumber = 12;
String boxType = inventorydetaillist.get(0).getBoxType();
if (boxType.equals("0")) {
|
|
76
|
// 小箱子
|
|
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);
}
|
|
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);
// }
|
|
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();
// }
|
|
114
|
containerNumberdata[a] = detail.getContainerDetailNumber();
|
|
115
|
}
|
|
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());
|
|
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 {
|
|
137
138
|
// 放
robotReturn.setOperator(1);
|
|
139
|
robotReturn.setFormPallet(0);
|
|
140
141
142
143
|
taskRequestContainer.setOperator(1);
taskRequestContainer.setFormPallet(0);
|
|
144
145
146
|
LambdaQueryWrapper<InventoryDetail> query1 = Wrappers.lambdaQuery();
query1.eq(InventoryDetail::getContainerCode, taskHeader.getContainerCode());
query1.notIn(InventoryDetail::getContainerDetailNumber, containerNumberdata);
|
|
147
|
// query1.gt(InventoryDetail::getContainerDetailNumber, miniNumber);
|
|
148
149
150
|
query1.orderByAsc(InventoryDetail::getContainerDetailNumber);
List<InventoryDetail> inventoryDetails = inventoryDetailService.list(query1);
|
|
151
152
153
|
// 放按照顺序放
for (int a = 0; a < inventoryDetails.size(); a++) {
InventoryDetail detail = inventoryDetails.get(a);
|
|
154
|
Integer inventoryNumber = detail.getContainerDetailNumber();
|
|
155
|
Integer taskNumber = taskRequestContainer.getNowNumber();
|
|
156
157
|
if (inventoryNumber > taskNumber) {
// 放的位置
|
|
158
159
|
// robotReturn.setContainerNumber(detail.getContainerDetailNumber());
robotReturn.setContainerNumber(a + 1);
|
|
160
|
|
|
161
|
if (inventoryNumber >= taskNumber) {
|
|
162
|
taskRequestContainer.setNowNumber(inventoryNumber);
|
|
163
|
} else {
|
|
164
|
taskRequestContainer.setNowNumber(taskNumber + 1);
|
|
165
166
|
}
|
|
167
|
// taskHeaderService.updateById(task);
|
|
168
|
break;
|
|
169
|
} else if (taskRequestContainer.getNowNumber() == boxNumber) {
|
|
170
171
|
// 分拣出库,托盘回库
robotReturn.setState(0);
|
|
172
|
taskRequestContainer.setPreState(robotReturn.getState());
|
|
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);
|
|
181
182
|
return AjaxResult.success().setData(robotReturn);
}
|
|
183
|
}
|
|
184
|
taskRequestContainerService.saveOrUpdate(taskRequestContainer);
|
|
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
|
}
|