using iWareCC.Common.Helper;
using iWareCommon.Common.Globle;
using iWareCommon.Utils;
using iWareModel;
using iWareModel.EnumType.XiGangPublicCommon;
using iWareSql;
using iWareSql.DataAccess;
using iWareSql.DBModel;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Contexts;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using XiGang.Core.Model;
using XiGang.Core.Model.PostParamModels.Task;
using XiGang.Core.Model.ViewModels;
using static WZ.Useful.Commons.NativeMethods;
namespace iWareCC
{
///
/// 重新获取发动机信息,并赋值 任务
///
public static class AutoUpdateEngineInfoTask
{
///
/// 重新获取发动机信息,并赋值
///
public static void Handler()
{
var alertMsg = "";
while (true)
{
Thread.Sleep(2000);//休眠2秒,将休眠写到前面,是为了下面的continue方法执行后不显示错误信息的提示!!!【EditBy shaocx,2022-05-24】
SystemWarningMsg._lbl_alert_AutoUpdateEngineInfoTask = string.Empty;
try
{
if (SystemValue.isAllowRuning_AutoUpdateEngineInfoTask && SystemValue.isStartedModel)
{
using (DbModel context = new DbModel())
{
var needIssueTask = context.Task_Main.Where(x => x.IsUpdateMatFinish == false).OrderBy(x => x.Id).FirstOrDefault();
if (needIssueTask == null)
{
SystemWarningMsg._lbl_alert_AutoUpdateEngineInfoTask = $"没有要处理[重新获取发动机信息,并赋值]任务,此次循环结束";
continue;
}
if (needIssueTask.UpdateMatFinishNum != null)
{
UpdateMat(context, needIssueTask);
}
var material = context.Base_Material.Where(x => x.Id == needIssueTask.MaterialId).FirstOrDefault();
//符合条件,即将进行重新获取发动机信息,并赋值
var _scan_salverCode = needIssueTask.SalverCode;
alertMsg = $"发动机码为{needIssueTask.SerialNumber},托盘码为{_scan_salverCode},符合条件,即将进行重新获取发动机信息,并赋值";
SystemWarningMsg._lbl_alert_AutoUpdateEngineInfoTask = alertMsg;
Log4NetHelper.WriteInfoLog(LogType.AutoUpdateEngineInfoTask, alertMsg);
try
{
//调用API
MesRetModel2 getEngineInfoResult = WmsRequestHelper.GetEngineInfo(material.CargoNo);
if (getEngineInfoResult.code != 200)
{
alertMsg = ($"查询MES发动机信息失败,参数{material.CargoNo},MES返回code:" + getEngineInfoResult.code + ",信息:" + getEngineInfoResult.message);
SystemWarningMsg._lbl_alert_AutoUpdateEngineInfoTask = alertMsg;
Log4NetHelper.WriteInfoLog(LogType.AutoUpdateEngineInfoTask, alertMsg);
needIssueTask.UpdateMatFinishNum = needIssueTask.UpdateMatFinishNum == null ? 1 : (Convert.ToInt32(needIssueTask.UpdateMatFinishNum) + 1);
UpdateMat(context, needIssueTask);
continue;
}
var info_getEngineInfo = getEngineInfoResult.data;
if (info_getEngineInfo == null)
{
alertMsg = ($"查询MES发动机信息失败,参数{material.CargoNo},MES返回发动机信息为NULL,code:" + getEngineInfoResult.code
+ ",信息:" + getEngineInfoResult.message + ",data:" + JsonConvert.SerializeObject(getEngineInfoResult.data)
); ; ;
SystemWarningMsg._lbl_alert_AutoUpdateEngineInfoTask = alertMsg;
Log4NetHelper.WriteInfoLog(LogType.AutoUpdateEngineInfoTask, alertMsg);
needIssueTask.UpdateMatFinishNum = needIssueTask.UpdateMatFinishNum == null ? 1 : (Convert.ToInt32(needIssueTask.UpdateMatFinishNum) + 1);
UpdateMat(context, needIssueTask);
continue;
}
//调用API
UpdateEngineInfoParam param = new UpdateEngineInfoParam()
{
info_getEngineInfo = info_getEngineInfo,
mainTaskId = needIssueTask.Id,
materialId = material.Id
};
MessageModel ret = WmsRequestHelper.UpdateEngineInfo(param);
if (ret.success)
{//处理成功了,WMS API会把这个状态更新的IsUpdateMatFinish
alertMsg = $"发动机码为{needIssueTask.SerialNumber},托盘码为{_scan_salverCode},请求参数:{JsonConvert.SerializeObject(param)},重新获取发动机信息,并赋值请求WMSAPI成功!";
SystemWarningMsg._lbl_alert_AutoUpdateEngineInfoTask = alertMsg;
Log4NetHelper.WriteInfoLog(LogType.AutoUpdateEngineInfoTask, alertMsg);
needIssueTask.IsUpdateMatFinish = true;
needIssueTask.UpdateMatFinishTime = DateTime.Now;
context.SaveChanges();
}
else
{//失败
alertMsg = $"发动机码为{needIssueTask.SerialNumber},托盘码为{_scan_salverCode},请求参数:{JsonConvert.SerializeObject(param)},重新获取发动机信息,并赋值请求WMSAPI失败:WMS返回消息为->{ret.msg}";
SystemWarningMsg._lbl_alert_AutoUpdateEngineInfoTask = alertMsg;
Log4NetHelper.WriteInfoLog(LogType.AutoUpdateEngineInfoTask, alertMsg);
Log4NetHelper.WriteErrorLog(LogType.AutoUpdateEngineInfoTask, alertMsg, null);
needIssueTask.UpdateMatFinishNum = needIssueTask.UpdateMatFinishNum == null ? 1 : (Convert.ToInt32(needIssueTask.UpdateMatFinishNum) + 1);
UpdateMat(context, needIssueTask);
}
}
catch (Exception ex)
{
alertMsg = $"发动机码为{needIssueTask.SerialNumber},托盘码为{_scan_salverCode},重新获取发动机信息,并赋值请求WMSAPI失败:出现异常->{ex.Message}";
SystemWarningMsg._lbl_alert_AutoUpdateEngineInfoTask = alertMsg;
Log4NetHelper.WriteInfoLog(LogType.AutoUpdateEngineInfoTask, alertMsg);
Log4NetHelper.WriteErrorLog(LogType.AutoUpdateEngineInfoTask, alertMsg, ex);
needIssueTask.UpdateMatFinishNum = needIssueTask.UpdateMatFinishNum == null ? 1 : (Convert.ToInt32(needIssueTask.UpdateMatFinishNum) + 1);
UpdateMat(context, needIssueTask);
}
}
}
}
catch (Exception ex)
{
SystemWarningMsg._lbl_alert_AutoUpdateEngineInfoTask += "重新获取发动机信息,并赋值 出现异常:" + ex.Message + SysGloble.SPLIT_STR;
Log4NetHelper.WriteErrorLog(LogType.AutoUpdateEngineInfoTask, "AutoUpdateEngineInfoTask 出现异常:" + ex.Message, ex);
}
}
}
private static void UpdateMat(DbModel context, Task_Main needIssueTask)
{
if (needIssueTask.UpdateMatFinishNum > 3)
{
needIssueTask.IsUpdateMatFinish = true;
}
needIssueTask.UpdateMatFinishTime = DateTime.Now;
context.SaveChanges();
}
}
}