using System; using System.Collections.Generic; using System.Data; using System.Dynamic; using System.IO; using System.Net; using System.Net.Http; using System.Net.Sockets; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using UAS_MES_NEW.DataOperate; using UAS_MES_NEW.Entity; namespace UAS_MES_NEW.PublicMethod { public class BindItem { [JsonProperty("bindKey")] public string BindKey { get; set; } [JsonProperty("bindValue")] public string BindValue { get; set; } [JsonProperty("keyType")] public string KeyType { get; set; } [JsonProperty("keyValue")] public string KeyValue { get; set; } [JsonProperty("hashType")] public string HashType { get; set; } [JsonProperty("hashKey")] public string HashKey { get; set; } } public class RootObject { [JsonProperty("productModuleType")] public string ProductModuleType { get; set; } [JsonProperty("productMainClass")] public string ProductMainClass { get; set; } [JsonProperty("productMediumClass")] public string ProductMediumClass { get; set; } [JsonProperty("productSubClass")] public string ProductSubClass { get; set; } [JsonProperty("task")] public string Task { get; set; } [JsonProperty("processType")] public string ProcessType { get; set; } [JsonProperty("userId")] public string UserId { get; set; } [JsonProperty("bindList")] public List BindList { get; set; } } public class DeviceInfo { [JsonProperty("tool_name")] public string ToolName { get; set; } [JsonProperty("response")] public string Response { get; set; } [JsonProperty("status")] public int Status { get; set; } [JsonProperty("product_name")] public string ProductName { get; set; } [JsonProperty("product_mode")] public string ProductMode { get; set; } [JsonProperty("material_code")] public string MaterialCode { get; set; } [JsonProperty("batch_no")] public string BatchNo { get; set; } [JsonProperty("production_date")] public string ProductionDate { get; set; } [JsonProperty("big_box_no")] public string BigBoxNo { get; set; } [JsonProperty("box_no")] public string BoxNo { get; set; } [JsonProperty("reserve10")] public string Reserve10 { get; set; } [JsonProperty("packing_num")] public int PackingNum { get; set; } [JsonProperty("soft_version")] public string SoftVersion { get; set; } [JsonProperty("hd_version")] public string HdVersion { get; set; } [JsonProperty("voltage")] public string Voltage { get; set; } [JsonProperty("power")] public string Power { get; set; } [JsonProperty("order_no")] public string OrderNo { get; set; } // 使用字典或列表来存储序列化的数组数据 public List DSN { get; set; } = new List(); public List MacStart { get; set; } = new List(); public List MacEnd { get; set; } = new List(); public List DeviceId { get; set; } = new List(); public List DevEnNo { get; set; } = new List(); public List Reserve3 { get; set; } = new List(); public List Reserve4 { get; set; } = new List(); } public class Thailand { [JsonProperty("tool_name")] public string ToolName { get; set; } [JsonProperty("response")] public string Response { get; set; } [JsonProperty("status")] public int Status { get; set; } [JsonProperty("product_name")] public string ProductName { get; set; } [JsonProperty("product_mode")] public string ProductMode { get; set; } [JsonProperty("big_box_no")] public string BigBoxNo { get; set; } [JsonProperty("packing_num")] public int PackingNum { get; set; } [JsonProperty("order_num")] public string OrderNum { get; set; } // 使用字典或列表来存储序列化的数组数据 public List sn { get; set; } = new List(); public List product_id { get; set; } = new List(); public List en { get; set; } = new List(); } public class DeviceInfoConverter : JsonConverter { public override DeviceInfo ReadJson(JsonReader reader, System.Type objectType, DeviceInfo existingValue, bool hasExistingValue, JsonSerializer serializer) { JObject jsonObject = JObject.Load(reader); DeviceInfo deviceInfo = new DeviceInfo(); // 解析基本字段 serializer.Populate(jsonObject.CreateReader(), deviceInfo); // 解析数组字段 ParseArrayFields(jsonObject, deviceInfo); return deviceInfo; } public override void WriteJson(JsonWriter writer, DeviceInfo value, JsonSerializer serializer) { throw new NotImplementedException(); } private void ParseArrayFields(JObject jsonObject, DeviceInfo deviceInfo) { int index = 0; // 解析 d_sn 数组 while (true) { string key = $"d_sn{index}"; if (jsonObject.TryGetValue(key, out JToken value)) { deviceInfo.DSN.Add(value.ToString()); index++; } else { break; } } // 解析 mac_start 数组 index = 0; while (true) { string key = $"mac_start{index}"; if (jsonObject.TryGetValue(key, out JToken value)) { deviceInfo.MacStart.Add(value.ToString()); index++; } else { break; } } // 解析 mac_end 数组 index = 0; while (true) { string key = $"mac_end{index}"; if (jsonObject.TryGetValue(key, out JToken value)) { deviceInfo.MacEnd.Add(value.ToString()); index++; } else { break; } } // 解析 dev_en_no 数组 index = 0; while (true) { string key = $"dev_en_no{index}"; if (jsonObject.TryGetValue(key, out JToken value)) { deviceInfo.DevEnNo.Add(value.ToString()); index++; } else { break; } } // 解析 reserve3 数组 index = 0; while (true) { string key = $"reserve3_{index}"; if (jsonObject.TryGetValue(key, out JToken value)) { deviceInfo.Reserve3.Add(value.ToString()); index++; } else { break; } } // 解析 reserve4 数组 index = 0; while (true) { string key = $"reserve4_{index}"; if (jsonObject.TryGetValue(key, out JToken value)) { deviceInfo.Reserve4.Add(value.ToString()); index++; } else { break; } } // 解析 DeviceId 数组 index = 0; while (true) { string key = $"DeviceId{index}"; if (jsonObject.TryGetValue(key, out JToken value)) { deviceInfo.DeviceId.Add(value.ToString()); index++; } else { break; } } } } public class HttpServer { static DataHelper dh = new DataHelper(); public static int SN_SERVICE_PORT = 21610; public static int MAX_BUF_SIZE = 8192; static string ComputeSha256Hash(string input) { using (SHA256 sha256 = SHA256.Create()) { byte[] bytes = Encoding.UTF8.GetBytes(input); byte[] hashBytes = sha256.ComputeHash(bytes); StringBuilder builder = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { builder.Append(hashBytes[i].ToString("x2")); } return builder.ToString().ToUpper(); } } //获取SN的EN号,彩盒标机身标一个工站一起打印,需要SN单个获取 public static string GetEN(string iSN) { DataTable dt = (DataTable)dh.ExecuteSql("select PO_SN,ms_id,ma_custpo,ms_makecode,pr_prefix,PREFIX_EN_NO,PREFIX_BIG_BOX,pr_prebigxbox,pr_regcode from makeserial left join product on ms_prodcode=pr_code left join make on ma_code=ms_makecode left join ZTE_ORDER on ma_custpo=BATCH_NO where (ms_sncode ='" + iSN + "' or ms_firstsn='" + iSN + "') and RESERVE9='" + User.UserLineCode + "' order by ms_id desc", "select"); string prefix = ""; string regcode = ""; string makecode = ""; string prebigxbox = ""; string po = ""; string ms_id = ""; if (dt.Rows.Count > 0) { prefix = dt.Rows[0]["PREFIX_EN_NO"].ToString(); regcode = dt.Rows[0]["pr_regcode"].ToString(); makecode = dt.Rows[0]["ms_makecode"].ToString(); prebigxbox = dt.Rows[0]["PREFIX_BIG_BOX"].ToString(); po = dt.Rows[0]["PO_SN"].ToString(); ms_id = dt.Rows[0]["ms_id"].ToString(); } if (po == "") { BaseUtil.ShowError("工单或线别未匹配到PO号,不允许执行该操作"); } dynamic obj = new ExpandoObject(); obj.tool_name = "zte"; obj.request = "Storage2"; obj.User = "mes"; obj.password = "258456"; obj.po_sn = po; obj.wholeDeviceCode = iSN; obj.reg_code = regcode; obj.prefix_en_no = prefix; obj.prefix_big_box = prebigxbox; obj.packing_num = 6; obj.isn = iSN; string json = JsonConvert.SerializeObject(obj, Formatting.Indented); string returnstr = ToServerReq(json); dh.ExecuteSql("insert into EISDATA(ED_ID, ED_DATA, ED_INDATE, ED_TYPE)values(EISDATA_seq.nextval,'" + json + "',sysdate,'GETEN')", "insert"); dh.ExecuteSql("insert into EISDATA(ED_ID, ED_DATA, ED_INDATE, ED_TYPE)values(EISDATA_seq.nextval,'" + returnstr + "',sysdate,'GETEN')", "insert"); JObject deviceObj = JObject.Parse(returnstr); string WholeDeviceCode = deviceObj["WholeDeviceCode"].ToString(); string SN = deviceObj["SN"].ToString(); string dev_en_no = deviceObj["dev_en_no"].ToString(); string mac = deviceObj["mac"].ToString(); string mac_start = deviceObj["mac_start"].ToString(); string mac_end = deviceObj["mac_end"].ToString(); string reg_code = deviceObj["reg_code"].ToString(); string reserve3 = deviceObj["reserve3"].ToString(); string status = deviceObj["status"].ToString(); string device_type = deviceObj["device_type"].ToString(); string en_no = deviceObj["en_no"].ToString(); if (dh.CheckExist("ZTEDATA", "zd_sn='" + iSN + "' and zd_makecode='" + makecode + "' and zd_type='彩盒机身标'")) { dh.ExecuteSql("delete from ZTEDATA where zd_sn='" + iSN + "' and zd_makecode='" + makecode + "' and zd_type='彩盒机身标'", "delete"); } //dh.ExecuteSql("update makeserial set ms_sncode='" + dev_en_no + "' where ms_id='" + ms_id + "'", "update"); dh.ExecuteSql("insert into ZTEDATA(ZD_ID,ZD_D_SN,zd_WholeDeviceCode,ZD_DEV_EN_NO,ZD_SN, ZD_MAKECODE, ZD_TYPE, ZD_VALUE,zd_mac,ZD_MAC_START, ZD_MAC_END,ZD_RESERVE3,zd_enno,zd_devicetype,zd_regcode)" + "values(ZTEDATA_seq.nextval,'" + SN + "','" + WholeDeviceCode + "','" + dev_en_no + "','" + iSN + "','" + makecode + "','彩盒机身标','','" + mac + "','" + mac_start + "','" + mac_end + "','" + reserve3 + "','" + en_no + "','" + device_type + "','" + reg_code + "')", "insert"); return dev_en_no; } //获取外箱号信息 public static void GetOutBoxInfo(string iBox) { dynamic obj = new ExpandoObject(); var expandoDict = obj as IDictionary; DataTable dt = (DataTable)dh.ExecuteSql("select NOTYPE,po_sn,ma_custpo,pd_barcode,pd_makecode,ZD_DEV_EN_NO from packagedetail left join ZTEDATA on zd_makecode=pd_makecode and pd_barcode=ZD_DEV_EN_NO left join make on ma_code=pd_makecode left join ZTE_ORDER on ma_custpo=BATCH_NO where pd_outboxcode='" + iBox + "' and RESERVE9='" + User.UserLineCode + "'", "select"); string makecode = ""; string po = ""; string notype = ""; for (int i = 0; i < dt.Rows.Count; i++) { string enNoKey = $"en_no{i}"; string enNoValue = dt.Rows[i]["ZD_DEV_EN_NO"].ToString(); expandoDict[enNoKey] = enNoValue; makecode = dt.Rows[i]["pd_makecode"].ToString(); po = dt.Rows[i]["po_sn"].ToString(); notype = dt.Rows[i]["NOTYPE"].ToString(); } obj.request = "Q_wai_xiang"; obj.packing_num = dt.Rows.Count; obj.User = "mes"; obj.po_sn = po; obj.password = "258456"; obj.tool_name = "zte"; obj.noType = notype; if (po == "") { BaseUtil.ShowError("工单未维护客户PO号,不允许执行该操作"); } string json = JsonConvert.SerializeObject(obj, Formatting.Indented); string returnstr = ToServerReq(json); dh.ExecuteSql("insert into EISDATA(ED_ID, ED_DATA, ED_INDATE, ED_TYPE)values(EISDATA_seq.nextval,'" + json + "',sysdate,'GetOutBoxInfo')", "insert"); var settings = new JsonSerializerSettings { Converters = new List { new DeviceInfoConverter() } }; DeviceInfo deviceInfo = JsonConvert.DeserializeObject(returnstr, settings); //将返回的信息存入数据库 for (int i = 0; i < deviceInfo.DSN.Count; i++) { if (dh.CheckExist("ZTEDATA", "zd_sn='" + deviceInfo.DSN[i] + "' and zd_makecode='" + makecode + "' and zd_type='BOX'")) { dh.ExecuteSql("delete from ZTEDATA where zd_sn='" + deviceInfo.DSN[i] + "' and zd_makecode='" + makecode + "' and zd_type='BOX'", "delete"); } dh.ExecuteSql("insert into ZTEDATA(ZD_ID,ZD_SN, ZD_MAKECODE, ZD_TYPE, ZD_VALUE,ZD_product_mode, ZD_PRODUCTNAME, ZD_MATERIAL_CODE, ZD_BATCH_NO, ZD_SOFT_VERSION, ZD_HD_VERSION, " + "ZD_VOLTAGE, ZD_POWER, ZD_ORDER_NO, ZD_BIG_BOX_NO, ZD_D_SN, ZD_DEV_EN_NO, ZD_RESERVE3, ZD_DEVICEID, ZD_MAC_START, ZD_MAC_END,zd_production_date, ZD_INDATE)" + "values(ZTEDATA_seq.nextval,'" + deviceInfo.DSN[i] + "','" + makecode + "','BOX','" + deviceInfo.DSN[i] + "','" + deviceInfo.ProductMode + "','" + deviceInfo.ProductName + "','" + deviceInfo.MaterialCode + "','" + deviceInfo.BatchNo + "','" + deviceInfo.SoftVersion + "','" + deviceInfo.HdVersion + "'," + "'" + deviceInfo.Voltage + "','" + deviceInfo.Power + "','" + deviceInfo.OrderNo + "','" + deviceInfo.BigBoxNo + "','" + deviceInfo.DSN[i] + "'," + "'" + deviceInfo.DevEnNo[i] + "', '" + deviceInfo.Reserve3[i] + "','" + deviceInfo.DeviceId[i] + "','" + deviceInfo.MacStart[i] + "','" + deviceInfo.MacEnd[i] + "','" + deviceInfo.ProductionDate + "',sysdate)", "insert"); } dh.ExecuteSql("update package set pa_zxcode ='" + deviceInfo.BigBoxNo + "' where pa_outboxcode='" + iBox + "'", "update"); if (returnstr.Length > 1000) { returnstr = returnstr.Substring(0, 1000); } dh.ExecuteSql("insert into EISDATA(ED_ID, ED_DATA, ED_INDATE, ED_TYPE)values(EISDATA_seq.nextval,'" + returnstr + "',sysdate,'GetOutBoxInfo')", "insert"); } //获取栈板信息 public static void GetPalletInfo(string iBox) { DataTable dt = (DataTable)dh.ExecuteSql("select po_sn,sc_linecode,ma_custpo,pa_zxcode,pa_outboxcode,pa_makecode from package left join source on pa_sccode=sc_code left join make on pa_makecode=ma_code left join ZTE_ORDER on ma_custpo=BATCH_NO where pa_mothercode='" + iBox + "' and RESERVE9='" + User.UserLineCode + "'", "select"); dynamic obj = new ExpandoObject(); var expandoDict = obj as IDictionary; string po = ""; string makecode = ""; string linecode = ""; for (int i = 0; i < dt.Rows.Count; i++) { string enNoKey = $"big_box_no{i}"; string enNoValue = dt.Rows[i]["pa_zxcode"].ToString(); expandoDict[enNoKey] = enNoValue; po = dt.Rows[i]["po_sn"].ToString(); makecode = dt.Rows[i]["pa_makecode"].ToString(); linecode = dt.Rows[i]["sc_linecode"].ToString(); } obj.request = "pallet"; obj.packing_num = dt.Rows.Count; obj.User = "mes"; obj.po_sn = po; obj.password = "258456"; obj.tool_name = "zte"; obj.mes_po = makecode; obj.line_code = linecode; if (po == "") { BaseUtil.ShowError("工单未维护客户PO号,不允许执行该操作"); } string json = JsonConvert.SerializeObject(obj, Formatting.Indented); dh.ExecuteSql("insert into EISDATA(ED_ID, ED_DATA, ED_INDATE, ED_TYPE)values(EISDATA_seq.nextval,'" + json + "',sysdate,'GetPalletInfo')", "insert"); string returnstr = ToServerReq(json); if (returnstr.Length > 1000) { returnstr = returnstr.Substring(0, 1000); } JObject deviceObj = JObject.Parse(returnstr); string pallet_no = deviceObj["pallet_no"].ToString(); string palltecode = deviceObj["pallet_no"].ToString(); dh.ExecuteSql("update package set pa_zxcode ='" + palltecode + "',pa_detno='" + pallet_no + "' where pa_outboxcode='" + iBox + "'", "update"); dh.ExecuteSql("insert into EISDATA(ED_ID, ED_DATA, ED_INDATE, ED_TYPE)values(EISDATA_seq.nextval,'" + returnstr + "',sysdate,'GetPalletInfo')", "insert"); } public static void SendPowerCode(string iSN) { DataTable dt = (DataTable)dh.ExecuteSql("select NOTYPE,cm_barcode,pr_detail,ms_code from craftmaterial left join makeserial on ms_sncode=cm_sncode and ms_makecode=cm_makecode left join make on ma_code=cm_makecode left join ZTE_ORDER on ma_custpo=batch_no left join product on cm_fsoncode=pr_code where cm_sncode='" + iSN + "' and cm_status=0", "select"); dynamic obj = new ExpandoObject(); var expandoDict = obj as IDictionary; string part_sn = ""; string part_ar = ""; string SN = ""; string notype = ""; for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i]["pr_detail"].ToString().Contains("电源")) { part_sn = dt.Rows[i]["cm_barcode"].ToString(); } if (dt.Rows[i]["pr_detail"].ToString().Contains("报警器")) { part_ar = dt.Rows[i]["cm_barcode"].ToString(); } SN = dt.Rows[i]["ms_code"].ToString(); notype = dt.Rows[i]["notype"].ToString(); } obj.request = "bindSN"; obj.noType = notype; obj.User = "test"; obj.password = "123456"; obj.tool_name = "zte"; obj.part_sn = part_sn; obj.part_ar = part_ar; obj.SN = SN; string json = JsonConvert.SerializeObject(obj, Formatting.Indented); dh.ExecuteSql("insert into EISDATA(ED_ID, ED_DATA, ED_INDATE, ED_TYPE)values(EISDATA_seq.nextval,'" + json + "',sysdate,'SendPowerCode')", "insert"); string returnstr = ToServerReq(json); if (returnstr.Length > 1000) { returnstr = returnstr.Substring(0, 1000); } } //发送外箱号数据,打印前获取 public static async void SendBoxData(string iBox) { string sn = dh.getFieldDataByCondition("packagedetail left join ztedata on pd_barcode=ZD_DEV_EN_NO and pd_makecode=zd_makecode ", "replace(wm_concat(replace(ZD_MAC_START,'-','')),',','-')", "pd_outboxcode='" + iBox + "' and zd_type='BOX'").ToString(); DataTable dt = (DataTable)dh.ExecuteSql("select ZD_BIG_BOX_NO,pr_code,PRODUCT_MODE,ms_makecode,po_sn from makeserial left join product on ms_prodcode=pr_code left join make on ma_code=ms_makecode left join zte_order on ma_custpo=batch_no left join ztedata on ZD_DEV_EN_NO=ms_sncode and zd_makecode=ms_makecode where ms_outboxcode ='" + iBox + "' and zd_type='BOX' order by ms_id desc", "select"); string PRODUCT_MODE = ""; string po_sn = ""; string pr_code = ""; string ZD_BIG_BOX_NO = ""; if (dt.Rows.Count > 0) { PRODUCT_MODE = dt.Rows[0]["PRODUCT_MODE"].ToString(); po_sn = dt.Rows[0]["po_sn"].ToString(); pr_code = dt.Rows[0]["pr_code"].ToString(); ZD_BIG_BOX_NO = dt.Rows[0]["ZD_BIG_BOX_NO"].ToString(); } var root = new RootObject { ProductModuleType = "整机", ProductMainClass = "固网_CPE", ProductMediumClass = "CPE", ProductSubClass = PRODUCT_MODE, Task = po_sn, ProcessType = "生产过程", UserId = User.UserName, BindList = new List() }; root.BindList.Add(new BindItem { BindKey = "cartonSn", BindValue = ZD_BIG_BOX_NO, KeyType = "macbox", KeyValue = sn, HashType = "SHA256", HashKey = ComputeSha256Hash(sn) }); dt = (DataTable)dh.ExecuteSql("select pd_barcode,replace(ZD_MAC_START,'-','')ZD_MAC_START from packagedetail left join ztedata on pd_barcode=ZD_DEV_EN_NO and pd_makecode=zd_makecode where pd_outboxcode='" + iBox + "' and zd_type='BOX'", "select"); DataTable dt1 = (DataTable)dh.ExecuteSql("select pid_sql,pid_item,pid_value,pid_valuetype from productitem left join productitemdetail on pid_piid=pi_id where pi_prodcode='" + pr_code + "'", "select"); for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt1.Rows.Count; j++) { if (dt1.Rows[j]["pid_valuetype"].ToString() == "SHA256") { root.BindList.Add(new BindItem { BindKey = "mac", BindValue = dt.Rows[i]["ZD_MAC_START"].ToString(), KeyType = dt1.Rows[j]["pid_item"].ToString(), KeyValue = dt1.Rows[j]["pid_item"].ToString(), HashType = "SHA256", HashKey = ComputeSha256Hash(sn), }); ; } else { string sql = dt1.Rows[j]["pid_sql"].ToString(); string value = ""; if (sql != "") { Regex ConnoteA = new Regex("{\\w+}"); foreach (Match mch in ConnoteA.Matches(sql)) { string x = mch.Value.Trim(); sql = sql.Replace(x, "'" + dt.Rows[i]["pd_barcode"].ToString() + "'"); } DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select"); if (Param.Rows.Count > 0) { value = Param.Rows[0][0].ToString(); } } else { value = dt1.Rows[j]["pid_value"].ToString(); } root.BindList.Add(new BindItem { BindKey = "mac", BindValue = dt.Rows[i]["ZD_MAC_START"].ToString(), KeyType = dt1.Rows[j]["pid_item"].ToString(), KeyValue = value, HashType = "NON-HASH", HashKey = value, }); } } } var httpClientHandler = new HttpClientHandler(); httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; using (var client = new HttpClient(httpClientHandler)) { client.DefaultRequestHeaders.Add("apikey", "60e7107a86284a6d842e551704e69253"); client.DefaultRequestHeaders.Add("AppCode", "91678314583d4c2bbf185bc5573ac73d"); StringBuilder sbText = new StringBuilder(); string json = JsonConvert.SerializeObject(root, Formatting.Indented); var content = new StringContent(json, Encoding.UTF8, "application/json"); await Console.Out.WriteLineAsync(json); var response = await client.PostAsync("https://172.30.30.10:29001/api/mds-web-outservice/v1/api/rest/mds/saveFmKeyHashcodeInfoBatch", content); if (response.IsSuccessStatusCode) { string returnstr = await response.Content.ReadAsStringAsync(); JObject deviceObj = JObject.Parse(returnstr); string code = deviceObj["code"]["code"].ToString(); string msg = deviceObj["code"]["msg"].ToString(); if (code == "0000") { dh.ExecuteSql("update packagedetail set pd_issuccess=-1 where pd_outboxcode='" + iBox + "'", "update"); MessageBox.Show(ZD_BIG_BOX_NO + "上传星云成功"); } else { MessageBox.Show(msg); } } else { BaseUtil.ShowError(response.StatusCode.ToString()); } } } public static string GetMingPai_Thailand(string iSN) { DataTable dt = (DataTable)dh.ExecuteSql("select ms_id,ma_custpo,ms_makecode,pr_prefix,PREFIX_EN_NO,PREFIX_BIG_BOX,pr_prebigxbox,pr_regcode from makeserial left join product on ms_prodcode=pr_code left join make on ma_code=ms_makecode left join ZTE_ORDER on ma_custpo=po_sn where ms_sncode ='" + iSN + "' or ms_firstsn='" + iSN + "' order by ms_id desc", "select"); string po = ""; string makecode = ""; string ms_id = ""; if (dt.Rows.Count > 0) { po = dt.Rows[0]["ma_custpo"].ToString(); makecode = dt.Rows[0]["ms_makecode"].ToString(); ms_id = dt.Rows[0]["ms_id"].ToString(); } dynamic obj = new ExpandoObject(); obj.tool_name = "zte"; obj.request = "ajc_mingpai"; obj.User = "1453"; obj.password = "12345678"; obj.po_sn = po; obj.product_id = iSN; if (po == "") { BaseUtil.ShowError("工单未维护客户PO号,不允许执行该操作"); } string json = JsonConvert.SerializeObject(obj, Formatting.Indented); string returnstr = ToServerReq(json); JObject deviceObj = JObject.Parse(returnstr); string tool_name = deviceObj["tool_name"].ToString(); string response = deviceObj["response"].ToString(); string sn = deviceObj["sn"].ToString(); string status = deviceObj["status"].ToString(); string product_id = deviceObj["product_id"].ToString(); string dev_mac = deviceObj["dev_mac"].ToString(); string wifi_mac = deviceObj["wifi_mac"].ToString(); string en = deviceObj["en"].ToString(); string en_prefix = deviceObj["en_prefix"].ToString(); string product_name = deviceObj["product_name"].ToString(); string vendor = deviceObj["vendor"].ToString(); string esim_iccid = deviceObj["esim_iccid"].ToString(); string exsim_iccid = deviceObj["exsim_iccid"].ToString(); string fg_ver = deviceObj["4g_ver"].ToString(); string fg_type = deviceObj["4g_type"].ToString(); if (dh.CheckExist("ZTEDATA", "zd_sn='" + iSN + "' and zd_makecode='" + makecode + "' and zd_type='铭牌标'")) { dh.ExecuteSql("delete from ZTEDATA where zd_sn='" + iSN + "' and zd_makecode='" + makecode + "' and zd_type='铭牌标'", "delete"); } dh.ExecuteSql("update makeserial set ms_sncode='" + sn + "' where ms_id='" + ms_id + "'", "update"); dh.ExecuteSql("insert into ZTEDATA(ZD_ID,zd_vendor,ZD_D_SN,ZD_DEV_EN_NO,ZD_SN, ZD_MAKECODE, ZD_TYPE, ZD_VALUE,zd_mac,zd_enno,ZD_PRODUCTNAME)" + "values(ZTEDATA_seq.nextval,'" + vendor + "','" + sn + "','" + sn + "','" + iSN + "','" + makecode + "','铭牌标','','" + wifi_mac + "'" + ",'" + en + "','" + product_name + "')", "insert"); return sn; } public static string GetCaiHe_Thailand(string iSN) { DataTable dt = (DataTable)dh.ExecuteSql("select ms_id,ma_custpo,ms_makecode,pr_prefix,PREFIX_EN_NO,PREFIX_BIG_BOX,pr_prebigxbox,pr_regcode from makeserial left join product on ms_prodcode=pr_code left join make on ma_code=ms_makecode left join ZTE_ORDER on ma_custpo=po_sn where ms_sncode ='" + iSN + "' or ms_firstsn='" + iSN + "' order by ms_id desc", "select"); string po = ""; string makecode = ""; string ms_id = ""; if (dt.Rows.Count > 0) { po = dt.Rows[0]["ma_custpo"].ToString(); makecode = dt.Rows[0]["ms_makecode"].ToString(); ms_id = dt.Rows[0]["ms_id"].ToString(); } dynamic obj = new ExpandoObject(); obj.tool_name = "zte"; obj.request = "ajc_cai_he"; obj.User = "1453"; obj.password = "12345678"; obj.po_sn = po; obj.product_id = iSN; if (po == "") { BaseUtil.ShowError("工单未维护客户PO号,不允许执行该操作"); } string json = JsonConvert.SerializeObject(obj, Formatting.Indented); string returnstr = ToServerReq(json); JObject deviceObj = JObject.Parse(returnstr); string tool_name = deviceObj["tool_name"].ToString(); string response = deviceObj["response"].ToString(); string sn = deviceObj["sn"].ToString(); string status = deviceObj["status"].ToString(); string product_id = deviceObj["product_id"].ToString(); string dev_mac = deviceObj["dev_mac"].ToString(); string wifi_mac = deviceObj["wifi_mac"].ToString(); string en = deviceObj["en"].ToString(); if (dh.CheckExist("ZTEDATA", "zd_sn='" + iSN + "' and zd_makecode='" + makecode + "' and zd_type='彩盒标'")) { dh.ExecuteSql("delete from ZTEDATA where zd_sn='" + iSN + "' and zd_makecode='" + makecode + "' and zd_type='彩盒标'", "delete"); } dh.ExecuteSql("update makeserial set ms_sncode='" + sn + "' where ms_id='" + ms_id + "'", "update"); dh.ExecuteSql("insert into ZTEDATA(ZD_ID,ZD_D_SN,ZD_DEV_EN_NO,ZD_SN, ZD_MAKECODE, ZD_TYPE, ZD_VALUE,zd_mac,zd_enno,ZD_PRODUCTNAME)" + "values(ZTEDATA_seq.nextval,'" + sn + "','" + sn + "','" + iSN + "','" + makecode + "','彩盒标','','" + wifi_mac + "'" + ",'" + en + "')", "insert"); return sn; } public static void GetOutBoxInf_Thailand(string iBox) { dynamic obj = new ExpandoObject(); var expandoDict = obj as IDictionary; DataTable dt = (DataTable)dh.ExecuteSql("select ma_custpo,pd_barcode,pd_makecode,ZD_DEV_EN_NO from packagedetail left join ZTEDATA on zd_makecode=pd_makecode and pd_barcode=ZD_DEV_EN_NO left join make on ma_code=pd_makecode where pd_outboxcode='" + iBox + "'", "select"); string makecode = ""; string po = ""; for (int i = 0; i < dt.Rows.Count; i++) { string enNoKey = $"sn{i}"; string enNoValue = dt.Rows[i]["ZD_DEV_EN_NO"].ToString(); expandoDict[enNoKey] = enNoValue; makecode = dt.Rows[i]["pd_makecode"].ToString(); po = dt.Rows[i]["ma_custpo"].ToString(); } obj.request = "ajc_wai_xiang"; obj.packing_num = dt.Rows.Count; obj.User = "test"; obj.po_sn = po; obj.password = "123456"; obj.tool_name = "AJC"; obj.noType = 1; if (po == "") { BaseUtil.ShowError("工单未维护客户PO号,不允许执行该操作"); } string json = JsonConvert.SerializeObject(obj, Formatting.Indented); string returnstr = ToServerReq(json); dh.ExecuteSql("insert into EISDATA(ED_ID, ED_DATA, ED_INDATE, ED_TYPE)values(EISDATA_seq.nextval,'" + json + "',sysdate,'GetOutBoxInfo')", "insert"); var settings = new JsonSerializerSettings { Converters = new List { new DeviceInfoConverter() } }; Thailand deviceInfo = JsonConvert.DeserializeObject(returnstr, settings); //将返回的信息存入数据库 for (int i = 0; i < deviceInfo.product_id.Count; i++) { if (dh.CheckExist("ZTEDATA", "zd_sn='" + deviceInfo.product_id[i] + "' and zd_makecode='" + makecode + "' and zd_type='BOX'")) { dh.ExecuteSql("delete from ZTEDATA where zd_sn='" + deviceInfo.product_id[i] + "' and zd_makecode='" + makecode + "' and zd_type='BOX'", "delete"); } dh.ExecuteSql("insert into ZTEDATA(ZD_ID,ZD_SN, ZD_MAKECODE, ZD_TYPE,ZD_product_mode, ZD_PRODUCTNAME, " + "ZD_ORDER_NO, ZD_BIG_BOX_NO, ZD_D_SN, ZD_DEV_EN_NO,ZD_DEVICEID,zd_custom ,ZD_INDATE)" + "values(ZTEDATA_seq.nextval,'" + deviceInfo.sn[i] + "','" + makecode + "','BOX','" + deviceInfo.ProductMode + "','" + deviceInfo.ProductName + "'," + ",'" + deviceInfo.OrderNum + "','" + deviceInfo.BigBoxNo + "','" + deviceInfo.sn[i] + "','" + deviceInfo.en[i] + "','" + deviceInfo.product_id[i] + "','Thailand'," + ",sysdate)", "insert"); } dh.ExecuteSql("update package set pa_zxcode ='" + deviceInfo.BigBoxNo + "' where pa_outboxcode='" + iBox + "'", "update"); if (returnstr.Length > 1000) { returnstr = returnstr.Substring(0, 1000); } dh.ExecuteSql("insert into EISDATA(ED_ID, ED_DATA, ED_INDATE, ED_TYPE)values(EISDATA_seq.nextval,'" + returnstr + "',sysdate,'GetOutBoxInfo')", "insert"); } public static readonly uint PROTOCOL_FLAG = 0x4C4F4F54; public static string ToServerReq(string strJSON) { int nRet = 0; string strServerIP = "192.168.1.160"; string strResp = ""; IPAddress ip = IPAddress.Parse(strServerIP); Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); while (true) { try { clientSocket.Connect(new IPEndPoint(ip, SN_SERVICE_PORT)); } catch { nRet = -13; break; } try { FACT_DATA_HEAD stHead = new FACT_DATA_HEAD(null); byte[] bytJson = Encoding.UTF8.GetBytes(strJSON); //Encoding.ASCII.GetBytes(strJSON); stHead.setDataLen(bytJson.Length); byte[] bytBuf = new byte[FACT_DATA_HEAD.MY_LEN + bytJson.Length]; byte[] bytSrcHead = stHead.getBytes(); Array.Copy(bytSrcHead, 0, bytBuf, 0, bytSrcHead.Length); Array.Copy(bytJson, 0, bytBuf, FACT_DATA_HEAD.MY_LEN, bytJson.Length); clientSocket.Send(bytBuf); } catch { nRet = -12; break; } //判定接口回传的flag和本地传过去的是否一致 byte[] bytRecv = new byte[MAX_BUF_SIZE]; int nRecvSize = 0, nSize = 0; nRecvSize = clientSocket.Receive(bytRecv, 0, FACT_DATA_HEAD.MY_LEN, SocketFlags.None); if (nRecvSize > 0) { FACT_DATA_HEAD stHead = new FACT_DATA_HEAD(bytRecv); if (stHead.getFlag() == FACT_DATA_HEAD.PROTOCOL_FLAG) { int nPos = 0; nSize = stHead.getDatalen(); while (nPos < nSize) { nRecvSize = clientSocket.Receive(bytRecv, nPos, nSize - nPos, SocketFlags.None); if (nRecvSize < 0) { nRet = -14; break; } nPos += nRecvSize; } strResp = Encoding.Default.GetString(bytRecv, 0, nSize); } else nRet = -11; } else nRet = -10; break; } if (nRet > -13) clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); return strResp; } } }