first commit
This commit is contained in:
+90
@@ -0,0 +1,90 @@
|
||||
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 JSMachine.WMS.PLC.ModbusImpl.Elevator.Model;
|
||||
using JSMachine.WMS.PLC.ModbusImpl.PaperFeedGroundRack.ModbusIO.Write;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StrategyPatternImpl
|
||||
{
|
||||
public class ElevatorStrategy : ITaskCompletionStrategy
|
||||
{
|
||||
private readonly IElevatorPlcQueueService _elevatorPlcQueueService;
|
||||
private readonly IStorageRackService _storageRackService;
|
||||
private readonly IAGVTaskService _agvTaskService;
|
||||
private readonly IElevatorCountService _elevatorCountService;
|
||||
|
||||
public ElevatorStrategy(
|
||||
IElevatorPlcQueueService elevatorPlcQueueService,
|
||||
IStorageRackService storageRackService,
|
||||
IElevatorCountService elevatorCountService,
|
||||
IAGVTaskService agvTaskService)
|
||||
{
|
||||
_elevatorPlcQueueService = elevatorPlcQueueService;
|
||||
_storageRackService = storageRackService;
|
||||
_elevatorCountService = elevatorCountService;
|
||||
_agvTaskService = agvTaskService;
|
||||
}
|
||||
|
||||
public async Task<bool> CompleteTaskAsync(AGVTaskDto agvTask, StorageRackDto destWarehouse)
|
||||
{
|
||||
ElevatorPlcStatus elevatorPlcStatus = new();
|
||||
|
||||
int elevatorNo = destWarehouse.StorageRackName.Contains("1号") ? 1 : 2;
|
||||
elevatorPlcStatus.ElevatorNo = elevatorNo;
|
||||
|
||||
if (destWarehouse.ElevatorChannel == 1001)
|
||||
{
|
||||
elevatorPlcStatus.StockInPutdownChanelTwo = true;
|
||||
}
|
||||
if (destWarehouse.ElevatorChannel == 1011)
|
||||
{
|
||||
elevatorPlcStatus.StockInPutdownChanelOne = true;
|
||||
}
|
||||
|
||||
bool bRet = await ElevatorWrite.WriteElevator(elevatorPlcStatus);
|
||||
|
||||
if (!bRet)
|
||||
{
|
||||
LogHelper.Error($"向 {elevatorPlcStatus.ElevatorNo} 号提升机 {destWarehouse.ElevatorChannel} 网带写放货完成信号失败");
|
||||
return false;
|
||||
}
|
||||
|
||||
ElevatorPlcQueueDto elevatorPlcQueue = new()
|
||||
{
|
||||
ElevatorNo = elevatorNo,
|
||||
ElevatorChannel = destWarehouse.ElevatorChannel.Value,
|
||||
AgvTaskId = agvTask.Id,
|
||||
IsLock = false
|
||||
};
|
||||
|
||||
bRet = await _elevatorPlcQueueService.Add(elevatorPlcQueue);
|
||||
if (!bRet)
|
||||
{
|
||||
LogHelper.Error($"写PLC队列失败");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
LogHelper.Info($"入库:写提升机队列成功 提升机编号 {elevatorPlcQueue.ElevatorNo} 通道号 {elevatorPlcQueue.ElevatorChannel}");
|
||||
}
|
||||
|
||||
agvTask.TaskStatus = TaskStatusEnum.Completed;
|
||||
await _agvTaskService.EditSingalWithSpecificCols(agvTask, ["TaskStatus"]);
|
||||
|
||||
//解锁提升机通道库位
|
||||
await _storageRackService.Unlock(destWarehouse);
|
||||
//提升机计数
|
||||
await _elevatorCountService.IncrementCount(elevatorNo, elevatorPlcQueue.ElevatorChannel);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
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
|
||||
{
|
||||
/// <summary>
|
||||
/// 存储区策略(普通库位,中转库位)
|
||||
/// </summary>
|
||||
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<bool> 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}");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
using JSMachine.WMS.App.Dto;
|
||||
using JSMachine.WMS.App.Dto.Enum;
|
||||
using JSMachine.WMS.Business.RcsCallBack.IService.StrategyPattern;
|
||||
using JSMachine.WMS.Domain.Entity;
|
||||
using JSMachine.WMS.Infrastructure;
|
||||
using JSMachine.WMS.Infrastructure.Helper;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StrategyPatternImpl
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据任务楼层、目标区域和提升机区域选择任务完成处理策略。
|
||||
/// </summary>
|
||||
public class TaskCompletionStrategyFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// 解析 AGV 任务完成后的后续处理策略。
|
||||
/// </summary>
|
||||
/// <param name="agvTask">已完成的 AGV 任务。</param>
|
||||
/// <param name="destWarehouse">任务目标库位。</param>
|
||||
/// <returns>匹配的策略实例;无法匹配时返回空值。</returns>
|
||||
public ITaskCompletionStrategy GetStrategy(AGVTaskDto agvTask, StorageRackDto destWarehouse)
|
||||
{
|
||||
if (agvTask.Floor == FloorEnum.FirstFloor)
|
||||
{
|
||||
if (destWarehouse.Transport == TransportEnum.NormalArea)
|
||||
return GlobalServericeProvidor.GetService<StorageAreaStrategy>();
|
||||
else if (destWarehouse.ReservoirAreaId == 1091 || destWarehouse.ReservoirAreaId == 1092)
|
||||
return GlobalServericeProvidor.GetService<ElevatorStrategy>();
|
||||
}
|
||||
else if (
|
||||
agvTask.Floor == FloorEnum.SecondFloor &&
|
||||
(destWarehouse.Transport == TransportEnum.NormalArea || destWarehouse.Transport == TransportEnum.TransitArea))
|
||||
{
|
||||
return GlobalServericeProvidor.GetService<StorageAreaStrategy>();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user