11
schangxiang@126.com
2024-12-06 85f23e46d99a120cbd268176d8f8959f87c32710
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
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
{
    /// <summary>
    /// 重新获取发动机信息,并赋值 任务
    /// </summary>
    public static class AutoUpdateEngineInfoTask
    {
        /// <summary>
        /// 重新获取发动机信息,并赋值
        /// </summary>
        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<MesRetProductModel> 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<string> 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();
        }
 
    }
}