|
1
2
|
package com.huaheng.api.wcs.service.overrideHandle;
|
|
3
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
4
5
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
6
|
import com.huaheng.common.utils.Wrappers;
|
|
7
|
import com.huaheng.api.wcs.domain.TaskFinishDomain;
|
|
8
|
import com.huaheng.api.wcs.service.warecellAllocation.LocationAllocationService;
|
|
9
|
import com.huaheng.api.wcs.service.warecellAllocation.WarecellAllocationService;
|
|
10
|
import com.huaheng.common.constant.QuantityConstant;
|
|
11
12
|
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
|
|
13
|
import com.huaheng.common.utils.security.ShiroUtils;
|
|
14
|
import com.huaheng.framework.web.domain.AjaxResult;
|
|
15
|
import com.huaheng.framework.web.service.ConfigService;
|
|
16
17
|
import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
|
|
18
19
|
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
|
|
20
21
|
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
|
|
22
23
|
import com.huaheng.pc.config.locationType.domain.LocationType;
import com.huaheng.pc.config.locationType.service.LocationTypeService;
|
|
24
25
|
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
|
|
26
27
28
29
|
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
|
|
30
|
import com.huaheng.pc.receipt.receiving.service.ReceivingService;
|
|
31
32
|
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
|
|
33
|
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
|
|
34
35
|
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.beans.factory.annotation.Autowired;
|
|
36
|
import org.springframework.stereotype.Service;
|
|
37
38
|
import org.springframework.transaction.annotation.Transactional;
|
|
39
|
import javax.annotation.Resource;
|
|
40
|
import java.util.ArrayList;
|
|
41
|
import java.util.HashMap;
|
|
42
|
import java.util.List;
|
|
43
44
|
import java.util.Map;
import java.util.stream.Collectors;
|
|
45
46
47
48
|
@Service
public class OverrideHandleServiceImpl implements OverrideHandleService {
|
|
49
50
51
52
53
54
55
56
57
58
59
|
@Autowired
private TaskHeaderService taskHeaderService;
@Autowired
private TaskDetailService taskDetailService;
@Autowired
private LocationService locationService;
@Autowired
private ReceiptContainerHeaderService receiptContainerHeaderService;
@Autowired
private ReceiptContainerDetailService receiptContainerDetailService;
|
|
60
61
62
63
|
@Resource
private WarecellAllocationService warecellAllocationService;
@Resource
private FilterConfigDetailService filterConfigDetailService;
|
|
64
65
66
67
68
69
|
@Resource
private LocationTypeService locationTypeService;
@Resource
private ReceivingService receivingService;
@Resource
private ContainerService containerService;
|
|
70
71
72
73
74
75
|
@Resource
private LocationAllocationService locationAllocationService;
@Resource
private ConfigService configService;
@Resource
private MaterialService materialService;
|
|
76
77
78
|
/**
* 重入处理
* 1、判断非空字段
|
|
79
80
|
* 2、根据任务号查找任务
* 3、修改任务目的库位,修改入库组盘的库位,修改库位状态
|
|
81
82
83
|
*/
@Override
|
|
84
|
@Transactional
|
|
85
|
public AjaxResult OverrideHandle(TaskFinishDomain taskFinishDomain) {
|
|
86
87
|
String taskNo = taskFinishDomain.getTaskNo();
|
|
88
|
|
|
89
|
//1、判断非空字段
|
|
90
|
if(StringUtils.isEmpty(taskNo)) {
|
|
91
92
|
return AjaxResult.error("任务号为空");
}
|
|
93
94
95
|
if(StringUtils.isEmpty(taskFinishDomain.getWarehouseCode())){
throw new ServiceException("仓库号为空");
}
|
|
96
|
//2、根据任务号查找任务
|
|
97
|
TaskHeader taskHeader = taskHeaderService.getById(taskNo);
|
|
98
99
100
|
if(taskHeader == null){
return AjaxResult.error("任务号错误,没有找到该任务");
}
|
|
101
|
String warehouseCode = taskHeader.getWarehouseCode();
|
|
102
|
int status = taskHeader.getStatus();
|
|
103
|
if(status == QuantityConstant.TASK_STATUS_COMPLETED) {
|
|
104
105
|
return AjaxResult.error("任务已完成");
}
|
|
106
107
108
109
110
|
//3、修改任务目的库位,修改入库组盘的库位,修改库位状态
//修改原来目的库位的状态
LambdaQueryWrapper<Location> locationLam = Wrappers.lambdaQuery();
locationLam.eq(Location::getCode,taskHeader.getToLocation())
|
|
111
|
.eq(Location::getWarehouseCode, warehouseCode);
|
|
112
|
Location location = locationService.getOne(locationLam);
|
|
113
|
if(location == null) {
|
|
114
115
|
return AjaxResult.error("此任务的原目的库位在系统中不存在");
}
|
|
116
|
/**
|
|
117
|
* 重入的库位由wms提供
|
|
118
|
*/
|
|
119
|
String newLocationCode = null;
|
|
120
121
|
//重入的库位由wms提供
//查询任务明细
|
|
122
|
String value = configService.getKey(QuantityConstant.RULE_ALLOCATION,warehouseCode);
|
|
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
if (StringUtils.isEmpty(value)) {
return AjaxResult.error("未绑定定位规则");
}
int allocationRule = Integer.parseInt(value);
List<String> locationTypeCodeList = new ArrayList<>();
String locationType = location.getLocationType();
if(StringUtils.isNotEmpty(locationType)) {
locationTypeCodeList.add(locationType);
}
int high = location.getHigh();
String area = location.getArea();
String roadWay = location.getRoadway();
List<String> roadWays = new ArrayList<>();
roadWays.add(roadWay);
String containerCode = taskHeader.getContainerCode();
List<TaskDetail> taskDetailList = taskDetailService.findByTaskId(taskHeader.getId());
String materialAreaCode = null;
if(taskDetailList != null && taskDetailList.size() > 0) {
String materialCode = taskDetailList.get(0).getMaterialCode();
|
|
142
|
Material material = materialService.getMaterialByCode(materialCode, warehouseCode);
|
|
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
materialAreaCode = material.getMaterialAreaCode();
}
String locationCode = locationAllocationService.allocation(allocationRule,
locationTypeCodeList, high, area, roadWays, warehouseCode, containerCode, materialAreaCode);
if (StringUtils.isEmpty(locationCode)) {
return AjaxResult.error("没有库位可分配");
}
int taskType = taskHeader.getTaskType();
if (taskType == QuantityConstant.TASK_TYPE_WHOLERECEIPT ||
taskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) {
//查询入库组盘明细
List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
if(taskDetailList != null) {
for (TaskDetail taskDetail : taskDetailList) {
receiptContainerDetailList.add(receiptContainerDetailService.
getById(taskDetail.getAllocationId()));
|
|
159
160
|
}
}
|
|
161
162
163
164
165
166
167
|
ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetailList.get(0).getReceiptContainerId());
LambdaUpdateWrapper<ReceiptContainerDetail> wrapper = Wrappers.lambdaUpdate();
wrapper.set(ReceiptContainerDetail::getLocationCode, locationCode)
.in(ReceiptContainerDetail::getId, receiptContainerDetailList.stream().map(ReceiptContainerDetail::getId).collect(Collectors.toList()));
receiptContainerDetailService.update(wrapper);
receiptContainerHeader.setToLocation(locationCode);
receiptContainerHeaderService.updateById(receiptContainerHeader);
|
|
168
|
}
|
|
169
170
|
newLocationCode = locationCode;
|
|
171
|
|
|
172
173
|
if (StringUtils.isEmpty(newLocationCode)) {
return AjaxResult.error("没有库位可以分配");
|
|
174
|
}
|
|
175
176
|
locationService.updateStatus(newLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
String toLocationCode = taskHeader.getToLocation();
|
|
177
|
|
|
178
|
//修改任务
|
|
179
|
taskHeader.setToLocation(newLocationCode);
|
|
180
|
taskHeader.setExceptionCode("重入处理");
|
|
181
|
taskHeader.setIsDoubleIn(QuantityConstant.DOUBLE_IN);
|
|
182
183
184
185
|
String originLocationCode = taskHeader.getOriginLocation();
if(StringUtils.isEmpty(originLocationCode)) {
taskHeader.setOriginLocation(toLocationCode);
}
|
|
186
|
if(!taskHeaderService.updateById(taskHeader)){
|
|
187
188
189
190
191
|
throw new ServiceException("修改此任务错误");
}
//修改子任务
LambdaQueryWrapper<TaskDetail> taskDetailLam = Wrappers.lambdaQuery();
|
|
192
|
taskDetailLam.eq(TaskDetail::getWarehouseCode, warehouseCode)
|
|
193
194
|
.eq(TaskDetail::getTaskId,taskHeader.getId());
List<TaskDetail> taskDetails = taskDetailService.list(taskDetailLam);
|
|
195
|
taskDetailList = new ArrayList<>();
|
|
196
|
if(taskDetails != null && taskDetails.size()> 0) {
|
|
197
|
for(TaskDetail taskDetail : taskDetails){
|
|
198
|
taskDetail.setToLocation(newLocationCode);
|
|
199
200
|
taskDetailList.add(taskDetail);
}
|
|
201
|
if(!taskDetailService.updateBatchById(taskDetailList)) {
|
|
202
203
204
205
|
throw new ServiceException("修改此任务的明细错误");
}
}
|
|
206
207
208
209
|
Map<String, String> map = new HashMap<>();
map.put("RedirectionLocationCode", newLocationCode);
map.put("taskNo", String.valueOf(taskHeader.getId()));
return AjaxResult.success("重入处理成功").setData(map);
|
|
210
211
|
}
}
|