增加货位信息手动盘点出库功能

This commit is contained in:
FT577-Server
2026-10-28 09:53:48 +08:00
parent 5a4b5a2bab
commit f1a94c8707
8 changed files with 228 additions and 21 deletions

View File

@@ -49,6 +49,18 @@ public class WcsServiceController extends BaseController {
}
/**
* 盘点货位出库
*/
@PostMapping("/inventoryOutByManual")
public AjaxResult inventoryOutyByManual(@RequestBody Map<String, String> params) {
AjaxResult ajaxResult = apiWcsService.inventoryOutByManual(params);
RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(params), "制定货位盘点出库", ajaxResult);
requestLogService.insertRequestLog(requestLog);
return ajaxResult;
}
/**
* 请求补码作业
*/

View File

@@ -619,6 +619,150 @@ public class ApiWcsService implements IApiWcsService {
}
/**
* 指定货位出库
* @param params
* @return
*/
@Transactional(rollbackFor = Exception.class)
public AjaxResult inventoryOutByManual(Map<String, String> params){
String cargoSpaceId = params.get("cargoSpaceId");
//当前货位
BasCargoSpace cargoSpaceCurrent = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId);
if (ObjUtil.isNull(cargoSpaceCurrent)){
log.warn("【操作失败】找不到该货位,可能是货位异常或参数错误,请联系管理员,货位号:", cargoSpaceId);
return AjaxResult.error("找不到该货位信息");
}
// if (!cargoSpaceCurrent.getLocked().equals(CargoSpaceCode.CARGOSPACE_LOCKED_NORMAL)){
// log.warn("【操作失败】当前货位已经锁定或禁用,不能执行<指定货位出库>该操作,货位号:", cargoSpaceId);
// return AjaxResult.error("当前货位已经锁定或禁用,不能执行<指定货位出库>该操作");
// }
// MydoJob job = mydoJobService.selectMydoJobBy(cargoSpace.getTrayCode());
//todo 移库判断
if(cargoSpaceCurrent.getIssDouble().equals(CargoSpaceCode.CARGOSPACE_ISDOUBLE_Y)){
//双伸货位出库判断单伸位置是否有货
BasCargoSpace cargoSpaceSingle = basCargoSpaceService.selectAnotherBasCargoSpaceBySameGroup(cargoSpaceCurrent);
//单伸位非空闲状态 - 触发移库任务
if (cargoSpaceSingle.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED)){
String moveJobId = basJobIdService.getId(JobIdType.MYDOJOB_MOVE);
String moveTaskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT);
BasCargoSpace targetCargo = basCargoSpaceService.selectBasCargoSpaceForStockin(
new BasCargoSpace().builder().theType(cargoSpaceCurrent.getTheType()).roadwayId(cargoSpaceCurrent.getRoadwayId()).build()
);
//生成并推送移库
MydoJob moveJob = new MydoJob().builder()
.jobId(moveJobId)
.taskNo(moveTaskNo)
.status(TaskStatusEnum.READY.getCode())
.inOrOut(TaskType.TASKTYPE_PICK_STOCK_MOVE)
.executionPhase("0")
.trayCode(cargoSpaceSingle.getTrayCode())
.trayType(cargoSpaceSingle.getTheType().toString())
.roadwayId(cargoSpaceSingle.getRoadwayId())
.cargoSpaceId(cargoSpaceSingle.getCargoSpaceId())
.targetCargoSpaceId(targetCargo.getCargoSpaceId())
.priority(0)
.build();
log.info("【指定货位盘点出库】出库双伸货位外侧有货,生成移库作业,作业号:{},移库货位:{},目标货位:{}", moveJobId, cargoSpaceSingle.getCargoSpaceId(), targetCargo.getCargoSpaceId());
//推送移库
AjaxResult ajaxResult;
/*-----------------推送wcs移库任务----------------- */
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("reqCode", UUID.randomUUID().toString());//请求码
paramMap.put("jobId", moveJob.getJobId());//作业号
paramMap.put("taskNo", moveJob.getTaskNo());//任务号
paramMap.put("trayCode", moveJob.getTrayCode().trim());//容器编号
paramMap.put("cargoSpaceId", moveJob.getCargoSpaceId());//货位
paramMap.put("targetCargoSpaceId", moveJob.getTargetCargoSpaceId());//目标货位
paramMap.put("inOrOut", moveJob.getInOrOut());//任务类型
paramMap.put("priority", 0);//任务优先级
ajaxResult = sendMoveMydoJob(paramMap);
log.info(
"【盘点出库-移库】推送wcs移库作业,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId()
);
if (ajaxResult.isSuccess()){
//生成托盘主作业
mydoJobService.insertMydoJob(moveJob);
List<BasStock> stocks = basStockService.selectBasStockListByTrayCode(moveJob.getTrayCode());
if (!stocks.isEmpty()){
for(BasStock stock : stocks){
//更新库存表货位【占用】状态
stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED);
basStockService.updateBasStock(stock);
}
}
//更新货位表【预占用】状态
basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpaceSingle.getCargoSpaceId(),cargoSpaceSingle.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT);
basCargoSpaceService.updateBasCargoSpaceStatus(targetCargo.getCargoSpaceId(),cargoSpaceSingle.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN);
log.info(
"【手动出库-移库】推送成功,货位和库存更为<占用>状态,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId()
);
}else{
return AjaxResult.error("【手动出库-移库】推送失败,请查看接口错误信息");
}
}else if (cargoSpaceSingle.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN) ||
cargoSpaceSingle.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT)){
return AjaxResult.error("【盘点出库-移库】推送失败,操作中止,对应的单伸货位状态不符合移库条件");
}
}
List<MydoJob> jobs = mydoJobService.selectMydoJobList(
new MydoJob().builder().cargoSpaceId(cargoSpaceId).build()
);
if (jobs.isEmpty()){
String jobId = basJobIdService.getId(JobIdType.MYDOJOB_INVENTORY_STOCKOUT);
String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT_INVENTORY);
int taskType = TaskType.TASKTYPE_STOCKOUT_INVENTORY;
MydoJob mydoJob = new MydoJob().builder()
.jobId(jobId)
.taskNo(taskNo)
.status(TaskStatusEnum.READY.getCode())
.warehouseId(cargoSpaceCurrent.getWarehouseId())
.warehouseName("立体库")
.executionPhase("0")
.inOrOut(taskType)
.trayCode(cargoSpaceCurrent.getTrayCode())
// .exitId()
.roadwayId(cargoSpaceCurrent.getRoadwayId())
.cargoSpaceId(cargoSpaceId)
.cargoSpaceName(cargoSpaceCurrent.getCargoSpaceName())
.trayType(cargoSpaceCurrent.getTheType().toString())
.build();
mydoJobService.insertMydoJob(mydoJob);
log.info("【wms生成出库】<货位盘点出库>作业,作业号:{},任务号:{},托盘号:{},盘点货位:{}",mydoJob.getJobId() ,mydoJob.getTaskNo() ,mydoJob.getTrayCode(), cargoSpaceId);
}else{
log.info("【wms指定出库】<货位盘点出库>操作失败,已经存在当前货位的盘点出库任务,盘点货位:{}", cargoSpaceId);
}
return AjaxResult.error();
}
//todo 补码
/**
* 请求补码作业

View File

@@ -208,7 +208,7 @@ public interface IPdaService {
* @param params
* @return
*/
public AjaxResult inventoryTrayCodeComplete(Map<String, Object> params);
AjaxResult inventoryTrayCodeComplete(Map<String, Object> params);
}

View File

@@ -1140,16 +1140,18 @@ public class PdaServiceImpl implements IPdaService {
}
if (!mydoJob.getStatus().equals(TaskStatusEnum.AUTO_FINISHED.getCode())){
log.warn("【操作失败】请等待当前盘点作业出库完成再执行确认操作,托盘号:{}", trayCode);
return AjaxResult.error("请等待当前盘点作业出库完成再执行确认操作");
log.warn("【操作失败】请等待当前盘点完成作业出库再执行确认操作,托盘号:{}", trayCode);
return AjaxResult.error("请等待当前盘点作业完成出库再执行确认操作");
}
List<PdStockpdDetail> details = pdStockpdDetailService.selectPdStockpdDetailList(
new PdStockpdDetail().builder().trayCode(trayCode).build()
);
for (PdStockpdDetail detail : details){
detail.setAssignNum(BigDecimal.ONE);
pdStockpdDetailService.updatePdStockpdDetail(detail);
if (!details.isEmpty()){
for (PdStockpdDetail detail : details){
detail.setAssignNum(BigDecimal.ONE);
pdStockpdDetailService.updatePdStockpdDetail(detail);
}
}
String jobId = basJobIdService.getId(JobIdType.JOB_MANUAL_LIST_INVENTORY_STOCKIN);