1
2
3
package com . huaheng . pc . config . location . service ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ;
4
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper ;
5
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper ;
6
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper ;
周鸿
authored
about a year ago
7
import com.huaheng.common.support.Convert ;
8
import com.huaheng.common.utils.Wrappers ;
9
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl ;
10
import com.huaheng.common.constant.QuantityConstant ;
11
12
13
14
import com.huaheng.common.exception.service.ServiceException ;
import com.huaheng.common.utils.StringUtils ;
import com.huaheng.common.utils.security.ShiroUtils ;
import com.huaheng.framework.web.domain.AjaxResult ;
周鸿
authored
about a year ago
15
16
17
18
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 ;
19
import com.huaheng.pc.config.location.domain.Location ;
20
import com.huaheng.pc.config.location.domain.LocationAge ;
21
import com.huaheng.pc.config.location.domain.LocationInfo ;
22
import com.huaheng.pc.config.location.mapper.LocationMapper ;
23
24
import com.huaheng.pc.config.locationType.domain.LocationType ;
import com.huaheng.pc.config.locationType.service.LocationTypeService ;
25
import com.huaheng.pc.config.points.domain.Points ;
26
27
import com.huaheng.pc.config.zone.domain.Zone ;
import com.huaheng.pc.config.zone.service.ZoneService ;
28
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService ;
29
import org.springframework.stereotype.Service ;
30
31
32
import javax.annotation.Resource ;
import java.text.MessageFormat ;
33
import java.util.* ;
34
import java.util.stream.Collectors ;
35
36
@Service ( "LocationService" )
37
public class LocationServiceImpl extends ServiceImpl < LocationMapper , Location > implements LocationService {
38
39
40
41
42
43
44
45
46
@Resource
private LocationService locationService ;
@Resource
private LocationTypeService locationTypeService ;
@Resource
private ZoneService zoneService ;
@Resource
private LocationMapper locationMapper ;
47
48
@Resource
private TaskHeaderService taskHeaderService ;
周鸿
authored
about a year ago
49
50
51
52
@Resource
private ContainerService containerService ;
@Resource
private ContainerTypeService containerTypeService ;
53
huhai
authored
5 years ago
54
55
56
57
/**
* //新增库位,需要建立code,并判断是否重复
* 1 . 库区和库位没有绝对关系。 先建立库区,然后在库区的位置进行建立库位类型。
* TODO :胡海 -- 在判断库位类型和库区是否匹配,应该用库位类型表进行判断。库位类型在库区存在即可
58
*
huhai
authored
5 years ago
59
60
61
* @param location
* @return
*/
62
@Override
63
public AjaxResult addsave ( Location location ) {
64
65
//库区与库位类型的匹配判断
66
67
if (! location . getZoneCode (). equals ( location . getLocationType ())) {
throw new ServiceException ( location . getLocationType () + "的库位类型与" + location . getZoneCode () + "库区不匹配" );
68
}
69
//TODO:胡海-- 库位编码长度应该是弹性的,即我们的库位是由4个维度组成的,正常情况下 平库(行列) 立体仓库(行列层) AGV料架库(行列层格)
huhai
authored
5 years ago
70
// 这里可以判断下 然后决定库位编码长度。
71
//创建库位编码code
72
73
String prefix = location . getLocationType ();
String code = MessageFormat . format ( "{0}{1}_{2}_{3}" ,
74
75
76
prefix ,
String . format ( "%02d" , location . getIRow ()),
String . format ( "%02d" , location . getIColumn ()),
77
String . format ( "%02d" , location . getILayer ()));
78
79
80
//判断code是否重复
LambdaQueryWrapper < Location > lam = Wrappers . lambdaQuery ();
81
82
83
lam . eq ( Location: : getWarehouseCode , ShiroUtils . getWarehouseCode ())
. eq ( Location: : getCode , code );
if ( this . getOne ( lam ) != null ) {
84
85
86
87
88
89
90
return AjaxResult . error ( "该位置已有库位生成,请重新输入位置" );
}
//插入数据库
location . setCode ( code );
location . setWarehouseCode ( ShiroUtils . getWarehouseCode ());
location . setCreatedBy ( ShiroUtils . getLoginName ());
91
92
Boolean flag = this . save ( location );
if ( flag == false ) {
93
94
95
96
97
98
99
return AjaxResult . error ( "新增库位失败,插入数据库时失败" );
}
return AjaxResult . success ( "新增库位成功" );
}
/**
* 批量新增库位
100
*
101
102
103
104
105
106
107
* @param location
* @return boolean
*/
@Override
public boolean insertLocation ( Location location ) {
/* 判断库位类型编码是否存在*/
LambdaQueryWrapper < LocationType > typeLambda = Wrappers . lambdaQuery ();
108
109
typeLambda . eq ( LocationType: : getCode , location . getLocationType ())
. select ( LocationType: : getCode );
110
List < Map < String , Object >> list = locationTypeService . listMaps ( typeLambda );
111
if ( list . size () < 1 ) {
112
113
114
115
throw new ServiceException ( "库位类型编码不存在" );
}
/* 判断库区编码是否存在*/
116
LambdaQueryWrapper < Zone > zoneLambda = Wrappers . lambdaQuery ();
117
118
119
120
zoneLambda . eq ( Zone: : getCode , location . getZoneCode ())
. select ( Zone: : getCode );
list = zoneService . listMaps ( zoneLambda );
121
if ( list . size () < 1 ) {
122
123
throw new ServiceException ( "库区编码不存在" );
}
huhai
authored
5 years ago
124
//TODO:胡海--在判断库位类型和库区是否匹配,应该用库位类型表进行判断。库位类型在库区存在即可
125
126
if (! location . getZoneCode (). equals ( location . getLocationType ())) {
throw new ServiceException ( location . getLocationType () + "的库位类型与" + location . getZoneCode () + "库区不匹配" );
127
128
129
}
List < Location > locations = new ArrayList <>();
130
131
132
133
for ( int i = 1 ; i <= location . getIRow (). intValue (); i ++) {
for ( int j = 1 ; j <= location . getIColumn (). intValue (); j ++) {
for ( int k = 1 ; k <= location . getILayer (). intValue (); k ++) {
for ( int m = 1 ; m <= location . getIGrid (). intValue (); m ++) {
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
//Integer roadway = (j / 2) + 1;
Location param = new Location ();
param . setIRow ( i );
param . setIColumn ( j );
param . setILayer ( k );
param . setIGrid ( m );
param . setRoadway ( location . getRoadway ());
param . setZoneCode ( location . getZoneCode ());
param . setLocationType ( location . getLocationType ());
param . setStatus ( location . getStatus ());
param . setWarehouseCode ( ShiroUtils . getWarehouseCode ());
param . setCreatedBy ( ShiroUtils . getLoginName ());
param . setLastUpdatedBy ( ShiroUtils . getLoginName ());
String code = MessageFormat . format ( "{0}{1}_{2}_{3}" ,
location . getLocationType (),
String . format ( "%02d" , i ),
String . format ( "%02d" , j ),
String . format ( "%02d" , k ));
//查询该库位编码是否存在
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
154
155
queryWrapper . eq ( Location: : getCode , code )
. eq ( Location: : getWarehouseCode , ShiroUtils . getWarehouseCode ());
156
157
158
159
160
161
162
163
164
List < Location > locationList = locationService . list ( queryWrapper );
if ( locationList . size () == 0 ) {
param . setCode ( code );
locations . add ( param );
}
}
}
}
}
165
int num = 0 ;
166
List < Location > locations1 = new ArrayList <>();
167
168
if ( locations . size () > 1000 ) {
for ( Location item : locations ) {
169
170
num ++;
locations1 . add ( item );
171
if ( num % 1000 == 0 || num == locations . size ()) {
172
locationMapper . addList ( locations1 );
173
locations1 = new ArrayList <>();
174
175
}
}
176
} else {
177
178
locationMapper . addList ( locations );
}
179
180
List < Integer > integerList = new ArrayList <>();
181
182
for ( Location location2 : locations ) {
if ( integerList . size () == 0 ) {
183
184
integerList . add ( location2 . getIRow ());
} else {
185
186
for ( int i = 0 ; i < integerList . size (); i ++) {
if ( integerList . get ( i ). intValue () == location2 . getIRow (). intValue ()) {
187
188
break ;
} else {
189
if ( i == ( integerList . size () - 1 )) {
190
191
192
193
194
195
integerList . add ( location2 . getIRow ());
}
}
}
}
}
196
if ( integerList . size () == 4 ) {
197
198
199
200
201
202
203
204
205
206
207
208
209
for ( Location location3 : locations ) {
for ( int i = 0 ; i < integerList . size (); i ++) {
if ( location3 . getIRow (). intValue () == integerList . get ( i ). intValue ()) {
if ( i == 0 || i == ( integerList . size () - 1 )) {
location3 . setRowFlag ( 1 );
} else {
location3 . setRowFlag ( 0 );
}
}
}
}
locationMapper . updateList ( locations );
}
210
211
212
return true ;
}
213
@Override
214
public boolean addBatchSave ( String prefix , Integer firstRow , Integer lastRow , Integer firstColumn , Integer lastColumn , Integer firstLayer , Integer lastLayer ,
215
Integer firstGrid , Integer lastGrid , String roadWay , String status , String zoneCode , String locationType , String high ) {
216
217
218
219
LambdaQueryWrapper < LocationType > typeLambda = Wrappers . lambdaQuery ();
typeLambda . eq ( LocationType: : getCode , locationType )
. select ( LocationType: : getCode );
List < Map < String , Object >> list = locationTypeService . listMaps ( typeLambda );
220
if ( list . size () < 1 ) {
221
222
223
224
throw new ServiceException ( "库位类型编码不存在" );
}
/* 判断库区编码是否存在*/
225
LambdaQueryWrapper < Zone > zoneLambda = Wrappers . lambdaQuery ();
226
227
228
229
zoneLambda . eq ( Zone: : getCode , zoneCode )
. select ( Zone: : getCode );
list = zoneService . listMaps ( zoneLambda );
230
if ( list . size () < 1 ) {
231
232
233
throw new ServiceException ( "库区编码不存在" );
}
//TODO:胡海--在判断库位类型和库区是否匹配,应该用库位类型表进行判断。库位类型在库区存在即可
234
/* if (! zoneCode . equals ( locationType )){
235
throw new ServiceException ( locationType + "的库位类型与" + zoneCode + "库区不匹配" );
236
}*/
237
LambdaQueryWrapper < Zone > zoneLambdaQueryWrapper = Wrappers . lambdaQuery ();
238
zoneLambdaQueryWrapper . eq ( Zone: : getWarehouseCode , ShiroUtils . getWarehouseCode ());
239
240
241
242
243
244
245
246
zoneLambdaQueryWrapper . eq ( Zone: : getCode , zoneCode );
Zone zone = zoneService . getOne ( zoneLambdaQueryWrapper );
String area = zone . getArea ();
List < Location > locations = new ArrayList <>(); // 为零?
for ( int i = firstRow . intValue (); i <= lastRow . intValue (); i ++) {
for ( int j = firstColumn . intValue (); j <= lastColumn . intValue (); j ++) {
for ( int k = firstLayer . intValue (); k <= lastLayer . intValue (); k ++) {
for ( int m = firstGrid . intValue (); m <= lastGrid . intValue (); m ++) {
247
248
249
250
251
252
253
//Integer roadway = (j / 2) + 1;
Location param = new Location ();
param . setIRow ( i );
param . setIColumn ( j );
param . setILayer ( k );
param . setIGrid ( m );
param . setRoadway ( roadWay );
254
param . setArea ( area );
255
256
257
param . setZoneCode ( zoneCode );
param . setLocationType ( locationType );
param . setStatus ( status );
258
param . setHigh ( Integer . parseInt ( high ));
259
260
261
param . setWarehouseCode ( ShiroUtils . getWarehouseCode ());
param . setCreatedBy ( ShiroUtils . getLoginName ());
param . setLastUpdatedBy ( ShiroUtils . getLoginName ());
262
String code = MessageFormat . format ( "{0}{1}-{2}-{3}" ,
263
prefix ,
264
265
266
267
268
String . format ( "%02d" , i ),
String . format ( "%02d" , j ),
String . format ( "%02d" , k ));
//查询该库位编码是否存在
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
269
270
queryWrapper . eq ( Location: : getCode , code )
. eq ( Location: : getWarehouseCode , ShiroUtils . getWarehouseCode ());
271
272
273
274
275
276
277
278
279
280
List < Location > locationList = locationService . list ( queryWrapper );
if ( locationList . size () == 0 ) {
param . setCode ( code );
locations . add ( param );
}
}
}
}
}
281
int num = 0 ;
282
List < Location > locations1 = new ArrayList <>();
283
284
if ( locations . size () > 1000 ) {
for ( Location item : locations ) {
285
286
num ++;
locations1 . add ( item );
287
if ( num % 1000 == 0 || num == locations . size ()) {
288
locationMapper . addList ( locations1 );
289
locations1 = new ArrayList <>();
290
291
}
}
292
} else {
293
294
295
296
locationMapper . addList ( locations );
}
List < Integer > integerList = new ArrayList <>();
297
298
for ( Location location2 : locations ) {
if ( integerList . size () == 0 ) {
299
300
integerList . add ( location2 . getIRow ());
} else {
301
302
for ( int i = 0 ; i < integerList . size (); i ++) {
if ( integerList . get ( i ). intValue () == location2 . getIRow (). intValue ()) {
303
304
break ;
} else {
305
if ( i == ( integerList . size () - 1 )) {
306
307
308
309
310
311
integerList . add ( location2 . getIRow ());
}
}
}
}
}
312
if ( integerList . size () == 4 ) {
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
for ( Location location3 : locations ) {
for ( int i = 0 ; i < integerList . size (); i ++) {
if ( location3 . getIRow (). intValue () == integerList . get ( i ). intValue ()) {
if ( i == 0 || i == ( integerList . size () - 1 )) {
location3 . setRowFlag ( 1 );
} else {
location3 . setRowFlag ( 0 );
}
}
}
}
locationMapper . updateList ( locations );
}
return true ;
}
huhai
authored
5 years ago
330
331
/**
* 根据库位编码对库位表格的状态进行更新
332
*
huhai
authored
5 years ago
333
334
335
* @param locationCode
* @param status
*/
336
337
338
339
340
341
342
@Override
public void updateStatus ( String locationCode , String status ) {
if ( StringUtils . isNotEmpty ( locationCode )) {
locationMapper . updateStatus ( ShiroUtils . getWarehouseCode (), locationCode , status );
}
}
343
344
345
346
347
348
349
@Override
public void updateStatus ( String locationCode , String status , String warehouseCode ) {
if ( StringUtils . isNotEmpty ( locationCode )) {
locationMapper . updateStatus ( warehouseCode , locationCode , status );
}
}
350
351
/**
* 通过定位规则查找库位
352
*
353
354
355
356
* @param locatingRule
* @return
*/
@Override
357
public String position ( String locatingRule ) {
358
359
360
361
362
return locationMapper . position ( locatingRule ). getCode ();
}
/**
* 修改容器和库位状态
363
*/
364
365
366
@Override
public void updateContainerCodeAndStatus ( String locationCode , String containerCode , String status ) {
if ( StringUtils . isNotEmpty ( locationCode ) || StringUtils . isNotEmpty ( containerCode )) {
367
368
369
LambdaUpdateWrapper < Location > updateWrapper = Wrappers . lambdaUpdate ();
updateWrapper . set ( Location: : getContainerCode , containerCode )
. set ( Location: : getStatus , status )
370
. eq ( Location: : getWarehouseCode , ShiroUtils . getWarehouseCode ())
371
372
. eq ( Location: : getCode , locationCode );
this . update ( updateWrapper );
373
374
375
376
}
}
@Override
377
public void updateContainerCodeAndStatus ( String locationCode , String containerCode ,
378
String status , String warehouseCode ) {
379
380
381
382
383
384
385
386
if ( StringUtils . isNotEmpty ( locationCode ) || StringUtils . isNotEmpty ( containerCode )) {
LambdaUpdateWrapper < Location > updateWrapper = Wrappers . lambdaUpdate ();
updateWrapper . set ( Location: : getContainerCode , containerCode )
. set ( Location: : getStatus , status )
. eq ( Location: : getWarehouseCode , warehouseCode )
. eq ( Location: : getCode , locationCode );
this . update ( updateWrapper );
}
387
388
389
390
391
392
393
394
}
/**
* 获取库区最大行列
* @param type
* @return
*/
@Override
395
public LocationInfo getAllLocation ( String warehouseCode , String type ) {
396
if ( StringUtils . isNotEmpty ( type )) {
397
398
399
400
if ( warehouseCode == null ){
warehouseCode = ShiroUtils . getWarehouseCode ();
}
Location location = locationMapper . getAllLocation ( warehouseCode , type );
401
402
403
404
405
LocationInfo locationInfo = new LocationInfo ();
locationInfo . setMaxRow ( location . getIRow ());
locationInfo . setMaxLine ( location . getIColumn ());
locationInfo . setMaxLayer ( location . getILayer ());
locationInfo . setMaxGrid ( location . getIGrid ());
406
int minRow = locationMapper . getFirstRowOfZone ( warehouseCode , type );
407
locationInfo . setMinRow ( minRow );
408
409
410
411
412
413
414
415
416
417
418
419
420
421
return locationInfo ;
}
return null ;
}
/**
* 验证库位合法性
*
* @param code
* @return
*/
@Override
public boolean checkLocation ( String code ) {
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
422
queryWrapper . eq ( Location: : getWarehouseCode , ShiroUtils . getWarehouseCode ())
423
. eq ( Location: : getDeleted , false )
424
425
. eq ( Location: : getCode , code );
List < Location > locations = list ( queryWrapper );
426
if ( locations . size () >= 1 ) {
427
Location location = locations . get ( 0 );
428
String containerCode = location . getContainerCode ();
429
430
431
432
if ( containerCode != null && containerCode . length () > 0 ) {
throw new ServiceException ( "货架上已有容器" );
}
String status = location . getStatus ();
433
if (! QuantityConstant . STATUS_LOCATION_EMPTY . equals ( status )) {
434
435
436
437
438
439
440
441
442
443
444
throw new ServiceException ( "库位状态不为空" );
}
return true ;
} else {
return false ;
}
}
@Override
public boolean getFreeLocation ( String materialCode , String batch ) {
LambdaQueryWrapper < Location > lambdaQueryWrapper = Wrappers . lambdaQuery ();
445
lambdaQueryWrapper . eq ( Location: : getWarehouseCode , ShiroUtils . getWarehouseCode ())
446
447
. eq ( Location: : getContainerCode , "" )
. eq ( Location: : getDeleted , false )
448
. eq ( Location: : getStatus , QuantityConstant . STATUS_LOCATION_EMPTY );
449
List < Location > locations = locationService . list ( lambdaQueryWrapper );
450
if ( locations != null && locations . size () > 0 ) {
451
452
453
454
455
456
457
return true ;
}
return false ;
}
/**
* 查询库位利用率
458
*
459
460
461
462
463
464
465
466
467
* @return
*/
@Override
public List < LinkedHashMap < String , Object >> getLocationProp () {
return locationMapper . getLocationProp ();
}
/**
* 根据库位编码查询库位信息
468
*
469
* @param
470
471
472
* @return
*/
@Override
473
public Location getLocationByCode ( String locationCode ) {
474
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
475
queryWrapper . eq ( Location: : getCode , locationCode );
476
queryWrapper . eq ( Location: : getWarehouseCode , ShiroUtils . getWarehouseCode ());
477
478
479
return getOne ( queryWrapper );
}
480
@Override
481
482
483
484
485
486
487
488
public Location getLocationByCode ( String locationCode , String warehouseCode ) {
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
queryWrapper . eq ( Location: : getCode , locationCode );
queryWrapper . eq ( Location: : getWarehouseCode , warehouseCode );
return getOne ( queryWrapper );
}
@Override
489
490
491
492
public List < Location > pickLocation () {
return locationMapper . pickLocation ();
}
493
@Override
494
495
496
497
498
public List < Location > selectLocationByContainerEmpty ( String warehouseCode , String zoneCode , String roadWay ) {
return locationMapper . selectLocationByContainerEmpty ( warehouseCode , zoneCode , roadWay );
}
@Override
499
500
501
502
public List < Location > selectContainerEmpty ( String warehouseCode ) {
return locationMapper . selectContainerEmpty ( warehouseCode );
}
503
504
505
506
@Override
public Location getInsideNear ( Location location ) {
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
queryWrapper . eq ( Location: : getWarehouseCode , location . getWarehouseCode ());
507
queryWrapper . eq ( Location: : getZoneCode , location . getZoneCode ());
508
509
510
queryWrapper . eq ( Location: : getRoadway , location . getRoadway ());
queryWrapper . eq ( Location: : getIColumn , location . getIColumn ());
queryWrapper . eq ( Location: : getILayer , location . getILayer ());
511
queryWrapper . eq (! location . getWarehouseCode (). equalsIgnoreCase ( "KS0001" ), Location: : getLocationType , location . getLocationType ());
512
queryWrapper . eq ( Location: : getRowFlag , QuantityConstant . ROW_IN );
513
List < Location > locationList = list ( queryWrapper );
514
515
516
517
518
for ( Location location1 : locationList ) {
int diff = Math . abs ( location1 . getIRow (). intValue () - location . getIRow (). intValue ());
if ( diff == 1 ) {
return location1 ;
}
519
520
521
522
523
}
return null ;
}
@Override
524
525
526
public Location getOutSideNear ( Location location ) {
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
queryWrapper . eq ( Location: : getWarehouseCode , location . getWarehouseCode ());
527
queryWrapper . eq ( Location: : getZoneCode , location . getZoneCode ());
528
529
530
queryWrapper . eq ( Location: : getRoadway , location . getRoadway ());
queryWrapper . eq ( Location: : getIColumn , location . getIColumn ());
queryWrapper . eq ( Location: : getILayer , location . getILayer ());
531
queryWrapper . eq (! location . getWarehouseCode (). equalsIgnoreCase ( "KS0001" ), Location: : getLocationType , location . getLocationType ());
532
queryWrapper . eq ( Location: : getRowFlag , QuantityConstant . ROW_OUT );
周鸿
authored
11 months ago
533
queryWrapper . orderByDesc ( Location: : getIRow );
534
List < Location > locationList = list ( queryWrapper );
535
for ( Location location1 : locationList ) {
536
int diff = Math . abs ( location1 . getIRow (). intValue () - location . getIRow (). intValue ());
537
if ( diff == 1 ) {
538
539
540
541
542
543
544
545
return location1 ;
}
}
return null ;
}
@Override
public Location getNear ( Location location ) {
546
547
int rowFlag = location . getRowFlag (). intValue ();
Location locaiton2 = null ;
548
if ( rowFlag == 1 ) {
549
550
locaiton2 = getInsideNear ( location );
} else {
551
552
553
554
555
locaiton2 = getOutSideNear ( location );
}
return locaiton2 ;
}
556
557
private boolean getOutSideCanMove ( Location location ) {
Location locaiton2 = getInsideNear ( location );
558
559
if (! locaiton2 . getStatus (). equals ( QuantityConstant . STATUS_LOCATION_EMPTY )) {
return false ;
560
}
561
if (! locaiton2 . getContainerCode (). equals ( "" )) {
562
563
return false ;
}
564
return true ;
565
566
567
568
569
570
571
}
@Override
public Location getEmptyOutSideLocation ( Location location ) {
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
queryWrapper . eq ( Location: : getWarehouseCode , location . getWarehouseCode ());
queryWrapper . eq ( Location: : getRoadway , location . getRoadway ());
572
queryWrapper . ge ( Location: : getHigh , location . getHigh ());
周鸿
authored
about a year ago
573
// queryWrapper.eq(Location::getRowFlag, QuantityConstant.ROW_OUT);
574
queryWrapper . eq ( Location: : getContainerCode , "" );
575
queryWrapper . eq ( Location: : getStatus , QuantityConstant . STATUS_LOCATION_EMPTY );
576
queryWrapper . eq (! location . getWarehouseCode (). equalsIgnoreCase ( "KS0001" ), Location: : getLocationType , location . getLocationType ());
周鸿
authored
about a year ago
577
queryWrapper . last ( " order by high asc,rowFlag desc " );
578
List < Location > locationList = list ( queryWrapper );
579
580
List < Location > removeLocationList = new ArrayList <>();
int column = location . getIColumn ();
581
Collections . sort ( locationList , new Comparator < Location >() {
582
583
584
585
586
587
@Override
public int compare ( Location o1 , Location o2 ) {
int dvalue1 = Math . abs ( o1 . getIColumn () - column );
int dvalue2 = Math . abs ( o2 . getIColumn () - column );
return dvalue1 - dvalue2 ;
}
588
});
589
int removeSize = 0 ;
590
for ( int i = 0 ; i < locationList . size (); i ++) {
591
Location location1 = locationList . get ( i );
周鸿
authored
about a year ago
592
if ( taskHeaderService . getUncompleteTaskInNearXZ ( location1 ) > 0 ) {
593
594
595
596
597
598
599
600
removeLocationList . add ( location1 );
removeSize ++;
} else if (! getOutSideCanMove ( location1 )) {
removeLocationList . add ( location1 );
removeSize ++;
}
if ( i - removeSize >= 3 ) {
break ;
601
602
}
}
603
locationList . removeAll ( removeLocationList );
604
if ( locationList == null || locationList . size () <= 0 ) {
605
606
607
608
609
610
611
return null ;
}
Location location1 = locationList . get ( 0 );
return location1 ;
}
612
@Override
613
614
615
616
public Location getEmptyInsideLocation ( Location location ) {
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
queryWrapper . eq ( Location: : getWarehouseCode , location . getWarehouseCode ());
queryWrapper . eq ( Location: : getRoadway , location . getRoadway ());
617
queryWrapper . eq ( Location: : getRowFlag , QuantityConstant . ROW_IN );
618
queryWrapper . ge ( Location: : getHigh , location . getHigh ());
619
queryWrapper . eq ( Location: : getContainerCode , "" );
620
queryWrapper . eq ( Location: : getStatus , QuantityConstant . STATUS_LOCATION_EMPTY );
621
queryWrapper . eq (! location . getWarehouseCode (). equalsIgnoreCase ( "KS0001" ), Location: : getLocationType , location . getLocationType ());
622
List < Location > locationList = list ( queryWrapper );
623
List < Location > removeLocaationList = new ArrayList <>();
624
int column = location . getIColumn ();
625
Collections . sort ( locationList , new Comparator < Location >() {
626
627
628
629
630
631
@Override
public int compare ( Location o1 , Location o2 ) {
int dvalue1 = Math . abs ( o1 . getIColumn () - column );
int dvalue2 = Math . abs ( o2 . getIColumn () - column );
return dvalue1 - dvalue2 ;
}
632
633
});
int removeSize = 0 ;
634
for ( int i = 0 ; i < locationList . size (); i ++) {
635
Location location1 = locationList . get ( i );
周鸿
authored
about a year ago
636
637
638
639
640
641
642
643
644
645
if ( location . getWarehouseCode (). equals ( QuantityConstant . WAREHOUSE_KS )){
if ( taskHeaderService . getUncompleteTaskInNear ( location1 ) > 0 ) {
removeLocaationList . add ( location1 );
removeSize ++;
}
} else {
if ( taskHeaderService . getUncompleteTaskInNearXZ ( location1 ) > 0 ) {
removeLocaationList . add ( location1 );
removeSize ++;
}
646
647
648
649
650
651
}
if ( i - removeSize >= 3 ) {
break ;
}
}
locationList . removeAll ( removeLocaationList );
652
if ( locationList == null || locationList . size () <= 0 ) {
653
654
return null ;
}
655
Location location1 = locationList . get ( 0 );
656
657
658
return location1 ;
}
659
660
661
662
663
664
665
666
@Override
public Location getEmptyLocation ( Location location ) {
Location location1 = getEmptyOutSideLocation ( location );
if ( location1 == null ) {
location1 = getEmptyInsideLocation ( location );
}
return location1 ;
}
667
668
669
670
671
672
673
674
675
676
@Override
public int getFirstRowOfZone ( String warehouseCode , String locationType ) {
return locationMapper . getFirstRowOfZone ( warehouseCode , locationType );
}
@Override
public int getLastRowOfZone ( String warehouseCode , String locationType ) {
return locationMapper . getLastRowOfZone ( warehouseCode , locationType );
}
677
678
679
680
681
682
@Override
public List < Location > remoteList ( String type ) {
LambdaQueryWrapper < Location > wrapper = Wrappers . lambdaQuery ();
if ( "status" . equals ( type )) {
wrapper . eq ( Location: : getStatus , "lock" );
683
} else if ( "container" . equals ( type )) {
684
wrapper . isNotNull ( Location: : getContainerCode )
685
. ne ( Location: : getContainerCode , "" );
686
687
688
}
return list ( wrapper );
}
689
690
691
692
693
694
695
696
697
@Override
public void upstatus ( String code ) {
Location user = new Location ();
user . setStatus ( "empty" );
//修改条件s
UpdateWrapper < Location > userUpdateWrapper = new UpdateWrapper <>();
userUpdateWrapper . eq ( "containerCode" , code );
int update = locationMapper . update ( user , userUpdateWrapper );
698
// System.out.println(update);
699
}
700
@Override
701
702
703
704
705
706
707
708
709
public int locationSIsnull ( ){
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
queryWrapper . eq ( Location: : getWarehouseCode , ShiroUtils . getWarehouseCode ());
queryWrapper . eq ( Location: : getRoadway , 2 );
queryWrapper . eq ( Location: : getZoneCode , "LK" );
queryWrapper . eq ( Location: : getContainerCode , "" ). or (). isNull ( Location: : getContainerCode );
int count = this . count ();
return count ;
}
710
@Override
711
712
713
714
715
716
717
718
719
720
721
722
public Location getLocationOfRule ( int roadWay ){
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
queryWrapper . eq ( Location: : getWarehouseCode , ShiroUtils . getWarehouseCode ());
queryWrapper . eq ( Location: : getStatus , QuantityConstant . STATUS_LOCATION_EMPTY );
queryWrapper . eq ( Location: : getRoadway , roadWay );
queryWrapper . eq ( Location: : getZoneCode , "LK" );
queryWrapper . eq ( Location: : getContainerCode , "" ). or (). isNull ( Location: : getContainerCode );
queryWrapper . orderByAsc ( Location: : getIColumn , Location: : getIRow );
queryWrapper . last ( "limit 1" );
Location location = this . getOne ( queryWrapper );
return location ;
}
723
724
725
726
727
@Override
public Location selectFirstEntity ( Location temp1 ){
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
queryWrapper . eq ( StringUtils . isNotEmpty ( temp1 . getWarehouseCode ()), Location: : getWarehouseCode , temp1 . getWarehouseCode ());
728
queryWrapper . eq ( StringUtils . isNotEmpty ( temp1 . getCode ()), Location: : getCode , temp1 . getCode ());
729
queryWrapper . eq ( StringUtils . isNotNull ( temp1 . getIRow ()), Location: : getIRow , temp1 . getIRow ());
730
731
732
queryWrapper . eq ( StringUtils . isNotNull ( temp1 . getIColumn ()), Location: : getIColumn , temp1 . getIColumn ());
queryWrapper . eq ( StringUtils . isNotNull ( temp1 . getRoadway ()), Location: : getRoadway , temp1 . getRoadway ());
queryWrapper . eq ( StringUtils . isNotNull ( temp1 . getILayer ()), Location: : getILayer , temp1 . getILayer ());
733
queryWrapper . eq ( StringUtils . isNotNull ( temp1 . getIGrid ()), Location: : getIGrid , temp1 . getIGrid ());
734
735
736
737
queryWrapper . last ( "limit 1" );
return this . getOne ( queryWrapper );
}
738
739
740
741
742
743
744
745
746
747
748
749
@Override
public Location selectAddress ( Location location ) {
return locationMapper . selectAddress ( location );
}
@Override
public List < Location > selectEmptyAddress () {
Points points = new Points ();
points . setWarehouseCode ( ShiroUtils . getWarehouseCode ());
points . setIsLocked ( 2 );
return locationMapper . selectEmptyAddress ( points );
}
750
751
752
753
754
755
756
757
758
@Override
public List < Location > getRoadwayByLocationType ( String locationType ) {
QueryWrapper < Location > qw = new QueryWrapper <>();
qw . select ( "DISTINCT locationType,roadway" ). lambda (). eq ( Location: : getLocationType , locationType );
List < Location > list = this . list ( qw );
return list ;
}
759
@Override
760
761
public List < String > selectlistEmpty ( String warehouseCode ) {
return locationMapper . selectlistEmpty ( warehouseCode );
762
763
}
@Override
764
765
public List < Location > selectCode ( String warehouseCode ) {
return locationMapper . selectCode ( warehouseCode );
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
}
@Override
public Location selectByPrefix ( Location location ) {
return locationMapper . selectByPrefix ( location );
}
@Override
public Location selectModelByOld ( Location location ) {
return locationMapper . selectModelByOld ( location );
}
@Override
public Location selectModelByOld ( Location location , List < String > codes ) {
return locationMapper . selectModelByOlds ( location , codes );
}
@Override
781
public void pickAndplace ( List < Location > locationAajacentIsNull , Boolean flag , Location s1 , Location s2 ){
782
783
784
785
786
787
788
789
790
Boolean f = true ;
int m = 0 ;
while ( f ){
int layer = ( int ) ( Math . random () * 8 ) + 1 ;
int line = ( int ) ( Math . random () * 23 ) + 1 ;
locationAajacentIsNull . addAll ( locationMapper . getLocationAajacentIsNull ( layer , line , flag ));
if ( locationAajacentIsNull . size ()!= 2 ){
m ++;
if ( m == 23 ){
791
return ;
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
}
continue ;
}
List < Integer > c = locationAajacentIsNull . stream (). map ( j -> j . getIColumn ()). collect ( Collectors . toList ());
if ( c . get ( 0 ) - c . get ( 1 )== 1 || c . get ( 0 ) - c . get ( 1 )==- 1 ){
f = false ;
} else {
locationAajacentIsNull . clear ();
}
}
s1 . setCode ( locationAajacentIsNull . get ( 0 ). getCode ());
s2 . setCode ( locationAajacentIsNull . get ( 1 ). getCode ());
}
@Override
public Location getLocationFarAway ( Integer roadway , int flag , int layer ) {
return locationMapper . getLocationFarAway ( roadway , flag , layer );
}
809
810
811
812
@Override
public Location getLocationOfRule ( ) {
return locationMapper . getLocationOfRule ();
}
813
814
815
816
@Override
public List < Location > selectListInventory ( String zoneCode ) {
return locationMapper . selectListInventory ( zoneCode );
}
817
818
819
820
821
822
823
824
@Override
public int updateStatusNew ( String locationCode , String warehouseCode , String status , String oldStatus ) {
if ( StringUtils . isNotEmpty ( locationCode )) {
return locationMapper . updateStatusNew ( locationCode , warehouseCode , status , oldStatus );
}
return 0 ;
}
825
826
@Override
827
828
public Map < String , LocationAge > getLkLocationAgeMap () {
Map < String , LocationAge > ageMap = new HashMap <>();
829
830
831
832
List < LocationAge > list = locationMapper . getLkLocationList ();
list . forEach ( item ->{
String key = item . getCode ();
if (! ageMap . containsKey ( key )){
833
ageMap . put ( key , item );
834
835
836
837
}
});
return ageMap ;
}
周鸿
authored
about a year ago
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
public List < Location > getLocationListByContainerCode ( String warehosueCode , String containerCode , String tolocationCode ) {
List < Location > list = new ArrayList <>();
Container container = containerService . getContainerByCode ( containerCode , warehosueCode );
if ( container == null ){
return list ;
}
String containerType = container . getContainerType ();
ContainerType containerType1 = containerTypeService . getContainerTypeByCode ( containerType , warehosueCode );
String locaitonTypes = containerType1 . getLocationType ();
if ( StringUtils . isEmpty ( locaitonTypes )){
return list ;
}
String [] locationTypeStr = Convert . toStrArray ( locaitonTypes );
LambdaQueryWrapper < Location > queryWrapper = Wrappers . lambdaQuery ();
queryWrapper . eq ( StringUtils . isNotEmpty ( warehosueCode ), Location: : getWarehouseCode , warehosueCode );
queryWrapper . in ( StringUtils . isNotEmpty ( locaitonTypes ), Location: : getLocationType , locationTypeStr );
queryWrapper . apply ( "((containerCode='' and status='empty') or code='" + tolocationCode + "' )" );
return this . list ( queryWrapper );
}
858
}