现场运行调整
This commit is contained in:
@@ -247,7 +247,14 @@ public class ApiErpService implements IApiErpService {
|
|||||||
log.info("【ERP出库单明细】{}", JSONUtil.toJsonStr(detail));
|
log.info("【ERP出库单明细】{}", JSONUtil.toJsonStr(detail));
|
||||||
}
|
}
|
||||||
|
|
||||||
return AjaxResult.success("操作成功,下发erp出库单据号:" + docNo);
|
log.info("【ERP推送出库】操作成功,下发出库单据号:{}", docNo);
|
||||||
|
|
||||||
|
// outStockoutService.autoAssignOutStockout(stockoutId);
|
||||||
|
outStockoutService.autoAssignOutStockoutByErpBill(docNo);
|
||||||
|
|
||||||
|
log.info("【ERP推送出库】出库单据已经执行自动分配, 单据号:{}", docNo);
|
||||||
|
|
||||||
|
return AjaxResult.success("操作成功,erp下发出库单据号:" + docNo);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import com.ruoyi.out.stockoutdetail.domain.OutStockoutDetail;
|
|||||||
import com.ruoyi.out.stockoutdetail.service.IOutStockoutDetailService;
|
import com.ruoyi.out.stockoutdetail.service.IOutStockoutDetailService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@@ -299,7 +298,7 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build();
|
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build();
|
||||||
}else if (type == 2){
|
}else if (type == 2){
|
||||||
//1500*1200 高货位510H - 只能放指定层高的货位
|
//1500*1200 高货位510H - 只能放指定层高的货位
|
||||||
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).theHeight(wcsStockinReiceive.getHeight()).build();
|
cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build();
|
||||||
}else{
|
}else{
|
||||||
//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();
|
||||||
@@ -433,6 +432,11 @@ public class ApiWcsService implements IApiWcsService {
|
|||||||
return AjaxResult.error("找不到该货位信息");
|
return AjaxResult.error("找不到该货位信息");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!cargoSpace.getLocked().equals(CargoSpaceCode.CARGOSPACE_LOCKED_NORMAL)){
|
||||||
|
log.warn("【操作失败】当前货位已经锁定或禁用,不能执行<指定货位出库>该操作,货位号:", cargoSpaceId);
|
||||||
|
return AjaxResult.error("当前货位已经锁定或禁用,不能执行<指定货位出库>该操作");
|
||||||
|
}
|
||||||
|
|
||||||
// if (!cargoSpace.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED)){
|
// if (!cargoSpace.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED)){
|
||||||
// log.warn("【操作失败】该货位已被其它任务预占用,请等待任务执行完成后重试,货位号:", cargoSpaceId);
|
// log.warn("【操作失败】该货位已被其它任务预占用,请等待任务执行完成后重试,货位号:", cargoSpaceId);
|
||||||
// return AjaxResult.error("该货位已被其它任务预占用,请等待任务执行完成后重试");
|
// return AjaxResult.error("该货位已被其它任务预占用,请等待任务执行完成后重试");
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.ruoyi.bas.cargospace.controller;
|
package com.ruoyi.bas.cargospace.controller;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.ruoyi.common.CargoSpaceCode;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -42,7 +44,9 @@ public class BasCargoSpaceController extends BaseController
|
|||||||
public TableDataInfo list(BasCargoSpace basCargoSpace)
|
public TableDataInfo list(BasCargoSpace basCargoSpace)
|
||||||
{
|
{
|
||||||
startPage();
|
startPage();
|
||||||
List<BasCargoSpace> list = basCargoSpaceService.selectBasCargoSpaceList(basCargoSpace);
|
List<BasCargoSpace> list = basCargoSpaceService.selectBasCargoSpaceList(basCargoSpace).stream()
|
||||||
|
.filter(a -> !a.getLocked().equals(CargoSpaceCode.CARGOSPACE_LOCKED_BANED))
|
||||||
|
.toList();
|
||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,13 @@ public class CargoSpaceCode {
|
|||||||
|
|
||||||
|
|
||||||
/** 货位锁定状态 - 锁定 */
|
/** 货位锁定状态 - 锁定 */
|
||||||
public static final String CARGOSPACE_LOCKED = "Y";
|
public static final String CARGOSPACE_LOCKED_LOCK = "Y";
|
||||||
|
|
||||||
/** 货位锁定状态 - 未锁定 */
|
/** 货位锁定状态 - 未锁定 */
|
||||||
public static final String CARGOSPACE_UNLOCKED = "N";
|
public static final String CARGOSPACE_LOCKED_NORMAL = "N";
|
||||||
|
|
||||||
|
/** 货位锁定状态 - 禁用 */
|
||||||
|
public static final String CARGOSPACE_LOCKED_BANED = "B";
|
||||||
|
|
||||||
|
|
||||||
/** 货位对应托盘类型 - 类型1 */
|
/** 货位对应托盘类型 - 类型1 */
|
||||||
|
|||||||
@@ -591,8 +591,14 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
log.info("【账务处理-手动出库】更新货位状态,作业号:{},货位编号:{},托盘号:{}", jobId, cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode());
|
log.info("【账务处理-手动出库】更新货位状态,作业号:{},货位编号:{},托盘号:{}", jobId, cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode());
|
||||||
|
|
||||||
//--------------------处理任务表和子任务表--------------------
|
//--------------------处理任务表和子任务表--------------------
|
||||||
//1.更新任务主表状态
|
//1.更新任务主表状态并移除作业
|
||||||
mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode());
|
mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode());
|
||||||
|
updateMydoJob(mydoJob);
|
||||||
|
deleteMydoJobByJobId(jobId);
|
||||||
|
|
||||||
|
//2.并移除所有子作业
|
||||||
|
mydoJobDetailService.insertMydoJobDetailsForJobFinish(jobId);
|
||||||
|
mydoJobDetailService.deleteMydoJobDetailsByJobId(jobId);
|
||||||
|
|
||||||
log.info("【账务处理-手动出库】出库完成,等待确认,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
|
log.info("【账务处理-手动出库】出库完成,等待确认,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode());
|
||||||
|
|
||||||
@@ -783,6 +789,8 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>>>>空托出库<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>>>>空托出库<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
//>>>>>>>>>>>>>>>>>>>>>>>空托出库<<<<<<<<<<<<<<<<<<<<<<<<
|
//>>>>>>>>>>>>>>>>>>>>>>>空托出库<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
if (type == TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY){
|
if (type == TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY){
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.ruoyi.in.stockindetail.service.impl;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.ruoyi.common.Utils.DecimalUtil;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.ruoyi.in.stockindetail.mapper.InStockinDetailMapper;
|
import com.ruoyi.in.stockindetail.mapper.InStockinDetailMapper;
|
||||||
@@ -172,7 +173,7 @@ public class InStockinDetailServiceImpl implements IInStockinDetailService
|
|||||||
|
|
||||||
//核对每条明细的计划数量和分配数量 - 更新分配状态
|
//核对每条明细的计划数量和分配数量 - 更新分配状态
|
||||||
for(InStockinDetail detail : details){
|
for(InStockinDetail detail : details){
|
||||||
if(detail.getQuantity().equals(detail.getAssignNum())){
|
if(DecimalUtil.eq(detail.getQuantity(), detail.getAssignNum())){
|
||||||
detail.setStatus(1);
|
detail.setStatus(1);
|
||||||
updateInStockinDetail(detail);
|
updateInStockinDetail(detail);
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -20,6 +20,14 @@ public interface OutStockoutMapper
|
|||||||
*/
|
*/
|
||||||
public OutStockout selectOutStockoutByStockoutId(String stockoutId);
|
public OutStockout selectOutStockoutByStockoutId(String stockoutId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询出库单据主信息
|
||||||
|
*
|
||||||
|
* @param erpBill mes下发单号
|
||||||
|
* @return 出库单据主信息
|
||||||
|
*/
|
||||||
|
public OutStockout selectOutStockoutByErpBill(String erpBill);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询出库单据主信息列表
|
* 查询出库单据主信息列表
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -22,6 +22,14 @@ public interface IOutStockoutService
|
|||||||
*/
|
*/
|
||||||
public OutStockout selectOutStockoutByStockoutId(String stockoutId);
|
public OutStockout selectOutStockoutByStockoutId(String stockoutId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询出库单据主信息
|
||||||
|
*
|
||||||
|
* @param erpBill erp出库单号
|
||||||
|
* @return 出库单据主信息
|
||||||
|
*/
|
||||||
|
public OutStockout selectOutStockoutByErpBill(String erpBill);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询出库单据主信息列表
|
* 查询出库单据主信息列表
|
||||||
*
|
*
|
||||||
@@ -94,6 +102,22 @@ public interface IOutStockoutService
|
|||||||
*/
|
*/
|
||||||
public AjaxResult autoAssignOutStockout(String stockoutId);
|
public AjaxResult autoAssignOutStockout(String stockoutId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动分配出库单据
|
||||||
|
*
|
||||||
|
* @param erpBill mes/erp单据
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public AjaxResult autoAssignOutStockoutByErpBill(String erpBill);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动分配出库单据
|
||||||
|
*
|
||||||
|
* @param erpBill 出库单据主键
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
// public AjaxResult autoAssignOutStockout(String erpBill);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手动分配出库单据
|
* 手动分配出库单据
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -84,6 +84,15 @@ public class OutStockoutServiceImpl implements IOutStockoutService
|
|||||||
return outStockoutMapper.selectOutStockoutByStockoutId(stockoutId);
|
return outStockoutMapper.selectOutStockoutByStockoutId(stockoutId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询出库单据主信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public OutStockout selectOutStockoutByErpBill(String erpBill)
|
||||||
|
{
|
||||||
|
return outStockoutMapper.selectOutStockoutByErpBill(erpBill);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询出库单据主信息列表
|
* 查询出库单据主信息列表
|
||||||
*/
|
*/
|
||||||
@@ -213,7 +222,7 @@ public class OutStockoutServiceImpl implements IOutStockoutService
|
|||||||
{
|
{
|
||||||
OutStockout outStockout = selectOutStockoutByStockoutId(stockoutId);
|
OutStockout outStockout = selectOutStockoutByStockoutId(stockoutId);
|
||||||
if (!outStockout.getStatus().equals(StockStatusEnum.RUNNING.getCode())){
|
if (!outStockout.getStatus().equals(StockStatusEnum.RUNNING.getCode())){
|
||||||
log.warn("【出库分配】操作失败,非<执行>状态的单据不能进行分配操作,请先审核完成后点击<执行>操作,单据号:{}", stockoutId);
|
log.warn("【出库分配】操作失败,非<执行>状态的单据不能进行分配操作,请先审核完成后点击<执行>操作,wms单据号:{},erp单据号:{}", stockoutId, outStockout.getErpBill());
|
||||||
return AjaxResult.error("非【执行】状态的单据不能进行分配操作");
|
return AjaxResult.error("非【执行】状态的单据不能进行分配操作");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,7 +231,223 @@ public class OutStockoutServiceImpl implements IOutStockoutService
|
|||||||
new OutStockoutDetail().builder().stockoutId(stockoutId).allotNum(BigDecimal.valueOf(0)).build()
|
new OutStockoutDetail().builder().stockoutId(stockoutId).allotNum(BigDecimal.valueOf(0)).build()
|
||||||
);
|
);
|
||||||
if (details.isEmpty()){
|
if (details.isEmpty()){
|
||||||
log.warn("【出库单据分配】分配失败,该单据号的子单明细没有可分配的物料,请检查单据状态,单据号:{}", stockoutId);
|
log.warn("【出库单据分配】分配失败,该单据号的子单明细没有可分配的物料,请检查单据状态,wms单据号:{},erp单据号:{}", stockoutId, outStockout.getErpBill());
|
||||||
|
return AjaxResult.error("操作异常,该单据号的子单明细没有可分配的物料,请检查单据状态");
|
||||||
|
}
|
||||||
|
|
||||||
|
int num = 1;
|
||||||
|
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>>>分配物料<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>>>分配物料<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
//>>>>>>>>>>>>>>>>>>>>>>分配物料<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
for (OutStockoutDetail detail : details) {
|
||||||
|
|
||||||
|
//>>>辊号(物料)校验
|
||||||
|
if (ObjUtil.isNull(basStockService.selectBasStockByRollerNumber(detail.getRollerNumber()))){
|
||||||
|
log.warn("【出库分配异常】找不到该版辊的库存信息,辊号:{}", detail.getRollerNumber());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//1.获取子单明细辊号对应的库存,拿到出库板棍的托盘号用于生成主作业
|
||||||
|
BasStock stock = basStockService.selectBasStockByRollerNumber(detail.getRollerNumber());
|
||||||
|
|
||||||
|
//>>>获取出库货位 - 如果是<双伸货位>且对应<单伸货位有货>的情况则触发【移库作业】
|
||||||
|
BasCargoSpace cargoCurrent = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(stock.getCargoSpaceId());
|
||||||
|
|
||||||
|
//【移库判断】如果双伸位,则需要额外判断其对应的单伸货位状态和库存
|
||||||
|
if (cargoCurrent.getIssDouble().equals(CargoSpaceCode.CARGOSPACE_ISDOUBLE_Y)){
|
||||||
|
//【移库判断-1】此处获取出库双伸货位对应的外侧单伸货位号进行移库
|
||||||
|
BasCargoSpace cargoSingle = basCargoSpaceService.selectAnotherBasCargoSpaceBySameGroup(cargoCurrent);
|
||||||
|
//【移库判断-2】如果单伸位有货,触发移库作业
|
||||||
|
if (cargoSingle.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(cargoCurrent.getTheType()).roadwayId(cargoCurrent.getRoadwayId()).build()
|
||||||
|
);
|
||||||
|
|
||||||
|
//生成并推送移库
|
||||||
|
MydoJob moveJob = new MydoJob().builder()
|
||||||
|
.jobId(moveJobId)
|
||||||
|
.taskNo(moveTaskNo)
|
||||||
|
.status(TaskStatusEnum.READY.getCode())
|
||||||
|
.inOrOut(TaskType.TASKTYPE_PICK_STOCK_MOVE)
|
||||||
|
.executionPhase("0")
|
||||||
|
.trayCode(cargoSingle.getTrayCode())
|
||||||
|
.trayType(cargoSingle.getTheType())
|
||||||
|
.roadwayId(cargoSingle.getRoadwayId())
|
||||||
|
.cargoSpaceId(cargoSingle.getCargoSpaceId())
|
||||||
|
.targetCargoSpaceId(targetCargo.getCargoSpaceId())
|
||||||
|
.priority(0)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
log.info("【出库分配】出库双伸货位外侧有货,生成移库作业,作业号:{},移库货位:{},目标货位:{}", moveJobId, cargoSingle.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("trayCode", moveJob.getTrayCode().trim());//容器编号
|
||||||
|
paramMap.put("cargoSpaceId", moveJob.getCargoSpaceId());//货位
|
||||||
|
paramMap.put("targetCargoSpaceId", moveJob.getTargetCargoSpaceId());//目标货位
|
||||||
|
paramMap.put("inOrOut", moveJob.getInOrOut());//任务类型
|
||||||
|
paramMap.put("priority", 0);//任务优先级
|
||||||
|
|
||||||
|
ajaxResult = apiWcsService.sendMoveMydoJob(paramMap);
|
||||||
|
log.info(
|
||||||
|
"【出库分配-移库】推送wcs移库作业,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId()
|
||||||
|
);
|
||||||
|
if (ajaxResult.isSuccess()){
|
||||||
|
//生成托盘主作业
|
||||||
|
mydoJobService.insertMydoJob(moveJob);
|
||||||
|
|
||||||
|
//生成主任务后子任务明细重新计数
|
||||||
|
num = 1;
|
||||||
|
|
||||||
|
log.info(
|
||||||
|
"【出库分配-移库】推送成功,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId()
|
||||||
|
);
|
||||||
|
|
||||||
|
//更新库存表货位【占用】状态
|
||||||
|
stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED);
|
||||||
|
basStockService.updateBasStock(stock);
|
||||||
|
|
||||||
|
//更新货位表【预占用】状态
|
||||||
|
basCargoSpaceService.updateBasCargoSpaceStatus(cargoSingle.getCargoSpaceId(),cargoSingle.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT);
|
||||||
|
basCargoSpaceService.updateBasCargoSpaceStatus(targetCargo.getCargoSpaceId(),cargoSingle.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}//执行完移库判断
|
||||||
|
|
||||||
|
//2.生成辊号库存对应托盘的出库作业
|
||||||
|
MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(stock.getTrayCode());
|
||||||
|
|
||||||
|
if (ObjUtil.isNull(mydoJob)){
|
||||||
|
|
||||||
|
String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKOUT);
|
||||||
|
String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT);
|
||||||
|
//判断出库类型,用于确定完成后是否生成回流任务
|
||||||
|
//---1.遍历子单明细的辊号集合是否包含出库托盘库存的辊号集合
|
||||||
|
//---2.如果全部匹配,则任务类型为整托出库,否则为拣选出库
|
||||||
|
int taskType = TaskType.TASKTYPE_STOCKOUT_PICKING;
|
||||||
|
//匹配出库版辊确认是【整托出库】还是【拣选出库】
|
||||||
|
List<String> detailRollerNumbers = outStockoutDetailService.selectOutStockoutDetailRollerNumberList(detail.getStockoutId());//【子单所有辊号集合】
|
||||||
|
List<String> stockRollerNumbers = basStockService.selectBasStockRollerNumberList(stock.getTrayCode());//【库存托盘辊号集合】
|
||||||
|
if (detailRollerNumbers.containsAll(stockRollerNumbers)){
|
||||||
|
taskType = TaskType.TASKTYPE_STOCKOUT;
|
||||||
|
}
|
||||||
|
|
||||||
|
mydoJob = new MydoJob().builder()
|
||||||
|
.jobId(jobId)
|
||||||
|
.taskNo(taskNo)
|
||||||
|
.status(TaskStatusEnum.READY.getCode())
|
||||||
|
.inOrOut(taskType)
|
||||||
|
.executionPhase("0")
|
||||||
|
.trayCode(cargoCurrent.getTrayCode())
|
||||||
|
.trayType(cargoCurrent.getTheType())
|
||||||
|
.roadwayId(cargoCurrent.getRoadwayId())
|
||||||
|
.cargoSpaceId(cargoCurrent.getCargoSpaceId())
|
||||||
|
.cargoSpaceName(cargoCurrent.getThePlatoon() + "排" + cargoCurrent.getTheColumn() + "列" + cargoCurrent.getTheFloor() + "层")
|
||||||
|
.priority(10)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
//生成托盘主作业
|
||||||
|
mydoJobService.insertMydoJob(mydoJob);
|
||||||
|
num = 1;
|
||||||
|
log.info("【出库分配】生成出库作业,作业号:{},托盘号:{}", mydoJob.getJobId(), stock.getTrayCode());
|
||||||
|
//
|
||||||
|
// //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
// //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
// //>>>>>>>>>>>>>>>>>>>>>> 推送出库 <<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
// AjaxResult ajaxResult;
|
||||||
|
// /*-----------------推送wcs任务----------------- */
|
||||||
|
// HashMap<String, Object> paramMap = new HashMap<>();
|
||||||
|
// paramMap.put("reqCode", UUID.randomUUID().toString());//请求码
|
||||||
|
// paramMap.put("jobId", mydoJob.getJobId());//作业号
|
||||||
|
// paramMap.put("taskNo", mydoJob.getTaskNo());//任务号
|
||||||
|
// paramMap.put("trayCode", mydoJob.getTrayCode());//容器编号
|
||||||
|
// paramMap.put("cargoSpaceId", mydoJob.getCargoSpaceId());//货位
|
||||||
|
// paramMap.put("inOrOut", mydoJob.getInOrOut());//任务类型
|
||||||
|
//
|
||||||
|
// ajaxResult = apiWcsService.sendOutMydoJob(paramMap);
|
||||||
|
//
|
||||||
|
// log.info("【推送出库】推送wcs出库作业,作业号:{},托盘条码:{},分配货位:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId());
|
||||||
|
//
|
||||||
|
// if (ajaxResult.isSuccess()){
|
||||||
|
//
|
||||||
|
// //生成主任务后子任务明细重新计数
|
||||||
|
// num = 1;
|
||||||
|
//
|
||||||
|
// log.info("【推送出库】生成并推送wcs作业成功,作业号:{},托盘条码:{},分配货位:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId());
|
||||||
|
//
|
||||||
|
// //更新货位【预占用】
|
||||||
|
// cargoCurrent.setStatus(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT);
|
||||||
|
// basCargoSpaceService.updateBasCargoSpace(cargoCurrent);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//若主任务已经存在,则补充一条子作业
|
||||||
|
mydoJobDetailService.insertMydoJobDetail(
|
||||||
|
new MydoJobDetail().builder()
|
||||||
|
.jobId(mydoJob.getJobId())
|
||||||
|
.jobDetailId(mydoJob.getJobId() + "-" + num++)
|
||||||
|
.inOrOutId(detail.getStockoutId())
|
||||||
|
.inOrOutDId(detail.getStockoutDetailId())
|
||||||
|
.stockinId(stock.getStockinId())
|
||||||
|
.stockinDetailId(stock.getStockinDetailId())
|
||||||
|
.productId(detail.getProductId())
|
||||||
|
.productName(stock.getProductName())
|
||||||
|
.lotNo(detail.getLotNo())
|
||||||
|
.stockQuantity(stock.getQuantity())
|
||||||
|
.outQuantity(BigDecimal.ZERO)
|
||||||
|
.trayType(cargoCurrent.getTheType())
|
||||||
|
.status(0)
|
||||||
|
.inDate(stock.getInDate())
|
||||||
|
.rollerNumber(stock.getRollerNumber())
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
|
||||||
|
//更新库存明细【占用】
|
||||||
|
stock.setStockStatus(BasStockStatusEnum.OCCUPIED.getCode());//库存状态
|
||||||
|
stock.setOutQuantity(detail.getQuantity());//出库数量
|
||||||
|
basStockService.updateBasStock(stock);
|
||||||
|
|
||||||
|
//生成子作业后更新子单【分配数量】
|
||||||
|
detail.setAllotNum(BigDecimal.valueOf(1));
|
||||||
|
outStockoutDetailService.updateOutStockoutDetail(detail);
|
||||||
|
|
||||||
|
log.info("【出库分配】生成子作业,作业号:{},辊号:{}", mydoJob.getJobId(), stock.getRollerNumber());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("【出库单据分配】分配成功,单据号:{}", details.get(0).getStockoutId());
|
||||||
|
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AjaxResult autoAssignOutStockoutByErpBill(String erpBill)
|
||||||
|
{
|
||||||
|
OutStockout outStockout = selectOutStockoutByErpBill(erpBill);
|
||||||
|
if (!outStockout.getStatus().equals(StockStatusEnum.RUNNING.getCode())){
|
||||||
|
log.warn("【出库分配】操作失败,非<执行>状态的单据不能进行分配操作,请先审核完成后点击<执行>操作,wms单据号:{},erp单据号:{}", outStockout.getStockoutId(), erpBill);
|
||||||
|
return AjaxResult.error("非【执行】状态的单据不能进行分配操作");
|
||||||
|
}
|
||||||
|
|
||||||
|
//校验>>>出库单据明细
|
||||||
|
List<OutStockoutDetail> details = outStockoutDetailService.selectOutStockoutDetailList(
|
||||||
|
new OutStockoutDetail().builder().stockoutId(outStockout.getStockoutId()).allotNum(BigDecimal.valueOf(0)).build()
|
||||||
|
);
|
||||||
|
if (details.isEmpty()){
|
||||||
|
log.warn("【出库单据分配】分配失败,该单据号的子单明细没有可分配的物料,请检查单据状态,wms单据号:{},erp单据号:{}", outStockout.getStockoutId(), erpBill);
|
||||||
return AjaxResult.error("操作异常,该单据号的子单明细没有可分配的物料,请检查单据状态");
|
return AjaxResult.error("操作异常,该单据号的子单明细没有可分配的物料,请检查单据状态");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -121,28 +121,6 @@ public class PdaStockoutController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 【手动指定出库】出库确认 - 托盘号查询 - 仅查询托盘上出库单中包含的版辊信息
|
|
||||||
* @param trayCode 托盘号
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@GetMapping("/getManualStockoutInfoByTrayCode")
|
|
||||||
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
|
|
||||||
public AjaxResult getManualStockoutInfoByTrayCode(String trayCode) {
|
|
||||||
try {
|
|
||||||
MydoJob job = mydoJobService.selectMydoJobByTrayCode(trayCode);
|
|
||||||
List<MydoJobDetail> info = pdaService.getStockoutInfoByTrayCode(trayCode);
|
|
||||||
if(ObjUtil.isNull(job) || info.isEmpty() || job.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_MANUAL){
|
|
||||||
return AjaxResult.error("找不到当前<手动>出库作业明细,请检查作业状态");
|
|
||||||
}else{
|
|
||||||
return AjaxResult.success(info);
|
|
||||||
}
|
|
||||||
} catch (RuntimeException e) {
|
|
||||||
return AjaxResult.error(e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 呼叫空托出库
|
* 呼叫空托出库
|
||||||
* @param params 货位区域,托盘类型
|
* @param params 货位区域,托盘类型
|
||||||
@@ -203,6 +181,28 @@ public class PdaStockoutController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 【手动指定出库】出库确认 - 托盘号查询 - 仅查询托盘上出库单中包含的版辊信息
|
||||||
|
* @param trayCode 托盘号
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/getManualStockoutInfoByTrayCode")
|
||||||
|
@PreAuthorize("@ss.hasPermi('out:bound:task:info')")
|
||||||
|
public AjaxResult getManualStockoutInfoByTrayCode(String trayCode) {
|
||||||
|
try {
|
||||||
|
MydoJob job = mydoJobService.selectMydoJobByTrayCode(trayCode);
|
||||||
|
List<MydoJobDetail> info = pdaService.getStockoutInfoByTrayCode(trayCode);
|
||||||
|
if(ObjUtil.isNull(job) || info.isEmpty() || job.getInOrOut() != TaskType.TASKTYPE_STOCKOUT_MANUAL){
|
||||||
|
return AjaxResult.error("找不到当前<手动>出库作业明细,请检查作业状态");
|
||||||
|
}else{
|
||||||
|
return AjaxResult.success(info);
|
||||||
|
}
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
return AjaxResult.error(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出库确认 - 一键确认 - 托盘统一更新出库数量
|
* 出库确认 - 一键确认 - 托盘统一更新出库数量
|
||||||
* @param trayCode
|
* @param trayCode
|
||||||
|
|||||||
@@ -215,7 +215,6 @@ public class PdaServiceImpl implements IPdaService {
|
|||||||
|
|
||||||
//>>>扣减子单的【扫码数量】
|
//>>>扣减子单的【扫码数量】
|
||||||
detail.setScanNum(BigDecimal.valueOf(1));
|
detail.setScanNum(BigDecimal.valueOf(1));
|
||||||
detail.setStatus(1);
|
|
||||||
inStockinDetailService.updateInStockinDetail(detail);
|
inStockinDetailService.updateInStockinDetail(detail);
|
||||||
|
|
||||||
log.info("【绑定信息】<常规入库>绑定信息,生成绑定信息,更新子单扫码数量,辊号:{},托盘号:{}",bindTrayMsg.getRollerNumber(), bindTrayMsg.getTrayCode());
|
log.info("【绑定信息】<常规入库>绑定信息,生成绑定信息,更新子单扫码数量,辊号:{},托盘号:{}",bindTrayMsg.getRollerNumber(), bindTrayMsg.getTrayCode());
|
||||||
@@ -336,7 +335,6 @@ public class PdaServiceImpl implements IPdaService {
|
|||||||
|
|
||||||
//>>>扣减子单的【扫码数量】
|
//>>>扣减子单的【扫码数量】
|
||||||
detail.setScanNum(BigDecimal.valueOf(1));
|
detail.setScanNum(BigDecimal.valueOf(1));
|
||||||
detail.setStatus(1);
|
|
||||||
inStockinDetailService.updateInStockinDetail(detail);
|
inStockinDetailService.updateInStockinDetail(detail);
|
||||||
|
|
||||||
log.info("【绑定信息】<常规入库>操作成功,生成绑定信息,更新子单已扫码数量,辊号:{},托盘号:{}",item.getRollerNumber(), bindTrayMsg.getTrayCode());
|
log.info("【绑定信息】<常规入库>操作成功,生成绑定信息,更新子单已扫码数量,辊号:{},托盘号:{}",item.getRollerNumber(), bindTrayMsg.getTrayCode());
|
||||||
|
|||||||
@@ -774,9 +774,9 @@ public class MydoJobHandler {
|
|||||||
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
|
outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
basStockService.deleteBasStockByRollerNumber(mydoJobDetail.getRollerNumber());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
basStockService.deleteBasStockByTrayCode(mydoJob.getTrayCode());
|
||||||
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
|
basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode());
|
||||||
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
|
basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE);
|
||||||
log.info("【账务处理-出库】任务完成,移除托盘库存,更新货位和库存信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode());
|
log.info("【账务处理-出库】任务完成,移除托盘库存,更新货位和库存信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode());
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ public class RequestWcsHandler {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手动操作 - 推送wcs指定货位出库
|
* 手动出库操作 - 推送wcs指定货位出库
|
||||||
*/
|
*/
|
||||||
@Scheduled(fixedRate = TIMEINTERVAL_2000)
|
@Scheduled(fixedRate = TIMEINTERVAL_2000)
|
||||||
public void stockoutMydoJobForManual(){
|
public void stockoutMydoJobForManual(){
|
||||||
|
|||||||
@@ -53,6 +53,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
<include refid="selectOutStockoutVo"/>
|
<include refid="selectOutStockoutVo"/>
|
||||||
where stockout_id = #{stockoutId}
|
where stockout_id = #{stockoutId}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="selectOutStockoutByErpBill" parameterType="String" resultMap="OutStockoutResult">
|
||||||
|
<include refid="selectOutStockoutVo"/>
|
||||||
|
where erp_bill = #{erpBill}
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="selectOutStockoutFinishList" parameterType="OutStockout" resultMap="OutStockoutResult">
|
<select id="selectOutStockoutFinishList" parameterType="OutStockout" resultMap="OutStockoutResult">
|
||||||
<include refid="selectOutStockoutFinishVo"/>
|
<include refid="selectOutStockoutFinishVo"/>
|
||||||
<where>
|
<where>
|
||||||
|
|||||||
@@ -170,7 +170,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="是否锁定" align="center" prop="locked">
|
<el-table-column label="是否锁定" align="center" prop="locked">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<dict-tag :options="dict.type.bas_stock_stock_status" :value="scope.row.locked"/>
|
<dict-tag :options="dict.type.bas_cargo_space_locked" :value="scope.row.locked"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="托盘条码" align="center" prop="trayCode" />
|
<el-table-column label="托盘条码" align="center" prop="trayCode" />
|
||||||
@@ -329,7 +329,7 @@ import { listCargospace, getCargospace, delCargospace, addCargospace, updateCarg
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Cargospace",
|
name: "Cargospace",
|
||||||
dicts: ['bas_cargo_space_status', 'bas_stock_stock_status'],
|
dicts: ['bas_cargo_space_status', 'bas_stock_stock_status', 'bas_cargo_space_locked'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
// 遮罩层
|
// 遮罩层
|
||||||
|
|||||||
Reference in New Issue
Block a user