代码更新:
1. 增加盘点功能 2. 修改呼叫料箱逻辑:少少多 3. 间接物料
This commit is contained in:
parent
7d681334d4
commit
b7e40c73ef
|
|
@ -165,6 +165,9 @@ public class TaskController {
|
||||||
private final IWorkService workService;
|
private final IWorkService workService;
|
||||||
private final WorkFlowLastService workFlowLastService;// 服务
|
private final WorkFlowLastService workFlowLastService;// 服务
|
||||||
private final StandStackerTaskService standStackerTaskService;// 特殊服务
|
private final StandStackerTaskService standStackerTaskService;// 特殊服务
|
||||||
|
private final InventoryListService inventoryService;
|
||||||
|
private final WorkSummaryService workSummaryService;
|
||||||
|
private final InventoryHistoryService inventoryHistoryService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 接收入库任务请求
|
* 接收入库任务请求
|
||||||
|
|
@ -485,6 +488,8 @@ public class TaskController {
|
||||||
pickTaskService.remove(new LambdaQueryWrapper<PickTask>().eq(PickTask::getVehicleId, inTask.getVehicleId()));
|
pickTaskService.remove(new LambdaQueryWrapper<PickTask>().eq(PickTask::getVehicleId, inTask.getVehicleId()));
|
||||||
// 移除当前料箱所有的outsideVehicles
|
// 移除当前料箱所有的outsideVehicles
|
||||||
outsideVehiclesService.remove(new LambdaQueryWrapper<OutsideVehicles>().eq(OutsideVehicles::getVehicleId, inTask.getVehicleId()));
|
outsideVehiclesService.remove(new LambdaQueryWrapper<OutsideVehicles>().eq(OutsideVehicles::getVehicleId, inTask.getVehicleId()));
|
||||||
|
// 清除当前料箱的所有盘点任务
|
||||||
|
inventoryService.remove(new LambdaQueryWrapper<InventoryList>().eq(InventoryList::getVehicleId, inTask.getVehicleId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 出库任务
|
// 出库任务
|
||||||
|
|
@ -2079,36 +2084,41 @@ public class TaskController {
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
// 验证请求信息
|
// 验证请求信息
|
||||||
if (Objects.equals(callEmptyVehicleRequest.getVehicleType2(), "间接物料")) {
|
// if (Objects.equals(callEmptyVehicleRequest.getVehicleType2(), "间接物料")) {
|
||||||
// TODO 间接物料需要确认
|
// // TODO 间接物料需要确认
|
||||||
if (StringUtils.isEmpty(callEmptyVehicleRequest.getGoodsId())) {
|
// if (StringUtils.isEmpty(callEmptyVehicleRequest.getGoodsId())) {
|
||||||
logger.error("间接物料必须输入物料号");
|
// logger.error("间接物料必须输入物料号");
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
// response.setCode(ResponseCode.ERROR.getCode());
|
||||||
response.setMessage("间接物料必须输入物料号");
|
// response.setMessage("间接物料必须输入物料号");
|
||||||
return convertJsonString(response);
|
// return convertJsonString(response);
|
||||||
}
|
// }
|
||||||
// 查询物料是否是间接物料
|
// // 查询物料是否是间接物料
|
||||||
Goods goods = goodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, callEmptyVehicleRequest.getGoodsId()).eq(Goods::getGoodsInVehicleType, "间接物料").last("limit 1"));
|
// Goods goods = goodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, callEmptyVehicleRequest.getGoodsId()).eq(Goods::getGoodsInVehicleType, "间接物料").last("limit 1"));
|
||||||
if (goods == null) {
|
// if (goods == null) {
|
||||||
logger.error("当前物料不是间接物料");
|
// logger.error("当前物料不是间接物料");
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
// response.setCode(ResponseCode.ERROR.getCode());
|
||||||
response.setMessage("当前物料不是间接物料");
|
// response.setMessage("当前物料不是间接物料");
|
||||||
return convertJsonString(response);
|
// return convertJsonString(response);
|
||||||
}
|
// }
|
||||||
callEmptyVehicleRequest.setVehicleType1(goods.getVehicleType());
|
// callEmptyVehicleRequest.setVehicleType1(goods.getVehicleType());
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 生成料箱出库任务
|
// 生成料箱出库任务
|
||||||
int needNum = callEmptyVehicleRequest.getNeedNum();
|
int needNum = callEmptyVehicleRequest.getNeedNum();
|
||||||
List<Task> vehicleOutTasks = new ArrayList<>();// 任务列表
|
List<Task> vehicleOutTasks = new ArrayList<>();// 任务列表
|
||||||
List<String> outVehicleIds = new ArrayList<>();// 料箱列表
|
List<String> outVehicleIds = new ArrayList<>();// 料箱列表
|
||||||
// 查询出需求数量的空箱
|
// 查询出需求数量的空箱
|
||||||
List<Vehicle> emptyVehicles = vehicleService.list(new LambdaQueryWrapper<Vehicle>()
|
LambdaQueryWrapper<Vehicle> emptyVehicleQueryWrapper = new LambdaQueryWrapper<Vehicle>()
|
||||||
.eq(StringUtils.isNotEmpty(callEmptyVehicleRequest.getVehicleType1()), Vehicle::getVehicleType, callEmptyVehicleRequest.getVehicleType1())
|
|
||||||
.eq(Vehicle::getIsEmpty, 1)
|
.eq(Vehicle::getIsEmpty, 1)
|
||||||
.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode())
|
.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode())
|
||||||
.orderByAsc(Vehicle::getLastInTime)
|
.orderByAsc(Vehicle::getLastInTime)
|
||||||
.last("limit " + needNum));
|
.last("limit " + needNum);
|
||||||
|
if (Objects.equals(callEmptyVehicleRequest.getVehicleType2(), "间接物料")) {
|
||||||
|
emptyVehicleQueryWrapper.eq(Vehicle::getVehicleType, "间接物料");
|
||||||
|
} else {
|
||||||
|
emptyVehicleQueryWrapper.ne(Vehicle::getVehicleType, "间接物料");
|
||||||
|
}
|
||||||
|
List<Vehicle> emptyVehicles = vehicleService.list(emptyVehicleQueryWrapper);
|
||||||
for (Vehicle emptyVehicle : emptyVehicles) {
|
for (Vehicle emptyVehicle : emptyVehicles) {
|
||||||
if (needNum <= 0) {
|
if (needNum <= 0) {
|
||||||
break;
|
break;
|
||||||
|
|
@ -3128,6 +3138,14 @@ public class TaskController {
|
||||||
response.setMessage("请求缺少必须参数,箱号、料号、数量不可缺少。");
|
response.setMessage("请求缺少必须参数,箱号、料号、数量不可缺少。");
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
|
List<InventoryList> inventoryListList = inventoryService.list(new LambdaQueryWrapper<InventoryList>()
|
||||||
|
.eq(InventoryList::getVehicleId, pickNumQuery.getVehicleId()));
|
||||||
|
if (!inventoryListList.isEmpty()) {
|
||||||
|
logger.error("这个箱子还有盘点任务,请先执行盘点。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("这个箱子还有盘点任务,请先执行盘点。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
// 验证载具号是否重复入库
|
// 验证载具号是否重复入库
|
||||||
if (vehicleService.exists(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, pickNumQuery.getVehicleId())
|
if (vehicleService.exists(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, pickNumQuery.getVehicleId())
|
||||||
.and(wrapper -> wrapper.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode())))) {
|
.and(wrapper -> wrapper.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode())))) {
|
||||||
|
|
@ -3263,4 +3281,299 @@ public class TaskController {
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// TODO 以下是盘点待做
|
||||||
|
/**
|
||||||
|
* 盘点请求
|
||||||
|
*
|
||||||
|
* @param inventoryRequest 请求信息
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PostMapping("/inventoryOut")
|
||||||
|
@ResponseBody
|
||||||
|
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||||
|
@MyLog(logTitle = "盘点请求", logMethod = "inventoryOut")
|
||||||
|
public String inventoryOut(@RequestBody InventoryRequest inventoryRequest) {
|
||||||
|
logger.info("盘点请求:{},ip地址:{}", convertJsonString(inventoryRequest), HttpUtils.getIpAddr(servletRequest));
|
||||||
|
ResponseEntity response = new ResponseEntity();
|
||||||
|
try {
|
||||||
|
if (StringUtils.isEmpty(inventoryRequest.getGoodsId())) {
|
||||||
|
logger.error("盘点,请输入料号。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("盘点,请输入料号。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
// 查询库存
|
||||||
|
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
|
||||||
|
.apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, inventoryRequest.getGoodsId())
|
||||||
|
.eq(StringUtils.isNotEmpty(inventoryRequest.getVehicleId()), Stock::getVehicleId, inventoryRequest.getVehicleId()));
|
||||||
|
List<Stock> outedStockList = stockList.stream().filter(stock -> !stock.getStockStatus().equals(StockStatus.OK.getCode())).toList();
|
||||||
|
if (!outedStockList.isEmpty()) {
|
||||||
|
logger.error("当前想要盘点的物料未全部在库中,请稍后再试。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("当前想要盘点的物料未全部在库中,请稍后再试。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
// 生成出库任务
|
||||||
|
List<Task> outTasks = new ArrayList<>();
|
||||||
|
List<InventoryList> inventoryList = new ArrayList<>();
|
||||||
|
for (Stock stock : stockList) {
|
||||||
|
// 创建出库任务
|
||||||
|
Task tempOutTask = new Task();
|
||||||
|
tempOutTask.setTaskId(generateId("INV_"));
|
||||||
|
tempOutTask.setTaskType(TaskType.OUT.getCode());
|
||||||
|
tempOutTask.setTaskGroup(generateId(""));
|
||||||
|
tempOutTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
|
||||||
|
tempOutTask.setTaskPriority(2);
|
||||||
|
tempOutTask.setVehicleId(stock.getVehicleId());
|
||||||
|
tempOutTask.setUserName(inventoryRequest.getUserName());
|
||||||
|
tempOutTask.setOrigin(stock.getLocationId());
|
||||||
|
tempOutTask.setDestination("");
|
||||||
|
tempOutTask.setCreateTime(LocalDateTime.now());
|
||||||
|
tempOutTask.setIsPicking(1);
|
||||||
|
outTasks.add(tempOutTask);
|
||||||
|
// 创建盘点
|
||||||
|
InventoryList tempInventoryList = new InventoryList();
|
||||||
|
tempInventoryList.setInventoryId(generateId("INV_"));
|
||||||
|
tempInventoryList.setGoodsId(stock.getGoodsRelated().getGoodsId());
|
||||||
|
tempInventoryList.setStockNum(stock.getGoodsRelated().getRemainNum());
|
||||||
|
tempInventoryList.setInventoryStatus(0);
|
||||||
|
tempInventoryList.setInventoryUser(inventoryRequest.getUserName());
|
||||||
|
tempInventoryList.setVehicleId(stock.getVehicleId());
|
||||||
|
tempInventoryList.setInventoryDate(LocalDateTime.now());
|
||||||
|
inventoryList.add(tempInventoryList);
|
||||||
|
}
|
||||||
|
// 添加出库任务
|
||||||
|
if (!outTasks.isEmpty()) {
|
||||||
|
// 保存出库任务
|
||||||
|
taskService.saveBatch(outTasks);
|
||||||
|
// 保存盘点
|
||||||
|
inventoryService.saveBatch(inventoryList);
|
||||||
|
List<String> vehicleIds = outTasks.stream().map(Task::getVehicleId).distinct().toList();
|
||||||
|
// 更新库存状态
|
||||||
|
stockService.update(new LambdaUpdateWrapper<Stock>()
|
||||||
|
.set(Stock::getStockStatus, StockStatus.OUT.getCode())
|
||||||
|
.in(Stock::getVehicleId, vehicleIds)
|
||||||
|
.eq(Stock::getStockStatus, StockStatus.OK.getCode()));
|
||||||
|
// 更新料箱状态
|
||||||
|
vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
|
||||||
|
.set(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode())
|
||||||
|
.in(Vehicle::getVehicleId, vehicleIds)
|
||||||
|
.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode()));
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("下发盘点成功,请等待料箱到达。");
|
||||||
|
response.setCode(ResponseCode.OK.getCode());
|
||||||
|
response.setMessage("下发盘点成功,请等待料箱到达。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 回滚事务
|
||||||
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
|
logger.error("处理盘点请求异常,{}", convertJsonString(e));
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("处理盘点请求异常。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据物料获取当前的盘点信息
|
||||||
|
*
|
||||||
|
* @param inventoryRequest 请求信息
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PostMapping("/getCurrentGoodsInventory")
|
||||||
|
@ResponseBody
|
||||||
|
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||||
|
@MyLog(logTitle = "根据物料获取当前的盘点信息", logMethod = "getCurrentGoodsInventory")
|
||||||
|
public String getCurrentGoodsInventory(@RequestBody InventoryRequest inventoryRequest) {
|
||||||
|
logger.info("根据物料获取当前的盘点信息:{},ip地址:{}", convertJsonString(inventoryRequest), HttpUtils.getIpAddr(servletRequest));
|
||||||
|
ResponseEntity response = new ResponseEntity();
|
||||||
|
try {
|
||||||
|
if (StringUtils.isEmpty(inventoryRequest.getGoodsId())) {
|
||||||
|
logger.error("请输入物料信息。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("请输入物料信息。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
List<InventoryVo> inventoryVos = new ArrayList<>();
|
||||||
|
// 查询这个料关于配料的信息
|
||||||
|
List<WorkSummary> workSummaryList = workSummaryService.list(new LambdaQueryWrapper<WorkSummary>()
|
||||||
|
.eq(WorkSummary::getGoodsId, inventoryRequest.getGoodsId())
|
||||||
|
.orderByDesc(WorkSummary::getFinishTime));
|
||||||
|
InventoryVo firstInventoryVo = new InventoryVo();
|
||||||
|
if (!workSummaryList.isEmpty()) {
|
||||||
|
// 查询station-config以获取工位信息
|
||||||
|
List<WorkStationConfig> workStationConfigList = workStationConfigService.list(new LambdaQueryWrapper<WorkStationConfig>()
|
||||||
|
.eq(WorkStationConfig::getSmallBox, workSummaryList.get(0).getWorkCenter()));
|
||||||
|
firstInventoryVo.setFeedingWS(workStationConfigList.isEmpty() ? "" : workStationConfigList.get(0).getWorkCenter());
|
||||||
|
// 查询DBS以获取机器序列号
|
||||||
|
List<KateDBS> kateDBSList = kateDBSService.list(new LambdaQueryWrapper<KateDBS>()
|
||||||
|
.eq(KateDBS::getWorkOrder, workSummaryList.get(0).getWorkOrder()));
|
||||||
|
firstInventoryVo.setLastFeedingMachineNo(kateDBSList.isEmpty() ? "" : kateDBSList.get(0).getMachineNo());
|
||||||
|
firstInventoryVo.setLastFeedingTime(workSummaryList.get(0).getFinishTime());
|
||||||
|
firstInventoryVo.setIsLack(workSummaryList.get(0).getLackStatus() == 1 ? "是" : "否");
|
||||||
|
}
|
||||||
|
// 查询库存信息
|
||||||
|
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
|
||||||
|
.apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, inventoryRequest.getGoodsId()));
|
||||||
|
for (Stock stock : stockList) {
|
||||||
|
InventoryVo inventoryVo = new InventoryVo();
|
||||||
|
inventoryVo.setGoodsId(inventoryRequest.getGoodsId());
|
||||||
|
inventoryVo.setVehiclesQuantity(stockList.size());
|
||||||
|
inventoryVo.setVehicleIds(stock.getVehicleId());
|
||||||
|
String vehicleStatus = "";
|
||||||
|
if (Objects.equals(StockStatus.OK.getCode(), stock.getStockStatus())) {
|
||||||
|
vehicleStatus = "在库中";
|
||||||
|
} else if (Objects.equals(StockStatus.OUT.getCode(), stock.getStockStatus())) {
|
||||||
|
vehicleStatus = "等待出库中";
|
||||||
|
} else {
|
||||||
|
vehicleStatus = "在库外";
|
||||||
|
}
|
||||||
|
inventoryVo.setVehicleStatus(vehicleStatus);
|
||||||
|
inventoryVo.setFeedingWS(firstInventoryVo.getFeedingWS());
|
||||||
|
inventoryVo.setLastFeedingMachineNo(firstInventoryVo.getLastFeedingMachineNo());
|
||||||
|
inventoryVo.setLastFeedingTime(firstInventoryVo.getLastFeedingTime());
|
||||||
|
inventoryVo.setIsLack(firstInventoryVo.getIsLack());
|
||||||
|
inventoryVos.add(inventoryVo);
|
||||||
|
}
|
||||||
|
|
||||||
|
response.setCode(ResponseCode.OK.getCode());
|
||||||
|
response.setMessage("根据物料获取当前的盘点信息成功。");
|
||||||
|
response.setReturnData(inventoryVos);
|
||||||
|
return convertJsonString(response);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 回滚事务
|
||||||
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
|
logger.error("根据物料获取当前的盘点信息异常,{}", convertJsonString(e));
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("根据物料获取当前的盘点信息异常。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 盘点确认
|
||||||
|
*
|
||||||
|
* @param confirmRequest 请求信息
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PostMapping("/inventoryConfirmBack")
|
||||||
|
@ResponseBody
|
||||||
|
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||||
|
@MyLog(logTitle = "盘点确认", logMethod = "inventoryConfirmBack")
|
||||||
|
public String inventoryConfirmBack(@RequestBody InventoryRequest confirmRequest) {
|
||||||
|
logger.info("盘点确认:{},ip地址:{}", convertJsonString(confirmRequest), HttpUtils.getIpAddr(servletRequest));
|
||||||
|
ResponseEntity response = new ResponseEntity();
|
||||||
|
try {
|
||||||
|
// 判断信息是否完备
|
||||||
|
if (StringUtils.isEmpty(confirmRequest.getGoodsId())
|
||||||
|
|| StringUtils.isEmpty(confirmRequest.getVehicleId())
|
||||||
|
|| confirmRequest.getConfirmNum() == null) {
|
||||||
|
logger.error("缺少必须信息。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("缺少必须信息。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
// 查询盘点列表
|
||||||
|
List<InventoryList> inventoryListList = inventoryService.list(new LambdaQueryWrapper<InventoryList>()
|
||||||
|
.eq(InventoryList::getVehicleId, confirmRequest.getVehicleId()));
|
||||||
|
List<InventoryList> currentGoodsInvList = inventoryListList.stream()
|
||||||
|
.filter(inventoryList -> inventoryList.getGoodsId().equals(confirmRequest.getGoodsId()))
|
||||||
|
.toList();
|
||||||
|
// 查询下当前库存
|
||||||
|
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
|
||||||
|
.apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, confirmRequest.getGoodsId())
|
||||||
|
.eq(Stock::getVehicleId, confirmRequest.getVehicleId())
|
||||||
|
.last("limit 1"));
|
||||||
|
// 保存盘点记录
|
||||||
|
List<InventoryHistory> historyList = new ArrayList<>();
|
||||||
|
for (InventoryList inventoryList : currentGoodsInvList) {
|
||||||
|
InventoryHistory tempHistory = new InventoryHistory();
|
||||||
|
tempHistory.setInventoryId(inventoryList.getInventoryId());
|
||||||
|
tempHistory.setGoodsId(inventoryList.getGoodsId());
|
||||||
|
tempHistory.setVehicleId(inventoryList.getVehicleId());
|
||||||
|
tempHistory.setStockNum(existStock == null ? BigDecimal.ZERO : existStock.getGoodsRelated().getRemainNum());
|
||||||
|
tempHistory.setRealNum(confirmRequest.getConfirmNum());
|
||||||
|
tempHistory.setInventoryStatus(1);
|
||||||
|
tempHistory.setInventoryResult(tempHistory.getRealNum().compareTo(tempHistory.getStockNum()) == 0 ? 0 : 1);
|
||||||
|
tempHistory.setInventoryUser(confirmRequest.getUserName());
|
||||||
|
tempHistory.setInventoryDate(LocalDateTime.now());
|
||||||
|
historyList.add(tempHistory);
|
||||||
|
}
|
||||||
|
inventoryHistoryService.saveBatch(historyList);
|
||||||
|
inventoryService.removeBatchByIds(currentGoodsInvList);
|
||||||
|
// 判断当前料箱是否还需要盘点
|
||||||
|
List<InventoryList> notCurrentGoodsInvList = inventoryListList.stream()
|
||||||
|
.filter(inventoryList -> !inventoryList.getGoodsId().equals(confirmRequest.getGoodsId()))
|
||||||
|
.toList();
|
||||||
|
if (!notCurrentGoodsInvList.isEmpty()) {
|
||||||
|
logger.info("当前料箱其他料仍需要盘点,请继续。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("当前料箱其他料仍需要盘点,请继续。");
|
||||||
|
} else {
|
||||||
|
// 验证载具号是否重复入库
|
||||||
|
if (vehicleService.exists(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, confirmRequest.getVehicleId())
|
||||||
|
.and(wrapper -> wrapper.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode())))) {
|
||||||
|
logger.error("盘点确认完,但当前箱子{}已在库中,无法回库。", confirmRequest.getVehicleId());
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("盘点确认完,当前箱子" + confirmRequest.getVehicleId() + "已在库中,无法回库。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
// 判断这个箱子是否还有拣选任务
|
||||||
|
boolean hasPickTasks = pickTaskService.exists(new LambdaQueryWrapper<PickTask>()
|
||||||
|
.eq(PickTask::getVehicleId, confirmRequest.getVehicleId()));
|
||||||
|
if (!hasPickTasks) {
|
||||||
|
// 判断当前载具是否有回库任务
|
||||||
|
boolean hasBackTask = taskService.exists(new LambdaQueryWrapper<Task>()
|
||||||
|
.eq(Task::getVehicleId, confirmRequest.getVehicleId())
|
||||||
|
.eq(Task::getTaskType, TaskType.IN.getCode())
|
||||||
|
.likeRight(Task::getTaskId, "HK_"));
|
||||||
|
if (!hasBackTask) {
|
||||||
|
// 判断当前载具是否有入库任务
|
||||||
|
boolean hasInTask = taskService.exists(new LambdaQueryWrapper<Task>()
|
||||||
|
.eq(Task::getVehicleId, confirmRequest.getVehicleId())
|
||||||
|
.eq(Task::getTaskType, TaskType.IN.getCode())
|
||||||
|
.likeRight(Task::getTaskId, "RK_"));
|
||||||
|
if (!hasInTask) {
|
||||||
|
// 生成回库任务
|
||||||
|
Task backTask = new Task();
|
||||||
|
backTask.setTaskId(generateId("HK_PD_"));
|
||||||
|
backTask.setTaskGroup(generateId(""));
|
||||||
|
backTask.setTaskType(TaskType.IN.getCode());
|
||||||
|
backTask.setTaskStatus(WmsTaskStatus.TEMP.getCode());
|
||||||
|
backTask.setVehicleId(confirmRequest.getVehicleId());
|
||||||
|
backTask.setVehicleSize(1);
|
||||||
|
backTask.setWeight(BigDecimal.ZERO);
|
||||||
|
backTask.setTaskPriority(1);
|
||||||
|
backTask.setUserName(confirmRequest.getUserName());
|
||||||
|
backTask.setCreateTime(LocalDateTime.now());
|
||||||
|
taskService.save(backTask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logger.info("盘点确认结束且确认回库成功。");
|
||||||
|
response.setCode(ResponseCode.OK.getCode());
|
||||||
|
response.setMessage("盘点确认结束且确认回库成功。");
|
||||||
|
} else {
|
||||||
|
logger.error("盘点已经确认完,当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("盘点已经确认完,当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return convertJsonString(response);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 回滚事务
|
||||||
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
|
logger.error("处理盘点确认请求异常,{}", convertJsonString(e));
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("处理盘点确认请求异常。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.wms.entity.app.request;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 盘点请求
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class InventoryRequest {
|
||||||
|
/**
|
||||||
|
* 料号
|
||||||
|
*/
|
||||||
|
@JsonProperty("goodsId")
|
||||||
|
private String goodsId;
|
||||||
|
/**
|
||||||
|
* 箱号
|
||||||
|
*/
|
||||||
|
@JsonProperty("vehicleId")
|
||||||
|
private String vehicleId;
|
||||||
|
/**
|
||||||
|
* 确认数量
|
||||||
|
*/
|
||||||
|
@JsonProperty("confirmNum")
|
||||||
|
private BigDecimal confirmNum;
|
||||||
|
/**
|
||||||
|
* 操作人员
|
||||||
|
*/
|
||||||
|
@JsonProperty("userName")
|
||||||
|
private String userName;
|
||||||
|
}
|
||||||
61
src/main/java/com/wms/entity/app/vo/InventoryVo.java
Normal file
61
src/main/java/com/wms/entity/app/vo/InventoryVo.java
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
package com.wms.entity.app.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 盘点信息显示列表
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class InventoryVo {
|
||||||
|
/**
|
||||||
|
* 料号
|
||||||
|
*/
|
||||||
|
@JsonProperty("goodsId")
|
||||||
|
private String goodsId;
|
||||||
|
/**
|
||||||
|
* 料箱数量
|
||||||
|
*/
|
||||||
|
@JsonProperty("vehiclesQuantity")
|
||||||
|
private Integer vehiclesQuantity;
|
||||||
|
/**
|
||||||
|
* 料箱号
|
||||||
|
*/
|
||||||
|
@JsonProperty("vehicleIds")
|
||||||
|
private String vehicleIds;
|
||||||
|
/**
|
||||||
|
* 料箱状态
|
||||||
|
*/
|
||||||
|
@JsonProperty("vehicleStatus")
|
||||||
|
private String vehicleStatus;
|
||||||
|
/**
|
||||||
|
* 备料工位
|
||||||
|
*/
|
||||||
|
@JsonProperty("feedingWS")
|
||||||
|
private String feedingWS;
|
||||||
|
/**
|
||||||
|
* 最后一台备料机器序列号
|
||||||
|
*/
|
||||||
|
@JsonProperty("lastFeedingMachineNo")
|
||||||
|
private String lastFeedingMachineNo;
|
||||||
|
/**
|
||||||
|
* 备料最后一台车日期
|
||||||
|
*/
|
||||||
|
@JsonProperty("lastFeedingTime")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime lastFeedingTime;
|
||||||
|
/**
|
||||||
|
* 是否缺料
|
||||||
|
*/
|
||||||
|
@JsonProperty("isLack")
|
||||||
|
private String isLack;
|
||||||
|
}
|
||||||
|
|
@ -54,4 +54,9 @@ public class InventoryHistory {
|
||||||
*/
|
*/
|
||||||
@TableField("vehicle_id")
|
@TableField("vehicle_id")
|
||||||
private String vehicleId;
|
private String vehicleId;
|
||||||
|
/**
|
||||||
|
* 盘点结果
|
||||||
|
*/
|
||||||
|
@TableField("inventory_result")
|
||||||
|
private Integer inventoryResult;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -776,7 +776,9 @@ public class WmsJobServiceImplements implements IWmsJobService {
|
||||||
// 找到之前完成的
|
// 找到之前完成的
|
||||||
List<StandStackerTask> currentStandFinishedTasks = standStackerTasks.stream().filter(standStackerTask -> standStackerTask.getStandId().equals(pickStand.getStandId()) && standStackerTask.getTaskType() == 1 && standStackerTask.getTaskStatus() == 1).toList();
|
List<StandStackerTask> currentStandFinishedTasks = standStackerTasks.stream().filter(standStackerTask -> standStackerTask.getStandId().equals(pickStand.getStandId()) && standStackerTask.getTaskType() == 1 && standStackerTask.getTaskStatus() == 1).toList();
|
||||||
if (!currentStandFinishedTasks.isEmpty()) {
|
if (!currentStandFinishedTasks.isEmpty()) {
|
||||||
thisQtyType = currentStandFinishedTasks.get(0).getLastQtyType() == 1 ? 2 : 1;
|
if (currentStandFinishedTasks.get(0).getLastQtyType() <= 2) {
|
||||||
|
thisQtyType = currentStandFinishedTasks.get(0).getLastQtyType() + 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 设置分配策略
|
// 设置分配策略
|
||||||
StandStackerTask newStandStackerTask = new StandStackerTask();
|
StandStackerTask newStandStackerTask = new StandStackerTask();
|
||||||
|
|
@ -808,7 +810,7 @@ public class WmsJobServiceImplements implements IWmsJobService {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
String vehicleId;
|
String vehicleId;
|
||||||
if (thisQtyType == 1) {
|
if (thisQtyType == 1 || thisQtyType == 2) {
|
||||||
// 最少使用的箱子
|
// 最少使用的箱子
|
||||||
vehicleId = vehicleStandsMap.entrySet().stream()
|
vehicleId = vehicleStandsMap.entrySet().stream()
|
||||||
.min(Comparator.comparingInt(Map.Entry::getValue))
|
.min(Comparator.comparingInt(Map.Entry::getValue))
|
||||||
|
|
@ -881,7 +883,7 @@ public class WmsJobServiceImplements implements IWmsJobService {
|
||||||
while (availNum > 0) {
|
while (availNum > 0) {
|
||||||
// 设置分配策略
|
// 设置分配策略
|
||||||
StandStackerTask newStandStackerTask = new StandStackerTask();
|
StandStackerTask newStandStackerTask = new StandStackerTask();
|
||||||
newStandStackerTask.setLastQtyType(1);// 超额固定为1
|
newStandStackerTask.setLastQtyType(2);// 超额固定为2
|
||||||
// 查询这个这台堆垛机的料箱号
|
// 查询这个这台堆垛机的料箱号
|
||||||
List<String> thisStackerVehicleIds = new ArrayList<>();
|
List<String> thisStackerVehicleIds = new ArrayList<>();
|
||||||
for (Task task : allTasks) {
|
for (Task task : allTasks) {
|
||||||
|
|
@ -928,7 +930,7 @@ public class WmsJobServiceImplements implements IWmsJobService {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
String vehicleId = vehicleStandsMap.entrySet().stream()
|
String vehicleId = vehicleStandsMap.entrySet().stream()
|
||||||
.min(Comparator.comparingInt(Map.Entry::getValue))
|
.max(Comparator.comparingInt(Map.Entry::getValue))
|
||||||
.map(Map.Entry::getKey)
|
.map(Map.Entry::getKey)
|
||||||
.orElse("");
|
.orElse("");
|
||||||
if (!StringUtils.isEmpty(vehicleId)) {
|
if (!StringUtils.isEmpty(vehicleId)) {
|
||||||
|
|
|
||||||
|
|
@ -209,6 +209,7 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LambdaQueryWrapper<Location> locationQueryWrapper = new LambdaQueryWrapper<Location>()
|
LambdaQueryWrapper<Location> locationQueryWrapper = new LambdaQueryWrapper<Location>()
|
||||||
|
.ne(Location::getGoodsType, "间接物料")
|
||||||
.eq(Location::getAreaId, 1)
|
.eq(Location::getAreaId, 1)
|
||||||
.eq(Location::getLocationStatus, 0)
|
.eq(Location::getLocationStatus, 0)
|
||||||
.eq(Location::getLocationType, 1)
|
.eq(Location::getLocationType, 1)
|
||||||
|
|
|
||||||
|
|
@ -8,20 +8,20 @@ spring:
|
||||||
# 主库
|
# 主库
|
||||||
master:
|
master:
|
||||||
# 卡特数据库服务器
|
# 卡特数据库服务器
|
||||||
url: jdbc:mysql://10.90.36.71:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
# url: jdbc:mysql://10.90.36.71:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
username: developer
|
# username: developer
|
||||||
password: developer
|
# password: developer
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
# 宝开服务器--内网
|
# 宝开服务器--内网
|
||||||
# url: jdbc:mysql://192.168.3.254:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
# url: jdbc:mysql://192.168.3.254:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
# username: coder
|
# username: coder
|
||||||
# password: coder
|
# password: coder
|
||||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
# # 本地环境
|
# # 本地环境
|
||||||
# url: jdbc:mysql://localhost:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
url: jdbc:mysql://localhost:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
# username: developer
|
username: developer
|
||||||
# password: developer
|
password: developer
|
||||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
# 从库
|
# 从库
|
||||||
# slave_1:
|
# slave_1:
|
||||||
# url: jdbc:mysql://localhost:3306/wms_aaa?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
# url: jdbc:mysql://localhost:3306/wms_aaa?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user