package com.ruoyi.ams.xuankuang.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.comparator.CompareUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.ruoyi.ams.asn.domain.WmsDocAsnDetails; import com.ruoyi.ams.asn.domain.WmsDocAsnHeader; import com.ruoyi.ams.asn.mapper.WmsDocAsnDetailsMapper; import com.ruoyi.ams.asn.mapper.WmsDocAsnHeaderMapper; import com.ruoyi.ams.asn.service.IWmsDocAsnDetailsService; import com.ruoyi.ams.inv.service.IInvLotLocIdService; import com.ruoyi.ams.task.domain.WcsTask; import com.ruoyi.ams.task.service.IWcsTaskService; import com.ruoyi.ams.xuankuang.domain.dto.LocationCoordDTO; import com.ruoyi.ams.xuankuang.domain.form.*; import com.ruoyi.ams.xuankuang.facade.IUnpackingMachineFacade; import com.ruoyi.base.constant.Constant; import com.ruoyi.base.domain.BaseLocationInfo; import com.ruoyi.base.domain.vo.BaseLocationLotattDTO; import com.ruoyi.base.service.IBaseLocationInfoService; import com.ruoyi.base.service.IBaseSkuService; import com.ruoyi.base.utils.IdSequenceUtils; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.hard.xuankang.StirringTankClient; import com.ruoyi.hard.xuankang.UnpackingMachineSubClient; import io.jsonwebtoken.lang.Assert; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; import java.util.List; import static com.ruoyi.ams.xuankuang.service.BaseLocationInfoSubService.OUT_ZONES; /** * @author HuKang * @version 1.0 * @date 2023/3/30 15:42 */ @Slf4j @Service public class WcsToWmsApiService { @Autowired private IBaseSkuService iBaseSkuService; @Autowired private IBaseLocationInfoService iBaseLocationInfoService; @Autowired private BaseLocationInfoSubService baseLocationInfoSubService; @Autowired private InvLotLocIdSubService InvLotLocIdSubService; @Autowired private WcsTaskSubService wcsTaskSubService; @Autowired private IWcsTaskService iWcsTaskService; @Autowired private WmsDocAsnHeaderMapper wmsDocAsnHeaderMapper; @Autowired private WmsDocAsnDetailsMapper wmsDocAsnDetailsMapper; @Autowired private IUnpackingMachineFacade unpackingMachineFacade; @Autowired private IdSequenceUtils idSequenceUtils; @Autowired private StirringTankClient stirringTankClient; @Autowired private UnpackingMachineSubClient unpackingMachineSubClient; @Autowired private IWcsTaskService wcsTaskService; @Autowired private IWmsDocAsnDetailsService wmsDocAsnDetailsService; @Autowired private WmsDocAsnSubService wmsDocAsnSubService; @Autowired private AgvCallProxyService agvCallProxyService; @Autowired private IInvLotLocIdService invLotLocIdService; /** * 组盘上报 * * @param stackingCompletion * @return */ @Transactional public synchronized AjaxResult stackingCompletion(StackingCompletionForm stackingCompletion) { // 上报类型 int reportType = stackingCompletion.getReportType(); // 托盘号 String palletNo = stackingCompletion.getPalletNo(); // Wcs物料类型 String materialType = stackingCompletion.getMaterialType(); // wms物料编码 String sku = iBaseSkuService.selectBaseSkuByMaterialType(materialType).getSku(); // 数量 Double qty = (double) stackingCompletion.getQty(); // 入库单号 String asnNo = stackingCompletion.getRelatedWmsNo(); // 任务号 String wcsNo = stackingCompletion.getWcsNo(); if (asnNo.equals("")) { AjaxResult ajaxResult1 = generateAShippingOrder(sku, new BigDecimal(qty)); // 判重 WcsTask wcsTaskQuery = new WcsTask(); //AsnNO wcsTaskQuery.setExt1(ajaxResult1.getData().toString()); wcsTaskQuery.setExt2(palletNo); wcsTaskQuery.setExt3(wcsNo); WcsTask wcsTask = iWcsTaskService.selectWcsTaskByModel(wcsTaskQuery); if (wcsTask != null) { String locationTo = wcsTask.getLocationTo(); BaseLocationInfo baseLocationInfo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, Constant.WAREHOUSE_ID); LocationCoordDTO locationCoordinateVo = new LocationCoordDTO(); locationCoordinateVo.setTaskNo(wcsTask.getTaskNo()); locationCoordinateVo.setLocationId(baseLocationInfo.getLocationNo()); locationCoordinateVo.setFloor(Integer.valueOf(baseLocationInfo.getShiftNo())); locationCoordinateVo.setCol(Integer.valueOf(baseLocationInfo.getRowNo())); locationCoordinateVo.setRow(Integer.valueOf(baseLocationInfo.getRowIndex())); return AjaxResult.success("仓位获取成功!", locationCoordinateVo); } // 推荐目标库位 BaseLocationLotattDTO baseLocationLotattVO = baseLocationInfoSubService.recommendAReceiptLocation(sku); if (baseLocationLotattVO == null) { AjaxResult.error("没有可以推荐的目标库位!"); } //TODO recommendAReceiptLocation,获取库位时,判断同列库存是否是相同入库日期的,不同相同日期不可放 // 生成任务 String taskNo = ""; AjaxResult ajaxResult = addWcsTask(Constant.LOC_STAGE_CACHE.toString() , baseLocationLotattVO.getId().toString(), ajaxResult1.getData().toString(), palletNo, wcsNo); if (!ajaxResult.isSuccess()) { return ajaxResult; } taskNo = ajaxResult.get("data").toString(); // 入库缓存位生成库存 InvLotLocIdSubService.initInv(Constant.LOC_STAGE_CACHE.toString(), sku, palletNo, ajaxResult1.getData().toString(), taskNo, qty); // 反馈 LocationCoordDTO locationCoordinateVo = new LocationCoordDTO(); locationCoordinateVo.setTaskNo(taskNo); locationCoordinateVo.setLocationId(baseLocationLotattVO.getLocationNo()); locationCoordinateVo.setFloor(Integer.valueOf(baseLocationLotattVO.getShiftNo())); locationCoordinateVo.setCol(Integer.valueOf(baseLocationLotattVO.getRowNo())); locationCoordinateVo.setRow(Integer.valueOf(baseLocationLotattVO.getRowIndex())); return AjaxResult.success("仓位获取成功!", locationCoordinateVo); } // 判重 WcsTask wcsTaskQuery = new WcsTask(); wcsTaskQuery.setExt1(asnNo); wcsTaskQuery.setExt2(palletNo); wcsTaskQuery.setExt3(wcsNo); WcsTask wcsTask = iWcsTaskService.selectWcsTaskByModel(wcsTaskQuery); if (wcsTask != null) { String locationTo = wcsTask.getLocationTo(); BaseLocationInfo baseLocationInfo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, Constant.WAREHOUSE_ID); LocationCoordDTO locationCoordinateVo = new LocationCoordDTO(); locationCoordinateVo.setTaskNo(wcsTask.getTaskNo()); locationCoordinateVo.setLocationId(baseLocationInfo.getLocationNo()); locationCoordinateVo.setFloor(Integer.valueOf(baseLocationInfo.getShiftNo())); locationCoordinateVo.setCol(Integer.valueOf(baseLocationInfo.getRowNo())); locationCoordinateVo.setRow(Integer.valueOf(baseLocationInfo.getRowIndex())); return AjaxResult.success("仓位获取成功!", locationCoordinateVo); } // 推荐目标库位 BaseLocationLotattDTO baseLocationLotattVO = baseLocationInfoSubService.recommendAReceiptLocation(sku); if (ObjectUtil.isNull(baseLocationLotattVO)) { return AjaxResult.error("没有可以推荐的目标库位!"); } // 生成任务 String taskNo = ""; AjaxResult ajaxResult = addWcsTask(Constant.LOC_STAGE_CACHE.toString() , baseLocationLotattVO.getId().toString(), asnNo, palletNo, wcsNo); if (!ajaxResult.isSuccess()) { return ajaxResult; } taskNo = ajaxResult.get("data").toString(); // 入库缓存位生成库存 InvLotLocIdSubService.initInv(Constant.LOC_STAGE_CACHE.toString(), sku, palletNo, asnNo, taskNo, qty); // 反馈 LocationCoordDTO locationCoordinateVo = new LocationCoordDTO(); locationCoordinateVo.setTaskNo(taskNo); locationCoordinateVo.setLocationId(baseLocationLotattVO.getLocationNo()); locationCoordinateVo.setFloor(Integer.valueOf(baseLocationLotattVO.getShiftNo())); locationCoordinateVo.setCol(Integer.valueOf(baseLocationLotattVO.getRowNo())); locationCoordinateVo.setRow(Integer.valueOf(baseLocationLotattVO.getRowIndex())); return AjaxResult.success("仓位获取成功!", locationCoordinateVo); } /** * 空托仓位请求 * * @param emptyPalletLocForm * @return */ @Transactional public synchronized AjaxResult emptyPalletLoc(EmptyPalletLocForm emptyPalletLocForm) { // 空托仓位请求类型 int taskType = emptyPalletLocForm.getTaskType(); // 任务号 String wcsNo = emptyPalletLocForm.getWcsNo(); if (taskType == 0) { return AjaxResult.error("未传入空托仓位请求类型"); } if (taskType == 1) { // 判重 WcsTask wcsTaskQuery = new WcsTask(); wcsTaskQuery.setExt1(""); wcsTaskQuery.setExt2(""); wcsTaskQuery.setExt3(wcsNo); WcsTask wcsTask = iWcsTaskService.selectWcsTaskByModel(wcsTaskQuery); if (wcsTask != null) { String locationTo = wcsTask.getLocationTo(); BaseLocationInfo baseLocationInfo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, Constant.WAREHOUSE_ID); LocationCoordDTO locationCoordinateVo = new LocationCoordDTO(); locationCoordinateVo.setTaskNo(wcsTask.getTaskNo()); locationCoordinateVo.setLocationId(baseLocationInfo.getLocationNo()); locationCoordinateVo.setFloor(Integer.valueOf(baseLocationInfo.getShiftNo())); locationCoordinateVo.setCol(Integer.valueOf(baseLocationInfo.getRowNo())); locationCoordinateVo.setRow(Integer.valueOf(baseLocationInfo.getRowIndex())); return AjaxResult.success("仓位获取成功!", locationCoordinateVo); } BaseLocationInfo baseLocationInfo = selectLocationInfo(); if (baseLocationInfo == null) { AjaxResult.error("没有可以推荐的目标库位!"); } // 生成任务 String taskNo = ""; AjaxResult ajaxResult = addWcsTask(Constant.LOC_STAGE_CACHE.toString() , baseLocationInfo.getId().toString(), StringUtils.EMPTY, StringUtils.EMPTY, wcsNo, "空托盘入库任务", Constant.TaskType.EMPTY_PALLET.getDesc()); if (!ajaxResult.isSuccess()) { return ajaxResult; } taskNo = ajaxResult.get("data").toString(); // 入库缓存位生成库存 InvLotLocIdSubService.initInv(Constant.LOC_STAGE_CACHE.toString(), Constant.PALLET_TYPE, "", "", taskNo, 1.0); // 反馈 LocationCoordDTO locationCoordinateVo = new LocationCoordDTO(); locationCoordinateVo.setTaskNo(taskNo); locationCoordinateVo.setLocationId(baseLocationInfo.getLocationNo()); locationCoordinateVo.setFloor(Integer.valueOf(baseLocationInfo.getShiftNo())); locationCoordinateVo.setCol(Integer.valueOf(baseLocationInfo.getRowNo())); locationCoordinateVo.setRow(Integer.valueOf(baseLocationInfo.getRowIndex())); return AjaxResult.success("空托入库仓位获取成功!", locationCoordinateVo); } if (taskType == 2) { BaseLocationLotattDTO baseLocationLotatt = allocateLocationInfo(); Assert.isTrue(ObjectUtil.isNotNull(baseLocationLotatt), "仓库中无库存"); String palletNo = ObjectUtil.isNotNull(baseLocationLotatt.getLotattVO()) ? baseLocationLotatt.getLotattVO().getLotatt07() : StringUtils.EMPTY; // 生成四向车出库任务 String taskNo = IdWorker.getIdStr(); addWcsOutTask(taskNo, baseLocationLotatt.getLocationNo(), Constant.LOC_SORTATION_CACHE.toString(), palletNo, wcsNo, "空托盘出库任务", Constant.TaskType.EMPTY_PALLET.getDesc()); Assert.isTrue( ObjectUtil.isNotNull(baseLocationLotatt.getId()), "仓库中无库存"); invLotLocIdService.operateTraceIdByLocationId(String.valueOf(baseLocationLotatt.getId()), taskNo); LocationCoordDTO locationCoordinateVo1 = new LocationCoordDTO(); locationCoordinateVo1.setTaskNo(taskNo); locationCoordinateVo1.setLocationId(baseLocationLotatt.getLocationNo()); locationCoordinateVo1.setFloor(Integer.valueOf(baseLocationLotatt.getShiftNo())); locationCoordinateVo1.setCol(Integer.valueOf(baseLocationLotatt.getRowNo())); locationCoordinateVo1.setRow(Integer.valueOf(baseLocationLotatt.getRowIndex())); return AjaxResult.success(" 空托出库仓位获取成功", locationCoordinateVo1); } return AjaxResult.success(); } private AjaxResult addWcsTask(String locationFrom, String locationTo , String asnNo, String palletNo, String wcsNo, String remark, String taskType) { return wcsTaskSubService.addWcsTask(IdWorker.getIdStr(), locationFrom, locationTo, asnNo, palletNo, wcsNo, 10L, remark, taskType); } private AjaxResult addWcsOutTask(String taskNo, String locationFrom, String locationTo, String palletNo, String wcsNo, String remark, String taskType) { return wcsTaskSubService.addWcsOutTask(taskNo, locationFrom, locationTo , StringUtils.EMPTY, palletNo, wcsNo, 10L, remark, taskType); } protected BaseLocationLotattDTO allocateLocationInfo() { List baseLocationLotattList = baseLocationInfoSubService.selectAllocatingInventoryAccordingConditionsOrderBy(OUT_ZONES, Constant.PALLET_TYPE); Assert.isTrue(CollectionUtil.isNotEmpty(baseLocationLotattList), "there is no stock in the warehouse"); return filterInv1(baseLocationLotattList); } protected BaseLocationInfo selectLocationInfo() { return baseLocationInfoSubService.recommendAReceiptLocation(Constant.PALLET_TYPE); } /** * 任务状态反馈 * * @param taskStatusForm * @return */ public AjaxResult taskStatusResponse(TaskStatusForm taskStatusForm) { String taskNo = taskStatusForm.getTaskNo(); int status = taskStatusForm.getStatus(); wcsTaskSubService.callBack(taskNo, status, null); return AjaxResult.success(); } /** * 匹配库存 * * @param locationLotattList * @return */ public synchronized BaseLocationLotattDTO filterInv1(List locationLotattList) { return locationLotattList.parallelStream() .filter(item -> ObjectUtil.isNotNull(item) && StringUtils.equals(Constant.PALLET_TYPE, item.getSku()) && CompareUtil.compare(item.getQty(), 1F) == 0).findFirst().orElse(null); } /** * 生成入库单 * * @param sku * @param qty * @return */ public AjaxResult generateAShippingOrder(String sku, BigDecimal qty) { WmsDocAsnHeader wmsDocAsnHeader = new WmsDocAsnHeader(); //生成单头 String asnNo = idSequenceUtils.generateId("ASNNO"); wmsDocAsnHeader.setAsnNo(asnNo); wmsDocAsnHeader.setEdiSendFlag("N"); wmsDocAsnHeader.setAsnType(Constant.ASN_TYP.HK.getValue()); wmsDocAsnHeader.setCreateTime(new Date()); wmsDocAsnHeader.setAsnStatus(Constant.ASN_STS.STS10.getValue()); wmsDocAsnHeader.setCreateBy("Wms"); wmsDocAsnHeaderMapper.insertWmsDocAsnHeader(wmsDocAsnHeader); //生成明细 WmsDocAsnDetails wmsDocAsnDetails = new WmsDocAsnDetails(); wmsDocAsnDetails.setAsnNo(asnNo); wmsDocAsnDetails.setAsnLineNo(1l); wmsDocAsnDetails.setSku(sku); wmsDocAsnDetails.setCreateTime(new Date()); wmsDocAsnDetails.setExpectedQty(qty); wmsDocAsnDetails.setExpectedQtyEach(qty); wmsDocAsnDetails.setReceivedQty(new BigDecimal(0)); wmsDocAsnDetails.setReceivedQtyEach(new BigDecimal(0)); wmsDocAsnDetails.setLineStatus(Constant.ASN_STS.STS10.getValue()); wmsDocAsnDetails.setCreateTime(new Date()); wmsDocAsnDetails.setCreateBy("Wms"); wmsDocAsnDetailsMapper.insertWmsDocAsnDetails(wmsDocAsnDetails); return AjaxResult.success("操作成功!", asnNo); } /** * 拆包机开启接口 * * @param lineOpenNotificationForm * @return */ public AjaxResult lineOpenNotification(LineOpenNotificationForm lineOpenNotificationForm) { String lineId = lineOpenNotificationForm.getLineId(); boolean[] booleans = stirringTankClient.readTank14(); return unpackingMachineFacade.unpackingMachineOpen(lineId, booleans) ? AjaxResult.success() : AjaxResult.error(); } public AjaxResult turnOffTheUnpacker(LineOpenNotificationForm lineOpenNotificationForm){ switch (lineOpenNotificationForm.getLineId()) { case "1": return turnOffTheUnpacker(); case "2": return turnOffTheUnpacker1(); case "3": return turnOffTheUnpacker2(); case "4": return turnOffTheUnpacker3(); case "5": return turnOffTheUnpacker4(); default: throw new BaseException("lineId is not exist ......"); } } /** * 正常关闭1号拆包机 * * @return */ public AjaxResult turnOffTheUnpacker() { new Thread(() -> { try { Thread.sleep(300000); //写关闭拆包机信号 unpackingMachineSubClient.writeV141_2(); //写仓库注入碳酸钠完成 stirringTankClient.writeTank05(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); return AjaxResult.success(); } /** * 正常关闭2号拆包机 * * @return */ public AjaxResult turnOffTheUnpacker1() { new Thread(() -> { try { Thread.sleep(300000); //写关闭拆包机信号 unpackingMachineSubClient.writeV141_3(); //写仓库注入丁黄药完成 stirringTankClient.writeTank05_1(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); return AjaxResult.success(); } /** * 正常关闭3号拆包机 * * @return */ public AjaxResult turnOffTheUnpacker2() { new Thread(() -> { try { Thread.sleep(300000); //写关闭拆包机信号 unpackingMachineSubClient.writeV141_4(); //写仓库注入六偏磷酸钠完成 stirringTankClient.writeTank05_3(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); return AjaxResult.success(); } /** * 正常关闭4号拆包机 * * @return */ public AjaxResult turnOffTheUnpacker3() { new Thread(() -> { try { Thread.sleep(300000); //写关闭拆包机信号 unpackingMachineSubClient.writeV141_5(); //写仓库注入硫酸铵完成 stirringTankClient.writeTank05_4(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); return AjaxResult.success(); } /** * 正常关闭5号拆包机 * * @return */ public AjaxResult turnOffTheUnpacker4() { new Thread(() -> { try { Thread.sleep(300000); //写关闭拆包机信号 unpackingMachineSubClient.writeV141_6(); //写仓库注入乙黄药完成 stirringTankClient.writeTank05_5(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); return AjaxResult.success(); } /** * 异常关闭1号拆包机 * * @return */ public AjaxResult turnOffTheUnpackererror() { //写仓库注入碳酸钠失败 stirringTankClient.writeTank04(); stirringTankClient.writeTank05f(); //写关闭拆包机信号 unpackingMachineSubClient.writeV141_2(); return AjaxResult.success(); } /** * 异常关闭2号拆包机 * * @return */ public AjaxResult turnOffTheUnpackererror1() { //写仓库注入丁黄药失败 stirringTankClient.writeTank04_1(); stirringTankClient.writeTank05_1f(); unpackingMachineSubClient.writeV141_3(); return AjaxResult.success(); } /** * 异常关闭3号拆包机 * * @return */ public AjaxResult turnOffTheUnpackererror2() { //写仓库注入六偏磷酸钠失败 stirringTankClient.writeTank04_3(); stirringTankClient.writeTank05_3f(); unpackingMachineSubClient.writeV141_4(); return AjaxResult.success(); } /** * 异常关闭4号拆包机 * * @return */ public AjaxResult turnOffTheUnpackererror3() { //写仓库注入硫酸铵失败 stirringTankClient.writeTank04_4(); stirringTankClient.writeTank05_4f(); unpackingMachineSubClient.writeV141_5(); return AjaxResult.success(); } /** * 异常关闭5号拆包机 * * @return */ public AjaxResult turnOffTheUnpackererror4() { //写仓库注入乙黄药失败 stirringTankClient.writeTank04_5(); stirringTankClient.writeTank05_5f(); unpackingMachineSubClient.writeV141_6(); return AjaxResult.success(); } /** * 更新数据接口 * * @param updateForm * @return */ public AjaxResult updateAsnData(UpdateForm updateForm) { String asnNo = updateForm.getDocNo(); String asnLineNo = updateForm.getLineNo(); Integer num = updateForm.getNum(); WmsDocAsnDetails wmsDocAsnDetails = wmsDocAsnDetailsMapper.selectWmsDocAsnDetailsByAsnLineNo(asnNo, asnLineNo); wmsDocAsnDetails.setExpectedQty(new BigDecimal(num)); wmsDocAsnDetails.setExpectedQtyEach(new BigDecimal(num)); wmsDocAsnDetailsMapper.updateWmsDocAsnDetails(wmsDocAsnDetails); return AjaxResult.success(); } /** * 安全交握,Wcs回调通知agv是否可以执行 * @param callbackForm * @return */ public Boolean callbackNotice(CallbackTaskForm callbackForm) { Assert.isTrue(StringUtils.equals(Constant.SAFE_CODE.PASS.getCode(), callbackForm.getSafeCode()), "当前任务未执行"); WcsTask wcsTask = wcsTaskService.selectWcsTaskByTaskNo(callbackForm.getTaskNo()); Assert.isTrue(ObjectUtil.isNotNull(wcsTask), "wcsTask is null"); return wcsTaskService.updateTaskStatus(wcsTask.getExt1(), Constant.TaskType.AGV.getDesc(), Constant.TASK_STS.TASK_CREATE.getValue(), Constant.TASK_STS.TASK_WAIT.getValue()); } /** * 出库任务下发 * @return */ public AjaxResult outboundRequest(OutboundForm outboundForm) { String locationFrom = "100733"; String locationTo = ""; String palletNo = outboundForm.getPalletNo(); String wcsId = outboundForm.getWcsId(); AjaxResult ajaxResult = agvCallProxyService.barrelsOutOfStorage(locationFrom, locationTo, palletNo,wcsId); if (ajaxResult.isSuccess()){ return AjaxResult.success("任务创建成功"); } return AjaxResult.error("任务创建失败"); } /** * 回调卸货完成前 * @return */ public AjaxResult agvCallbackWCSBeforeUnloadingIsCompleted() { // 查询出状态为10,包含物料信息为丁铵黑药的入库单 WmsDocAsnDetails wmsDocAsnDetails = new WmsDocAsnDetails(); wmsDocAsnDetails.setSku("C4H9O2PSSNH4"); wmsDocAsnDetails.setLineStatus(Constant.ASN_STS.STS10.getValue()); WmsDocAsnDetails wmsDocAsnDetails1 = wmsDocAsnDetailsService.selectWmsDocAsnDetailsByModel(wmsDocAsnDetails); String asnNo = wmsDocAsnDetails1.getAsnNo(); // 根据入库单号(Ext1)查询出所对应的任务 WcsTask wcsTask = new WcsTask(); wcsTask.setExt1(asnNo); WcsTask wcsTask1 = wcsTaskService.selectWcsTaskByModel(wcsTask); // 根据查出来的任务编号反馈wcs卸货完成 String taskNo = wcsTask1.getTaskNo(); wmsDocAsnSubService.wmsAgvCallbackIntask(taskNo); return AjaxResult.success(); } private AjaxResult addWcsTask(String locationFrom, String locationTo , String asnNo, String palletNo, String wcsNo) { return wcsTaskSubService.addWcsTask(IdWorker.getIdStr(), locationFrom, locationTo, asnNo, palletNo, wcsNo, 10L, "立体库入库任务", StringUtils.EMPTY); } }