|
1
|
package com.huaheng.pc.config.location.controller;
|
|
2
3
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
4
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
5
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
6
|
import com.huaheng.common.utils.Wrappers;
|
|
7
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
8
|
import com.huaheng.common.constant.QuantityConstant;
|
|
9
10
11
12
13
14
15
16
17
18
|
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
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;
|
|
19
|
import com.huaheng.pc.common.JasperPrint.Print;
|
|
20
21
|
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
|
|
22
|
import com.huaheng.pc.config.location.domain.Location;
|
|
23
|
import com.huaheng.pc.config.location.domain.LocationStatus;
|
|
24
|
import com.huaheng.pc.config.location.service.LocationService;
|
|
25
|
import com.huaheng.pc.config.material.domain.Material;
|
|
26
27
28
|
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
|
|
29
30
31
|
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
|
|
32
33
34
35
36
37
|
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;
|
|
38
|
import javax.sql.DataSource;
|
|
39
|
import java.math.BigDecimal;
|
|
40
|
import java.util.ArrayList;
|
|
41
|
import java.util.List;
|
|
42
|
import java.util.stream.Collectors;
|
|
43
|
|
|
44
|
@Api(tags = {"库位操作类"})
|
|
45
|
@Controller
|
|
46
|
@RequestMapping("/config/location")
|
|
47
48
|
public class LocationController extends BaseController {
|
|
49
|
private String prefix = "config/location";
|
|
50
|
|
|
51
|
@Resource
|
|
52
53
|
private ContainerService containerService;
@Resource
|
|
54
55
56
57
58
59
60
61
62
|
private LocationService locationService;
@Resource
private InventoryDetailService inventoryDetailService;
@Resource
private MaterialService materialService;
@Resource
private DataSource dataSource;
@Resource
private Print print;
|
|
63
|
|
|
64
65
66
67
68
|
@RequiresPermissions("config:location:view")
@GetMapping()
public String location () {
return prefix + "/location";
}
|
|
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
|
/**
* 查询库位列表
*/
@ApiOperation(value = "查看库位列表",
notes = "根据行、列、层、格、库位类型、库区、库位状态、容器编码、库位名称、库位编码、创建时间获取库位的详细信息",
httpMethod = "POST")
@RequiresPermissions("config:location:list")
@Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT)
@PostMapping("/list")
@ResponseBody
public TableDataInfo list (
@ApiParam(name = "location", value = "行、列、层、格、库位类型、库区、库位状态、容器编码、库位名称、库位编码") Location location,
@ApiParam(name = "createdBegin", value = "起止时间") String createdBegin,
@ApiParam(name = "createdEnd", value = "结束时间") String createdEnd) {
LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery();
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
lambdaQueryWrapper.gt(StringUtils.isNotEmpty(createdBegin), Location::getCreated, createdBegin)
.lt(StringUtils.isNotEmpty(createdEnd), Location::getCreated, createdEnd)
.eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode())
.eq(StringUtils.isNotEmpty(location.getCode()), Location::getCode, location.getCode())
.eq(StringUtils.isNotEmpty(location.getName()), Location::getName, location.getName())
.eq(StringUtils.isNotEmpty(location.getContainerCode()), Location::getContainerCode, location.getContainerCode())
.eq(StringUtils.isNotNull(location.getSystemCreated()), Location::getStatus, location.getStatus())
.eq(StringUtils.isNotEmpty(location.getZoneCode()), Location::getZoneCode, location.getZoneCode())
.eq(StringUtils.isNotNull(location.getIRow()), Location::getIRow, location.getIRow())
.eq(StringUtils.isNotNull(location.getIColumn()), Location::getIColumn, location.getIColumn())
.eq(StringUtils.isNotNull(location.getIGrid()), Location::getIGrid, location.getIGrid())
.eq(StringUtils.isNotNull(location.getILayer()), Location::getILayer, location.getILayer())
.eq(StringUtils.isNotEmpty(location.getStatus()), Location::getStatus, location.getStatus())
.eq(StringUtils.isNotEmpty(location.getLocationType()), Location::getLocationType, location.getLocationType())
.eq(Location::getDeleted, false)
.orderByDesc(Location::getId);
|
|
104
|
|
|
105
106
107
108
109
110
111
112
113
114
|
if(StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
/*使用分页查询*/
Page<Location> page = new Page<>(pageNum, pageSize);
IPage<Location> iPage = locationService.page(page, lambdaQueryWrapper);
return getMpDataTable(iPage.getRecords(), iPage.getTotal());
} else {
List<Location> list = locationService.list(lambdaQueryWrapper);
return getDataTable(list);
}
}
|
|
115
|
|
|
116
117
118
119
120
121
122
123
124
|
/**
* 查询库位列表
*/
@Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT)
@PostMapping("/getAllLocation")
@ResponseBody
public AjaxResult getAllLocation (String type) {
if(StringUtils.isEmpty(type)) {
return AjaxResult.error("type不能为空");
|
|
125
126
|
}
|
|
127
128
|
return AjaxResult.success(locationService.getAllLocation(type));
}
|
|
129
|
|
|
130
|
|
|
131
132
133
134
135
136
137
|
/**
* 新增库位
*/
@GetMapping("/add")
public String add () {
return prefix + "/add";
}
|
|
138
|
|
|
139
140
141
142
143
144
145
146
147
148
149
150
|
/**
* 新增保存库位
*/
@ApiOperation(value = "新增库位", notes = "新增单个库位", httpMethod = "POST")
@RequiresPermissions("config:location:add")
@Log(title = "配置-库存资料-库位管理", operating = "新增库位", action = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave (Location location) {
AjaxResult result = locationService.addsave(location);
return result;
}
|
|
151
|
|
|
152
|
|
|
153
154
155
|
/**
* 批量新增库位
*/
|
|
156
|
|
|
157
158
159
160
|
@GetMapping("/addBatch")
public String addBatch () {
return prefix + "/addBatch";
}
|
|
161
162
|
|
|
163
164
165
|
/**
* 批量新增保存库位
*/
|
|
166
|
@RequiresPermissions("config:location:add")
|
|
167
168
169
170
171
|
@ApiOperation(value = "新增库位", notes = "批量新增库位", httpMethod = "POST")
@Log(title = "配置-库存资料-库位管理", operating = "新增库位", action = BusinessType.INSERT)
@PostMapping("/addBatchSave")
@ResponseBody
public AjaxResult addBatchSave (String prefix, String firstRow, String lastRow, String firstColumn, String lastColumn, String firstLayer, String lastLayer,
|
|
172
|
String firstGrid, String lastGrid, String roadway, String status, String zoneCode, String locationType, String high) {
|
|
173
|
|
|
174
175
|
return toAjax(locationService.addBatchSave(prefix, Integer.parseInt(firstRow), Integer.parseInt(lastRow),
Integer.parseInt(firstColumn), Integer.parseInt(lastColumn), Integer.parseInt(firstLayer), Integer.parseInt(lastLayer),
|
|
176
|
Integer.parseInt(firstGrid), Integer.parseInt(lastGrid), roadway, status, zoneCode, locationType, high));
|
|
177
|
}
|
|
178
|
|
|
179
180
181
182
183
|
/**
* 修改库位
*/
@GetMapping("/edit/{id}")
public String edit (@PathVariable("id") Integer id, ModelMap mmap) {
|
|
184
185
|
Location location = locationService.getById(id);
mmap.put("location", location);
|
|
186
187
188
189
|
return prefix + "/edit";
}
/**
|
|
190
191
192
193
194
195
196
197
198
|
* 修改物料
*/
@GetMapping("/editBatch/{ids}")
public String editBatch (@PathVariable("ids") String ids, ModelMap mmap) {
mmap.put("ids", ids);
return prefix + "/editBatch";
}
/**
|
|
199
200
201
202
203
204
205
206
|
* 修改保存库位
*/
@RequiresPermissions("config:location:edit")
@ApiOperation(value = "修改库位", notes = "批量修改库位", httpMethod = "POST")
@Log(title = "配置-库存资料-库位管理", operating = "修改库位", action = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave (Location location) {
|
|
207
208
|
String containerCode = location.getContainerCode();
if (StringUtils.isNotEmpty(containerCode)) {
|
|
209
|
Container container = containerService.getContainerByCode(containerCode);
|
|
210
211
212
|
if (container == null) {
return AjaxResult.error("容器编码输入错误");
}
|
|
213
|
}
|
|
214
215
216
217
218
|
location.setLastUpdatedBy(ShiroUtils.getLoginName());
return toAjax(locationService.updateById(location));
}
/**
|
|
219
220
221
222
223
224
225
|
* 修改保存物料
*/
@ApiOperation(value = "批量修改库位", notes = "批量修改库位", httpMethod = "POST")
@RequiresPermissions("config:location:edit")
@Log(title = "通用-库位管理", operating = "批量修改库位", action = BusinessType.UPDATE)
@PostMapping("/editBatchSave")
@ResponseBody
|
|
226
|
public AjaxResult editBatchSave (String ids, String materialAreaCode, Integer high, String status) {
|
|
227
228
229
|
String[] idArray = Convert.toStrArray(ids);
LambdaUpdateWrapper<Location> wrapper = Wrappers.lambdaUpdate();
wrapper.in(Location::getId, idArray)
|
|
230
|
.set(Location::getMaterialAreaCode, materialAreaCode)
|
|
231
232
|
.set(Location::getHigh, high)
.set(Location::getStatus, status);
|
|
233
234
235
236
|
return toAjax(locationService.update(wrapper));
}
/**
|
|
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
* 删除库位
*/
@RequiresPermissions("config:location:remove")
@Log(title = "配置库存资料-库位管理", operating = "删除库位", action = BusinessType.DELETE)
@ApiOperation(value = "删除库位", notes = "批量删除库位", httpMethod = "POST")
@PostMapping("/remove")
@ResponseBody
public AjaxResult remove (String ids) {
if(StringUtils.isEmpty(ids)) {
return AjaxResult.error("id不能为空");
}
for (Integer id : Convert.toIntArray(ids)) {
Location location = locationService.getById(id);
if(StringUtils.isEmpty(location.getContainerCode())) {
|
|
251
|
locationService.removeById(locationService.getById(id));
|
|
252
253
254
|
} else {
return AjaxResult.error("库位(" + location.getCode() + ")不是空,或者有容器,不能删除成功!");
}
|
|
255
|
}
|
|
256
257
|
return AjaxResult.success("删除成功!");
}
|
|
258
|
|
|
259
260
261
262
263
264
265
266
267
|
/**
* 查询库位列表
*/
@Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT)
@PostMapping("/getLocationInfo")
@ResponseBody
public AjaxResult getLocationInfo (String type, String row, String line, String layer, String grid) {
if(StringUtils.isEmpty(type)) {
return AjaxResult.error("type不能为空");
|
|
268
|
}
|
|
269
|
|
|
270
271
272
273
274
|
/* 查询库位信息*/
LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
locationLambdaQueryWrapper.eq(StringUtils.isNotEmpty(row), Location::getIRow, row)
.eq(StringUtils.isNotEmpty(line), Location::getIColumn, line)
.eq(StringUtils.isNotEmpty(layer), Location::getILayer, layer)
|
|
275
276
|
// .eq(Location::getIGrid, 1) //
// .eq(StringUtils.isNotEmpty(type), Location::getLocationType, type)
|
|
277
278
279
280
|
.eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode())
.eq(StringUtils.isNotEmpty(type), Location::getZoneCode, type);
List<Location> locations = locationService.list(locationLambdaQueryWrapper);
List<Location> locationList = new ArrayList<>();
|
|
281
|
|
|
282
283
284
285
|
/* 查询库存明细*/
LambdaQueryWrapper<InventoryDetail> inventoryDetailLambda = Wrappers.lambdaQuery();
inventoryDetailLambda.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambda);
|
|
286
|
|
|
287
288
289
290
291
292
293
294
295
296
|
for (Location location1 : locations) {
InventoryDetail inventoryDetail = null;
String materialName = null;
for (InventoryDetail inventoryDetail2 : inventoryDetailList) {
if(location1.getCode().equals(inventoryDetail2.getLocationCode())) {
inventoryDetail = inventoryDetail2;
}
}
List<InventoryDetail> inventoryDetails = inventoryDetailList.stream().filter(inventoryDetail1 ->
inventoryDetail1.getLocationCode().equals(location1.getCode())).collect(Collectors.toList());
|
|
297
|
|
|
298
299
300
301
302
303
304
|
int userDef3 = 0;
String status = location1.getStatus();
String containerCode = location1.getContainerCode();
List<String> materialNameList = inventoryDetails.stream().map(InventoryDetail::getMaterialName).collect(Collectors.toList());
List<String> batchList = inventoryDetails.stream().map(InventoryDetail::getBatch).collect(Collectors.toList());
List<String> materialCodeList = inventoryDetails.stream().map(InventoryDetail::getMaterialCode).collect(Collectors.toList());
List<BigDecimal> qtyList = inventoryDetails.stream().map(InventoryDetail::getQty).collect(Collectors.toList());
|
|
305
|
if(QuantityConstant.STATUS_LOCATION_EMPTY.equals(status)) {
|
|
306
307
308
309
310
311
312
313
314
315
316
317
318
|
if(StringUtils.isEmpty(containerCode)) {
userDef3 = LocationStatus.IDLE_EMPTY_LOCATION;
} else {
if(inventoryDetail == null) {
userDef3 = LocationStatus.IDLE_EMPTY_CONTAINER;
} else {
location1.setMaterialName(materialNameList);
location1.setMaterialCode(materialCodeList);
location1.setBatch(batchList);
location1.setQty(qtyList);
userDef3 = LocationStatus.IDLE_FULL_CONTAINER;
}
}
|
|
319
|
} else if(QuantityConstant.STATUS_LOCATION_LOCK.equals(status)) {
|
|
320
321
322
323
324
325
326
327
328
329
330
331
332
333
|
if(StringUtils.isEmpty(containerCode)) {
userDef3 = LocationStatus.LOCK_EMPTY_LOCATION;
} else {
if(inventoryDetail == null) {
userDef3 = LocationStatus.LOCK_EMPTY_CONTAINER;
} else {
location1.setMaterialName(materialNameList);
location1.setMaterialCode(materialCodeList);
location1.setBatch(batchList);
location1.setQty(qtyList);
userDef3 = LocationStatus.LOCK_FULL_CONTAINER;
}
}
}
|
|
334
|
|
|
335
336
337
338
339
340
341
342
343
344
345
346
347
|
if(location1.getDeleted()) {
if(StringUtils.isEmpty(containerCode)) {
userDef3 = LocationStatus.DISABLE_EMPTY_LOCATION;
} else {
if(inventoryDetail == null) {
userDef3 = LocationStatus.DISABLE_EMPTY_CONTAINER;
} else {
location1.setMaterialName(materialNameList);
location1.setMaterialCode(materialCodeList);
location1.setBatch(batchList);
location1.setQty(qtyList);
userDef3 = LocationStatus.DISABLE_FULL_CONTAINER;
}
|
|
348
|
}
|
|
349
350
351
352
|
}
location1.setUserDef3(String.valueOf(userDef3));
locationList.add(location1);
|
|
353
|
}
|
|
354
355
|
return AjaxResult.success(locations);
}
|
|
356
357
|
|
|
358
359
360
361
362
363
364
|
@Log(title = "配置-库存资料-库位条码", operating = "库位条码打印", action = BusinessType.OTHER)
// @ResponseBody // 错误1ajax是json数据而没有添加该注解返回值不为json所以不能够返回common.ajaxSetup.textStatus= "parsererror"报错
@GetMapping("/print/{ids}")
public void print (@PathVariable("ids") Integer[] ids, ModelMap mmap) // arg1:物料id arg2:会话对象不需要直接返回
{
print.jasperPrint(ids, prefix);// 不用返回json打印
}
|
|
365
|
}
|