first commit
This commit is contained in:
+104
@@ -0,0 +1,104 @@
|
||||
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.SSE;
|
||||
using JSMachine.WMS.Infrastructure;
|
||||
using JSMachine.WMS.Infrastructure.Helper;
|
||||
using JSMachine.WMS.PLC.ModbusImpl.Elevator.Model;
|
||||
using JSMachine.WMS.PLC.ModbusImpl.PaperFeedGroundRack.ModbusIO.Write;
|
||||
using JSMachine.WMS.RPC.RcsRPC.Dto.In;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StatePattern.PutdownCompleted
|
||||
{
|
||||
/// <summary>
|
||||
/// 提升机处理器
|
||||
/// </summary>
|
||||
public class ElevatorDeliveryHandler : PutdownCompletedStateHandler
|
||||
{
|
||||
public ElevatorDeliveryHandler
|
||||
(IStorageRackService storageRackService,
|
||||
IAGVTaskService agvTaskService,
|
||||
IElevatorPlcQueueService elevatorPlcQueueService,
|
||||
IElevatorCountService elevatorCountService,
|
||||
IERPTaskService erpTaskService) :
|
||||
base(storageRackService, agvTaskService, elevatorPlcQueueService, elevatorCountService, erpTaskService)
|
||||
{
|
||||
}
|
||||
|
||||
public async override Task<bool> HandleAsync(AgvExcutionInfo agvExcutionInfo, AGVTaskDto agvTask, StorageRackDto destWarehouse)
|
||||
{
|
||||
var elevatorPlcStatus = new ElevatorPlcStatus();
|
||||
|
||||
//2.1 写PLC放货完成
|
||||
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;
|
||||
}
|
||||
if (destWarehouse.ElevatorChannel == 2001)
|
||||
{
|
||||
elevatorPlcStatus.StockOutPutdownChanelTwo = true;
|
||||
}
|
||||
if (destWarehouse.ElevatorChannel == 2011)
|
||||
{
|
||||
elevatorPlcStatus.StockOutPutdownChanelOne = true;
|
||||
}
|
||||
bool bRet = await ElevatorWrite.WriteElevator(elevatorPlcStatus);
|
||||
if (!bRet)
|
||||
{
|
||||
LogHelper.Error($"{agvTask.TaskType.GetDescription()}: " +
|
||||
$"向 {elevatorPlcStatus.ElevatorNo} 号提升机 {destWarehouse.ElevatorChannel} 网带写放货完成信号失败");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(agvTask.TaskType!=TaskTypeEnum.Carry)
|
||||
{
|
||||
//2.2 写PLC队列信息
|
||||
ElevatorPlcQueueDto elevatorPlcQueue = new()
|
||||
{
|
||||
ElevatorNo = elevatorNo,
|
||||
ElevatorChannel = destWarehouse.ElevatorChannel.Value,
|
||||
AgvTaskId = agvTask.Id,
|
||||
IsLock = false
|
||||
};
|
||||
bRet = await _elevatorPlcQueueService.Add(elevatorPlcQueue);
|
||||
if (!bRet)
|
||||
{
|
||||
LogHelper.Error($"{agvTask.TaskType.GetDescription()}:写PLC队列失败");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
LogHelper.Info($"{agvTask.TaskType.GetDescription()}:" +
|
||||
$"写PLC队列成功,提升机编号 {elevatorPlcQueue.ElevatorNo} 通道号 {elevatorPlcQueue.ElevatorChannel}");
|
||||
}
|
||||
|
||||
//提升机计数
|
||||
await _elevatorCountService.IncrementCount(elevatorNo, elevatorPlcQueue.ElevatorChannel);
|
||||
}
|
||||
|
||||
//2.3 更新agvtask的状态为完成
|
||||
await base.CompleteTask(agvTask);
|
||||
|
||||
//2.4 解锁提升机库位
|
||||
await _storageRackService.Unlock(destWarehouse);
|
||||
|
||||
//发送广播通知前端网站刷新页面
|
||||
SseEngine.BrodCast(agvTask.Floor.ToString());
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
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.StaePattern;
|
||||
using JSMachine.WMS.RPC.RcsRPC.Dto.In;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StatePattern.PutdownCompleted
|
||||
{
|
||||
/// <summary>
|
||||
/// 放货完成处理器
|
||||
/// </summary>
|
||||
public abstract class PutdownCompletedStateHandler : IAgvTaskStateHandler
|
||||
{
|
||||
protected readonly IStorageRackService _storageRackService;
|
||||
protected readonly IAGVTaskService _agvTaskService;
|
||||
protected readonly IElevatorPlcQueueService _elevatorPlcQueueService;
|
||||
protected readonly IElevatorCountService _elevatorCountService;
|
||||
protected readonly IERPTaskService _erpTaskService;
|
||||
|
||||
public PutdownCompletedStateHandler(
|
||||
IStorageRackService storageRackService,
|
||||
IAGVTaskService agvTaskService,
|
||||
IElevatorPlcQueueService elevatorPlcQueueService,
|
||||
IElevatorCountService elevatorCountService,
|
||||
IERPTaskService erpTaskService
|
||||
)
|
||||
{
|
||||
_storageRackService = storageRackService;
|
||||
_agvTaskService = agvTaskService;
|
||||
_elevatorPlcQueueService = elevatorPlcQueueService;
|
||||
_elevatorCountService= elevatorCountService;
|
||||
_erpTaskService = erpTaskService;
|
||||
}
|
||||
|
||||
public abstract Task<bool> HandleAsync(AgvExcutionInfo agvExcutionInfo, AGVTaskDto agvTask, StorageRackDto destWarehouse);
|
||||
|
||||
protected async Task CompleteTask(AGVTaskDto agvTask)
|
||||
{
|
||||
agvTask.TaskStatus = TaskStatusEnum.Completed;
|
||||
await _agvTaskService.UpdateAgvTaskStatus(agvTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
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.Common.IService;
|
||||
using JSMachine.WMS.Business.RcsCallBack.IService.StaePattern;
|
||||
using JSMachine.WMS.Business.SSE;
|
||||
using JSMachine.WMS.RPC.RcsRPC.Dto.In;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static JSMachine.WMS.App.Dto.StorageRackDto;
|
||||
|
||||
namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StatePattern.PutdownCompleted
|
||||
{
|
||||
/// <summary>
|
||||
/// 存储区(包括中转区)放货完成处理器
|
||||
/// </summary>
|
||||
public class StockAreaHandler : PutdownCompletedStateHandler
|
||||
{
|
||||
public StockAreaHandler(
|
||||
IStorageRackService storageRackService,
|
||||
IAGVTaskService agvTaskService,
|
||||
IElevatorPlcQueueService elevatorPlcQueueService,
|
||||
IElevatorCountService elevatorCountService,
|
||||
IERPTaskService erpTaskService) :
|
||||
base(storageRackService, agvTaskService, elevatorPlcQueueService, elevatorCountService, erpTaskService)
|
||||
{
|
||||
}
|
||||
|
||||
public async override Task<bool> HandleAsync(AgvExcutionInfo agvExcutionInfo, AGVTaskDto agvTask, StorageRackDto destWarehouse)
|
||||
{
|
||||
//1.将物料绑定到目标库位
|
||||
//2.解锁目标库位
|
||||
//3.更改agv任务为完成
|
||||
|
||||
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);
|
||||
|
||||
await CompleteTask(agvTask);
|
||||
|
||||
//更新erp任务为完成状态
|
||||
if (agvTask.TaskType == TaskTypeEnum.PdaIn ||
|
||||
agvTask.TaskType == TaskTypeEnum.TailIn ||
|
||||
agvTask.TaskType == TaskTypeEnum.TransferStockIn)
|
||||
{
|
||||
ERPTaskDto erpTask = await _erpTaskService.GetSingalByExpression(p => p.Id == agvTask.ErpTaskId);
|
||||
if (erpTask != null)
|
||||
{
|
||||
erpTask.TaskStatus = TaskStatusEnum.Completed;
|
||||
erpTask.TaskMsg = "";
|
||||
await _erpTaskService.EditSingalWithSpecificCols(erpTask, ["TaskStatus", "TaskMsg"]);
|
||||
}
|
||||
}
|
||||
|
||||
//发送广播通知前端网站刷新页面
|
||||
SseEngine.BrodCast(agvTask.Floor.ToString());
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
using JSMachine.WMS.App.Dto;
|
||||
using JSMachine.WMS.App.Dto.Enum;
|
||||
using JSMachine.WMS.App.IService;
|
||||
using JSMachine.WMS.RPC.RcsRPC.Dto.In;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StatePattern.PutdownCompleted
|
||||
{
|
||||
/// <summary>
|
||||
/// 出库码头处理器
|
||||
/// </summary>
|
||||
public class StockOutWharfHandler : PutdownCompletedStateHandler
|
||||
{
|
||||
public StockOutWharfHandler
|
||||
(IStorageRackService storageRackService,
|
||||
IAGVTaskService agvTaskService,
|
||||
IElevatorPlcQueueService elevatorPlcQueueService,
|
||||
IElevatorCountService elevatorCountService,
|
||||
IERPTaskService erpTaskService) :
|
||||
base(storageRackService, agvTaskService, elevatorPlcQueueService, elevatorCountService, erpTaskService)
|
||||
{
|
||||
}
|
||||
|
||||
public async override Task<bool> HandleAsync(AgvExcutionInfo agvExcutionInfo, AGVTaskDto agvTask, StorageRackDto destWarehouse)
|
||||
{
|
||||
destWarehouse.BarCode = agvTask.BarCode;
|
||||
|
||||
agvTask.TaskStatus = TaskStatusEnum.Completed;
|
||||
|
||||
await UnlockAndSetMiddleWarehouse(destWarehouse);
|
||||
|
||||
return await _agvTaskService.UpdateAgvTaskStatus(agvTask);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解锁中区库位并绑定合格证
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task UnlockAndSetMiddleWarehouse(StorageRackDto storageRack)
|
||||
{
|
||||
if (storageRack.Transport != TransportEnum.MiddleOutArea)
|
||||
return;
|
||||
|
||||
storageRack.IsLock = false;
|
||||
await _storageRackService.EditSingalWithSpecificCols(storageRack, ["IsLock", "BarCode"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
using JSMachine.WMS.App.Dto;
|
||||
using JSMachine.WMS.App.Dto.Enum;
|
||||
using JSMachine.WMS.App.IService;
|
||||
using JSMachine.WMS.Business.SSE;
|
||||
using JSMachine.WMS.RPC.RcsRPC.Dto.In;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static JSMachine.WMS.App.Dto.StorageRackDto;
|
||||
|
||||
namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StatePattern.PutdownCompleted
|
||||
{
|
||||
public class TransitAreaHandler : PutdownCompletedStateHandler
|
||||
{
|
||||
public TransitAreaHandler(
|
||||
IStorageRackService storageRackService,
|
||||
IAGVTaskService agvTaskService,
|
||||
IElevatorPlcQueueService elevatorPlcQueueService,
|
||||
IElevatorCountService elevatorCountService,
|
||||
IERPTaskService erpTaskService) :
|
||||
base(storageRackService, agvTaskService, elevatorPlcQueueService, elevatorCountService, erpTaskService)
|
||||
{
|
||||
}
|
||||
|
||||
public async override Task<bool> HandleAsync(AgvExcutionInfo agvExcutionInfo, AGVTaskDto agvTask, StorageRackDto destWarehouse)
|
||||
{
|
||||
//1.将物料绑定到目标库位
|
||||
//2.解锁目标库位
|
||||
//3.更改agv任务为完成
|
||||
|
||||
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);
|
||||
|
||||
await CompleteTask(agvTask);
|
||||
|
||||
//发送广播通知前端网站刷新页面
|
||||
SseEngine.BrodCast(agvTask.Floor.ToString());
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user