81 lines
2.9 KiB
C#
81 lines
2.9 KiB
C#
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}");
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|