diff --git a/pda/_pages.json b/pda/_pages.json new file mode 100644 index 0000000..6b86478 --- /dev/null +++ b/pda/_pages.json @@ -0,0 +1,152 @@ +{ + "pages": [{ + "path": "pages/login", + "style": { + "navigationBarTitleText": "登录" + } + }, { + "path": "pages/register", + "style": { + "navigationBarTitleText": "注册" + } + }, { + "path": "pages/index", + "style": { + "navigationBarTitleText": "WMS 仓储管理", + "navigationStyle": "custom" + } + }, { + "path": "pages/work/index", + "style": { + "navigationBarTitleText": "工作台" + } + }, { + "path": "pages/mine/index", + "style": { + "navigationBarTitleText": "我的" + } + }, { + "path": "pages/mine/avatar/index", + "style": { + "navigationBarTitleText": "修改头像" + } + }, { + "path": "pages/mine/info/index", + "style": { + "navigationBarTitleText": "个人信息" + } + }, { + "path": "pages/mine/info/edit", + "style": { + "navigationBarTitleText": "编辑资料" + } + }, { + "path": "pages/mine/pwd/index", + "style": { + "navigationBarTitleText": "修改密码" + } + }, { + "path": "pages/mine/setting/index", + "style": { + "navigationBarTitleText": "应用设置" + } + }, { + "path": "pages/mine/help/index", + "style": { + "navigationBarTitleText": "常见问题" + } + }, { + "path": "pages/mine/about/index", + "style": { + "navigationBarTitleText": "关于我们" + } + } , { + "path": "pages/warehouse/inbound/index", + "style": { + "navigationBarTitleText": "入库管理" + } + }, { + "path": "pages/warehouse/inbound/bindTray", + "style": { + "navigationBarTitleText": "入库绑盘" + } + }, { + "path": "pages/warehouse/inbound/emptyTray", + "style": { + "navigationBarTitleText": "空托入库" + } + }, { + "path": "pages/warehouse/inbound/supply", + "style": { + "navigationBarTitleText": "补料入库" + } + }, { + "path": "pages/warehouse/outbound/index", + "style": { + "navigationBarTitleText": "出库管理" + } + }, { + "path": "pages/warehouse/outbound/confirm", + "style": { + "navigationBarTitleText": "版辊出库确认" + } + }, { + "path": "pages/warehouse/outbound/trayConfirm", + "style": { + "navigationBarTitleText": "托盘出库确认" + } + }, { + "path": "pages/warehouse/outbound/exception", + "style": { + "navigationBarTitleText": "出库异常确认" + } + }, { + "path": "pages/warehouse/inventory/index", + "style": { + "navigationBarTitleText": "盘点管理" + } + }, { + "path": "pages/warehouse/stock/index", + "style": { + "navigationBarTitleText": "库存统计" + } + }, { + "path": "pages/common/webview/index", + "style": { + "navigationBarTitleText": "浏览网页" + } + }, { + "path": "pages/common/textview/index", + "style": { + "navigationBarTitleText": "浏览文本" + } + }], + "tabBar": { + "color": "#000000", + "selectedColor": "#000000", + "borderStyle": "white", + "backgroundColor": "#ffffff", + "list": [{ + "pagePath": "pages/index", + "iconPath": "static/images/tabbar/home.png", + "selectedIconPath": "static/images/tabbar/home_.png", + "text": "首页" + }, { + "pagePath": "pages/work/index", + "iconPath": "static/images/tabbar/work.png", + "selectedIconPath": "static/images/tabbar/work_.png", + "text": "工作台" + }, { + "pagePath": "pages/mine/index", + "iconPath": "static/images/tabbar/mine.png", + "selectedIconPath": "static/images/tabbar/mine_.png", + "text": "我的" + } + ] + }, + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "RuoYi", + "navigationBarBackgroundColor": "#FFFFFF" + } +} diff --git a/pda/pages/index.vue b/pda/pages/index.vue index e157062..ad10ca3 100644 --- a/pda/pages/index.vue +++ b/pda/pages/index.vue @@ -64,13 +64,13 @@ 空托入库 - + 出库确认 - + - 出库异常 + 呼叫空托 diff --git a/pda/pages/warehouse/inbound/cancelBindTray.vue b/pda/pages/warehouse/inbound/cancelBindTray.vue new file mode 100644 index 0000000..cad281c --- /dev/null +++ b/pda/pages/warehouse/inbound/cancelBindTray.vue @@ -0,0 +1,441 @@ + + + + + diff --git a/pda/pages/warehouse/inbound/emptyTray.vue b/pda/pages/warehouse/inbound/emptyTray.vue new file mode 100644 index 0000000..1b408ea --- /dev/null +++ b/pda/pages/warehouse/inbound/emptyTray.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/pda/pages/warehouse/outbound/container.vue b/pda/pages/warehouse/outbound/container.vue new file mode 100644 index 0000000..62d1dd2 --- /dev/null +++ b/pda/pages/warehouse/outbound/container.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/pda/pages/warehouse/outbound/trayConfirm.vue b/pda/pages/warehouse/outbound/trayConfirm.vue new file mode 100644 index 0000000..407d153 --- /dev/null +++ b/pda/pages/warehouse/outbound/trayConfirm.vue @@ -0,0 +1,440 @@ + + + + + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/WcsServiceController.java b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/WcsServiceController.java index 3643bbf..8d110a9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/WcsServiceController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/WcsServiceController.java @@ -10,10 +10,9 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.log.domain.RequestLog; import com.ruoyi.log.service.IRequestLogService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; @RestController @RequestMapping("/api/wmsService/wcs") @@ -37,6 +36,19 @@ public class WcsServiceController extends BaseController { return ajaxResult; } + + /** + * 手动指定货位出库 + */ + @PostMapping("/stockoutByManual") + public AjaxResult stockoutByManual(@RequestBody Map params) { + AjaxResult ajaxResult = apiWcsService.stockoutByManual(params); + RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(params), "创建入库任务请求", ajaxResult); + requestLogService.insertRequestLog(requestLog); + return ajaxResult; + } + + /** * 请求补码作业 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiWcsService.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiWcsService.java index 00d119f..595cccb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiWcsService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiWcsService.java @@ -15,7 +15,7 @@ public interface IApiWcsService { * 呼叫可用容器出库 * @return */ - public AjaxResult callContainerOut(String cargoAreaId, Integer type); + public AjaxResult callContainerOut(Map params); /** * 响应wcs请求-下发入库任务 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiWcsService.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiWcsService.java index ed172c3..2b8e85e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiWcsService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiWcsService.java @@ -21,6 +21,7 @@ import com.ruoyi.bas.stock.service.IBasStockInfoService; import com.ruoyi.bas.stock.service.IBasStockService; import com.ruoyi.common.*; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.in.bind.domain.InTrayMsg; import com.ruoyi.in.bind.service.IInTrayMsgService; @@ -38,6 +39,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestParam; import java.math.BigDecimal; import java.util.*; @@ -85,26 +87,29 @@ public class ApiWcsService implements IApiWcsService { * @return */ @Transactional(rollbackFor = Exception.class) - public AjaxResult callContainerOut(String cargoAreaId, Integer type){ + public AjaxResult callContainerOut(Map params){ + + String cargoAreaId = (String) params.get("cargoAreaId"); + int type = Convert.toInt(params.get("palletType"), 0); //获取立库区域和托盘类型 - List basCargoSpaces = basCargoSpaceService.selectAllBasCargoSpaceForStockout( + List basCargoSpaceEmptyTray = basCargoSpaceService.selectBasCargoSpaceListForEmptyTray( new BasCargoSpace().builder().cargoAreaId(cargoAreaId).theType(type).build() ); +// List basCargoSpaceContainer = basCargoSpaceService.selectBasCargoSpaceListForContainer( +// new BasCargoSpace().builder().cargoAreaId(cargoAreaId).theType(type).build() +// ); - List stocks = basStockService.selectBasStockList( - new BasStock().builder().productId("KTP0001").stockStatus("1").build() - ); - - if (stocks.isEmpty()) { + if (basCargoSpaceEmptyTray.isEmpty()) { log.info("【呼叫容器】空容器呼叫失败,无可用的空容器库存"); //todo 此处可查存放库存较少的托盘出库 }else{ - BasStock stock = stocks.get(0); + //要执行容器出库的货位 + BasCargoSpace cargoSpaceCurrent = basCargoSpaceEmptyTray.get(0); //检查出库货位是否触发移库作业 - 双伸货位出库查询单伸是否有货 - BasCargoSpace cargoSpaceCurrent = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(stock.getCargoSpaceId());//要出库的货位 + if (cargoSpaceCurrent.getIssDouble().equals(CargoSpaceCode.CARGOSPACE_ISDOUBLE_Y)){//是否处于双伸位 BasCargoSpace cargoSpaceInSide = basCargoSpaceService.selectAnotherBasCargoSpaceBySameGroup(cargoSpaceCurrent);//获取【要出库货位】对应的【单伸货位】 //如果外侧有货,先执行移库 @@ -159,9 +164,14 @@ public class ApiWcsService implements IApiWcsService { "【空托出库-移库】推送成功,作业号:{},托盘条码:{},移库货位:{},目标货位:{}", moveJob.getJobId(), moveJob.getTrayCode(), moveJob.getCargoSpaceId(), moveJob.getTargetCargoSpaceId() ); - //更新库存表货位【占用】状态 - stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); - basStockService.updateBasStock(stock); + List stocks = basStockService.selectBasStockListByTrayCode(cargoSpaceCurrent.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks) { + //更新库存表货位【占用】状态 + stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); + basStockService.updateBasStock(stock); + } + } //更新货位表【预占用】状态 basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpaceInSide.getCargoSpaceId(),cargoSpaceInSide.getTrayCode(),CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); @@ -174,34 +184,40 @@ public class ApiWcsService implements IApiWcsService { } - if (basCargoSpaces.stream().anyMatch(s -> s.getCargoSpaceId().equals(stock.getCargoSpaceId()))) { - //生成空托出库作业 - if (mydoJobService.selectMydoJobByTrayCode(stock.getTrayCode()) == null) { - //库存号 - 用于获取托盘号 - BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByStockId(stock.getStockId()); - //作业号 - String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKOUT_EMPTY_PALLET); - String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT_EMPTY_PALLET); - //判断托盘【未满】或【空】区分任务类型 - int taskType = TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY; - MydoJob mydoJob = new MydoJob().builder() - .jobId(jobId) - .taskNo(taskNo) - .inOrOut(taskType) - .trayCode(stockInfo.getTrayCode()) - .status(TaskStatusEnum.READY.getCode()) - .cargoSpaceId(stock.getCargoSpaceId()) - .trayType(type) - .executionPhase("0") - .warehouseId("01") - .build(); - mydoJobService.insertMydoJob(mydoJob); + //生成容器出库作业 + MydoJob job = mydoJobService.selectMydoJobByTrayCode(cargoSpaceCurrent.getTrayCode()); + if (ObjUtil.isNull(job)) { + + //库存号 - 用于判断容器是【空托】或者【带货托盘】 + BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(cargoSpaceCurrent.getTrayCode()); + + //判断托盘【未满】或【空】区分任务类型 + String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKOUT_EMPTY_PALLET); + String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT_EMPTY_PALLET); + int taskType = TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY; + if (stockInfo.getEmptyStatus() > 0){ + taskType = TaskType.TASKTYPE_STOCKOUT_CONTAINER; } + + MydoJob mydoJob = new MydoJob().builder() + .jobId(jobId) + .taskNo(taskNo) + .inOrOut(taskType) + .trayCode(cargoSpaceCurrent.getTrayCode()) + .status(TaskStatusEnum.READY.getCode()) + .cargoSpaceId(cargoSpaceCurrent.getCargoSpaceId()) + .trayType(type) + .executionPhase("0") + .warehouseId("01") + .build(); + mydoJobService.insertMydoJob(mydoJob); } + return AjaxResult.success(); + } - return AjaxResult.success(); + return AjaxResult.error(); } @@ -245,27 +261,16 @@ public class ApiWcsService implements IApiWcsService { return AjaxResult.error("未找到该托盘的绑定信息,请确认是否有绑定操作"); } - //--------------------------- 入库货位分配 --------------------------- - //区分高矮货,只能在堆垛机上获取货物高度,高货位可放全部高度的托盘 - BasCargoSpace cargoParam; - if (wcsStockinReiceive.getHeight() == 1){ - //低货位380H - 不限制高度 - cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build(); - }else{ - //高货位510H - 只能放指定层高的货位 - cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).theHeight(wcsStockinReiceive.getHeight()).build(); - } - BasCargoSpace cargoStockin = basCargoSpaceService.selectBasCargoSpaceForStockin(cargoParam); - if (cargoParam == null) { - log.warn("【货位分配】该类型托盘立库中无可用货位"); - return AjaxResult.error("【货位分配失败】该类型托盘立库中无可用货位"); - } + + //检查当前条码是否已经生成作业 + MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(wcsStockinReiceive.getTrayCode()); String jobId; String taskNo; int taskType; String instockinId; String instockinDetailId; + BasCargoSpace basCargoSpace; //>>>判断入库类型 if (trayMsgs.stream().anyMatch(s -> s.getProductId().equals(ProductType.EMPTY_TRAY))){ @@ -288,11 +293,25 @@ public class ApiWcsService implements IApiWcsService { } - //检查当前条码是否已经生成作业 - MydoJob mydoJob = mydoJobService.selectMydoJobByTrayCode(wcsStockinReiceive.getTrayCode()); - if (ObjUtil.isEmpty(mydoJob)) { + //--------------------------- 入库货位分配 --------------------------- + //区分高矮货,只能在堆垛机上获取货物高度,高货位可放全部高度的托盘 + BasCargoSpace cargoParam; + if (wcsStockinReiceive.getHeight() == 1){ + //低货位380H - 不限制高度 + cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).build(); + }else{ + //高货位510H - 只能放指定层高的货位 + cargoParam = new BasCargoSpace().builder().theType(type).cargoAreaId(wcsStockinReiceive.getCargoAreaId()).theHeight(wcsStockinReiceive.getHeight()).build(); + } + BasCargoSpace cargoStockin = basCargoSpaceService.selectBasCargoSpaceForStockin(cargoParam); + basCargoSpace = cargoStockin; + if (cargoParam == null) { + log.warn("【货位分配】该类型托盘立库中无可用货位"); + return AjaxResult.error("【货位分配失败】该类型托盘立库中无可用货位"); + } + //>>>生成wms的入库主作业 MydoJob mydoJobNew = new MydoJob().builder() .jobId(jobId) @@ -314,6 +333,7 @@ public class ApiWcsService implements IApiWcsService { log.info("【wms生成入库】<空托入库>作业,作业号:{},任务号:{},托盘号:{},分配货位:{}",mydoJobNew.getJobId() ,mydoJobNew.getTaskNo() ,mydoJobNew.getTrayCode(), cargoStockin.getCargoSpaceId()); }else{ log.info("【提示】<常规入库>wms已存在该条码作业,托盘号:{}",mydoJob.getTrayCode()); + basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId()); } //>>>根据绑定物料信息条数循环生成子作业,单条绑定信息对应一条子任务 @@ -347,7 +367,6 @@ public class ApiWcsService implements IApiWcsService { .build(); mydoJobDetailService.insertMydoJobDetail(detail); } - }else { instockinId = trayMsg.getStockinId(); instockinDetailId = trayMsg.getStockinDetailId() + sum; @@ -368,7 +387,7 @@ public class ApiWcsService implements IApiWcsService { .stockinId(instockinId) .stockinDetailId(instockinDetailId) .status(0) - .trayType(cargoStockin.getTheType()) + .trayType(type) .build(); mydoJobDetailService.insertMydoJobDetail(detail); } @@ -378,8 +397,8 @@ public class ApiWcsService implements IApiWcsService { } //货位状态更新为【入库预占用】 - cargoStockin.setStatus(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN); - basCargoSpaceService.updateBasCargoSpace(cargoStockin); + basCargoSpace.setStatus(CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN); + basCargoSpaceService.updateBasCargoSpace(basCargoSpace); //返回wcs的响应信息 WcsStockinResponse response = new WcsStockinResponse() @@ -389,10 +408,10 @@ public class ApiWcsService implements IApiWcsService { .taskNo(taskNo) .taskType(taskType) .trayCode(wcsStockinReiceive.getTrayCode()) - .cargoSpaceId(cargoStockin.getCargoSpaceId()) + .cargoSpaceId(basCargoSpace.getCargoSpaceId()) .build(); - log.info("【wms请求响应】<常规入库>响应信息,作业号:{},任务号:{},分配货位:{}",jobId ,taskNo, cargoStockin.getCargoSpaceId()); + log.info("【wms请求响应】<常规入库>响应信息,作业号:{},任务号:{},分配货位:{}",jobId ,taskNo, basCargoSpace.getCargoSpaceId()); return AjaxResult.success(response); @@ -401,28 +420,31 @@ public class ApiWcsService implements IApiWcsService { /** * 指定货位出库 - * @param cargoSpaceId + * @param params * @return */ @Transactional(rollbackFor = Exception.class) - public AjaxResult stockoutByManual(String cargoSpaceId){ + public AjaxResult stockoutByManual(Map params){ + + String cargoSpaceId = params.get("cargoSpaceId"); + BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId); if (ObjUtil.isNull(cargoSpace)){ - log.warn("【操作失败】找不到该货位,可能是货位信息错误,请联系管理员,货位号:", cargoSpaceId); + log.warn("【操作失败】找不到该货位,可能是货位异常或参数错误,请联系管理员,货位号:", cargoSpaceId); return AjaxResult.error("找不到该货位信息"); } - if (!cargoSpace.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED)){ - log.warn("【操作失败】该货位已被其它任务预占用,请等待任务执行完成后重试,货位号:", cargoSpaceId); - return AjaxResult.error("该货位已被其它任务预占用,请等待任务执行完成后重试"); - } +// if (!cargoSpace.getStatus().equals(CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED)){ +// log.warn("【操作失败】该货位已被其它任务预占用,请等待任务执行完成后重试,货位号:", cargoSpaceId); +// return AjaxResult.error("该货位已被其它任务预占用,请等待任务执行完成后重试"); +// } MydoJob job = mydoJobService.selectMydoJobByTrayCode(cargoSpace.getTrayCode()); if (ObjUtil.isNull(job)){ - String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKIN_EMPTY_PALLET); - String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKIN_EMPTY_PALLET); - int taskType = TaskType.TASKTYPE_STOCKIN_EMPTY_TRAY; + String jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKOUT_MANUAL); + String taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKOUT); + int taskType = TaskType.TASKTYPE_STOCKOUT_MANUAL; MydoJob mydoJob = new MydoJob().builder() .jobId(jobId) @@ -441,7 +463,7 @@ public class ApiWcsService implements IApiWcsService { .build(); mydoJobService.insertMydoJob(mydoJob); - log.info("【wms生成出库】<指定货位出库>作业,作业号:{},任务号:{},托盘号:{},分配货位:{}",mydoJob.getJobId() ,mydoJob.getTaskNo() ,mydoJob.getTrayCode(), cargoSpaceId); + log.info("【wms生成出库】<指定货位出库>作业,作业号:{},任务号:{},托盘号:{},出库货位:{}",mydoJob.getJobId() ,mydoJob.getTaskNo() ,mydoJob.getTrayCode(), cargoSpaceId); List stocks = basStockService.selectBasStockList( new BasStock().builder().cargoSpaceId(cargoSpaceId).build() diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java index e29915a..ba2b551 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapper.java @@ -29,6 +29,22 @@ public interface BasCargoSpaceMapper */ public List selectBasCargoSpaceList(BasCargoSpace basCargoSpace); + /** + * 查询货位信息列表 - 空托盘 + * + * @param basCargoSpace 货位信息 + * @return 货位信息集合 + */ + public List selectBasCargoSpaceListForEmptyTray(BasCargoSpace basCargoSpace); + + /** + * 查询货位信息列表 - 带货容器 + * + * @param basCargoSpace 货位信息 + * @return 货位信息集合 + */ + public List selectBasCargoSpaceListForContainer(BasCargoSpace basCargoSpace); + /** * 新增货位信息 * @@ -66,6 +82,7 @@ public interface BasCargoSpaceMapper * @return */ List selectBasCargoSpaceListByGroupByStatus(BasCargoSpace basCargoSpace); + /** * 查询排列表 * @param basCargoSpace diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java index df5a9b8..271c2ca 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/IBasCargoSpaceService.java @@ -29,6 +29,24 @@ public interface IBasCargoSpaceService public List selectBasCargoSpaceList(BasCargoSpace basCargoSpace); + /** + * 查询货位信息列表 - 空托盘 + * + * @param basCargoSpace 货位信息 + * @return 货位信息集合 + */ + public List selectBasCargoSpaceListForEmptyTray(BasCargoSpace basCargoSpace); + + + /** + * 查询货位信息列表 - 非空载货托盘 + * + * @param basCargoSpace 货位信息 + * @return 货位信息集合 + */ + public List selectBasCargoSpaceListForContainer(BasCargoSpace basCargoSpace); + + /** * 新增货位信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java index 01809e4..c8a26b2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/service/impl/BasCargoSpaceServiceImpl.java @@ -46,6 +46,30 @@ public class BasCargoSpaceServiceImpl implements IBasCargoSpaceService return basCargoSpaceMapper.selectBasCargoSpaceList(basCargoSpace); } + /** + * 查询货位信息列表 - 空托盘 + * + * @param basCargoSpace 货位信息 + * @return 货位信息 + */ + @Override + public List selectBasCargoSpaceListForEmptyTray(BasCargoSpace basCargoSpace) + { + return basCargoSpaceMapper.selectBasCargoSpaceListForEmptyTray(basCargoSpace); + } + + /** + * 查询货位信息列表 - 非空载货托盘 + * + * @param basCargoSpace 货位信息 + * @return 货位信息 + */ + @Override + public List selectBasCargoSpaceListForContainer(BasCargoSpace basCargoSpace) + { + return basCargoSpaceMapper.selectBasCargoSpaceListForContainer(basCargoSpace); + } + /** * 新增货位信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/mapper/BasStockMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/mapper/BasStockMapper.java index 4ba820e..27531f6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/mapper/BasStockMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/mapper/BasStockMapper.java @@ -29,6 +29,15 @@ public interface BasStockMapper public List selectBasStockList(BasStock basStock); + /** + * 查询库存信息列表 + * + * @param basStock 库存信息 + * @return 库存信息集合 + */ + public List selectBasStockListForEmptyTray(BasStock basStock); + + /** * 查询指定物料的所有库存信息 * @param productId diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/service/IBasStockService.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/service/IBasStockService.java index 9984142..837b14e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/service/IBasStockService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/service/IBasStockService.java @@ -56,6 +56,14 @@ public interface IBasStockService */ public List selectBasStockList(BasStock basStock); + /** + * 查询空托盘库存信息列表 + * + * @param basStock 库存信息 + * @return 库存信息集合 + */ + public List selectBasStockListForEmptyTray(BasStock basStock); + /** * 新增库存信息 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/service/impl/BasStockServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/service/impl/BasStockServiceImpl.java index 2c0d279..ecbe8f8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/service/impl/BasStockServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/stock/service/impl/BasStockServiceImpl.java @@ -91,6 +91,17 @@ public class BasStockServiceImpl implements IBasStockService return basStockMapper.selectBasStockList(basStock); } + /** + * 查询空托盘库存信息列表 + * + * @param basStock 库存信息 + * @return 库存信息集合 + */ + @Override + public List selectBasStockListForEmptyTray(BasStock basStock){ + return basStockMapper.selectBasStockListForEmptyTray(basStock); + } + /** * 新增库存信息 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/JobIdType.java b/ruoyi-admin/src/main/java/com/ruoyi/common/JobIdType.java index 143b611..ac952a7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/JobIdType.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/JobIdType.java @@ -38,6 +38,11 @@ public class JobIdType { */ public static final String MYDOJOB_STOCKOUT = "CK"; + /** + * 指定货位出库任务 + */ + public static final String MYDOJOB_STOCKOUT_MANUAL = "ZC"; + /** * 移库任务 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java index 1731d46..c342cf0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/in/job/service/impl/MydoJobServiceImpl.java @@ -465,7 +465,8 @@ public class MydoJobServiceImpl implements IMydoJobService //>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<< //>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<< //>>>>>>>>>>>>>>>>>>>>>>>常规(整托)出库\拣选出库\指定出库<<<<<<<<<<<<<<<<<<<<<<<< - if (type == TaskType.TASKTYPE_STOCKOUT || type == TaskType.TASKTYPE_STOCKOUT_PICKING || type == TaskType.TASKTYPE_STOCKOUT_MANUAL){ + if (type == TaskType.TASKTYPE_STOCKOUT || + type == TaskType.TASKTYPE_STOCKOUT_PICKING){ //子任务 List details = mydoJobDetailService.selectMydoJobDetailByJobId(jobId); @@ -494,7 +495,6 @@ public class MydoJobServiceImpl implements IMydoJobService outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail); log.info("【账务处理】移除库存信息,更新单据出库分配数量,作业号:{},库存编号:{},辊号:{}", jobId, detail.getStockinDetailId(), detail.getRollerNumber()); - } } @@ -507,12 +507,6 @@ public class MydoJobServiceImpl implements IMydoJobService //--------------------处理任务表和子任务表-------------------- //1.更新任务主表状态并移除作业 mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode()); -// mydoJobMapper.updateMydoJob(mydoJob); -// deleteMydoJobByJobId(jobId); -// -// //2.并移除所有子作业 -// mydoJobDetailService.insertMydoJobDetailsForJobFinish(jobId); -// mydoJobDetailService.deleteMydoJobDetailsByJobId(jobId); log.info("【账务处理】出库完成,等待确认,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode()); @@ -520,6 +514,7 @@ public class MydoJobServiceImpl implements IMydoJobService } + //>>>>>>>>>>>>>>>>>>>>> 移库任务 <<<<<<<<<<<<<<<<<<<<<<<< //>>>>>>>>>>>>>>>>>>>>> 移库任务 <<<<<<<<<<<<<<<<<<<<<<<< //>>>>>>>>>>>>>>>>>>>>> 移库任务 <<<<<<<<<<<<<<<<<<<<<<<< @@ -561,6 +556,37 @@ public class MydoJobServiceImpl implements IMydoJobService return AjaxResult.success(); } + + //>>>>>>>>>>>>>>>>>>>>> 手动指定货位出库 <<<<<<<<<<<<<<<<<<<<<<<< + //>>>>>>>>>>>>>>>>>>>>> 手动指定货位出库 <<<<<<<<<<<<<<<<<<<<<<<< + //>>>>>>>>>>>>>>>>>>>>> 手动指定货位出库 <<<<<<<<<<<<<<<<<<<<<<<< + if (type == TaskType.TASKTYPE_STOCKOUT_MANUAL){ + //--------------------处理库存信息-------------------- + //移除指定辊号的库存明细 + basStockService.deleteBasStockByTrayCode(mydoJob.getTrayCode()); + basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode()); + +//--------------------更新货位状态-------------------- + BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId()); + basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpace.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE); + log.info("【账务处理-手动出库】更新货位状态,作业号:{},货位编号:{},托盘号:{}", jobId, cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode()); + +//--------------------处理任务表和子任务表-------------------- + //1.更新任务主表状态并移除作业 + mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode()); + mydoJobMapper.updateMydoJob(mydoJob); + deleteMydoJobByJobId(jobId); + + //2.并移除所有子作业 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(jobId); + mydoJobDetailService.deleteMydoJobDetailsByJobId(jobId); + + log.info("【账务处理-手动出库】任务完成,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode()); + + return AjaxResult.success(); + + } + return AjaxResult.error(); } @@ -581,13 +607,6 @@ public class MydoJobServiceImpl implements IMydoJobService log.warn("【任务完成】查不到该作业,请检查作业状态,作业号:" + jobId); return AjaxResult.error("查不到该作业,请检查作业状态"); } - //子任务 -// List details = mydoJobDetailService.selectMydoJobDetailByJobId(jobId); -// if (details.isEmpty()){ -// log.warn("【任务完成】查不到该作业对应的子单明细,请检查子单状态,任务号:" + jobId); -// return AjaxResult.error("查不到该作业对应的子单明细,请检查子单状态"); -// } - //--------------------处理库存信息-------------------- //>>>>>>>>>>>>>>>>>>>>>>> 空托入库 <<<<<<<<<<<<<<<<<<<<<<<< @@ -640,7 +659,6 @@ public class MydoJobServiceImpl implements IMydoJobService ); log.info("【账务处理-空托盘】新增库存明细,作业号:{},库存编号:{},托盘号:{}", jobId, stockId, mydoJob.getTrayCode()); - //--------------------更新货位状态-------------------- BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId()); basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED); @@ -659,7 +677,80 @@ public class MydoJobServiceImpl implements IMydoJobService //3.移除当前托盘的绑定信息 inTrayMsgService.deleteInTrayMsgByTrayCode(mydoJob.getTrayCode()); - log.info("【账务处理-空托盘】移除任务数据,生成历史记录,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode()); + log.info("【账务处理-载货容器出库】移除任务数据,生成历史记录,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode()); + + return AjaxResult.success(); + + } + + //>>>>>>>>>>>>>>>>>>>>>>>带货托盘出库<<<<<<<<<<<<<<<<<<<<<<<< + if (type == TaskType.TASKTYPE_STOCKOUT_CONTAINER){ + + //>>>>>>>>>>>>>>>>>>>>>>> 生成回流 <<<<<<<<<<<<<<<<<<<<<<<< + //获取托盘剩余库存 + String trayCode = mydoJob.getTrayCode(); + List stocks = basStockService.selectBasStockListByTrayCode(trayCode); + int trayType = getTrayTypeByTrayCode(trayCode); + //空托盘回流 + if (stocks.isEmpty()){ + inTrayMsgService.insertInTrayMsg( + new InTrayMsg().builder() + .trayCode(trayCode) + .quantity(BigDecimal.ONE) + .productId(ProductType.EMPTY_TRAY) + .warehouseId("01") + .rollerNumber(ProductType.EMPTY_TRAY) + .trayType(trayType) + .status(1) + .createTime(DateUtil.date()) + .build() + ); + + log.info("【非空容器绑定回流】<非空容器入库>生成绑定信息成功,托盘号:{}", trayCode); + + }else{ + for (BasStock stock : stocks){ + inTrayMsgService.insertInTrayMsg( + new InTrayMsg().builder() + .trayCode(trayCode) + .quantity(stock.getQuantity()) + .warehouseId("01") + .rollerNumber(stock.getRollerNumber()) + .trayType(trayType) + .status(2) + .createTime(DateUtil.date()) + .build() + ); + + basStockService.deleteBasStockByRollerNumber(stock.getRollerNumber()); + log.info("【非空容器绑定回流】<非空容器入库>移除当前版辊库存明细,生成绑定信息成功,托盘号:{},辊号:{}", trayCode, stock.getRollerNumber()); + } + basStockInfoService.deleteBasStockInfoByTrayCode(trayCode); + log.info("【非空容器绑定回流】<非空容器入库>移除主表库存信息,托盘号:{}}", trayCode); + + } + +//--------------------处理库存信息-------------------- + //移除指定辊号的库存明细 + basStockService.deleteBasStockByTrayCode(mydoJob.getTrayCode()); + basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode()); + +//--------------------更新货位状态-------------------- + BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId()); + basCargoSpaceService.updateBasCargoSpaceStatus(cargoSpace.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE); + log.info("【账务处理-载货容器出库】更新货位状态,作业号:{},货位编号:{},托盘号:{}", jobId, cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode()); + +//--------------------处理任务表和子任务表-------------------- + //1.更新任务主表状态并移除作业 + mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode()); + mydoJobMapper.updateMydoJob(mydoJob); + deleteMydoJobByJobId(jobId); + + //2.并移除所有子作业 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(jobId); + mydoJobDetailService.deleteMydoJobDetailsByJobId(jobId); + + log.info("【账务处理-载货容器出库】任务完成,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode()); return AjaxResult.success(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/controller/PdaController.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/controller/PdaController.java index 4fc121d..8c32d7f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/controller/PdaController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/controller/PdaController.java @@ -316,13 +316,13 @@ public class PdaController extends BaseController { /** * 呼叫空托出库 - * @param palletType 托盘类型 + * @param params 货位区域,托盘类型 * @return */ @PostMapping("/callStockOutForContainer") @PreAuthorize("@ss.hasPermi('out:bound:task:info')") - public AjaxResult callStockOutForEmptyPallet(String cargoAreaId, Integer palletType) { - return pdaService.callContainerStockOut(cargoAreaId, palletType); + public AjaxResult callStockOutForEmptyPallet(@RequestBody Map params) { + return pdaService.callContainerStockOut(params); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/IPdaService.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/IPdaService.java index d60cda6..6c6c93a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/IPdaService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/IPdaService.java @@ -130,10 +130,10 @@ public interface IPdaService { /** * 呼叫空托盘出库 - * @param palletType 托盘类型 + * @param params 托盘类型 * @return */ - AjaxResult callContainerStockOut(String cargoAreaId, Integer palletType); + AjaxResult callContainerStockOut(Map params); /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java index 0c3198a..5d0fcaa 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pda/service/impl/PdaServiceImpl.java @@ -489,10 +489,9 @@ public class PdaServiceImpl implements IPdaService { } - @Override - public AjaxResult callContainerStockOut(String cargoAreaId, Integer palletType){ - return apiWcsService.callContainerOut(cargoAreaId, palletType); + public AjaxResult callContainerStockOut(Map params){ + return apiWcsService.callContainerOut(params); } @@ -638,8 +637,6 @@ public class PdaServiceImpl implements IPdaService { } - - //移除剩余库存 - 生成回流任务和任务明细绑定信息 return AjaxResult.success("确认成功"); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java index da9b140..a1830cd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java @@ -55,6 +55,7 @@ public class MydoJobHandler { @Autowired IInTrayMsgService intrayMsgService; + private static final int TIMEINTERVAL_DEFAULT = 1000; private static final int TIMEINTERVAL_2000 = 2000; private static final int TIMEINTERVAL_5000 = 5000; @@ -104,6 +105,9 @@ public class MydoJobHandler { basStockInfoService.updateBasStockInfo(stockInfo); } + mydoJobService.insertMydoJobFinish(mydoJob.getJobId()); + mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); + log.info( "【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId() ); @@ -120,12 +124,19 @@ public class MydoJobHandler { for (MydoJobDetail mydoJobDetail : details){ //还原子单数量 InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByRollerNumber(mydoJobDetail.getRollerNumber()); - inStockinDetail.setScanNum(BigDecimal.ZERO); - inStockinDetail.setAssignNum(BigDecimal.ZERO); - inStockinDetail.setStatus(0); - inStockinDetailService.updateInStockinDetail(inStockinDetail); + if (ObjUtil.isNotNull(inStockinDetail)){ + inStockinDetail.setScanNum(BigDecimal.ZERO); + inStockinDetail.setAssignNum(BigDecimal.ZERO); + inStockinDetail.setStatus(0); + inStockinDetailService.updateInStockinDetail(inStockinDetail); + } } + mydoJobService.insertMydoJobFinish(mydoJob.getJobId()); + mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); + +// apiWcsService.cancelWcsMydojob() + log.info("【账务处理-入库】任务作废,更新货位信息,作业号:{}", mydoJob.getJobId()); return; } @@ -143,12 +154,17 @@ public class MydoJobHandler { for (MydoJobDetail mydoJobDetail : details){ //还原子单数量 OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(mydoJobDetail.getRollerNumber()); - outStockoutDetail.setAllotNum(BigDecimal.ZERO); - outStockoutDetail.setAssignNum(BigDecimal.ZERO); - outStockoutDetail.setStatus(0); - outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail); + if(ObjUtil.isNotNull(outStockoutDetail)){ + outStockoutDetail.setAllotNum(BigDecimal.ZERO); + outStockoutDetail.setAssignNum(BigDecimal.ZERO); + outStockoutDetail.setStatus(0); + outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail); + } } + mydoJobService.insertMydoJobFinish(mydoJob.getJobId()); + mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); + log.info("【账务处理-出库】任务作废,更新货位和库存信息,作业号:{}", mydoJob.getJobId()); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java index 8123fe3..86dacf9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java @@ -68,7 +68,55 @@ public class RequestWcsHandler { AjaxResult ajaxResult = apiWcsService.sendEmptyTrayOutMydoJob(paramMap); if (ajaxResult.isSuccess()){ - log.info("【推送出库】<容器>出库,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode()); + log.info("【推送出库】<空容器>出库,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode()); + mydoJob.setStatus(TaskStatusEnum.RUNNING.getCode()); + mydoJobService.updateMydoJob(mydoJob); + + //更新库存状态【占用中】 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + for (BasStock stock : stocks) { + stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); + basStockService.updateBasStock(stock); + } + + //更新货位状态【出库预占用】 + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); + + } + } + + } + + + /** + * 推送wcs带货容器出库作业 + */ + @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void sendWcsContainerTask(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .inOrOut(TaskType.TASKTYPE_STOCKOUT_CONTAINER) + .status(TaskStatusEnum.READY.getCode()) + .build() + ); + + if (mydoJobs.isEmpty()) return; + + for (MydoJob mydoJob : mydoJobs) { + + //初始化参数 + HashMap paramMap = new HashMap<>(); + paramMap.put("reqCode", UUID.randomUUID().toString());//请求码 + paramMap.put("trayCode", mydoJob.getTrayCode());//容器编号 + paramMap.put("taskNo", mydoJob.getTaskNo());//容器编号 + paramMap.put("jobId", mydoJob.getJobId()); + paramMap.put("inOrOut", mydoJob.getInOrOut()); + paramMap.put("cargoSpaceId", mydoJob.getCargoSpaceId()); + + AjaxResult ajaxResult = apiWcsService.sendEmptyTrayOutMydoJob(paramMap); + + if (ajaxResult.isSuccess()){ + log.info("【推送出库】<带货容器>出库,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode()); mydoJob.setStatus(TaskStatusEnum.RUNNING.getCode()); mydoJobService.updateMydoJob(mydoJob); @@ -121,9 +169,11 @@ public class RequestWcsHandler { //更新库存状态【占用中】 List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); - for (BasStock stock : stocks) { - stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); - basStockService.updateBasStock(stock); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks) { + stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); + basStockService.updateBasStock(stock); + } } //更新货位状态【出库预占用】 diff --git a/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml b/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml index a631a5b..324038d 100644 --- a/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml @@ -41,6 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and warehouse_id = #{warehouseId} + and cargo_space_id = #{cargoSpaceId} and roadway_id = #{roadwayId} and cargo_area_id = #{cargoAreaId} and the_type = #{theType} @@ -64,6 +65,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by cargo_space_id asc + + + + + +