Commit 63c7fdb64c8fcb99b12224e445e94e01df33f86f

Authored by 游杰
1 parent 279a7c36

1.库位分配兼容空托盘入库

2.出库加上出库站台字段
src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java
... ... @@ -146,55 +146,76 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService
146 146 //去重
147 147 receiptContainerDetailList = receiptContainerDetailList.stream().distinct().collect(Collectors.toList());
148 148  
149   - /* 循环入库组盘明细,重新分配库位*/
150   - for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) {
151   - ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId());
152   -
153   - String locatingRule = this.taskPositioning(receiptContainerDetail);
154   -
155   - LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery();
156   - filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule)
157   - .eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
158   - FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda);
159   - String[] locatingRules = filterConfigDetail.getStatement().split("cut");
160   -
161   - //根据定位规则查询库位编码
162   - LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
163   - locationLambda.last(locatingRules[0]);
164   - locationLambda.eq(Location::getRoadway, wcsTask.getDestination());
165   - List<Location> locationList = locationService.list(locationLambda);
166   - if(locationList == null || locationList.size() == 0) {
167   - locationLambda.last(locatingRules[1]);
168   - locationList = locationService.list(locationLambda);
169   - };
170   - locationCode = filter(locationList, locationTypeList, wcsTask.getDestination());
171   - if (StringUtils.isEmpty(locationCode)){
172   - throw new ServiceException("没有库位可分配");
173   - }
174   -
175   - if (StringUtils.isNotEmpty(locationCode)){
176   - locationService.updateStatus(locationCode, "lock");
177   - if (StringUtils.isNotEmpty(taskHeader.getToLocation()) && !locationCode.equals(taskHeader.getToLocation())){
178   - locationService.updateStatus(taskHeader.getToLocation(), "empty");
  149 + if(receiptContainerDetailList != null && receiptContainerDetailList.size() > 0) {
  150 + /* 循环入库组盘明细,重新分配库位*/
  151 + for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) {
  152 + String locatingRule = null;
  153 + ReceiptContainerHeader receiptContainerHeader= null;
  154 + if(receiptContainerDetail != null) {
  155 + receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId());
  156 + locatingRule = this.taskPositioning(receiptContainerDetail);
  157 + }
  158 + if (StringUtils.isEmpty(locatingRule)){
  159 + //物料类别中定位规则为空时,查询入库首选项
  160 + LambdaQueryWrapper<ConfigValue> configValueLambda = Wrappers.lambdaQuery();
  161 + configValueLambda.eq(ConfigValue::getWarehouseCode, ShiroUtils.getWarehouseCode())
  162 + .eq(ConfigValue::getModuleType, "receipt")
  163 + .eq(ConfigValue::getRecordType, "入库首选项");
  164 + ConfigValue configValue = configValueService.getOne(configValueLambda);
  165 + LambdaQueryWrapper<ReceiptPreference> receiptPreferenceLambda = Wrappers.lambdaQuery();
  166 + receiptPreferenceLambda.eq(ReceiptPreference::getCode, configValue.getValue())
  167 + .eq(ReceiptPreference::getWarehouseCode, ShiroUtils.getWarehouseCode());
  168 + ReceiptPreference receiptPreference = receiptPreferenceService.getOne(receiptPreferenceLambda);
  169 + locatingRule = receiptPreferenceService.getOne(receiptPreferenceLambda).getLocationRule();
  170 + }
  171 + LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery();
  172 + filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule)
  173 + .eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
  174 + FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda);
  175 + String[] locatingRules = filterConfigDetail.getStatement().split("cut");
  176 +
  177 + //根据定位规则查询库位编码
  178 + LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
  179 + locationLambda.last(locatingRules[0]);
  180 + locationLambda.eq(Location::getRoadway, wcsTask.getDestination());
  181 + List<Location> locationList = locationService.list(locationLambda);
  182 + if (locationList == null || locationList.size() == 0) {
  183 + locationLambda.last(locatingRules[1]);
  184 + locationList = locationService.list(locationLambda);
  185 + }
  186 + ;
  187 + locationCode = filter(locationList, locationTypeList, wcsTask.getDestination());
  188 + if (StringUtils.isEmpty(locationCode)) {
  189 + throw new ServiceException("没有库位可分配");
179 190 }
180   - } else {
181   - throw new ServiceException("定位失败,请检查定位规则是否正确");
182   - }
183 191  
184   - //更新库位编码到组盘头表
185   - receiptContainerHeader.setToLocation(locationCode);
186   - if (!receiptContainerHeaderService.updateById(receiptContainerHeader)){
187   - throw new ServiceException("更新库位失败");
188   - }
  192 + if (StringUtils.isNotEmpty(locationCode)) {
  193 + locationService.updateStatus(locationCode, "lock");
  194 + if (StringUtils.isNotEmpty(taskHeader.getToLocation()) && !locationCode.equals(taskHeader.getToLocation())) {
  195 + locationService.updateStatus(taskHeader.getToLocation(), "empty");
  196 + }
  197 + } else {
  198 + throw new ServiceException("定位失败,请检查定位规则是否正确");
  199 + }
  200 + if(receiptContainerDetail != null) {
  201 + //更新库位编码到组盘头表
  202 + receiptContainerHeader.setToLocation(locationCode);
  203 + if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) {
  204 + throw new ServiceException("更新库位失败");
  205 + }
189 206  
190   - //把库位编码赋到该入库组盘头表下的所有明细
191   - LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery();
192   - lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId())
193   - .eq(ReceiptContainerDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
194   - List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda);
195   - for (ReceiptContainerDetail receiptContainerDetail2: receiptContainerDetails) {
196   - receiptContainerDetail2.setLocationCode(locationCode);
197   - if (!receiptContainerDetailService.updateById(receiptContainerDetail2)){throw new ServiceException("更新库位编码到入库组盘明细");}
  207 + //把库位编码赋到该入库组盘头表下的所有明细
  208 + LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery();
  209 + lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId())
  210 + .eq(ReceiptContainerDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
  211 + List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda);
  212 + for (ReceiptContainerDetail receiptContainerDetail2 : receiptContainerDetails) {
  213 + receiptContainerDetail2.setLocationCode(locationCode);
  214 + if (!receiptContainerDetailService.updateById(receiptContainerDetail2)) {
  215 + throw new ServiceException("更新库位编码到入库组盘明细");
  216 + }
  217 + }
  218 + }
198 219 }
199 220 }
200 221  
... ...
src/main/java/com/huaheng/pc/config/locationType/controller/LocationTypeController.java
... ... @@ -104,15 +104,15 @@ public class LocationTypeController extends BaseController
104 104 if(StringUtils.isEmpty(locationType.getCode())){
105 105 return AjaxResult.error("库位类型为空");
106 106 }
107   - if(StringUtils.isEmpty(locationType.getZoneCode())){
108   - return AjaxResult.error("库位类型对应的区域为空");
109   - }
110   - //查找location,是否存在
111   -
112   - if(!zoneService.exists(locationType.getZoneCode(),ShiroUtils.getWarehouseCode()))
113   - {
114   - return AjaxResult.error("库位类型对应的区域:"+locationType.getZoneCode()+" 不在系统管制范围,请核对");
115   - }
  107 +// if(StringUtils.isEmpty(locationType.getZoneCode())){
  108 +// return AjaxResult.error("库位类型对应的区域为空");
  109 +// }
  110 +// //查找location,是否存在
  111 +//
  112 +// if(!zoneService.exists(locationType.getZoneCode(),ShiroUtils.getWarehouseCode()))
  113 +// {
  114 +// return AjaxResult.error("库位类型对应的区域:"+locationType.getZoneCode()+" 不在系统管制范围,请核对");
  115 +// }
116 116  
117 117 locationType.setWarehouseCode(ShiroUtils.getWarehouseCode());
118 118 locationType.setCreatedBy(ShiroUtils.getLoginName());
... ...
src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java
... ... @@ -30,11 +30,6 @@ public class LocationType implements Serializable {
30 30 @TableField(value = "warehouseCode")
31 31 private String warehouseCode;
32 32 /**
33   - * 区域编码
34   - */
35   - @TableField(value = "zoneCode")
36   - private String zoneCode;
37   - /**
38 33 * 描述
39 34 */
40 35 @TableField(value = "name")
... ...
src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java
... ... @@ -110,6 +110,14 @@ public class TaskHeader implements Serializable {
110 110 private Integer status;
111 111  
112 112 /**
  113 + * 出库站台
  114 + */
  115 + @TableField(value = "stationCode")
  116 + @ApiModelProperty(value="出库站台")
  117 + private String stationCode;
  118 +
  119 +
  120 + /**
113 121 * 波次号
114 122 */
115 123 @TableField(value = "waveId")
... ... @@ -309,4 +317,6 @@ public class TaskHeader implements Serializable {
309 317 @TableField(value = "weight")
310 318 private String weight;
311 319 private static final long serialVersionUID = 1L;
  320 +
  321 +
312 322 }
313 323 \ No newline at end of file
... ...
src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
... ... @@ -444,8 +444,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
444 444 if(task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_EMPTYRECEIPT)){
445 445 if(StringUtils.isEmpty(task.getToLocation())){
446 446 //自动分配库位
447   - AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 );
448   - task.setToLocation((String)ajaxResult.getData());
  447 + // AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 );
  448 + // task.setToLocation((String)ajaxResult.getData());
449 449 }
450 450 }
451 451 //如果没有库位不能完成
... ...
src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java
... ... @@ -91,24 +91,22 @@ public class WorkTaskService {
91 91 if (receiptPreferences.isEmpty()) {
92 92 return AjaxResult.error("入库首选项不存在");
93 93 }
94   - if (StringUtils.isEmpty(receiptPreferences.get(0).getEmptyLocRule())) {
95   - return AjaxResult.error("入库首选项为绑定空库位规则,目标库位不允许为空");
96   - }
97   -
98   - LambdaQueryWrapper<FilterConfigDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
99   - lambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode())
100   - .eq(FilterConfigDetail::getCode, receiptPreferences.get(0).getEmptyLocRule());
101   - FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(lambdaQueryWrapper);
102   - if (StringUtils.isNull(filterConfigDetail)) {
103   - return AjaxResult.error("首选项绑定的空库位规则不存在");
104   - }
105   - QueryWrapper<Location> queryWrapper = new QueryWrapper<>();
106   - queryWrapper.eq("1",1).last(filterConfigDetail.getStatement());
107   - Location location = locationService.getOne(queryWrapper);
108   - if (StringUtils.isNull(location)) {
109   - return AjaxResult.error("没有库位可分配");
  94 + if (StringUtils.isNotEmpty(receiptPreferences.get(0).getEmptyLocRule())) {
  95 + LambdaQueryWrapper<FilterConfigDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
  96 + lambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode())
  97 + .eq(FilterConfigDetail::getCode, receiptPreferences.get(0).getEmptyLocRule());
  98 + FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(lambdaQueryWrapper);
  99 + if (StringUtils.isNull(filterConfigDetail)) {
  100 + return AjaxResult.error("首选项绑定的空库位规则不存在");
  101 + }
  102 + QueryWrapper<Location> queryWrapper = new QueryWrapper<>();
  103 + queryWrapper.eq("1",1).last(filterConfigDetail.getStatement());
  104 + Location location = locationService.getOne(queryWrapper);
  105 + if (StringUtils.isNull(location)) {
  106 + return AjaxResult.error("没有库位可分配");
  107 + }
  108 + destinationLocation = location.getCode();
110 109 }
111   - destinationLocation = location.getCode();
112 110 }
113 111  
114 112 //判断托盘是否已经存在任务
... ... @@ -430,7 +428,7 @@ public class WorkTaskService {
430 428 * @param sourceLocation 库位
431 429 * @return
432 430 */
433   - @Transactional(rollbackFor = Exception.class)
  431 + @Transactional
434 432 public AjaxResult createEmptyCheckOut(String containerCode, String sourceLocation) {
435 433 /* 容器编码*/
436 434 String conCode = null;
... ...
src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html
... ... @@ -66,10 +66,6 @@
66 66 shiro:hasPermission="inventory:inventoryHeader:emptyIn">
67 67 <i class="fa fa-level-down"></i> 空托入库
68 68 </a>
69   - <a class="btn btn-outline btn-default btn-rounded" onclick="emptyCheckOut()"
70   - shiro:hasPermission="inventory:inventoryHeader:emptyCheckOut">
71   - <i class="fa fa fa-eye"></i> 空托出库查看
72   - </a>
73 69 <a class="btn btn-outline btn-info btn-rounded" onclick="emptyOut()"
74 70 shiro:hasPermission="inventory:inventoryHeader:emptyOut">
75 71 <i class="fa fa-level-up"></i> 空托出库
... ...