代码更新:

1.增加非计划领料
2。修改部分拉货逻辑
This commit is contained in:
梁州 2024-09-03 21:12:28 +08:00
parent 4f7c0732e3
commit f9b41b7ba2
7 changed files with 330 additions and 94 deletions

View File

@ -94,11 +94,11 @@ public class StockController {
/** /**
* 查询某个物料的库存总数 * 查询某个物料的库存总数
*/ */
@PostMapping("/getStocksByGoods") @PostMapping("/getStockNumByGoodsId")
@ResponseBody @ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String getStocksByGoods(@RequestBody StockQuery stockQuery) { public String getStockNumByGoodsId(@RequestBody StockQuery stockQuery) {
logger.info("接收到查询物料库存请求:{}请求ip{}", convertJsonString(stockQuery), HttpUtils.getIpAddr(servletRequest)); logger.info("接收到查询物料库存数请求:{}请求ip{}", convertJsonString(stockQuery), HttpUtils.getIpAddr(servletRequest));
ResponseEntity response = new ResponseEntity(); ResponseEntity response = new ResponseEntity();
try { try {
if (StringUtils.isEmpty(stockQuery.getGoodsId())) { if (StringUtils.isEmpty(stockQuery.getGoodsId())) {

View File

@ -142,6 +142,10 @@ public class TaskController {
* 站台要料服务 * 站台要料服务
*/ */
private final GoodsToStationService goodsToStationService; private final GoodsToStationService goodsToStationService;
/**
* 非计划领料服务
*/
private final NoPlanRecordService noPlanRecordService;
/** /**
* Wcs服务 * Wcs服务
*/ */
@ -426,26 +430,30 @@ public class TaskController {
continue; continue;
} }
if (outTask.getIsPicking() == 1) { if (outTask.getIsPicking() == 1) {
// 当前载具上所有库存状态设置为拣选
stockService.update(new LambdaUpdateWrapper<Stock>()
.set(Stock::getStockStatus, StockStatus.PICKING.getCode())
.eq(Stock::getVehicleId, outTask.getVehicleId())
.ne(Stock::getStockStatus, StockStatus.PICKING.getCode()));
// 当前载具设置为出库中状态 // 当前载具设置为出库中状态
vehicleService.update(new LambdaUpdateWrapper<Vehicle>() vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
.set(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode()) .set(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode())
.eq(Vehicle::getVehicleId, outTask.getVehicleId()) .eq(Vehicle::getVehicleId, outTask.getVehicleId())
.ne(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode())); .ne(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode()));
if (StringUtils.isNotEmpty(outTask.getPickStand())) {
// 当前载具上所有库存状态设置为拣选
stockService.update(new LambdaUpdateWrapper<Stock>()
.set(Stock::getStockStatus, StockStatus.PICKING.getCode())
.eq(Stock::getVehicleId, outTask.getVehicleId())
.ne(Stock::getStockStatus, StockStatus.PICKING.getCode()));
// 将该载具对应的拣选任务设置为可发送状态 // 将该载具对应的拣选任务设置为可发送状态
pickTaskService.update(new LambdaUpdateWrapper<PickTask>() pickTaskService.update(new LambdaUpdateWrapper<PickTask>()
.set(PickTask::getPickStatus, PickTaskStatusEnum.NEW.getCode()) .set(PickTask::getPickStatus, PickTaskStatusEnum.NEW.getCode())
.eq(PickTask::getVehicleId, outTask.getVehicleId()) .eq(PickTask::getVehicleId, outTask.getVehicleId())
.eq(PickTask::getPickStatus, PickTaskStatusEnum.TEMP.getCode())); .eq(PickTask::getPickStatus, PickTaskStatusEnum.TEMP.getCode()));
}
} else {// 代表整出 } else {// 代表整出
// 删除当前载具上所有库存 // 删除当前载具上所有库存
stockService.remove(new LambdaQueryWrapper<Stock>().eq(Stock::getVehicleId, outTask.getVehicleId())); stockService.remove(new LambdaQueryWrapper<Stock>().eq(Stock::getVehicleId, outTask.getVehicleId()));
// 删除载具 // 删除载具
vehicleService.remove(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, outTask.getVehicleId())); vehicleService.remove(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, outTask.getVehicleId()));
// 删除当前载具的所有拣选任务
pickTaskService.remove(new LambdaQueryWrapper<PickTask>().eq(PickTask::getVehicleId, outTask.getVehicleId()));
} }
// 添加任务记录 // 添加任务记录
outTask.setTaskStatus(WmsTaskStatus.FINISH.getCode()); outTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
@ -2263,7 +2271,6 @@ public class TaskController {
} }
// 查询库存 // 查询库存
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>() List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
.eq(Stock::getStockStatus, StockStatus.OK.getCode())
.apply("goods_related ->> '$.goodsId' = {0}", noPlanRequest.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}", noPlanRequest.getGoodsId())
.apply("goods_related ->> '$.remainNum' > 0") .apply("goods_related ->> '$.remainNum' > 0")
.orderByAsc(Stock::getCreateTime)); .orderByAsc(Stock::getCreateTime));
@ -2272,33 +2279,95 @@ public class TaskController {
// 总数量 // 总数量
BigDecimal stockNum = stockOfGoodsList.stream().map(StockOfGoodsDto::getRemainNumSum).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal stockNum = stockOfGoodsList.stream().map(StockOfGoodsDto::getRemainNumSum).reduce(BigDecimal.ZERO, BigDecimal::add);
if (stockList != null && !stockList.isEmpty()) { if (stockList != null && !stockList.isEmpty()) {
// 需求数量
BigDecimal needNum = noPlanRequest.getNeedNum();
List<Stock> waitForOutStockList = new ArrayList<>(); List<Stock> waitForOutStockList = new ArrayList<>();
// TODO 生成出库任务 // 出库任务列表
List<Task> outTasks = new ArrayList<>();
// 尝试生成出库任务 // 尝试生成出库任务
// for (Stock tempStock : stockList) { for (Stock tempStock : stockList) {
// if (needNum.compareTo(BigDecimal.ZERO) <= 0) {// 需求数量小于等于0 if (needNum.compareTo(BigDecimal.ZERO) <= 0) {// 需求数量小于等于0
// break; break;
// } }
// if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) > 0) { if (Objects.equals(tempStock.getStockStatus(), StockStatus.OK.getCode())) {
// // 当前箱子剩余物料数量多于需求数量 if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) > 0) {
// needNum = BigDecimal.ZERO; // 当前箱子剩余物料数量多于需求数量
// // 设置剩余数量 needNum = BigDecimal.ZERO;
// StockDetailInfo goodsRelated = tempStock.getGoodsRelated(); // 设置剩余数量
// goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum)); StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
// tempStock.setGoodsRelated(goodsRelated); goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
// waitForOutStockList.add(tempStock); tempStock.setGoodsRelated(goodsRelated);
// break; waitForOutStockList.add(tempStock);
// } else { break;
// // 当前箱子物料剩余数量少于需求数量 } else {
// needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum()); // 当前箱子物料剩余数量少于需求数量
// // 设置剩余数量 needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
// StockDetailInfo goodsRelated = tempStock.getGoodsRelated(); // 设置剩余数量
// goodsRelated.setRemainNum(BigDecimal.ZERO); StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
// tempStock.setGoodsRelated(goodsRelated); goodsRelated.setRemainNum(BigDecimal.ZERO);
// waitForOutStockList.add(tempStock); tempStock.setGoodsRelated(goodsRelated);
// } waitForOutStockList.add(tempStock);
// } }
// createVehicleOutTaskAndPickTask(waitForOutStockList, workStation); // 创建出库任务
Task tempOutTask = new Task();
tempOutTask.setTaskId(generateId("CK_"));
tempOutTask.setTaskType(TaskType.OUT.getCode());
tempOutTask.setTaskGroup(generateId(""));
tempOutTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
tempOutTask.setTaskPriority(2);
tempOutTask.setVehicleId(tempStock.getVehicleId());
tempOutTask.setUserName(noPlanRequest.getUserName());
tempOutTask.setOrigin(tempStock.getLocationId());
tempOutTask.setDestination("");
tempOutTask.setCreateTime(LocalDateTime.now());
tempOutTask.setIsPicking(1);
outTasks.add(tempOutTask);
} else if (Objects.equals(tempStock.getStockStatus(), StockStatus.OUT.getCode())) {
// 判断这个料箱是否有拣选任务
boolean hasPickTask = pickTaskService.exists(new LambdaQueryWrapper<PickTask>()
.eq(PickTask::getVehicleId, tempStock.getVehicleId()));
if (!hasPickTask) {
// 有拣选任务时不做处理
if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) > 0) {
// 当前箱子剩余物料数量多于需求数量
needNum = BigDecimal.ZERO;
// 设置剩余数量
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
tempStock.setGoodsRelated(goodsRelated);
waitForOutStockList.add(tempStock);
break;
} else {
// 当前箱子物料剩余数量少于需求数量
needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
// 设置剩余数量
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
goodsRelated.setRemainNum(BigDecimal.ZERO);
tempStock.setGoodsRelated(goodsRelated);
waitForOutStockList.add(tempStock);
}
}
}
}
if (waitForOutStockList.isEmpty()) {
logger.error("所有库存在站台备料中。");
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("所有库存在站台备料中。");
return convertJsonString(response);
}
// 添加出库任务
taskService.saveBatch(outTasks);
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()));
// 非计划领料记录生成 // 非计划领料记录生成
NoPlanRecord noPlanRecord = new NoPlanRecord(); NoPlanRecord noPlanRecord = new NoPlanRecord();
noPlanRecord.setRecordId(generateId("CLC-NO-PLAN_")); noPlanRecord.setRecordId(generateId("CLC-NO-PLAN_"));
@ -2306,23 +2375,26 @@ public class TaskController {
noPlanRecord.setGoodsId(noPlanRequest.getGoodsId()); noPlanRecord.setGoodsId(noPlanRequest.getGoodsId());
noPlanRecord.setNeedNum(noPlanRequest.getNeedNum()); noPlanRecord.setNeedNum(noPlanRequest.getNeedNum());
noPlanRecord.setStockNum(stockNum); noPlanRecord.setStockNum(stockNum);
} else { noPlanRecord.setWorkOrder(noPlanRequest.getWorkOrder());
if (stockNum.compareTo(BigDecimal.ZERO) > 0) { noPlanRecord.setSmallVehicleNo(noPlanRequest.getSmallVehicleNo());
logger.error("所有库存在站台备料中。"); noPlanRecord.setCallReason(noPlanRequest.getCallReason());
response.setCode(ResponseCode.ERROR.getCode()); noPlanRecord.setFlowNo(noPlanRequest.getFlowNo());
response.setMessage("所有库存在站台备料中。"); noPlanRecord.setRemark(noPlanRequest.getRemark());
noPlanRecord.setCallTime(LocalDateTime.now());
noPlanRecord.setCallUser(noPlanRequest.getCallUser());
noPlanRecord.setPickedNum(BigDecimal.ZERO);
noPlanRecord.setPickStatus(0);// 未拣选
noPlanRecordService.save(noPlanRecord);
logger.info("处理直接物料非计划领料请求成功。");
response.setCode(ResponseCode.OK.getCode());
response.setMessage("处理直接物料非计划领料请求成功。");
} else { } else {
logger.error("非计划领料没有库存。"); logger.error("非计划领料没有库存。");
response.setCode(ResponseCode.ERROR.getCode()); response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("非计划领料没有库存。"); response.setMessage("非计划领料没有库存。");
} }
return convertJsonString(response); return convertJsonString(response);
}
logger.info("处理整理盒子请求成功。");
response.setCode(ResponseCode.OK.getCode());
response.setMessage("请根据灯光拣选盒子。");
return convertJsonString(response);
} catch (Exception e) { } catch (Exception e) {
// 回滚事务 // 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@ -2333,45 +2405,156 @@ public class TaskController {
} }
} }
/**
* 获取当前物料的待领料数量
*
* @param pickNumQuery 请求信息
* @return 结果
*/
@PostMapping("/getCurrentGoodsPickNum")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "获取当前物料的待领料数量", logMethod = "getCurrentGoodsPickNum")
public String getCurrentGoodsPickNum(@RequestBody PickNumQuery pickNumQuery) {
logger.info("获取当前物料的待领料数量:{}ip地址{}", convertJsonString(pickNumQuery), HttpUtils.getIpAddr(servletRequest));
ResponseEntity response = new ResponseEntity();
try {
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 noPlanRequest 请求信息 * @param pickNumQuery 请求信息
* @return 结果 * @return 结果
*/ */
@PostMapping("/clcNoPlanConfirmBack") @PostMapping("/clcNoPlanConfirmBack")
@ResponseBody @ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "直接物料非计划领料确认回库", logMethod = "clcNoPlanConfirmBack") @MyLog(logTitle = "直接物料非计划领料确认回库", logMethod = "clcNoPlanConfirmBack")
public String clcNoPlanConfirmBack(@RequestBody NoPlanRequest noPlanRequest) { public String clcNoPlanConfirmBack(@RequestBody PickNumQuery pickNumQuery) {
logger.info("直接物料非计划领料确认回库:{}ip地址{}", convertJsonString(noPlanRequest), HttpUtils.getIpAddr(servletRequest)); logger.info("直接物料非计划领料确认回库:{}ip地址{}", convertJsonString(pickNumQuery), HttpUtils.getIpAddr(servletRequest));
ResponseEntity response = new ResponseEntity(); ResponseEntity response = new ResponseEntity();
try { try {
// 获取站台号 // TODO 确认拣货完成回库
Stand targetStand; // 判断信息是否完备
if (StringUtils.isNotEmpty(noPlanRequest.getStandId())) { if (StringUtils.isEmpty(pickNumQuery.getGoodsId())
// 站台号从请求参数中获取 || StringUtils.isEmpty(pickNumQuery.getVehicleId())
targetStand = standService.getById(noPlanRequest.getStandId()); || pickNumQuery.getRealPickNum() == null) {
} else { logger.error("请求缺少必须参数,箱号、料号、数量不可缺少。");
// 站台号从ip获取 response.setCode(ResponseCode.OK.getCode());
targetStand = standService.getOne(new LambdaQueryWrapper<Stand>() response.setMessage("请求缺少必须参数,箱号、料号、数量不可缺少。");
.eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest))
.eq(Stand::getStandType, 1)
.last("limit 1"));
}
if (targetStand == null) {
logger.error("查询拣选站台错误。");
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("查询拣选站台错误。");
return convertJsonString(response); return convertJsonString(response);
} }
// 查询库存 // 更新库存
// Task中的isPicking=1 Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", pickNumQuery.getGoodsId())
.eq(Stock::getVehicleId, pickNumQuery.getVehicleId())
logger.info("处理整理盒子请求成功。"); .last("limit 1"));
// 更新库存数量
if (existStock != null && existStock.getGoodsRelated() != null) {
StockDetailInfo goodsDetail = existStock.getGoodsRelated();
goodsDetail.setRemainNum(goodsDetail.getRemainNum().subtract(pickNumQuery.getRealPickNum()));
existStock.setGoodsRelated(goodsDetail);
stockService.updateById(existStock);
}
// 判断这个箱子是否还有拣选任务
boolean hasPickTasks = pickTaskService.exists(new LambdaQueryWrapper<PickTask>()
.eq(PickTask::getVehicleId, pickNumQuery.getVehicleId()));
if (!hasPickTasks) {
// 判断当前载具是否有回库任务
boolean hasBackTask = taskService.exists(new LambdaQueryWrapper<Task>()
.eq(Task::getVehicleId, pickNumQuery.getVehicleId())
.eq(Task::getTaskType, TaskType.IN.getCode())
.likeRight(Task::getTaskId, "HK_"));
if (!hasBackTask) {
// 判断当前载具是否有入库任务
boolean hasInTask = taskService.exists(new LambdaQueryWrapper<Task>()
.eq(Task::getVehicleId, pickNumQuery.getVehicleId())
.eq(Task::getTaskType, TaskType.IN.getCode())
.eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode())
.likeRight(Task::getTaskId, "RK_"));
if (!hasInTask) {
// 寻找库位
String nextLocationId = "";
for (int i = 0; i < locationService.count(new LambdaQueryWrapper<Location>().eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode())); i++) {
Map<String, String> resultMap = locationService.getOneLocation("", "");
if (resultMap.isEmpty() || !resultMap.containsKey("nextLocationId")) {
logger.error("暂无可用库位");
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("暂无可用库位!");
return convertJsonString(response);
} else {
Location nextLocation = locationService.getOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, resultMap.get("nextLocationId")).last("limit 1"));
LambdaUpdateWrapper<Location> updateLocationWrapper = new LambdaUpdateWrapper<Location>()
.set(Location::getLocationStatus, LocationStatus.OCCUPY.getCode())
.set(Location::getVehicleId, pickNumQuery.getVehicleId())
.eq(Location::getLocationId, nextLocation.getLocationId())
.eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode());
if (locationService.update(updateLocationWrapper)) {
nextLocationId = resultMap.get("nextLocationId");
break;
}
}
}
if (Objects.equals(nextLocationId, "")) {
logger.error("暂无可用库位");
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("暂无可用库位!");
return convertJsonString(response);
}
// 生成回库任务
Task backTask = new Task();
backTask.setTaskId(generateId("HK_"));
backTask.setTaskGroup(generateId(""));
backTask.setTaskType(TaskType.IN.getCode());
backTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
backTask.setVehicleId(pickNumQuery.getVehicleId());
backTask.setDestination(nextLocationId);
backTask.setVehicleSize(1);
backTask.setWeight(BigDecimal.ZERO);
backTask.setTaskPriority(1);
backTask.setUserName(pickNumQuery.getUserName());
backTask.setCreateTime(LocalDateTime.now());
if (taskService.save(backTask)) {
// 设置库存状态为回库中
stockService.update(new LambdaUpdateWrapper<Stock>()
.set(Stock::getStockStatus, StockStatus.BACK.getCode())
.eq(Stock::getVehicleId, pickNumQuery.getVehicleId()));
} else {
// 回退库位锁定
locationService.update(new LambdaUpdateWrapper<Location>()
.set(Location::getLocationStatus, LocationStatus.EMPTY.getCode())
.set(Location::getVehicleId, "")
.eq(Location::getLocationId, nextLocationId)
.eq(Location::getLocationStatus, LocationStatus.OCCUPY.getCode()));
logger.error("生成回库任务失败,箱号:{}", pickNumQuery.getVehicleId());
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("生成回库任务失败。");
return convertJsonString(response);
}
}
}
logger.info("确认回库成功。");
response.setCode(ResponseCode.OK.getCode()); response.setCode(ResponseCode.OK.getCode());
response.setMessage("请根据灯光拣选盒子。"); response.setMessage("确认回库成功。");
} else {
logger.error("当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。");
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。");
}
return convertJsonString(response); return convertJsonString(response);
} catch (Exception e) { } catch (Exception e) {
// 回滚事务 // 回滚事务

View File

@ -0,0 +1,30 @@
package com.wms.entity.app.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 拣货/领料数量确认
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PickNumQuery extends PageQuery{
/**
* 箱号
*/
@JsonProperty("vehicleId")
private String vehicleId;
/**
* 料号
*/
@JsonProperty("goodsId")
private String goodsId;
/**
* 领料数量
*/
@JsonProperty("realPickNum")
private BigDecimal realPickNum;
}

View File

@ -0,0 +1,13 @@
package com.wms.entity.app.vo;
import com.wms.entity.app.request.PickNumQuery;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 非计划领料界面显示领料数量
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PickNumOfGoodsVo extends PickNumQuery {
}

View File

@ -74,4 +74,14 @@ public class NoPlanRecord {
*/ */
@TableField("call_user") @TableField("call_user")
private String callUser; private String callUser;
/**
* 已拣选数量
*/
@TableField("picked_num")
private BigDecimal pickedNum;
/**
* 状态
*/
@TableField("pick_status")
private Integer pickStatus;
} }

View File

@ -317,19 +317,19 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
.apply("goods_related ->> '$.remainNum' > 0") .apply("goods_related ->> '$.remainNum' > 0")
.last("limit 1")); .last("limit 1"));
if (stock == null) { if (stock == null) {
// 没有库存那么就要移除当前的outsideVehicles // 没有库存
outsideVehiclesService.removeById(outsideVehicle.getOutsideId()); outsideVehicle.setRemainNum(BigDecimal.ZERO);
outsideVehiclesService.updateById(outsideVehicle);
} else { } else {
StockDetailInfo goodsRelated = stock.getGoodsRelated(); if (outsideVehicle.getRemainNum().compareTo(needNum) > 0) {
if (goodsRelated.getRemainNum().compareTo(needNum) > 0) {
// 当前箱子剩余物料数量多于需求数量 // 当前箱子剩余物料数量多于需求数量
needNum = BigDecimal.ZERO; needNum = BigDecimal.ZERO;
outsideVehicle.setRemainNum(goodsRelated.getRemainNum().subtract(needNum)); outsideVehicle.setRemainNum(outsideVehicle.getRemainNum().subtract(needNum));
usedOutsideVehiclesList.add(outsideVehicle); usedOutsideVehiclesList.add(outsideVehicle);
break; break;
} else { } else {
// 当前箱子物料剩余数量少于需求数量 // 当前箱子物料剩余数量少于需求数量
needNum = needNum.subtract(goodsRelated.getRemainNum()); needNum = needNum.subtract(outsideVehicle.getRemainNum());
outsideVehicle.setRemainNum(BigDecimal.ZERO); outsideVehicle.setRemainNum(BigDecimal.ZERO);
usedOutsideVehiclesList.add(outsideVehicle); usedOutsideVehiclesList.add(outsideVehicle);
} }

View File

@ -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