|
|
@ -10,11 +10,7 @@ import com.gaotao.modules.api.service.RfidMachineApiService; |
|
|
import com.gaotao.modules.api.service.WcsApiService; |
|
|
import com.gaotao.modules.api.service.WcsApiService; |
|
|
import com.gaotao.modules.api.service.WmsMessageService; |
|
|
import com.gaotao.modules.api.service.WmsMessageService; |
|
|
|
|
|
|
|
|
import com.gaotao.modules.automatedWarehouse.entity.AgvStation; |
|
|
|
|
|
import com.gaotao.modules.automatedWarehouse.entity.CancelTaskResult; |
|
|
|
|
|
import com.gaotao.modules.automatedWarehouse.entity.PalletDetailData; |
|
|
|
|
|
import com.gaotao.modules.automatedWarehouse.entity.WmsTransportTask; |
|
|
|
|
|
import com.gaotao.modules.automatedWarehouse.entity.WmsTransportTaskDetail; |
|
|
|
|
|
|
|
|
import com.gaotao.modules.automatedWarehouse.entity.*; |
|
|
import com.gaotao.modules.automatedWarehouse.entity.tusk.TuskResponse; |
|
|
import com.gaotao.modules.automatedWarehouse.entity.tusk.TuskResponse; |
|
|
import com.gaotao.modules.automatedWarehouse.mapper.AgvTaskMapper; |
|
|
import com.gaotao.modules.automatedWarehouse.mapper.AgvTaskMapper; |
|
|
import com.gaotao.modules.automatedWarehouse.service.TuskClientService; |
|
|
import com.gaotao.modules.automatedWarehouse.service.TuskClientService; |
|
|
@ -692,6 +688,69 @@ public class AgvTaskServiceImpl implements AgvTaskService { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* @Description 取消并重试分拣位补盘 - rqrq |
|
|
|
|
|
* 先按现有取消把这张运输任务停掉:已下给 AGV 的会调 TUSK,TUSK 失败也继续把 WMS 任务改成已取消并释放站点。 |
|
|
|
|
|
* 然后用任务上的目标站点、WCS 任务号,以及托盘类型主数据上的 WCS 整型,拼出补盘报文再调 wcsNeedPalletTask。 |
|
|
|
|
|
* 报文 site 固定 55,documents 固定空列表。补盘失败必须抛出,让本方法和取消写在同一个事务里一起回滚。 - rqrq |
|
|
|
|
|
* @param data 页面传来的工厂和 WMS 任务号 |
|
|
|
|
|
* @author rqrq |
|
|
|
|
|
*/ |
|
|
|
|
|
@Override |
|
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
|
public void cancelAndRetryNeedPallet(CancelRetryNeedPalletData data) { |
|
|
|
|
|
if (data == null || data.getSite() == null || data.getSite().trim().isEmpty() |
|
|
|
|
|
|| data.getTaskNo() == null || data.getTaskNo().trim().isEmpty()) { |
|
|
|
|
|
throw new RuntimeException("工厂和任务号不能为空"); |
|
|
|
|
|
} |
|
|
|
|
|
String site = data.getSite().trim(); |
|
|
|
|
|
String taskNo = data.getTaskNo().trim(); |
|
|
|
|
|
|
|
|
|
|
|
// 取消前先读出原任务。取消后数据库状态会变,补盘报文要用这里记下的站点、WCS任务号和托盘类型 - rqrq |
|
|
|
|
|
WmsTransportTask task = agvTaskMapper.getTaskByTaskNo(site, taskNo); |
|
|
|
|
|
if (task == null) { |
|
|
|
|
|
throw new RuntimeException("任务不存在"); |
|
|
|
|
|
} |
|
|
|
|
|
if ("已完成".equals(task.getStatus()) || "已取消".equals(task.getStatus())) { |
|
|
|
|
|
throw new RuntimeException("已完成或已取消的任务不能取消并重试"); |
|
|
|
|
|
} |
|
|
|
|
|
if (task.getWcsTaskId() == null || task.getWcsTaskId().trim().isEmpty()) { |
|
|
|
|
|
throw new RuntimeException("任务没有WCS任务号,不能取消并重试"); |
|
|
|
|
|
} |
|
|
|
|
|
if (task.getToLocation() == null || task.getToLocation().trim().isEmpty()) { |
|
|
|
|
|
throw new RuntimeException("任务没有目标站点,不能重发补盘"); |
|
|
|
|
|
} |
|
|
|
|
|
if (task.getPalletType() == null || task.getPalletType().trim().isEmpty()) { |
|
|
|
|
|
throw new RuntimeException("任务没有托盘类型,不能重发补盘"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 用任务所属工厂查托盘类型主数据,取出 WCS 整型托盘类型和底托类型。查不到就不能拼报文,此时还没取消 - rqrq |
|
|
|
|
|
PalletType palletType = wcsIntegrationMapper.getPalletType(task.getSite(), task.getPalletType().trim()); |
|
|
|
|
|
if (palletType == null || palletType.getWcsPalletType() == null || palletType.getWcsBasePalletType() == null) { |
|
|
|
|
|
throw new RuntimeException("托盘类型【" + task.getPalletType().trim() + "】未配置WCS托盘类型或底托类型,不能重发补盘"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 走现有取消。TUSK 失败时取消结果仍是成功,WMS 任务、站点和 calling_flag 会按原逻辑处理;这里不因 TUSK 失败中断 - rqrq |
|
|
|
|
|
CancelTaskResult cancelResult = cancelAgvTask(site, taskNo); |
|
|
|
|
|
if (cancelResult == null || !cancelResult.isSuccess()) { |
|
|
|
|
|
String cancelMessage = cancelResult == null ? "取消任务失败" : cancelResult.getMessage(); |
|
|
|
|
|
throw new RuntimeException(cancelMessage); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
WcsNeedPalletTask needPalletTask = new WcsNeedPalletTask(); |
|
|
|
|
|
// 补盘报文 site、空明细是约定固定值;站点、WCS任务号和两个整型来自刚取消的这张任务 - rqrq |
|
|
|
|
|
needPalletTask.setSite("55"); |
|
|
|
|
|
needPalletTask.setDocuments(new ArrayList<>()); |
|
|
|
|
|
needPalletTask.setStationCode(task.getToLocation().trim()); |
|
|
|
|
|
needPalletTask.setWcsTaskId(task.getWcsTaskId().trim()); |
|
|
|
|
|
needPalletTask.setPalletType(palletType.getWcsPalletType()); |
|
|
|
|
|
needPalletTask.setBasePalletType(palletType.getWcsBasePalletType()); |
|
|
|
|
|
|
|
|
|
|
|
// 同步重发补盘,生成新的预约取托盘并继承原 wcsTaskId。抛错会回滚上面的 WMS 取消;TUSK 已发出的取消回滚不了 - rqrq |
|
|
|
|
|
wmsMessageService.wcsNeedPalletTask(needPalletTask); |
|
|
|
|
|
log.info("取消并重试补盘完成,原任务号: {},WCS任务号: {},站点: {}", taskNo, task.getWcsTaskId(), task.getToLocation()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @Description 处理未取货场景的取消(场景1/2)- rqrq |
|
|
* @Description 处理未取货场景的取消(场景1/2)- rqrq |
|
|
* @param task 运输任务 |
|
|
* @param task 运输任务 |
|
|
|