package com.ruoyi.scheduleTask; import com.ruoyi.api.domain.wcsStockin.WcsStockinReceive; import com.ruoyi.api.domain.wcsStockout.WcsStockoutParam; import com.ruoyi.api.service.IApiWcsService; import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; import com.ruoyi.bas.stock.domain.BasStock; 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.in.job.domain.MydoJob; import com.ruoyi.in.job.service.IMydoJobService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.w3c.dom.stylesheets.LinkStyle; import java.util.HashMap; import java.util.List; import java.util.UUID; @Slf4j @Component public class RequestWcsHandler { @Autowired IMydoJobService mydoJobService; @Autowired IApiWcsService apiWcsService; @Autowired IBasStockService basStockService; @Autowired IBasStockInfoService basStockInfoService; @Autowired IBasCargoSpaceService basCargoSpaceService; private static final int TIMEINTERVAL_DEFAULT = 1000; private static final int TIMEINTERVAL_2000 = 2000; private static final int TIMEINTERVAL_5000 = 5000; /** * 推送wcs空托盘出库作业 */ @Scheduled(fixedRate = TIMEINTERVAL_2000) public void sendWcsEmptyContainerTask(){ List mydoJobs = mydoJobService.selectOutMydoJobList( new MydoJob().builder() .inOrOut(TaskType.TASKTYPE_STOCKOUT_EMPTY_TRAY) .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); //更新库存状态【占用中】 List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); if (!stocks.isEmpty()){ 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); //更新库存状态【占用中】 List stocks = basStockService.selectBasStockListByTrayCode(mydoJob.getTrayCode()); if (!stocks.isEmpty()){ 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 stockoutMydoJobForManual(){ List mydoJobs = mydoJobService.selectOutMydoJobList( new MydoJob().builder() .status(TaskStatusEnum.READY.getCode()) .inOrOut(TaskType.TASKTYPE_STOCKOUT_MANUAL) .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.sendOutMydoJob(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); basStockService.updateBasStock(stock); } } //更新货位状态【出库预占用】 basCargoSpaceService.updateBasCargoSpaceStatus(mydoJob.getCargoSpaceId(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); } } } /** * 出库确认完成 - 推送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); } } } /** * 推送wcs移库任务 */ @Scheduled(fixedRate = TIMEINTERVAL_2000) public void sendWcsMoveTask(){ 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); } } } /** * 推送wcs盘点出库任务 */ @Scheduled(fixedRate = TIMEINTERVAL_2000) public void sendWcsInventoryOutTask(){ List mydoJobs = mydoJobService.selectOutMydoJobList( new MydoJob().builder() .status(TaskStatusEnum.READY.getCode()) .inOrOut(TaskType.TASKTYPE_STOCKOUT_INVENTORY) .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.sendInventoryOutMydoJob(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(), mydoJob.getTrayCode(), CargoSpaceCode.CARGOSPACE_STATUS_PRE_STOCKOUT); } } } /** * 盘点确认完成 - 推送wcs盘点回流任务 */ @Scheduled(fixedRate = TIMEINTERVAL_2000) public void sendWcsInventoryBackTask(){ List mydoJobs = mydoJobService.selectOutMydoJobList( new MydoJob().builder() .status(TaskStatusEnum.READY.getCode()) .inOrOut(TaskType.TASKTYPE_INVENTORY_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.sendInventoryBackMydoJob(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); } } } }