diff --git a/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java index d4225bd..d6c7488 100644 --- a/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java +++ b/src/main/java/com/huaheng/api/wcs/service/taskAssignService/TaskAssignServiceImpl.java @@ -185,6 +185,9 @@ public class TaskAssignServiceImpl implements TaskAssignService { //获取一个最近的空闲库位(优先找外侧) destinationLocation = locationService.getEmptyLocation(insideLocation, isSelfCreated); } + if (destinationLocation == null) { + return AjaxResult.error("移库获取一个目标库位为空"); + } AjaxResult ajaxResult = transferTaskService.createTransferTask(insideLocation.getCode(), destinationLocation.getCode(), warehouseCode); if (ajaxResult.getCode() == 400) { return AjaxResult.error(ajaxResult.getMsg()); diff --git a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java index adb6aa1..af3f280 100644 --- a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java +++ b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java @@ -237,8 +237,9 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @Override @Transactional(rollbackFor = Exception.class) public String doubleRk(String roadWay, int high, Integer frequencyLocation, Integer emptyContainerTask, boolean isFlammable, String taskNo, boolean bypass) { - boolean isSecondFactory = isSecondFactory();//是否是二厂一期项目 + //boolean isSecondFactory = isSecondFactory();//是否是二厂项目 int reserveNumber = 0; + //二厂,分拣任务回库的时候,也要判断预留库位 if (!bypass) { reserveNumber = getReserveNumber(roadWay); } @@ -263,12 +264,13 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, NO_TSELFCREATED) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) + .eq(Location::getHigh, high) .last(" limit 20"); - if (isSecondFactory) { - wrapper.ge(Location::getHigh, high); - } else { - wrapper.eq(Location::getHigh, high); - } + //if (isSecondFactory) { + // wrapper.ge(Location::getHigh, high); + //} else { + // wrapper.eq(Location::getHigh, high); + //} List<Location> totalLocationList = locationService.list(wrapper); if (totalLocationList.size() <= reserveNumber) { return "可能是库位不够用了,请检查预留库位数"; @@ -280,17 +282,18 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getStatus, STATUS_LOCATION_EMPTY) .eq(Location::getRowFlag, ROW_OUT)//外侧 .eq(Location::getContainerCode, "") + .eq(Location::getHigh, high) .eq(Location::getSelfCreated, NO_TSELFCREATED) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) .orderByAsc(Location::getHigh) .orderByAsc(Location::getILayer) .orderByAsc(Location::getId) .last(" limit 20"); - if (isSecondFactory) { - locationLambda.ge(Location::getHigh, high); - } else { - locationLambda.eq(Location::getHigh, high); - } + //if (isSecondFactory) { + // locationLambda.ge(Location::getHigh, high); + //} else { + // locationLambda.eq(Location::getHigh, high); + //} List<Location> locationList = locationService.list(locationLambda); List<Location> removeLocaationList = new ArrayList<>(); @@ -315,15 +318,16 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, NO_TSELFCREATED) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) + .eq(Location::getHigh, high) .orderByAsc(Location::getHigh) .orderByAsc(Location::getILayer) .orderByAsc(Location::getId) .last(" limit 20"); - if (isSecondFactory) { - locationLambda2.ge(Location::getHigh, high); - } else { - locationLambda2.eq(Location::getHigh, high); - } + //if (isSecondFactory) { + // locationLambda2.ge(Location::getHigh, high); + //} else { + // locationLambda2.eq(Location::getHigh, high); + //} locationList = locationService.list(locationLambda2); removeLocaationList = new ArrayList<>(); @@ -350,7 +354,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService //自建单据 @Override public String isSelfCreated(String roadWay, int high, Integer frequencyLocation, boolean bypass) { - boolean isSecondFactory = isSecondFactory(); + //boolean isSecondFactory = isSecondFactory(); int reserveNumber = 0; if (!bypass) { reserveNumber = getReserveNumber(roadWay); @@ -363,12 +367,13 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, SELFCREATED) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) + .eq(Location::getHigh, high) .last(" limit 20"); - if (isSecondFactory) { - wrapper.ge(Location::getHigh, high); - } else { - wrapper.eq(Location::getHigh, high); - } + //if (isSecondFactory) { + // wrapper.ge(Location::getHigh, high); + //} else { + // wrapper.eq(Location::getHigh, high); + //} List<Location> totalLocationList = locationService.list(wrapper); //双伸位预留库位数不够了就排除掉该巷道 if (totalLocationList.size() <= reserveNumber) { @@ -382,17 +387,18 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getRowFlag, ROW_OUT)//外侧 .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, SELFCREATED) + .eq(Location::getHigh, high) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) .orderByAsc(Location::getHigh) .orderByAsc(Location::getILayer) .orderByAsc(Location::getId) .last(" limit 20"); - if (isSecondFactory) { - locationLambda.ge(Location::getHigh, high); - } else { - locationLambda.eq(Location::getHigh, high); - } + //if (isSecondFactory) { + // locationLambda.ge(Location::getHigh, high); + //} else { + // locationLambda.eq(Location::getHigh, high); + //} List<Location> locationList = locationService.list(locationLambda); List<Location> removeLocaationList = new ArrayList<>(); if (locationList != null && !locationList.isEmpty()) { @@ -417,15 +423,16 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, SELFCREATED) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) + .eq(Location::getHigh, high) .orderByAsc(Location::getHigh) .orderByAsc(Location::getILayer) .orderByAsc(Location::getId) .last(" limit 20"); - if (isSecondFactory) { - locationLambda2.ge(Location::getHigh, high); - } else { - locationLambda2.eq(Location::getHigh, high); - } + //if (isSecondFactory) { + // locationLambda2.ge(Location::getHigh, high); + //} else { + // locationLambda2.eq(Location::getHigh, high); + //} locationList = locationService.list(locationLambda2); removeLocaationList = new ArrayList<>(); if (locationList != null && !locationList.isEmpty()) { @@ -459,7 +466,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @Override public String isFlammable(String roadWay, int high, Integer frequencyLocation, String taskNo, boolean bypass) { int flammableLayer = 3; - boolean isSecondFactory = isSecondFactory(); + //boolean isSecondFactory = isSecondFactory(); int reserveNumber = 0; if (!bypass) { reserveNumber = getReserveNumber(roadWay); @@ -471,14 +478,15 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getStatus, STATUS_LOCATION_EMPTY) .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, NO_TSELFCREATED) + .eq(Location::getHigh, high) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) .last(" limit 20"); - if (isSecondFactory) { - wrapper.ge(Location::getHigh, high); - } else { - wrapper.eq(Location::getHigh, high); - } + //if (isSecondFactory) { + // wrapper.ge(Location::getHigh, high); + //} else { + // wrapper.eq(Location::getHigh, high); + //} List<Location> totalLocationList = locationService.list(wrapper); if (totalLocationList.size() <= reserveNumber) { return "可能是库位不够用了,请检查预留库位数"; @@ -491,14 +499,15 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getRowFlag, ROW_OUT)//外侧 .eq(Location::getContainerCode, "") .eq(Location::getSelfCreated, NO_TSELFCREATED) + .eq(Location::getHigh, high) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) .last("ORDER BY (CASE WHEN iLayer > " + flammableLayer + " THEN iLayer ELSE iLayer + 20 END) ASC LIMIT 20"); - if (isSecondFactory) { - locationLambda.ge(Location::getHigh, high); - } else { - locationLambda.eq(Location::getHigh, high); - } + //if (isSecondFactory) { + // locationLambda.ge(Location::getHigh, high); + //} else { + // locationLambda.eq(Location::getHigh, high); + //} List<Location> locationList = locationService.list(locationLambda); List<Location> removeLocaationList = new ArrayList<>(); @@ -521,14 +530,15 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getStatus, STATUS_LOCATION_EMPTY) .eq(Location::getRowFlag, ROW_IN) .eq(Location::getContainerCode, "") + .eq(Location::getHigh, high) .eq(Location::getSelfCreated, NO_TSELFCREATED) .eq(Location::getOnlyEmptyContainer, NO_EMPTY_CONTAINER_LOCATION) .last("ORDER BY (CASE WHEN iLayer > " + flammableLayer + " THEN iLayer ELSE iLayer + 20 END) ASC LIMIT 20"); - if (isSecondFactory) { - locationLambda2.ge(Location::getHigh, high); - } else { - locationLambda2.eq(Location::getHigh, high); - } + //if (isSecondFactory) { + // locationLambda2.ge(Location::getHigh, high); + //} else { + // locationLambda2.eq(Location::getHigh, high); + //} locationList = locationService.list(locationLambda2); removeLocaationList = new ArrayList<>(); if (locationList != null && !locationList.isEmpty()) { 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 be72723..27be9d9 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 @@ -234,7 +234,7 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService if (StringUtils.isNotEmpty(taskHeader.getToLocation()) && !locationCode.equals(taskHeader.getToLocation())) { int updateCount2 = locationService.updateStatusNew(taskHeader.getToLocation(), warehouseCode, QuantityConstant.STATUS_LOCATION_EMPTY, QuantityConstant.STATUS_LOCATION_LOCK); if (updateCount2 != 1) { - throw new ServiceException("重复分配库位时,解锁库位失败!"); + throw new ServiceException("重复分配库位时,解锁库位失败!" + taskHeader.getToLocation()); } //解除右侧库位禁用状态和对应4个库位标记 locationService.unbanRightLocationAndUnmark(container.getContainerType(), taskHeader.getToLocation()); @@ -273,7 +273,9 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService //获取一个最近的空闲库位(优先找外侧) destinationLocation = locationService.getEmptyLocation(insideLocation, isSelfCreated); } - + if (destinationLocation == null) { + throw new ServiceException("创建移库任务失败,目标库位无法分配,可能是库位已经全满了"); + } //创建移库任务 AjaxResult ajaxResult = transferTaskService.createTransferTask(insideLocation.getCode(), destinationLocation.getCode(), warehouseCode); preTaskNo = (Integer) ajaxResult.getData(); diff --git a/src/main/java/com/huaheng/framework/config/ShiroConfig.java b/src/main/java/com/huaheng/framework/config/ShiroConfig.java index 707ef02..7e859b7 100644 --- a/src/main/java/com/huaheng/framework/config/ShiroConfig.java +++ b/src/main/java/com/huaheng/framework/config/ShiroConfig.java @@ -300,6 +300,7 @@ public class ShiroConfig { //filterChainDefinitionMap.put("/receipt/receiving/saveBatch", "anon"); //filterChainDefinitionMap.put("/config/zone/getAllFlatLocation", "anon"); //filterChainDefinitionMap.put("/mobile/getModules2", "anon"); + //filterChainDefinitionMap.put("/inventory/inventoryHeader/listEmptyContainer", "anon"); // 系统权限列表 diff --git a/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java b/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java index 0e427be..29bce52 100644 --- a/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java +++ b/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java @@ -32,8 +32,11 @@ import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService; import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction; import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService; import com.huaheng.pc.report.excelReport.mapper.ExcelReportMapper; +import com.huaheng.pc.task.taskDetail.domain.TaskDetail; +import com.huaheng.pc.task.taskDetail.service.TaskDetailService; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; +import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl; import com.huaheng.pc.task.taskHeader.service.TransferTaskService; import com.huaheng.pc.task.taskHeader.service.WorkTaskService; import io.swagger.annotations.Api; @@ -62,7 +65,10 @@ import java.util.stream.Collectors; @RequestMapping("/mobile/inventory") @Api(tags = {"手机立体库库存相关"}, value = "手机立体库库存相关MobileInventoryController") public class MobileInventoryController extends BaseController { - + @Resource + private TaskDetailService taskDetailService; + @Resource + private TaskHeaderService taskHeaderService; @Resource private InventoryHeaderService inventoryService; @Resource @@ -89,6 +95,8 @@ public class MobileInventoryController extends BaseController { private CycleCountDetailChildService cycleCountDetailChildService; @Resource private CycleCountHeaderMapper cycleCountHeaderMapper; + @Autowired + private TaskHeaderServiceImpl taskHeaderServiceImpl; @PostMapping("/getInventoryInfo") //@ApiOperation("移动端获得库存详情") @@ -172,6 +180,7 @@ public class MobileInventoryController extends BaseController { @Autowired private RedisTemplate<String, String> redisTemplate; + @ApiLogger(apiName = "PDA完成平库任务", from = "PDA") @PostMapping("/completeTaskListByWMS") @ResponseBody public AjaxResult completeTaskListByWMS(@RequestBody List<TaskIds> taskDetails) { @@ -180,18 +189,23 @@ public class MobileInventoryController extends BaseController { List<TaskHeader> tasks = taskService.getTasksByIds(taskIds); - // 筛选出未完成的任务 - List<Integer> pendingTaskIds = tasks.stream() + // 筛选出未完成的任务的ID + Integer[] pendingTaskIds = tasks.stream() .filter(task -> task.getStatus() != QuantityConstant.TASK_STATUS_COMPLETED) .map(TaskHeader::getId) - .collect(Collectors.toList()); - + .distinct() // 确保ID是唯一的 + .toArray(Integer[]::new); // 如果没有未完成的任务,直接返回 - if (pendingTaskIds.isEmpty()) { + if (pendingTaskIds.length == 0) { return AjaxResult.success("任务已完成"); } - return taskService.completeTaskByWMS(taskIds, null); + + for (Integer taskId : pendingTaskIds) { + taskService.completeTaskByWMS(new Integer[]{taskId}, null); + } + return AjaxResult.success("任务完成"); + } diff --git a/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java b/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java index c2b079b..0b4019b 100644 --- a/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java +++ b/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java @@ -25,6 +25,8 @@ import com.huaheng.pc.config.receiptType.domain.ReceiptType; import com.huaheng.pc.config.receiptType.service.ReceiptTypeService; import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader; import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService; +import com.huaheng.pc.monitor.apilog.domain.ApiLog; +import com.huaheng.pc.monitor.apilog.service.IApiLogService; import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService; import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail; import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader; @@ -99,6 +101,8 @@ public class MobileBatchReceiptController { @Resource private InventoryHeaderService inventoryHeaderService; + @Resource + private IApiLogService apiLogService; @PostMapping("/scanContainer") @ApiOperation("移动端入库扫描容器") @@ -537,9 +541,9 @@ public class MobileBatchReceiptController { @PostMapping("/callBox") - @ApiOperation("移动端呼叫料盒") - @ApiLogger(apiName = "PDA呼叫料盒", from = "WCS") - @Log(title = "移动端呼叫料盒", action = BusinessType.OTHER) + @ApiOperation("PDA呼叫料盒") + @ApiLogger(apiName = "PDA呼叫料盒", from = "PDA") + @Log(title = "PDA呼叫料盒", action = BusinessType.OTHER) @Transactional(rollbackFor = Exception.class) public AjaxResult callBox(@RequestBody @ApiParam(value = "物料号") Map<String, String> param) { String containerCode = param.get("containerCode"); @@ -577,12 +581,16 @@ public class MobileBatchReceiptController { } } - Location location = locationService.getOne(new LambdaQueryWrapper<Location>().eq(Location::getCode, destinationLocation)); - Container container = containerService.getOne(new LambdaQueryWrapper<Container>().eq(Container::getCode, containerCode).eq(Container::getWarehouseCode, "CS0001").last("limit 1")); - if (container == null) { + List<Container> list = containerService.list(new LambdaQueryWrapper<Container>().eq(Container::getCode, containerCode)); + if (list.isEmpty()) { return AjaxResult.error("容器不存在"); } + if (list.size() > 1) { + return AjaxResult.error("容器大于1"); + } + Container container = list.get(0); + if (location == null) { return AjaxResult.error("库位不存在"); } @@ -639,10 +647,10 @@ public class MobileBatchReceiptController { TaskHeader taskHeader = new TaskHeader(); taskHeader.setWarehouseCode(location.getWarehouseCode()); taskHeader.setCompanyCode(companyCode);//货主 - if (type == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) { + if (type == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) {//补充入库 taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT); taskHeader.setTaskType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT); - } else if (type == QuantityConstant.TASK_TYPE_WHOLERECEIPT) { + } else if (type == QuantityConstant.TASK_TYPE_WHOLERECEIPT) {//整盘入库 taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT); taskHeader.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT); } else { @@ -669,9 +677,20 @@ public class MobileBatchReceiptController { throw new ServiceException("补充入库主表生成失败!"); } + addApiLog("PDA呼叫料盒", taskHeader.getContainerCode() + "/" + taskHeader.getFromLocation()); return AjaxResult.success(taskHeader.getId()); } + public void addApiLog(String name, String requestBody) { + ApiLog apiLog = new ApiLog(); + apiLog.setApiName(name); + apiLog.setRequestBody(requestBody); + apiLog.setRequestTime(new Date()); + apiLog.setRequestFrom("MOM"); + apiLog.setResponseBy("WMS"); + apiLog.setResponseBody("成功"); + apiLogService.save(apiLog); + } @PostMapping("/searchReceipt") @ApiOperation("移动端查询入库单") diff --git a/src/main/java/com/huaheng/pc/config/container/service/ContainerServiceImpl.java b/src/main/java/com/huaheng/pc/config/container/service/ContainerServiceImpl.java index f1d0d78..3f61c7f 100644 --- a/src/main/java/com/huaheng/pc/config/container/service/ContainerServiceImpl.java +++ b/src/main/java/com/huaheng/pc/config/container/service/ContainerServiceImpl.java @@ -139,9 +139,7 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container .eq(Location::getZoneCode, "L") .isNotNull(Location::getContainerCode) .notInSql(Location::getContainerCode, "SELECT h.containerCode FROM task_header h WHERE h.status < 100") - .notInSql(Location::getCode, "SELECT b.locationCode FROM inventory_detail b") - .notInSql(Location::getCode, "SELECT r.locationCode FROM receipt_container_detail r WHERE r.status != 20") - .notInSql(Location::getCode, "SELECT s.locationCode FROM shipment_container_detail s WHERE s.status != 20"); + .notInSql(Location::getCode, "SELECT b.locationCode FROM inventory_detail b"); if (zoneCode != null && !zoneCode.isEmpty()) { queryWrapper.eq(Location::getZoneCode, zoneCode); diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java index e91d909..12b424d 100644 --- a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java +++ b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java @@ -42,6 +42,7 @@ import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Controller; @@ -59,6 +60,7 @@ import java.util.stream.Collectors; /** * 库存控制层 */ +@Slf4j @Controller @RequestMapping("/inventory/inventoryHeader") public class InventoryHeaderController extends BaseController { @@ -416,6 +418,7 @@ public class InventoryHeaderController extends BaseController { */ @PostMapping("/listEmptyContainer") @ResponseBody + @ApiLogger(apiName = "PDA呼叫空托盘出库", from = "PDA") public TableDataInfo listEmptyContainer(String zoneCode, String containerCode, String locationCode) { containerCode = containerCode == null ? "" : containerCode.trim(); locationCode = locationCode == null ? "" : locationCode.trim(); diff --git a/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java b/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java index 0010c86..3ed6a08 100644 --- a/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java +++ b/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java @@ -3,8 +3,10 @@ package com.huaheng.pc.shipment.shippingCombination.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.utils.StringUtils; +import com.huaheng.framework.web.service.ConfigService; import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail; import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService; import com.huaheng.pc.config.cinvcType.domain.CinvcType; @@ -59,10 +61,47 @@ public class ShippingCombinationService { MaterialTypeService materialTypeService; @Resource ShipmentHeaderService shipmentHeaderService; - + @Resource + private ConfigService configService; //根据分配规则查找库存 public List<InventoryDetail> getInventorys(ShipmentDetail shipmentDetail, boolean isAuto, boolean isFlatWarehouse, boolean openExhibitionRestrictions) { + //一厂一期物料相同就合并 + String version = configService.getKey(QuantityConstant.PROJECT_VERSION); + if (version.equals("1")) { + return getInventoryVersion1(shipmentDetail, isAuto, isFlatWarehouse, openExhibitionRestrictions); + } else { + return getInventoryVersion2(shipmentDetail, isAuto, isFlatWarehouse, openExhibitionRestrictions); + } + + } + + + //一期 + public List<InventoryDetail> getInventoryVersion1(ShipmentDetail shipmentDetail, boolean isAuto, boolean isFlatWarehouse, boolean openExhibitionRestrictions) { + String materialCode = shipmentDetail.getMaterialCode(); + checkNotEmpty(materialCode, "出库明细没有物料编码"); + String containerCode = shipmentDetail.getContainerCode(); + String receiptCode = shipmentDetail.getReceiptCode(); + ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentDetail.getShipmentId()); + String warehouse = shipmentHeader.getWarehouse(); + + LambdaQueryWrapper<InventoryDetail> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(InventoryDetail::getMaterialCode, materialCode) + .eq(StringUtils.isNotEmpty(warehouse), InventoryDetail::getWarehouse, warehouse)//原仓库 + .eq(StringUtils.isNotEmpty(containerCode), InventoryDetail::getContainerCode, containerCode) //托盘号 + .eq(StringUtils.isNotEmpty(receiptCode), InventoryDetail::getReceiptCode, receiptCode)//入库单号 + .ne(isFlatWarehouse, InventoryDetail::getZoneCode, "L")//如果用平库组盘功能,只能出平库的库存 + .orderByAsc(InventoryDetail::getCreated); // 添加根据创建时间生序排序 + List<InventoryDetail> list = inventoryDetailService.list(wrapper); + if (list.isEmpty()) { + return list; + } + return list; + } + + //二期和二厂 + public List<InventoryDetail> getInventoryVersion2(ShipmentDetail shipmentDetail, boolean isAuto, boolean isFlatWarehouse, boolean openExhibitionRestrictions) { String materialCode = shipmentDetail.getMaterialCode(); checkNotEmpty(materialCode, "出库明细没有物料编码"); @@ -139,7 +178,6 @@ public class ShippingCombinationService { .thenComparing(InventoryDetail::getReceiptCode)); } return list; - } //判断是否是展会物料,仓库是否符合 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 0998d31..9585532 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 @@ -644,6 +644,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Transactional(rollbackFor = Exception.class) public void combineInventory(TaskHeader task) { + + //一期项目,物料编码相同就合并 + String version = configService.getKey(QuantityConstant.PROJECT_VERSION); + boolean isVersionOne = version.equals("1"); + InventoryHeader inventoryHeader = inventoryHeaderService.getOne(new LambdaQueryWrapper<InventoryHeader>() .eq(InventoryHeader::getLocationCode, task.getToLocation()) .eq(InventoryHeader::getContainerCode, task.getContainerCode())); @@ -654,15 +659,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea for (int i = 0; i < inventoryDetailList.size() - 1; i++) { for (int j = inventoryDetailList.size() - 1; j > i; j--) { - InventoryDetail inventoryDetail = inventoryDetailList.get(i); - InventoryDetail inventoryDetail2 = inventoryDetailList.get(j); - if ( - - inventoryDetail.getMaterialCode().equals(inventoryDetail2.getMaterialCode()) - && inventoryDetail.getNoticeCode().equals(inventoryDetail2.getNoticeCode()) - && inventoryDetail.getMaterialColor().equals(inventoryDetail2.getMaterialColor()) - && inventoryDetail.getRemarks().equals(inventoryDetail2.getRemarks()) - && inventoryDetail.getPaintStatus().equals(inventoryDetail2.getPaintStatus())) { + InventoryDetail detail1 = inventoryDetailList.get(i); + InventoryDetail detail2 = inventoryDetailList.get(j); + if (isVersionOne ? detail1.getMaterialCode().equals(detail2.getMaterialCode()) : + detail1.getMaterialCode().equals(detail2.getMaterialCode()) && + detail1.getNoticeCode().equals(detail2.getNoticeCode()) && + detail1.getMaterialColor().equals(detail2.getMaterialColor()) && + detail1.getRemarks().equals(detail2.getRemarks()) && + detail1.getPaintStatus().equals(detail2.getPaintStatus())) { //如果都相同的话,合并库存,