增加移库预留空位判断

This commit is contained in:
FT577-Server
2026-10-13 09:08:02 +08:00
parent c642880893
commit a4331cc303
7 changed files with 72 additions and 12 deletions

View File

@@ -306,10 +306,18 @@ public class ApiWcsService implements IApiWcsService {
//1500*1350 通用货位510H - 货区3任意层数 //1500*1350 通用货位510H - 货区3任意层数
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build(); cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build();
} }
//>>>限制:区域货位不能放满,留出移库位置,判断满货位数量
boolean isCargoAvailable = basCargoSpaceService.selectBasCargoSpaceIsFull(cargoParam, 10);
if (!isCargoAvailable){
log.warn("【入库货位分配】该货架区域无可分配空位,请检查货架空位状态,货区:{},托盘类型:{},预留移库空位:{}",wcsStockinReiceive.getCargoAreaId(), type, 10);
return AjaxResult.error("【货位分配失败】货架区域可分配货位已满,预留移库空位:10");
}
BasCargoSpace cargoStockin = basCargoSpaceService.selectBasCargoSpaceForStockin(cargoParam); BasCargoSpace cargoStockin = basCargoSpaceService.selectBasCargoSpaceForStockin(cargoParam);
basCargoSpace = cargoStockin; basCargoSpace = cargoStockin;//更新状态用
if (cargoParam == null) { if (cargoParam == null) {
log.warn("【货位分配】该类型托盘立库中无可用货位"); log.warn("【入库货位分配】该类型托盘立库中无可用货位");
return AjaxResult.error("【货位分配失败】该类型托盘立库中无可用货位"); return AjaxResult.error("【货位分配失败】该类型托盘立库中无可用货位");
} }
@@ -331,7 +339,7 @@ public class ApiWcsService implements IApiWcsService {
.build(); .build();
mydoJobService.insertMydoJob(mydoJobNew); mydoJobService.insertMydoJob(mydoJobNew);
log.info("【wms生成入库】<空托入库>作业,作业号:{},任务号:{},托盘号:{},分配货位:{}",mydoJobNew.getJobId() ,mydoJobNew.getTaskNo() ,mydoJobNew.getTrayCode(), cargoStockin.getCargoSpaceId()); log.info("【wms生成入库】<常规入库>作业,作业号:{},任务号:{},托盘号:{},分配货位:{}",mydoJobNew.getJobId() ,mydoJobNew.getTaskNo() ,mydoJobNew.getTrayCode(), cargoStockin.getCargoSpaceId());
}else{ }else{
log.info("【提示】<常规入库>wms已存在该条码作业,托盘号:{}",mydoJob.getTrayCode()); log.info("【提示】<常规入库>wms已存在该条码作业,托盘号:{}",mydoJob.getTrayCode());
basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId()); basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId());

View File

@@ -55,6 +55,17 @@ public interface IBasCargoSpaceService
public List<BasCargoSpace> selectBasCargoSpaceListForContainer(BasCargoSpace basCargoSpace); public List<BasCargoSpace> selectBasCargoSpaceListForContainer(BasCargoSpace basCargoSpace);
/**
* 查询货位信息列表 - 是否满足入库要求(@@@FT577 - 留出移库空位x10)
* true - 可用 false - 无可用货位
*
* @param basCargoSpace 货位信息
* @param restCargo 预留的移库位置数量
* @return 货位信息集合
*/
public boolean selectBasCargoSpaceIsFull(BasCargoSpace basCargoSpace, int restCargo);
/** /**
* 新增货位信息 * 新增货位信息
* *

View File

@@ -82,6 +82,39 @@ public class BasCargoSpaceServiceImpl implements IBasCargoSpaceService
return basCargoSpaceMapper.selectBasCargoSpaceListForContainer(basCargoSpace); return basCargoSpaceMapper.selectBasCargoSpaceListForContainer(basCargoSpace);
} }
/**
* 查询货位信息列表 - 是否满足入库要求(@@@FT577 - 留出移库空位x10)
* true - 可用 false - 无可用货位
*
* @param basCargoSpace 货位信息
* @return 货位信息集合
*/
@Override
public boolean selectBasCargoSpaceIsFull(BasCargoSpace basCargoSpace, int restCargo){
String cargoAreaId = basCargoSpace.getCargoAreaId();
int type = basCargoSpace.getTheType();
//可分配区域的所有货位数量
int cargoFull = selectBasCargoSpaceList(
new BasCargoSpace().builder().cargoAreaId(cargoAreaId).theType(type).locked(CargoSpaceCode.CARGOSPACE_LOCKED_NORMAL).build()
).size();
//可分配区域的所有货位数量
int cargoAvailable = selectBasCargoSpaceList(
new BasCargoSpace().builder().cargoAreaId(cargoAreaId).theType(type).status("2").locked(CargoSpaceCode.CARGOSPACE_LOCKED_NORMAL).build()
).size();
if (cargoAvailable + restCargo > cargoFull){
return true;
}
return false;
}
/** /**
* 新增货位信息 * 新增货位信息
* *

View File

@@ -46,11 +46,11 @@ public class InMydoJobDetailController extends BaseController
{ {
startPage(); startPage();
List<MydoJobDetail> list; List<MydoJobDetail> list;
if (mydoJobDetail.getStatus() != null && Convert.toInt(mydoJobDetail.getStatus()) < 4){ // if (mydoJobDetail.getStatus() != null && Convert.toInt(mydoJobDetail.getStatus()) < 4){
list = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetail); list = mydoJobDetailService.selectMydoJobDetailList(mydoJobDetail);
}else { // }else {
list = mydoJobDetailService.selectMydoJobDetailFinishList(mydoJobDetail); // list = mydoJobDetailService.selectMydoJobDetailFinishList(mydoJobDetail);
} // }
return getDataTable(list); return getDataTable(list);
} }

View File

@@ -723,7 +723,10 @@ public class MydoJobHandler {
inStockinDetailService.updateInStockinDetail(inStockinDetail); inStockinDetailService.updateInStockinDetail(inStockinDetail);
} }
intrayMsgService.deleteInTrayMsgByRollerNumber(detail.getRollerNumber()); InTrayMsg msg = intrayMsgService.selectInTrayMsgByRollerNumber(detail.getRollerNumber());
if (ObjUtil.isNotNull(msg)){
intrayMsgService.deleteInTrayMsgByRollerNumber(detail.getRollerNumber());
}
}//子任务循环处理 }//子任务循环处理

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request' import request from '@/utils/request'
// 查询作业子信息列表 // 查询作业子信息列表
export function listJobdetail(query) { export function listJobDetail(query) {
return request({ return request({
url: '/in/jobdetail/list', url: '/in/jobdetail/list',
method: 'get', method: 'get',

View File

@@ -176,6 +176,11 @@
<!-- <el-table-column label="出库数量" align="center" prop="outQuantity" width="100" />--> <!-- <el-table-column label="出库数量" align="center" prop="outQuantity" width="100" />-->
<!-- <el-table-column label="客户名称" align="center" prop="customerName" width="120" />--> <!-- <el-table-column label="客户名称" align="center" prop="customerName" width="120" />-->
<el-table-column label="供应商名称" align="center" prop="supplierName" width="120" /> <el-table-column label="供应商名称" align="center" prop="supplierName" width="120" />
<el-table-column label="状态" align="center" prop="status" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.stock_status" :value="scope.row.status"/>
</template>
</el-table-column>
<!-- <el-table-column label="入库时间" align="center" prop="inDate" width="160">--> <!-- <el-table-column label="入库时间" align="center" prop="inDate" width="160">-->
<!-- <template slot-scope="scope">--> <!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.inDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>--> <!-- <span>{{ parseTime(scope.row.inDate, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>-->
@@ -202,11 +207,11 @@
<script> <script>
import { listJob, cancelJob, completeJob } from "@/api/in/job" import { listJob, cancelJob, completeJob } from "@/api/in/job"
import { listJobdetail } from "@/api/in/jobdetail" import { listJobDetail } from "@/api/in/jobdetail"
export default { export default {
name: "Job", name: "Job",
dicts: ['mydo_job_execution_phase', 'mydo_job_status'], dicts: ['mydo_job_execution_phase', 'mydo_job_status', 'stock_status'],
data() { data() {
return { return {
// 遮罩层 // 遮罩层
@@ -321,7 +326,7 @@ export default {
getJobDetailList() { getJobDetailList() {
if (!this.detailQueryParams.jobId) return if (!this.detailQueryParams.jobId) return
this.detailLoading = true this.detailLoading = true
listJobdetail(this.detailQueryParams).then(response => { listJobDetail(this.detailQueryParams).then(response => {
this.jobDetailList = response.rows || [] this.jobDetailList = response.rows || []
this.detailTotal = response.total || 0 this.detailTotal = response.total || 0
this.detailLoading = false this.detailLoading = false