diff --git a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java index 9ddae5b..144a368 100644 --- a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java +++ b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java @@ -146,55 +146,76 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService //去重 receiptContainerDetailList = receiptContainerDetailList.stream().distinct().collect(Collectors.toList()); - /* 循环入库组盘明细,重新分配库位*/ - for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) { - ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId()); - - String locatingRule = this.taskPositioning(receiptContainerDetail); - - LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery(); - filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule) - .eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); - FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda); - String[] locatingRules = filterConfigDetail.getStatement().split("cut"); - - //根据定位规则查询库位编码 - LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); - locationLambda.last(locatingRules[0]); - locationLambda.eq(Location::getRoadway, wcsTask.getDestination()); - List<Location> locationList = locationService.list(locationLambda); - if(locationList == null || locationList.size() == 0) { - locationLambda.last(locatingRules[1]); - locationList = locationService.list(locationLambda); - }; - locationCode = filter(locationList, locationTypeList, wcsTask.getDestination()); - if (StringUtils.isEmpty(locationCode)){ - throw new ServiceException("没有库位可分配"); - } - - if (StringUtils.isNotEmpty(locationCode)){ - locationService.updateStatus(locationCode, "lock"); - if (StringUtils.isNotEmpty(taskHeader.getToLocation()) && !locationCode.equals(taskHeader.getToLocation())){ - locationService.updateStatus(taskHeader.getToLocation(), "empty"); + if(receiptContainerDetailList != null && receiptContainerDetailList.size() > 0) { + /* 循环入库组盘明细,重新分配库位*/ + for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) { + String locatingRule = null; + ReceiptContainerHeader receiptContainerHeader= null; + if(receiptContainerDetail != null) { + receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId()); + locatingRule = this.taskPositioning(receiptContainerDetail); + } + if (StringUtils.isEmpty(locatingRule)){ + //物料类别中定位规则为空时,查询入库首选项 + LambdaQueryWrapper<ConfigValue> configValueLambda = Wrappers.lambdaQuery(); + configValueLambda.eq(ConfigValue::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(ConfigValue::getModuleType, "receipt") + .eq(ConfigValue::getRecordType, "入库首选项"); + ConfigValue configValue = configValueService.getOne(configValueLambda); + LambdaQueryWrapper<ReceiptPreference> receiptPreferenceLambda = Wrappers.lambdaQuery(); + receiptPreferenceLambda.eq(ReceiptPreference::getCode, configValue.getValue()) + .eq(ReceiptPreference::getWarehouseCode, ShiroUtils.getWarehouseCode()); + ReceiptPreference receiptPreference = receiptPreferenceService.getOne(receiptPreferenceLambda); + locatingRule = receiptPreferenceService.getOne(receiptPreferenceLambda).getLocationRule(); + } + LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery(); + filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule) + .eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); + FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda); + String[] locatingRules = filterConfigDetail.getStatement().split("cut"); + + //根据定位规则查询库位编码 + LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); + locationLambda.last(locatingRules[0]); + locationLambda.eq(Location::getRoadway, wcsTask.getDestination()); + List<Location> locationList = locationService.list(locationLambda); + if (locationList == null || locationList.size() == 0) { + locationLambda.last(locatingRules[1]); + locationList = locationService.list(locationLambda); + } + ; + locationCode = filter(locationList, locationTypeList, wcsTask.getDestination()); + if (StringUtils.isEmpty(locationCode)) { + throw new ServiceException("没有库位可分配"); } - } else { - throw new ServiceException("定位失败,请检查定位规则是否正确"); - } - //更新库位编码到组盘头表 - receiptContainerHeader.setToLocation(locationCode); - if (!receiptContainerHeaderService.updateById(receiptContainerHeader)){ - throw new ServiceException("更新库位失败"); - } + if (StringUtils.isNotEmpty(locationCode)) { + locationService.updateStatus(locationCode, "lock"); + if (StringUtils.isNotEmpty(taskHeader.getToLocation()) && !locationCode.equals(taskHeader.getToLocation())) { + locationService.updateStatus(taskHeader.getToLocation(), "empty"); + } + } else { + throw new ServiceException("定位失败,请检查定位规则是否正确"); + } + if(receiptContainerDetail != null) { + //更新库位编码到组盘头表 + receiptContainerHeader.setToLocation(locationCode); + if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { + throw new ServiceException("更新库位失败"); + } - //把库位编码赋到该入库组盘头表下的所有明细 - LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery(); - lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId()) - .eq(ReceiptContainerDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); - List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda); - for (ReceiptContainerDetail receiptContainerDetail2: receiptContainerDetails) { - receiptContainerDetail2.setLocationCode(locationCode); - if (!receiptContainerDetailService.updateById(receiptContainerDetail2)){throw new ServiceException("更新库位编码到入库组盘明细");} + //把库位编码赋到该入库组盘头表下的所有明细 + LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery(); + lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId()) + .eq(ReceiptContainerDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); + List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda); + for (ReceiptContainerDetail receiptContainerDetail2 : receiptContainerDetails) { + receiptContainerDetail2.setLocationCode(locationCode); + if (!receiptContainerDetailService.updateById(receiptContainerDetail2)) { + throw new ServiceException("更新库位编码到入库组盘明细"); + } + } + } } } diff --git a/src/main/java/com/huaheng/pc/config/locationType/controller/LocationTypeController.java b/src/main/java/com/huaheng/pc/config/locationType/controller/LocationTypeController.java index d3e5d89..e725543 100644 --- a/src/main/java/com/huaheng/pc/config/locationType/controller/LocationTypeController.java +++ b/src/main/java/com/huaheng/pc/config/locationType/controller/LocationTypeController.java @@ -104,15 +104,15 @@ public class LocationTypeController extends BaseController if(StringUtils.isEmpty(locationType.getCode())){ return AjaxResult.error("库位类型为空"); } - if(StringUtils.isEmpty(locationType.getZoneCode())){ - return AjaxResult.error("库位类型对应的区域为空"); - } - //查找location,是否存在 - - if(!zoneService.exists(locationType.getZoneCode(),ShiroUtils.getWarehouseCode())) - { - return AjaxResult.error("库位类型对应的区域:"+locationType.getZoneCode()+" 不在系统管制范围,请核对"); - } +// if(StringUtils.isEmpty(locationType.getZoneCode())){ +// return AjaxResult.error("库位类型对应的区域为空"); +// } +// //查找location,是否存在 +// +// if(!zoneService.exists(locationType.getZoneCode(),ShiroUtils.getWarehouseCode())) +// { +// return AjaxResult.error("库位类型对应的区域:"+locationType.getZoneCode()+" 不在系统管制范围,请核对"); +// } locationType.setWarehouseCode(ShiroUtils.getWarehouseCode()); locationType.setCreatedBy(ShiroUtils.getLoginName()); diff --git a/src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java b/src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java index 6eb5f2d..e60f314 100644 --- a/src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java +++ b/src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java @@ -30,11 +30,6 @@ public class LocationType implements Serializable { @TableField(value = "warehouseCode") private String warehouseCode; /** - * 区域编码 - */ - @TableField(value = "zoneCode") - private String zoneCode; - /** * 描述 */ @TableField(value = "name") diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java b/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java index bc53ce2..e444a29 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java @@ -110,6 +110,14 @@ public class TaskHeader implements Serializable { private Integer status; /** + * 出库站台 + */ + @TableField(value = "stationCode") + @ApiModelProperty(value="出库站台") + private String stationCode; + + + /** * 波次号 */ @TableField(value = "waveId") @@ -309,4 +317,6 @@ public class TaskHeader implements Serializable { @TableField(value = "weight") private String weight; private static final long serialVersionUID = 1L; + + } \ No newline at end of file diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java index 6161264..538d699 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java @@ -444,8 +444,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if(task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_EMPTYRECEIPT)){ if(StringUtils.isEmpty(task.getToLocation())){ //自动分配库位 - AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 ); - task.setToLocation((String)ajaxResult.getData()); + // AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 ); + // task.setToLocation((String)ajaxResult.getData()); } } //如果没有库位不能完成 diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java index f6fd9df..d051c75 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java @@ -91,24 +91,22 @@ public class WorkTaskService { if (receiptPreferences.isEmpty()) { return AjaxResult.error("入库首选项不存在"); } - if (StringUtils.isEmpty(receiptPreferences.get(0).getEmptyLocRule())) { - return AjaxResult.error("入库首选项为绑定空库位规则,目标库位不允许为空"); - } - - LambdaQueryWrapper<FilterConfigDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); - lambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) - .eq(FilterConfigDetail::getCode, receiptPreferences.get(0).getEmptyLocRule()); - FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(lambdaQueryWrapper); - if (StringUtils.isNull(filterConfigDetail)) { - return AjaxResult.error("首选项绑定的空库位规则不存在"); - } - QueryWrapper<Location> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("1",1).last(filterConfigDetail.getStatement()); - Location location = locationService.getOne(queryWrapper); - if (StringUtils.isNull(location)) { - return AjaxResult.error("没有库位可分配"); + if (StringUtils.isNotEmpty(receiptPreferences.get(0).getEmptyLocRule())) { + LambdaQueryWrapper<FilterConfigDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(FilterConfigDetail::getCode, receiptPreferences.get(0).getEmptyLocRule()); + FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(lambdaQueryWrapper); + if (StringUtils.isNull(filterConfigDetail)) { + return AjaxResult.error("首选项绑定的空库位规则不存在"); + } + QueryWrapper<Location> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("1",1).last(filterConfigDetail.getStatement()); + Location location = locationService.getOne(queryWrapper); + if (StringUtils.isNull(location)) { + return AjaxResult.error("没有库位可分配"); + } + destinationLocation = location.getCode(); } - destinationLocation = location.getCode(); } //判断托盘是否已经存在任务 @@ -430,7 +428,7 @@ public class WorkTaskService { * @param sourceLocation 库位 * @return */ - @Transactional(rollbackFor = Exception.class) + @Transactional public AjaxResult createEmptyCheckOut(String containerCode, String sourceLocation) { /* 容器编码*/ String conCode = null; diff --git a/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html b/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html index 86c7b1c..08779fd 100644 --- a/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html +++ b/src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html @@ -66,10 +66,6 @@ shiro:hasPermission="inventory:inventoryHeader:emptyIn"> <i class="fa fa-level-down"></i> 空托入库 </a> - <a class="btn btn-outline btn-default btn-rounded" onclick="emptyCheckOut()" - shiro:hasPermission="inventory:inventoryHeader:emptyCheckOut"> - <i class="fa fa fa-eye"></i> 空托出库查看 - </a> <a class="btn btn-outline btn-info btn-rounded" onclick="emptyOut()" shiro:hasPermission="inventory:inventoryHeader:emptyOut"> <i class="fa fa-level-up"></i> 空托出库