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 595cccb..83d5a72 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 @@ -64,7 +64,7 @@ public interface IApiWcsService { * @param param * @return */ - public AjaxResult sendReturnMydoJob(Map param); + public AjaxResult sendBackMydoJob(Map param); public AjaxResult sendOutMydoJob(Map param); 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 2b8e85e..64da7a4 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 @@ -8,7 +8,6 @@ import cn.hutool.json.JSONUtil; import com.ruoyi.api.domain.wcsJobHandle.WmsJobHandler; import com.ruoyi.api.domain.wcsStockin.WcsStockinReceive; import com.ruoyi.api.domain.wcsStockin.WcsStockinResponse; -import com.ruoyi.api.domain.wcsStockout.WcsStockoutParam; import com.ruoyi.api.service.IApiWcsService; import com.ruoyi.bas.cargospace.domain.BasCargoSpace; import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; @@ -22,14 +21,12 @@ 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; import com.ruoyi.in.job.domain.MydoJob; import com.ruoyi.in.job.service.IMydoJobService; import com.ruoyi.in.jobdetail.domain.MydoJobDetail; import com.ruoyi.in.jobdetail.service.IMydoJobDetailService; -import com.ruoyi.kpi.domain.BasCargoSpaceStatus; import com.ruoyi.log.domain.RequestLog; import com.ruoyi.log.service.IRequestLogService; import com.ruoyi.out.stockout.service.IOutStockoutService; @@ -39,11 +36,9 @@ 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.*; -import java.util.stream.Collectors; import static com.ruoyi.common.core.domain.AjaxResult.error; import static com.ruoyi.common.core.domain.AjaxResult.success; @@ -283,7 +278,7 @@ public class ApiWcsService implements IApiWcsService { //回流入库 jobId = basJobIdService.getId(JobIdType.MYDOJOB_PICK_RETURN); taskNo = basTaskNoService.getTaskNo(TaskIdType.TASK_STOCKIN_BACK); - taskType = TaskType.TASKTYPE_PICK_RETURN; + taskType = TaskType.TASKTYPE_PICK_BACK; }else{ //货物入库 jobId = basJobIdService.getId(JobIdType.MYDOJOB_STOCKIN); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskType.java b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskType.java index 1c628de..306d993 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskType.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskType.java @@ -17,8 +17,8 @@ public class TaskType { /** * 拣选回流 */ - public static final int TASKTYPE_PICK_RETURN = 3; - public static final String TASKTYPE_PICK_RETURN_STR = "3"; + public static final int TASKTYPE_PICK_BACK = 3; + public static final String TASKTYPE_PICK_BACK_STR = "3"; /** * 移库 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 c342cf0..d90421f 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 @@ -5,9 +5,7 @@ import java.util.HashMap; import java.util.List; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.UUID; import cn.hutool.core.util.ObjUtil; -import com.alibaba.fastjson2.JSON; import com.ruoyi.api.service.IApiWcsService; import com.ruoyi.bas.cargospace.domain.BasCargoSpace; import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; @@ -26,7 +24,6 @@ import com.ruoyi.in.bind.domain.InTrayMsg; import com.ruoyi.in.bind.service.IInTrayMsgService; import com.ruoyi.in.jobdetail.domain.MydoJobDetail; import com.ruoyi.in.jobdetail.service.IMydoJobDetailService; -import com.ruoyi.in.stockin.domain.InStockin; import com.ruoyi.in.stockindetail.domain.InStockinDetail; import com.ruoyi.in.stockindetail.service.IInStockinDetailService; import com.ruoyi.in.stockin.service.IInStockinService; @@ -259,10 +256,9 @@ public class MydoJobServiceImpl implements IMydoJobService //任务状态标记为【作废】 mydoJob.setStatus(TaskStatusEnum.CANCEL.getCode()); updateMydoJob(mydoJob); + log.warn("【手动作废】执行成功,当前作业已标记为<手动作废>,作业号:{}", jobId); } - log.warn("【手动操作】执行成功,当前作业已标记为<手动作废>,作业号:{}", jobId); - return AjaxResult.success(); } @@ -358,7 +354,7 @@ public class MydoJobServiceImpl implements IMydoJobService //>>>>>>>>>>>>>>>>>>>>>>>常规入库<<<<<<<<<<<<<<<<<<<<<<<< //>>>>>>>>>>>>>>>>>>>>>>>常规入库<<<<<<<<<<<<<<<<<<<<<<<< //>>>>>>>>>>>>>>>>>>>>>>>常规入库<<<<<<<<<<<<<<<<<<<<<<<< - if (type == TaskType.TASKTYPE_STOCKIN || type == TaskType.TASKTYPE_PICK_RETURN){ + if (type == TaskType.TASKTYPE_STOCKIN || type == TaskType.TASKTYPE_PICK_BACK){ //获取当前托盘绑定信息 List inTrayMsgs = inTrayMsgService.selectInTrayMsgList( @@ -505,7 +501,7 @@ public class MydoJobServiceImpl implements IMydoJobService log.info("【账务处理】更新货位状态,作业号:{},货位编号:{},托盘号:{}", jobId, cargoSpace.getCargoSpaceId(), mydoJob.getTrayCode()); //--------------------处理任务表和子任务表-------------------- - //1.更新任务主表状态并移除作业 + //1.更新任务主表状态 mydoJob.setStatus(TaskStatusEnum.AUTO_FINISHED.getCode()); log.info("【账务处理】出库完成,等待确认,作业号:{},托盘号:{}", jobId, mydoJob.getTrayCode()); 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 6c6c93a..251a9df 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 @@ -43,6 +43,7 @@ public interface IPdaService { * @param request 绑盘请求体,包含托盘号和物料明细列表 * @return 成功插入条数 */ + @Deprecated String bindTray(BindTrayRequest request); /** 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 5d0fcaa..a9f5d38 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 @@ -213,7 +213,7 @@ public class PdaServiceImpl implements IPdaService { /** - * 绑定托盘信息(多托盘) + * 绑定托盘信息(多物料) * @param bindTrayMsg 绑盘请求体,包含托盘号和物料明细列表 * @return */ @@ -334,7 +334,7 @@ public class PdaServiceImpl implements IPdaService { /** - * 作废托盘绑定信息(多托盘) + * 作废托盘绑定信息(多物料) * @param rollerNumber * @return */ @@ -496,7 +496,7 @@ public class PdaServiceImpl implements IPdaService { /** - * 版辊出库确认 + * 单个版辊出库确认 * @param params * @return */ @@ -534,7 +534,7 @@ public class PdaServiceImpl implements IPdaService { /** - * 托盘出库确认 + * 托盘整体出库确认 * @param trayCode * @return */ 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 a1830cd..4478ad1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/MydoJobHandler.java @@ -62,9 +62,9 @@ public class MydoJobHandler { /** - * 手动作废作业账务处理 + * 账务处理 - 手动作废作业 */ - @Scheduled(fixedRate = TIMEINTERVAL_2000) +// @Scheduled(fixedRate = TIMEINTERVAL_2000) public void cancelMydoJobHandler(){ List mydoJobs = mydoJobService.selectOutMydoJobList( new MydoJob().builder() @@ -176,9 +176,200 @@ public class MydoJobHandler { /** - * 手动完成作业账务处理 + * 账务处理 - 手动作废作业 - 入库 */ @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void cancelMydoJobHandler_in(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .status(TaskStatusEnum.CANCEL.getCode()) + .build() + ); + + if (mydoJobs.isEmpty()) return; + + for (MydoJob mydoJob : mydoJobs) { +//任务子表 + List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); + if (!details.isEmpty()){ + //移除任务子表 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); + mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); + log.info("【手动作废任务】移除任务明细,作业号:{}", mydoJob.getJobId()); + } +//库存子表 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks){ + stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId()); + stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE); + basStockService.updateBasStock(stock); + } + } + +//恢复货位状态 + //入库 + if (mydoJob.getInOrOut() < 20 && mydoJob.getInOrOut() != TaskType.TASKTYPE_PICK_STOCK_MOVE){ + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE); + BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode()); + if (ObjUtil.isNotNull(stockInfo)){ + basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode()); + } + for (MydoJobDetail mydoJobDetail : details){ + //还原子单数量 + InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByRollerNumber(mydoJobDetail.getRollerNumber()); + 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; + } + + } + + } + + + /** + * 账务处理 - 手动作废作业 - 出库 + */ + @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void cancelMydoJobHandler_out(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .status(TaskStatusEnum.CANCEL.getCode()) + .build() + ); + + if (mydoJobs.isEmpty()) return; + + for (MydoJob mydoJob : mydoJobs) { +//任务子表 + List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); + if (!details.isEmpty()){ + //移除任务子表 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); + mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); + log.info("【手动作废任务】移除任务明细,作业号:{}", mydoJob.getJobId()); + } +//库存子表 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks){ + stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId()); + stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE); + basStockService.updateBasStock(stock); + } + } + +//恢复货位状态 + //出库 + if (mydoJob.getInOrOut() >= 20){ + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED); + + BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode()); + if (ObjUtil.isNotNull(stockInfo)){ + stockInfo.setCargoSpaceId(mydoJob.getCargoSpaceId()); + basStockInfoService.updateBasStockInfo(stockInfo); + } + + for (MydoJobDetail mydoJobDetail : details){ + //还原子单数量 + OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(mydoJobDetail.getRollerNumber()); + 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()); + } + + } + + } + + + /** + * 账务处理 - 手动作废作业 - 移库 + */ + @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void cancelMydoJobHandler_move(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .status(TaskStatusEnum.CANCEL.getCode()) + .inOrOut(TaskType.TASKTYPE_PICK_STOCK_MOVE) + .build() + ); + + if (mydoJobs.isEmpty()) return; + + for (MydoJob mydoJob : mydoJobs) { +//任务子表 + List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); + if (!details.isEmpty()){ + //移除任务子表 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); + mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); + log.info("【手动作废任务】移除任务明细,作业号:{}", mydoJob.getJobId()); + } +//库存子表 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks){ + stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId()); + stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE); + basStockService.updateBasStock(stock); + } + } + +//恢复货位状态 + //源位置 + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED); + //目标位置 + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getTargetCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE); + BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode()); + if (ObjUtil.isNotNull(stockInfo)){ + stockInfo.setCargoSpaceId(mydoJob.getCargoSpaceId()); + basStockInfoService.updateBasStockInfo(stockInfo); + } + mydoJobService.insertMydoJobFinish(mydoJob.getJobId()); + mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId()); + log.info( + "【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId() + ); + + } + + } + + + + //==================================================================================================== + //==================================================================================================== + //==================================================================================================== + + + + /** + * 账务处理 - 手动完成作业 + */ +// @Scheduled(fixedRate = TIMEINTERVAL_2000) public void manualCompleteMydoJobHandler(){ List mydoJobs = mydoJobService.selectOutMydoJobList( new MydoJob().builder() @@ -317,6 +508,245 @@ public class MydoJobHandler { } + /** + * 账务处理 - 手动完成作业 - 入库 + */ + @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void manualCompleteMydoJobHandler_in(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .status(TaskStatusEnum.MANUAL_FINISHED.getCode()) + .build() + ); + + if (mydoJobs.isEmpty()) return; + + for (MydoJob mydoJob : mydoJobs) { +//任务子表 + List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); + if (!details.isEmpty()){ + //移除任务子表 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); + mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); + log.info("【手动完成任务】移除任务明细,作业号:{}", mydoJob.getJobId()); + } +//库存子表 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks){ + stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId()); + stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE); + basStockService.updateBasStock(stock); + } + } + +//恢复货位状态 + //入库 + if (mydoJob.getInOrOut() < 20){ + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED); + + //生成库存编号 + String stockId = basJobIdService.getId(JobIdType.STOCK); + + //插入库存主表 + BasStockInfo info = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode()); + if (ObjUtil.isNull(info)){ + basStockInfoService.insertBasStockInfo( + new BasStockInfo().builder() + .stockId(stockId) + .cargoSpaceId(mydoJob.getCargoSpaceId()) + .trayCode(mydoJob.getTrayCode()) + .warehouseId(mydoJob.getWarehouseId()) + .trayType(mydoJob.getTrayType()) + .emptyStatus(details.size())//版辊数量 + .build() + ); + + log.info("【账务处理-入库】新增库存主表信息,库存编号:{},货位:{},托盘号:{},入库数量:{}", stockId, mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), details.size()); + }else{ + info.setStockId(stockId); + info.setCargoSpaceId(mydoJob.getCargoSpaceId()); + info.setEmptyStatus(details.size()); + basStockInfoService.updateBasStockInfo(info); + log.info("【账务处理-入库】更新库存主表信息,库存编号:{},货位:{},托盘号:{},入库数量:{}", stockId, mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), details.size()); + } + + int num = 1; + + //每条子任务生成一条库存信息 + for (MydoJobDetail detail : details){ + + //物料数量固定为1,辊号唯一 + //插入库存明细信息 + BasStock stockInit = new BasStock().builder() + .stockId(stockId) + .stockDetailId(stockId + "-" + num) + .stockStatus(BasStockCode.STOCK_STATUS_AVAILABLE) + .jobId(mydoJob.getJobId()) + .jobDetailId(mydoJob.getJobId() + "-" + num++) + .rollerNumber(detail.getRollerNumber()) + .quantity(detail.getInQuantity()) + .cargoSpaceId(mydoJob.getCargoSpaceId()) + .productId(detail.getProductId()) + .productName(detail.getProductName()) + .inDate(DateUtil.date().now()) + .build(); + basStockService.insertBasStock(stockInit); + + //更新子单数量 + InStockinDetail inStockinDetail = inStockinDetailService.selectInStockinDetailByRollerNumber(detail.getRollerNumber()); + if (ObjUtil.isNotNull(inStockinDetail)){ + inStockinDetail.setScanNum(BigDecimal.ONE); + inStockinDetail.setAssignNum(BigDecimal.ONE); + inStockinDetail.setStatus(1); + inStockinDetailService.updateInStockinDetail(inStockinDetail); + + stockInit.setStockinId(inStockinDetail.getStockinId()); + stockInit.setStockDetailId(inStockinDetail.getStockinDetailId()); + } + + intrayMsgService.deleteInTrayMsgByRollerNumber(detail.getRollerNumber()); + } + + log.info("【账务处理-入库】任务完成,移除绑定信息,更新货位信息,作业号:{}", mydoJob.getJobId()); + + } + + } + + } + + + /** + * 账务处理 - 手动完成作业 - 出库 + */ + @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void manualCompleteMydoJobHandler_out(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .status(TaskStatusEnum.MANUAL_FINISHED.getCode()) + .build() + ); + + if (mydoJobs.isEmpty()) return; + + for (MydoJob mydoJob : mydoJobs) { +//任务子表 + List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); + if (!details.isEmpty()){ + //移除任务子表 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); + mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); + log.info("【手动完成任务】移除任务明细,作业号:{}", mydoJob.getJobId()); + } +//库存子表 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks){ + stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId()); + stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE); + basStockService.updateBasStock(stock); + } + } + +//恢复货位状态 + //整托出库 + if (mydoJob.getInOrOut() >= TaskType.TASKTYPE_STOCKOUT || + mydoJob.getInOrOut() == TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY || + mydoJob.getInOrOut() == TaskType.TASKTYPE_STOCKOUT_MANUAL){ + for (MydoJobDetail mydoJobDetail : details){ + //还原子单数量 + OutStockoutDetail outStockoutDetail = outStockoutDetailService.selectOutStockoutDetailByRollerNumber(mydoJobDetail.getRollerNumber()); + if (ObjUtil.isNotNull(outStockoutDetail)){ + outStockoutDetail.setAllotNum(BigDecimal.ONE); + outStockoutDetail.setAssignNum(BigDecimal.ONE); + outStockoutDetail.setStatus(1); + outStockoutDetailService.updateOutStockoutDetail(outStockoutDetail); + } + + } + + basStockService.deleteBasStockByTrayCode(mydoJob.getTrayCode()); + basStockInfoService.deleteBasStockInfoByTrayCode(mydoJob.getTrayCode()); + + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE); + log.info("【账务处理-整托出库】任务完成,移除托盘库存,更新货位和库存信息,作业号:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getTrayCode()); + }else{ + log.info("【账务处理-操作失败】当前任务类型<{}>不支持手动完成操作,作业号:{},托盘号:{}", mydoJob.getInOrOut(), mydoJob.getJobId(), mydoJob.getTrayCode()); + } + + } + + } + + + /** + * 账务处理 - 手动完成作业 - 移库 + */ + @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void manualCompleteMydoJobHandler_move(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .status(TaskStatusEnum.MANUAL_FINISHED.getCode()) + .inOrOut(TaskType.TASKTYPE_PICK_STOCK_MOVE) + .build() + ); + + if (mydoJobs.isEmpty()) return; + + for (MydoJob mydoJob : mydoJobs) { +//任务子表 + List details = mydoJobDetailService.selectMydoJobDetailByJobId(mydoJob.getJobId()); + if (!details.isEmpty()){ + //移除任务子表 + mydoJobDetailService.insertMydoJobDetailsForJobFinish(mydoJob.getJobId()); + mydoJobDetailService.deleteMydoJobDetailsByJobId(mydoJob.getJobId()); + log.info("【手动完成任务】移除任务明细,作业号:{}", mydoJob.getJobId()); + } +//库存子表 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks){ + stock.setCargoSpaceId(mydoJob.getTargetCargoSpaceId()); + stock.setStockStatus(BasStockCode.STOCK_STATUS_AVAILABLE); + basStockService.updateBasStock(stock); + } + } + +//恢复货位状态 + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_AVAILABLE); + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getTargetCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_OCCUPIED); + BasStockInfo stockInfo = basStockInfoService.selectBasStockInfoByTrayCode(mydoJob.getTrayCode()); + if (ObjUtil.isNotNull(stockInfo)){ + stockInfo.setCargoSpaceId(mydoJob.getTargetCargoSpaceId()); + basStockInfoService.updateBasStockInfo(stockInfo); + } + log.info( + "【账务处理-移库】任务作废,更新库存和货位信息,作业号:{},托盘号:{},源位置:{},目标位置:{}", mydoJob.getJobId(), mydoJob.getTrayCode(), mydoJob.getCargoSpaceId(), mydoJob.getTargetCargoSpaceId() + ); + + + } + + } + + + + //==================================================================================================== + //==================================================================================================== + //==================================================================================================== + + + + /** + * 账务处理 - 自动完成作业 + */ +// @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void autoCompleteMydoJobHandler(){ + + } + + } 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 86dacf9..d96f902 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/scheduleTask/RequestWcsHandler.java @@ -74,9 +74,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); + } } //更新货位状态【出库预占用】 @@ -122,9 +124,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); + } } //更新货位状态【出库预占用】 @@ -185,7 +189,57 @@ public class RequestWcsHandler { } + /** + * 出库确认完成 - 推送wcs回流任务 + */ + @Scheduled(fixedRate = TIMEINTERVAL_2000) + public void sendWcsBackTask(){ + List mydoJobs = mydoJobService.selectOutMydoJobList( + new MydoJob().builder() + .status(TaskStatusEnum.READY.getCode()) + .inOrOut(TaskType.TASKTYPE_PICK_BACK) + .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.sendBackMydoJob(paramMap); + + if (ajaxResult.isSuccess()){ + log.info("【推送回流入库】<托盘回流>入库,更新货位和库存预占用状态,wms作业号:{},货位:{},托盘号:{}", mydoJob.getJobId(), mydoJob.getCargoSpaceId(), mydoJob.getTrayCode()); + mydoJob.setStatus(TaskStatusEnum.RUNNING.getCode()); + mydoJobService.updateMydoJob(mydoJob); + + //更新库存状态【占用中】 + List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); + if (!stocks.isEmpty()){ + for (BasStock stock : stocks) { + stock.setStockStatus(BasStockCode.STOCK_STATUS_OCCUPIED); + stock.setCargoSpaceId(mydoJob.getCargoSpaceId()); + basStockService.updateBasStock(stock); + } + } + + //更新货位状态【入库预占用】 + basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), "", CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKIN); + + } + } + + + + } }