You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AUCMA_SCADA/Aucma.Core.Tasks/CommTask/Job_BoxFoamOutStoreTask.cs

130 lines
5.0 KiB
C#

using Admin.Core.Common;
using Admin.Core.IService;
using Admin.Core.Model;
using Aucma.Core.HwPLc;
using log4net;
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
/// <summary>
/// 箱体出库任务
/// </summary>
namespace Aucma.Core.Tasks
{
public class Job_BoxFoamOutStoreTask
{
#region 初始化出库任务
/// <summary>
/// 初始化出库任务
/// </summary>
/// <param name="message"></param>
public delegate void RefreshOutStoreTask(RealTaskInfo taskInfos);
public event RefreshOutStoreTask RefreshOutStoreTaskEvent;
#endregion
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(Job_BoxFoamOutStoreTask));
protected readonly IBaseOrderInfoServices _baseOrderInfoServices;
protected readonly IBaseSpaceInfoServices _baseSpaceInfoServices;
protected readonly IBaseBomInfoServices _baseBomInfoServices;
protected readonly IRealTaskInfoServices _realTaskInfoServices;
protected readonly IExecutePlanInfoServices _executePlanInfoServices;
public Job_BoxFoamOutStoreTask(IBaseOrderInfoServices baseOrderInfoServices, IBaseSpaceInfoServices baseSpaceInfoServices,
IRealTaskInfoServices realTaskInfoServices,IBaseBomInfoServices baseBomInfoServices, IExecutePlanInfoServices executePlanInfoServices)
{
_baseOrderInfoServices = baseOrderInfoServices;
_baseSpaceInfoServices = baseSpaceInfoServices;
_baseBomInfoServices = baseBomInfoServices;
_realTaskInfoServices = realTaskInfoServices;
_executePlanInfoServices = executePlanInfoServices;
}
public async Task Run()
{
var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("泡前库Plc"));
if (obj.IsConnect)
{
var val = obj.plc.ReadBool("M100");//出发出库点位
if (val)
{
//获取发泡夹类型=》箱体类型
var planInfo = await _executePlanInfoServices.FirstAsync();
await PlanHandle(planInfo);
}
}
}
private async Task PlanHandle(ExecutePlanInfo planInfo)
{
string storeCode = Appsettings.app("StoreInfo", "BeforeStoreCode");//读取泡前库标识
if (planInfo != null)
{
var boxBomInfo = await _baseBomInfoServices.GetChildenBomInfoByMaterialCode(planInfo.MaterialCode, storeCode);
OutStore(storeCode, boxBomInfo, planInfo.ExecutePlanCode);
}
}
private async void OutStore(string storeCode, BaseBomInfo bomInfo, string planCode)
{
try
{
log.Info($"收到出库计划,物料码:{bomInfo.MaterialCode}");
//BaseSpaceInfo spaceInfo = await _baseSpaceInfoServices.OutStoreGetSpaceInfoByMaterialCode(storeCode, bomInfo.MaterialCode);
//if (spaceInfo != null)
//{
// log.Info($"匹配货道:{spaceInfo.SpaceName}");
// //RefreshScanMateriaCodeEvent?.Invoke(materiaclCode, materialType, spaceInfo.spaceName, storeCode); //刷新界面扫码信息
// CreateOutStoreTask(spaceInfo, bomInfo, planCode); //创建出库任务
//}
//else
//{
// //报警停线
//}
await Task.CompletedTask;
}
catch (Exception ex)
{
log.Info($"出库业务异常:{ex.Message}");
}
}
#region 创建出库任务
/// <summary>
/// 创建出库任务
/// </summary>
/// <param name="spaceInfo"></param>
private async void CreateOutStoreTask(BaseSpaceInfo spaceInfo, BaseBomInfo bomInfo, string planCode)
{
//生成出库任务依次下发至PLC
RealTaskInfo realTaskInfo = new RealTaskInfo();
realTaskInfo.PlanCode = planCode;
realTaskInfo.TaskType = 2;
realTaskInfo.TaskCode = System.Guid.NewGuid().ToString("N").Substring(0, 6);
realTaskInfo.StoreCode = spaceInfo.StoreCode;
realTaskInfo.SpaceCode = spaceInfo.SpaceCode;
realTaskInfo.SpaceName = spaceInfo.SpaceName;
realTaskInfo.MaterialType = bomInfo.MaterialName;
realTaskInfo.MaterialCode = bomInfo.MaterialCode;
realTaskInfo.PlanAmount = 1;
realTaskInfo.TaskStatus = 1;
realTaskInfo.CreateTime = DateTime.Now;
int result = await _realTaskInfoServices.AddAsync(realTaskInfo);
if (result > 0)
{
log.Info("出库任务创建成功");
RefreshOutStoreTaskEvent?.Invoke(realTaskInfo);
}
else
{
log.Error("出库任务创建失败");
}
}
#endregion
}
}