diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/app/AppTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/app/AppTaskController.java index e09d29d3..14c8056b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/app/AppTaskController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/app/AppTaskController.java @@ -567,6 +567,9 @@ public class AppTaskController extends BaseController if (appPmsOrderOutList.stream().map(AppPmsOrderOut::getGoodsId).distinct().count() != appPmsOrderOutList.size()) { return error("出库单明细不能有重复物料编码"); } + if (appPmsOrderOutList.stream().map(AppPmsOrderOut::getListId).distinct().count() > 1) { + return error("手动出库紧支持单个出库单出库"); + } // logger.info("请求出库单明细:{}", appPmsOrderOutList); @@ -590,6 +593,7 @@ public class AppTaskController extends BaseController //根据物料ID查询库存,按照先进先出的原则,按上架时间倒叙查询 AppStock tMiStock = new AppStock(); tMiStock.setGoodsId(appPmsOrderOut.getGoodsId()); + //确定在库中 List appStocks = appStockService.selectStockByGoodsId(tMiStock); @@ -912,6 +916,7 @@ public class AppTaskController extends BaseController appTask.setOrderId(orderId); //库存编号 appTask.setStockId(tMiStock1.getStockId()); + appTask.setCreateTime(new Date()); appTaskService.insertAppTask(appTask); } @@ -1185,15 +1190,29 @@ public class AppTaskController extends BaseController } for(PickCompleteReq request : requests) { // 更新捡货任务数量 - AppTask updatePickNum = new AppTask(); - updatePickNum.setTaskId(request.getTaskId()); - updatePickNum.setOpNum(request.getPickNum()); - updatePickNum.setTaskStatus(6); - updatePickNum.setOpUser(request.getPicker()); - int updateAppTask = appTaskService.updateAppTask(updatePickNum); - if (updateAppTask == 0) { + //根据taskId,查询该条任务 + AppTask task = appTaskService.selectAppTaskByTaskId(request.getTaskId()); + if(task.getOpNum().compareTo(request.getPickNum()) < 0){ + throw new RuntimeException("拣选数量不能大于出库数量"); + } + task.setOpNum(request.getPickNum()); + task.setTaskStatus(6); + task.setOpUser(request.getPicker()); + appTaskService.updateAppTask(task); + //查询出库单 根据orderId和goodsId + AppPmsOrderOut appPmsOrderOut = new AppPmsOrderOut(); + appPmsOrderOut.setGoodsId(task.getGoodsId()); + appPmsOrderOut.setOrderId(task.getOrderId()); + appPmsOrderOut.setOrderStatus(1); + List appPmsOrderOuts = appPmsOrderOutService.selectAppPmsOrderOutList(appPmsOrderOut); + if(CollectionUtils.isEmpty(appPmsOrderOuts)){ return error("数据服务异常,请重试"); } + AppPmsOrderOut appPmsOrderOut1 = appPmsOrderOuts.get(0); + appPmsOrderOut1.setTrNum(appPmsOrderOut1.getTrNum().add(request.getPickNum())); + appPmsOrderOut1.setShelvesNum(BigDecimal.ZERO); + appPmsOrderOut1.setOrderStatus(0); + appPmsOrderOutService.updateAppPmsOrderOut(appPmsOrderOut1); } return success("捡货成功"); } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBack.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBack.java index ae4c2d27..387f1ae9 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBack.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBack.java @@ -7,13 +7,13 @@ import java.util.List; */ public class PmsOutFeedBack { - private List recordList; + private List recordList; - public List getRecordList() { + public List getRecordList() { return recordList; } - public void setRecordList(List recordList) { + public void setRecordList(List recordList) { this.recordList = recordList; } } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBackRecordList.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBackRecord.java similarity index 94% rename from ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBackRecordList.java rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBackRecord.java index 35c13e84..037200d4 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBackRecordList.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/app/PmsOutFeedBackRecord.java @@ -1,6 +1,6 @@ package com.ruoyi.quartz.domain.app; -public class PmsOutFeedBackRecordList { +public class PmsOutFeedBackRecord { private Integer amount; diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/TaskExecutor.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/TaskExecutor.java index b84a67ee..f91ecafa 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/TaskExecutor.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/TaskExecutor.java @@ -3,6 +3,7 @@ package com.ruoyi.quartz.task; import com.alibaba.fastjson2.JSON; import com.ruoyi.app.domain.*; import com.ruoyi.app.mapper.AppLocationMapper; +import com.ruoyi.app.mapper.AppPmsOrderOutMapper; import com.ruoyi.quartz.domain.app.*; import com.ruoyi.app.service.*; import com.ruoyi.common.utils.StringUtils; @@ -13,7 +14,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -51,6 +51,8 @@ public class TaskExecutor { }}; @Autowired private AppLocationMapper appLocationMapper; + @Autowired + private AppPmsOrderOutMapper appPmsOrderOutMapper; /** * 解析wms任务 @@ -335,81 +337,76 @@ public class TaskExecutor { if (appTasks == null || appTasks.isEmpty()) { return; } + PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack(); + List recordList = new ArrayList<>(); for (AppTask task : appTasks) { - if(task.getOpNum().compareTo(task.getStockNum()) >= 0) { - // 整出 - AppStock appStock = new AppStock(); - appStock.setGoodsId(task.getGoodsId()); - appStock.setVehicleId(task.getVehicleId()); - List appStocks = appStockService.selectAppStockList(appStock); - if(appStocks == null) { - return; - } - for (AppStock stock : appStocks) { - int deleteAppStockByStockId = appStockService.deleteAppStockByStockId(stock.getStockId()); - logger.info("删除库存:{}", JSON.toJSONString(stock)); - if(deleteAppStockByStockId > 0) { - AppTask updateRemark = new AppTask(); - updateRemark.setTaskId(task.getTaskId()); - updateRemark.setRemark("出库完成"); - appTaskService.updateAppTask(updateRemark); // 更新备注信息 - AppTaskBak appTaskBak = new AppTaskBak(); - BeanUtils.copyProperties(task, appTaskBak); - logger.info("出库任务数据归档成功。{}", JSON.toJSONString(appTaskBak)); - appTaskBakService.insertAppTaskBak(appTaskBak);// 数据归档 - appTaskService.deleteAppTaskByTaskId(task.getTaskId()); // 删除旧数据 - } - // 调用 pms 接口 - PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack(); - PmsOutFeedBackRecordList recordListItem = new PmsOutFeedBackRecordList(); - recordListItem.setAmount(task.getOpNum().intValue()); - recordListItem.setBusinessOrder(task.getOrderId()); - recordListItem.setMaterialsNo(task.getGoodsId()); - List recordList = new ArrayList<>(); - recordList.add(recordListItem); - pmsOutFeedBack.setRecordList(recordList); - String url = sysConfigService.selectConfigByKey("pms.outComplete"); - if (StringUtils.isEmpty(url)) { - continue; - } - PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class); - logger.info("pms出库反馈请求信息:{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes)); - } - AppStock appStockCheck = new AppStock(); - appStockCheck.setLocationId(task.getOrigin()); - List appStockCheckData = appStockService.selectAppStockList(appStockCheck); - logger.info("剩余库存条目{}",appStockCheckData.size()); - if(appStockCheckData == null) { - return; - } - if(appStockCheckData.isEmpty()) { - // 这个位置没有库存了,直接释放货位 - AppLocation location = new AppLocation(); - location.setLocationId(task.getOrigin()); - location.setLocationStatus(0); - appLocationMapper.updateLocationByLocationId(location); - } - } else { - // 如果小于的话就属于捡货任务 - // 删除库存内的绑定的库位号,释放库位 - AppStock appStock = new AppStock(); - appStock.setLocationId(task.getOrigin()); - List appStocks = appStockService.selectAppStockList(appStock); - if (CollectionUtils.isEmpty(appStocks)) { - continue; - } - int updateNewLocation = appStockService.updateNewLocation(task.getOrigin(), ""); - logger.info("捡选出库清除库存绑定的货位,数据:{},清除结果:{}", JSON.toJSONString(task), updateNewLocation); - AppLocation location = new AppLocation(); - location.setLocationId(task.getOrigin()); - location.setLocationStatus(0); - appLocationMapper.updateLocationByLocationId(location); + + //调用接口,组装数据 + AppPmsOrderOut appPmsOrderOut = new AppPmsOrderOut(); + appPmsOrderOut.setOrderId(task.getOrderId()); + appPmsOrderOut.setGoodsId(task.getGoodsId()); + List appPmsOrderOuts = appPmsOrderOutMapper.selectAppPmsOrderOutList(appPmsOrderOut); + if (CollectionUtils.isEmpty(appPmsOrderOuts)) { + continue; } - return; + AppPmsOrderOut appPmsOrderOut1 = appPmsOrderOuts.get(0); + PmsOutFeedBackRecord recordListItem = new PmsOutFeedBackRecord(); + recordListItem.setAmount(task.getOpNum().intValue()); + recordListItem.setBusinessOrder(appPmsOrderOut1.getListId()); + recordListItem.setMaterialsNo(task.getGoodsId()); + recordList.add(recordListItem); + } + + pmsOutFeedBack.setRecordList(recordList); + String url = sysConfigService.selectConfigByKey("pms.outComplete"); + if (StringUtils.isEmpty(url)) { + throw new RuntimeException("pms.outComplete配置为空"); + } + PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class); + logger.info("pms出库反馈请求信息:{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes)); + + // 归档旧数据 + for (AppTask task : appTasks) { + BigDecimal opNum = task.getOpNum(); + AppTaskBak appTaskBak = new AppTaskBak(); + BeanUtils.copyProperties(task, appTaskBak); + appTaskBakService.insertAppTaskBak(appTaskBak); // 将任务数据归档 + appTaskService.deleteAppTaskByTaskId(task.getTaskId()); // 删除旧数据 + + if (opNum.compareTo(task.getStockNum()) >= 0) { // 需求数量大于库存数量 + int deleteAppStockByStockId = appStockService.deleteAppStockByStockId(task.getStockId()); + logger.info("出库捡选删除库存:{},删除结果:{}", task.getStockId(), deleteAppStockByStockId); + + } else { + // 更新库存剩余数量 + AppStock update = new AppStock(); + update.setStockId(task.getStockId()); + update.setRemainNum(task.getStockNum().subtract(opNum)); + update.setPackingNum(BigDecimal.ZERO); + appStockService.updateAppStock(update); + logger.info("出库捡选更新库存剩余数量:{},更新结果:{}", JSON.toJSONString(update), appStockService.updateAppStock(update)); + } + } + //java8 stream流过滤出appTasks数组中的stockId对应的vehicleId 去重 + List locations = appTasks.stream().map(AppTask::getLocationId).distinct().collect(Collectors.toList()); + List vehicles = appTasks.stream().map(AppTask::getVehicleId).distinct().collect(Collectors.toList()); + //更新库存中中这些vehicleId对应的stock_status为0,并且把locationId置空 + for (String vehicleId : vehicles) { + AppStock appStock = new AppStock(); + appStock.setVehicleId(vehicleId); + appStock.setStockStatus(0); + appStockService.updateSts(appStock); + } + for (String locationId : locations){ + appStockService.updateNewLocation(locationId,""); + //更新库位表状态 + updateLocation(locationId,0); } } - private void completePickOutTask() { + + @Transactional + public void completePickOutTask() { AppTask appTask = new AppTask(); appTask.setTaskStatus(6); appTask.setTaskType(2); @@ -417,69 +414,86 @@ public class TaskExecutor { if (appTasks == null || appTasks.isEmpty()) { return; } + + PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack(); + List recordList = new ArrayList<>(); for (AppTask task : appTasks) { - // 更新库存 - AppStock appStock = new AppStock(); - appStock.setGoodsId(task.getGoodsId()); - appStock.setVehicleId(task.getVehicleId()); - List appStocks = appStockService.selectAppStockList(appStock); - if(appStocks == null) { - return; + + //调用接口,组装数据 + AppPmsOrderOut appPmsOrderOut = new AppPmsOrderOut(); + appPmsOrderOut.setOrderId(task.getOrderId()); + appPmsOrderOut.setGoodsId(task.getGoodsId()); + List appPmsOrderOuts = appPmsOrderOutMapper.selectAppPmsOrderOutList(appPmsOrderOut); + if (CollectionUtils.isEmpty(appPmsOrderOuts)) { + continue; } + AppPmsOrderOut appPmsOrderOut1 = appPmsOrderOuts.get(0); + PmsOutFeedBackRecord recordListItem = new PmsOutFeedBackRecord(); + recordListItem.setAmount(task.getOpNum().intValue()); + recordListItem.setBusinessOrder(appPmsOrderOut1.getListId()); + recordListItem.setMaterialsNo(task.getGoodsId()); + recordList.add(recordListItem); + } + + //根据orderId查询出库单表,获取listid和物料id + //组装数组 + + // 调用 pms 接口 + pmsOutFeedBack.setRecordList(recordList); + String url = sysConfigService.selectConfigByKey("pms.outComplete"); + if (StringUtils.isEmpty(url)) { + throw new RuntimeException("pms.outComplete配置为空"); + } + PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class); + logger.info("pms出库反馈请求信息:{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes)); + + + // 归档旧数据 + for (AppTask task : appTasks) { BigDecimal opNum = task.getOpNum(); - for (AppStock stock : appStocks) { - if(opNum.compareTo(stock.getRemainNum()) >= 0) { // 需求数量大于库存数量 - int deleteAppStockByStockId = appStockService.deleteAppStockByStockId(stock.getStockId()); - logger.info("出库捡选删除库存:{},删除结果:{}", JSON.toJSONString(stock), deleteAppStockByStockId); - // 调用 pms 接口 - PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack(); - PmsOutFeedBackRecordList recordListItem = new PmsOutFeedBackRecordList(); - recordListItem.setAmount(stock.getRemainNum().intValue()); - recordListItem.setBusinessOrder(task.getOrderId()); - recordListItem.setMaterialsNo(task.getGoodsId()); - List recordList = new ArrayList<>(); - recordList.add(recordListItem); - pmsOutFeedBack.setRecordList(recordList); - String url = sysConfigService.selectConfigByKey("pms.outComplete"); - if (StringUtils.isEmpty(url)) { - continue; - } - PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class); - logger.info("pms出库反馈请求信息:{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes)); - opNum = opNum.subtract(stock.getRemainNum()); - } else { - // 更新库存剩余数量 - AppStock update = new AppStock(); - update.setStockId(stock.getStockId()); - update.setRemainNum(stock.getRemainNum().subtract(opNum)); - appStockService.updateAppStock(update); - logger.info("出库捡选更新库存剩余数量:{},更新结果:{}", JSON.toJSONString(update), appStockService.updateAppStock(update)); - // 调用 pms 接口 - PmsOutFeedBack pmsOutFeedBack = new PmsOutFeedBack(); - PmsOutFeedBackRecordList recordListItem = new PmsOutFeedBackRecordList(); - recordListItem.setAmount(stock.getRemainNum().intValue()); - recordListItem.setBusinessOrder(task.getOrderId()); - recordListItem.setMaterialsNo(task.getGoodsId()); - List recordList = new ArrayList<>(); - recordList.add(recordListItem); - pmsOutFeedBack.setRecordList(recordList); - String url = sysConfigService.selectConfigByKey("pms.outComplete"); - if (StringUtils.isEmpty(url)) { - continue; - } - PmsCommonRes pmsCommonRes = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(pmsOutFeedBack)), PmsCommonRes.class); - logger.info("pms出库反馈请求信息:{},结果:{}", JSON.toJSONString(pmsOutFeedBack), JSON.toJSONString(pmsCommonRes)); - } - // 归档旧数据 - AppTaskBak appTaskBak = new AppTaskBak(); - BeanUtils.copyProperties(task, appTaskBak); - appTaskBakService.insertAppTaskBak(appTaskBak); // 将任务数据归档 - appTaskService.deleteAppTaskByTaskId(task.getTaskId()); // 删除旧数据 + AppTaskBak appTaskBak = new AppTaskBak(); + BeanUtils.copyProperties(task, appTaskBak); + appTaskBakService.insertAppTaskBak(appTaskBak); // 将任务数据归档 + appTaskService.deleteAppTaskByTaskId(task.getTaskId()); // 删除旧数据 + + if (opNum.compareTo(task.getStockNum()) >= 0) { // 需求数量大于库存数量 + int deleteAppStockByStockId = appStockService.deleteAppStockByStockId(task.getStockId()); + logger.info("出库捡选删除库存:{},删除结果:{}", task.getStockId(), deleteAppStockByStockId); + + } else { + // 更新库存剩余数量 + AppStock update = new AppStock(); + update.setStockId(task.getStockId()); + update.setRemainNum(task.getStockNum().subtract(opNum)); + update.setPackingNum(BigDecimal.ZERO); + appStockService.updateAppStock(update); + logger.info("出库捡选更新库存剩余数量:{},更新结果:{}", JSON.toJSONString(update), appStockService.updateAppStock(update)); } } + //java8 stream流过滤出appTasks数组中的stockId对应的vehicleId 去重 + List locations = appTasks.stream().map(AppTask::getLocationId).distinct().collect(Collectors.toList()); + List vehicles = appTasks.stream().map(AppTask::getVehicleId).distinct().collect(Collectors.toList()); + //更新库存中中这些vehicleId对应的stock_status为0,并且把locationId置空 + for (String vehicleId : vehicles) { + AppStock appStock = new AppStock(); + appStock.setVehicleId(vehicleId); + appStock.setStockStatus(0); + appStockService.updateSts(appStock); + } + for (String locationId : locations){ + appStockService.updateNewLocation(locationId,""); + //更新库位表状态 + updateLocation(locationId,0); + } + } - + private void updateLocation(String location,Integer status) { + AppLocation appLocation = new AppLocation(); + appLocation.setLocationId(location); + appLocation.setLocationStatus(status); + appLocationMapper.updateLocationByLocationId(appLocation); + } /**