| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Data; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Web; |
| | | using System.Web.Http; |
| | | using WebAPI.Models; |
| | |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 单据翻译 映射 JSON文件 |
| | | internal Dictionary<string, string> LanguageDictionary = new Dictionary<string, string> |
| | | { |
| | | { "zh-Hans", "HFieldName"}, |
| | | { "zh-Hant", "HFieldName"}, |
| | | { "en", "HTranslationText_English"}, |
| | | { "es", "HTranslationText_Spain"} |
| | | }; |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="language">语言</param> |
| | | /// <param name="forceUpdate">是否强制更新</param> |
| | | /// <returns></returns> |
| | | [Route("Xt_grdAlignment_WMES/SelectMESLanguage_JSON")] |
| | | [HttpGet] |
| | | public object SelectMESLanguage_JSON(string language, bool forceUpdate) |
| | | { |
| | | try |
| | | { |
| | | // 获取项目根目录 |
| | | string path = HttpContext.Current.Server.MapPath($"~/LanguagePack"); ; |
| | | string lang; |
| | | bool langSuccess = LanguageDictionary.TryGetValue(language, out lang); |
| | | if(langSuccess == false) |
| | | { |
| | | // 设置默认语言为中文 |
| | | language = "zh-Hans"; |
| | | lang = "HFieldName"; |
| | | } |
| | | ds = oCN.RunProcReturn("select * from h_v_Xt_LanModuleList where 1=1", "h_v_Xt_LanModuleList"); |
| | | |
| | | // 如果目录不存在则创建目录 |
| | | if (!Directory.Exists(path)) |
| | | { |
| | | Directory.CreateDirectory(path); |
| | | } |
| | | // 如果语言包不存在则创建新语言包 |
| | | if(File.Exists($@"{path}\{language}.json") == false) |
| | | { |
| | | File.WriteAllText($@"{path}\{language}.json", "{}"); |
| | | } |
| | | |
| | | |
| | | LogService.Write("语言包地址: " + Path.Combine(path, $"{language}.json")); |
| | | string JsonStr1 = ""; |
| | | |
| | | using (StreamReader sr = new StreamReader(Path.Combine(path, $"{language}.json"), Encoding.UTF8)) |
| | | { |
| | | string lines; |
| | | while ((lines = sr.ReadLine()) != null)//一行一行去读,如果读取这一行赋值lines,并且lines= null证明读取完了 |
| | | |
| | | { |
| | | JsonStr1 += lines; |
| | | } |
| | | } |
| | | JObject languagePack = JObject.Parse(JsonStr1); |
| | | |
| | | // 判断版本号 现在MSSQL对应表中 无版本号字段 使用数据条目数替代 |
| | | if(languagePack["_Version"] == null) |
| | | { |
| | | languagePack["_Version"] = 0; |
| | | } |
| | | LogService.Write("语言包中数据条数: " + languagePack["_Version"].ToString() + "\n数据库中数据条数: " + ds.Tables[0].Rows.Count.ToString()); |
| | | if (languagePack["_Version"].Value<int>() != ds.Tables[0].Rows.Count || forceUpdate == true) |
| | | { |
| | | // 更新版本号(数据条目数) |
| | | languagePack["_Version"] = ds.Tables[0].Rows.Count; |
| | | // 统计每个字符模块中 字段码出现的次数 如果出现多次,则映射为JArray类型 |
| | | Dictionary<string, int> HFieldCodeDict = ds.Tables[0].AsEnumerable() |
| | | .GroupBy(row => new |
| | | { |
| | | HModuleCode = row.Field<string>("HModuleCode"), |
| | | HFieldCode = row.Field<string>("HFieldCode") |
| | | }) |
| | | .Select(group => new { |
| | | HModuleCode = group.Key.HModuleCode, |
| | | HFieldCode = group.Key.HFieldCode, |
| | | rowNum = group.Count() |
| | | }).ToDictionary( |
| | | keySelector: p => $@"{p.HModuleCode}_{p.HFieldCode}", |
| | | elementSelector: p => p.rowNum |
| | | ); |
| | | |
| | | // 版本号不一致 则读取数据库中的字段,将字段写入到json对象中 |
| | | foreach (DataRow row in ds.Tables[0].Rows) |
| | | { |
| | | // 获取所在模块字符串 |
| | | string HModuleCode = row["HModuleCode"].ToString(); |
| | | // 没有模块对象的话,则新建一个模块对象 |
| | | if(languagePack[HModuleCode] == null) |
| | | { |
| | | languagePack[HModuleCode] = new JObject(); |
| | | } |
| | | |
| | | string HFieldCode = row["HFieldCode"].ToString(); |
| | | int rowNum = 1; |
| | | HFieldCodeDict.TryGetValue($@"{row["HModuleCode"]}_{row["HFieldCode"]}", out rowNum); |
| | | // 判断字段码映射中,模块对应的字段码 是否 唯一 |
| | | if (rowNum == 1) |
| | | { |
| | | languagePack[HModuleCode][HFieldCode] = row[lang].ToString(); |
| | | }else |
| | | { |
| | | if(languagePack[HModuleCode][HFieldCode] == null) |
| | | { |
| | | languagePack[HModuleCode][HFieldCode] = new JArray(); |
| | | } |
| | | |
| | | var targetJArray = (JArray)languagePack[HModuleCode][HFieldCode]; |
| | | targetJArray.Add(row[lang].ToString()); |
| | | } |
| | | |
| | | } |
| | | |
| | | // 全量写入到json文件中 |
| | | File.WriteAllText($"{path}/{language}.json", languagePack.ToString(), System.Text.Encoding.UTF8); |
| | | |
| | | objJsonResult.code = "1"; |
| | | objJsonResult.count = 1; |
| | | objJsonResult.Message = "Success!"; |
| | | objJsonResult.data = languagePack.ToString(); |
| | | return objJsonResult; |
| | | } else |
| | | { |
| | | // 版本号一致, 则直接返回读取的Json字符串 |
| | | objJsonResult.code = "1"; |
| | | objJsonResult.count = 1; |
| | | objJsonResult.Message = "Success!"; |
| | | objJsonResult.data = JsonStr1; |
| | | return objJsonResult; |
| | | } |
| | | } |
| | | catch(Exception e) |
| | | { |
| | | LogService.Write("Exception!" + e.ToString()); |
| | | objJsonResult.code = "0"; |
| | | objJsonResult.count = 0; |
| | | objJsonResult.Message = "Exception!" + e.Message.ToString(); |
| | | objJsonResult.data = null; |
| | | return objJsonResult; |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | } |