Item_KaiFa.cs
10.2 KB
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
/*
* kaifa
*
*/
using System;
using System.Net;
using System.Text;
using System.Collections.Generic;
using System.Web.Script.Serialization;
using Model;
using Asa.FaceControl;
using Newtonsoft.Json;
using System.Windows.Forms;
namespace BLL
{
public class KaiFa : IExtension
{
public event IExtension.PrintDelegate Printing;
public event IExtension.PrintDelegate SaveRetrospect;
private Config config;
private int reelID = 0;
private List<ExtensionControl> extensions;
public KaiFa(Config config)
{
this.config = config;
}
public void Clear()
{
LogNet.log.Info("Clear()");
for (int i = 0; i < extensions.Count; i++)
{
if (!extensions[i].CanClear) continue;
if (extensions[i].Control is FaceComboBox box)
box.Items.Clear();
extensions[i].Control.Text = "";
}
}
public void Dispose()
{
}
public void Load(List<ExtensionControl> extensions)
{
this.extensions = extensions;
ReadReelID();
}
static bool mesResult = false;
public bool SetKey(string[] originalCode, Dictionary<string, string> key, bool hasMatch,out string errmsg)
{
errmsg = "";
mesResult = false;
SaveAddReelID();
var now = DateTime.Now;
var Reelidstr = $"DP{now:yy}{reelID:000000000}";
if (key.ContainsKey("Reelid"))
{
key["Reelid"] = Reelidstr;
}
else
key.Add("Reelid", Reelidstr);
for (int i = 0; i < extensions.Count; i++)
{
if (key.ContainsKey(extensions[i].Key))
extensions[i].Control.Text = key[extensions[i].Key];
}
Application.DoEvents();
mesResult = GetMESInfo(key);
for (int i = 0; i < extensions.Count; i++)
{
if (key.ContainsKey(extensions[i].Key))
extensions[i].Control.Text = key[extensions[i].Key];
}
if (!mesResult)
{
return false;
}
if (config.AutoPrint)
{
//if (CanPrint())
PrintLabel(null, EventArgs.Empty);
}
return true;
}
public void Update()
{
}
private bool CanPrint()
{
int index = extensions.FindIndex(match => match.Control.Name == "TxtPart");
if (index == -1) return false;
if (extensions[index].Control.Text == "") return false;
index = extensions.FindIndex(match => match.Control.Name == "TxtQty");
if (index == -1) return false;
if (extensions[index].Control.Text == "") return false;
return true;
}
private void ReadReelID()
{
try
{
if (System.IO.File.Exists(FilePath.CONFIG_REELID))
{
string text = System.IO.File.ReadAllText(FilePath.CONFIG_REELID);
bool bln = int.TryParse(text, out reelID);
LogNet.log.Info($"ReadReelID {bln} text={text}");
}
else
{
System.IO.FileStream fs = System.IO.File.Create(FilePath.CONFIG_REELID);
fs.Close();
reelID = 0;
LogNet.log.Info("ReadReelID Create");
}
}
catch (Exception ex)
{
LogNet.log.Error("ReadReelID", ex);
System.Windows.Forms.MessageBox.Show(ex.Message, "Warning", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);
}
}
private void SaveAddReelID()
{
try
{
LogNet.log.Debug("打印标签前的ID:" + reelID);
reelID++;
System.IO.File.WriteAllText(FilePath.CONFIG_REELID, reelID.ToString());
LogNet.log.Info($"Save ReelID:{reelID}");
}
catch (Exception ex)
{
LogNet.log.Error("SaveAddReelID error", ex);
}
}
private void PrintLabel(object sender, EventArgs e)
{
LogNet.log.Debug("Enter PrintLabel Method");
Dictionary<string, string> key = new(StringComparer.OrdinalIgnoreCase);
for (int i = 0; i < extensions.Count; i++)
{
if (extensions[i].Key == "") continue;
if (key.ContainsKey(extensions[i].Key))
key[extensions[i].Key] = extensions[i].Control.Text;
else
key.Add(extensions[i].Key, extensions[i].Control.Text);
}
if (!mesResult)
{
LogNet.log.Debug("Enter PrintLabel Check mesResult");
mesResult = GetMESInfo(key);
for (int i = 0; i < extensions.Count; i++)
{
if (key.ContainsKey(extensions[i].Key))
extensions[i].Control.Text = key[extensions[i].Key];
}
if (!mesResult)
{
return;
}
}
var keys =new List<string>(key.Keys);
foreach (var kk in keys)
{
if (string.IsNullOrEmpty(key[kk]))
key[kk] = "NA";
}
SaveRetrospect?.Invoke(key);
Printing?.Invoke(key);
}
private bool GetMESInfo(Dictionary<string, string> keyv)
{
string url = config.HttpServer;
if (string.IsNullOrWhiteSpace(url))
return false;
if (TryGetDictValue(keyv, "PART")=="" && TryGetDictValue(keyv, "MPN") == "")
{
var fm = new FaceMessageBox("MES MSG", "CPN,MPN均为空,无法继续", System.Windows.Forms.MessageBoxButtons.OK);
fm.TopMost = true;
fm.ShowDialog();
return false;
}
//PART=C02-07129-01,QTY=10000,LOT=20211215,ASL=YAGEO,VEN=004284,DCODE=202150,TRACE=38K4420537,Reelid=KF2135800000212
int qty = 0;
int.TryParse(TryGetDictValue(keyv, "QTY"), out qty);
InitPPID_Request_DPS initPPID_Request_DPS = new InitPPID_Request_DPS()
{
ReelID = TryGetDictValue(keyv,"Reelid"),
CPN = TryGetDictValue(keyv, "PART"),
QTY = qty,
LOT = TryGetDictValue(keyv, "LOT"),
ToLoc = TryGetDictValue(keyv, "ToLoc"),
FromLoc = TryGetDictValue(keyv, "FromLoc"),
DCODE = TryGetDictValue(keyv, "DCODE"),
PN = TryGetDictValue(keyv, "PN"),
LotNo = TryGetDictValue(keyv, "LotNo"),
UserId = TryGetDictValue(keyv, "UserId"),
PRODATE = TryGetDictValue(keyv, "PRODATE"),
BATCH = TryGetDictValue(keyv, "BATCH"),
MPN = TryGetDictValue(keyv, "MPN"),
SiteCode = TryGetDictValue(keyv, "SiteCode"),
VEN = TryGetDictValue(keyv, "VEN"),
TraceCode = TryGetDictValue(keyv, "TRACE"),
};
if (string.IsNullOrWhiteSpace(initPPID_Request_DPS.ToLoc))
initPPID_Request_DPS.ToLoc = "CP30";
Dictionary<string, string> heads = new Dictionary<string, string>();
heads.Add("Token", "0001A156-7283-402F-895F-D3AE435CBA40");
LogNet.log.Info("Send:" + JsonConvert.SerializeObject(initPPID_Request_DPS));
string json = Http.PostJson(url, heads, initPPID_Request_DPS);
if (json == "") return false;
var respjson = JsonConvert.DeserializeObject<APIResponse>(json);
if (!respjson.Success)
{
var fm = new FaceMessageBox("MES MSG", respjson.Error, System.Windows.Forms.MessageBoxButtons.OK);
fm.TopMost = true;
fm.ShowDialog();
return false;
}
keyv["PART"] = respjson.Data.ToString();
//LogNet.log.Info(json);
return true;
}
string TryGetDictValue(Dictionary<string, string> dic, string key)
{
if (dic.ContainsKey(key))
{
return dic[key];
}
else
return "";
}
public void DrawTextBackground(Dictionary<string, string> key)
{
}
public void Print(bool match, Dictionary<string, string> key)
{
}
public class InitPPID_Request_DPS
{
/*
* {
"ReelID":"A000001",
"PN":"RC0603FR-0710KL",
"LOT":"38G15508220018",
"QTY":"5000",
"PRODATE":"1719",
"BATCH":"RS000212"
*/
//PPID
public string ReelID { get; set; }
public string PN { get; set; }
public string LOT { get; set; }
public decimal QTY { get; set; }
public string PRODATE { get; set; }
public string BATCH { get; set; }
public string MPN { get; set; }
public string CPN { get; set; }
//工厂代码
public string SiteCode { get; set; }
//转出库位
public string FromLoc { get; set; }
//转入库位
public string ToLoc { get; set; }
//操作员工号
public string UserId { get; set; }
public string LotNo { get; set; }
public string DCODE { get; set; }
public string TraceCode { get; set; }
public string VEN { get; set; }
}
public class APIResponse
{
//错误消息
public string Error { get; set; }
public string Msg { get; set; }
//是否处理成功
public bool Success { get; set; }
//业务数据
public object Data { get; set; }
}
}
}