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_DataProcess_269 = string.Empty; try { if (SystemValue.isAllowRuning_DataProcess_269 && 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_DataProcess_269 = $"没有要处理[重新获取发动机信息,并赋值]任务,此次循环结束"; 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_DataProcess_269 = alertMsg; Log4NetHelper.WriteInfoLog(LogType.DataProcess_269, 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_DataProcess_269 = alertMsg; Log4NetHelper.WriteInfoLog(LogType.DataProcess_269, 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_DataProcess_269 = alertMsg; Log4NetHelper.WriteInfoLog(LogType.DataProcess_269, 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_DataProcess_269 = alertMsg; Log4NetHelper.WriteInfoLog(LogType.DataProcess_269, 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_DataProcess_269 = alertMsg; Log4NetHelper.WriteInfoLog(LogType.DataProcess_269, alertMsg); Log4NetHelper.WriteErrorLog(LogType.DataProcess_269, 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_DataProcess_269 = alertMsg; Log4NetHelper.WriteInfoLog(LogType.DataProcess_269, alertMsg); Log4NetHelper.WriteErrorLog(LogType.DataProcess_269, alertMsg, ex); needIssueTask.UpdateMatFinishNum = needIssueTask.UpdateMatFinishNum == null ? 1 : (Convert.ToInt32(needIssueTask.UpdateMatFinishNum) + 1); UpdateMat(context, needIssueTask); } } } } catch (Exception ex) { SystemWarningMsg._lbl_alert_DataProcess_269 += "重新获取发动机信息,并赋值 出现异常:" + ex.Message + SysGloble.SPLIT_STR; Log4NetHelper.WriteErrorLog(LogType.DataProcess_269, "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(); } } }