using JSMachine.WMS.App.Dto; using JSMachine.WMS.App.Dto.Enum; using JSMachine.WMS.App.IService; using JSMachine.WMS.App.ServiceImpl; using JSMachine.WMS.Business.RcsCallBack.IService.StrategyPattern; using JSMachine.WMS.Infrastructure.Helper; using Prism; using System; using System.Collections.Generic; using System.ComponentModel.Design; using System.Linq; using System.Text; using System.Threading.Tasks; using static JSMachine.WMS.App.Dto.StorageRackDto; namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StrategyPatternImpl { /// /// 存储区策略(普通库位,中转库位) /// public class StorageAreaStrategy : ITaskCompletionStrategy { private readonly IStorageRackService _storageRackService; private readonly IAGVTaskService _agvTaskService; private readonly IERPTaskService _erpTaskService; public StorageAreaStrategy( IStorageRackService storageRackService, IAGVTaskService agvTaskService, IERPTaskService erpTaskService) { _storageRackService = storageRackService; _agvTaskService = agvTaskService; _erpTaskService = erpTaskService; } public async Task CompleteTaskAsync(AGVTaskDto agvTask, StorageRackDto destWarehouse) { bool bRet = await _agvTaskService.EditSingalWithSpecificCols(agvTask, ["TaskStatus"]); if (!bRet) { LogHelper.Error($"更新agvTask {agvTask.Id} 失败"); return false; } destWarehouse.BingdingMaterial(new MateriaInfo { BarCode = agvTask.BarCode, MateriaBatch = agvTask.MateriaBatch, MateriaCode = agvTask.MateriaCode, MateriaName = agvTask.MateriaName, MateriaNum = agvTask.MateriaNum.ToString(), MateriaType = agvTask.MateriaType, OrderNo = agvTask.OrderNo }); //托盘放到位后解锁库位 destWarehouse.IsLock = false; await _storageRackService.EditSingal(destWarehouse); agvTask.TaskStatus = TaskStatusEnum.Completed; await _agvTaskService.EditSingalWithSpecificCols(agvTask, ["TaskStatus"]); //更新erp任务状态为完成 await UpdateErpTaskStatus(agvTask, TaskStatusEnum.Completed); return true; } private async Task UpdateErpTaskStatus(AGVTaskDto agvTask, TaskStatusEnum taskStatus) { ERPTaskDto erpTask = await _erpTaskService.GetSingalByExpression(p => p.Id == agvTask.ErpTaskId); erpTask.TaskStatus = taskStatus; //更新erp任务状态为完成 bool bRet = await _erpTaskService.EditSingal(erpTask); LogHelper.Info($"更新erptask状态为 {taskStatus} ,数据库操作结果 {bRet}"); } } }