| | |
| | | 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) |
| | | |
| | | { |
| | | 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 |
| | | ); |
| | | int subIndex = 0; |
| | | // 版本号不一致 则读取数据库中的字段,将字段写入到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 = languagePack[HModuleCode][HFieldCode] as JArray; |
| | | |
| | | if (subIndex < rowNum - 1) |
| | | { |
| | | if (targetJArray.Count < subIndex + 1) |
| | | { |
| | | targetJArray.Add(row[lang].ToString()); |
| | | }else |
| | | { |
| | | targetJArray[subIndex] = row[lang].ToString(); |
| | | } |
| | | subIndex++; |
| | | }else |
| | | { |
| | | subIndex = 0; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | // 全量写入到json文件中 |
| | | File.WriteAllText($"{path}/{language}.json", languagePack.ToString(), System.Text.Encoding.UTF8); |
| | | |
| | | objJsonResult.code = "1"; |
| | | objJsonResult.count = 1; |
| | | objJsonResult.Message = "Success!"; |
| | | objJsonResult.data = languagePack; |
| | | return objJsonResult; |
| | | } else |
| | | { |
| | | // 版本号一致, 则直接返回读取的Json字符串 |
| | | objJsonResult.code = "1"; |
| | | objJsonResult.count = 1; |
| | | objJsonResult.Message = "Success!"; |
| | | objJsonResult.data = JObject.Parse(JsonStr1); |
| | | return objJsonResult; |
| | | } |
| | | } |
| | | catch(Exception e) |
| | | { |
| | | LogService.Write("Exception!" + e.ToString()); |
| | | objJsonResult.code = "0"; |
| | | objJsonResult.count = 0; |
| | | objJsonResult.Message = "Exception!" + e.ToString(); |
| | | objJsonResult.data = null; |
| | | return objJsonResult; |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 单据翻译 语言包缺失的键 反向映射到数据库 |
| | | [Route("Xt_grdAlignment_WMES/syncMissingKeyToDB")] |
| | | [HttpGet] |
| | | public Object syncMissingKeyToDB(string missingObj) |
| | | { |
| | | oCN.BeginTran(); |
| | | try |
| | | { |
| | | // 递入的参数 结构是 { 模块名: [字段名1,字段名2] } |
| | | JObject missingKeys = JObject.Parse(missingObj); |
| | | |
| | | |
| | | // 遍历顶层JObject对象 |
| | | foreach(var HMouldNameKVP in missingKeys) |
| | | { |
| | | // 查询主表中是否存在该模块 存在,则返回主表中的模块HInterID,不存在,则获取最大HInterID+1 |
| | | string HMouldCode = HMouldNameKVP.Key; |
| | | ds = oCN.RunProcReturn($"Exec h_p_syncMissingKeyToDB @HModuleCode='{HMouldCode}'", "h_p_syncMissingKeyToDB"); |
| | | int HInterID = (int)ds.Tables[0].Rows[0]["HInterID"]; |
| | | int rowCount = (int)ds.Tables[0].Rows[0]["rc"]; |
| | | int HEntryID = (int)ds.Tables[0].Rows[0]["HEntryID"]; |
| | | |
| | | // 插入主表 |
| | | if (rowCount == 0) |
| | | { |
| | | oCN.RunProc($@"insert into Xt_LanModuleMain(HInterID, HBillType, HModuleName, HModuleCode) |
| | | values({HInterID}, 3033, '', '{HMouldCode}')"); |
| | | } |
| | | |
| | | |
| | | string sql = $@"insert into Xt_LanModuleSub(HInterID, HEntryID, HFieldModelType, HFieldCode, HFieldName, HTranslationText_English, HTranslationText_Spain) |
| | | values"; |
| | | // 插入子表 |
| | | JArray HFieldCodes = HMouldNameKVP.Value as JArray; |
| | | for(int i=0;i<HFieldCodes.Count; i++) |
| | | { |
| | | |
| | | sql += $@"({HInterID}, {HEntryID+i}, 'i18n', '{HFieldCodes[i]}','{HFieldCodes[i]}','{HFieldCodes[i]}','{HFieldCodes[i]}'),"; |
| | | } |
| | | |
| | | sql = sql.Substring(0, sql.Length - 1) + ";"; |
| | | |
| | | oCN.RunProc(sql); |
| | | } |
| | | |
| | | |
| | | oCN.Commit(); |
| | | objJsonResult.code = "1"; |
| | | objJsonResult.count = 1; |
| | | objJsonResult.Message = "Success!"; |
| | | objJsonResult.data = null; |
| | | return objJsonResult; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | oCN.RollBack(); |
| | | LogService.Write("Exception!" + e.ToString()); |
| | | objJsonResult.code = "0"; |
| | | objJsonResult.count = 0; |
| | | objJsonResult.Message = "Exception!" + e.Message.ToString(); |
| | | objJsonResult.data = null; |
| | | return objJsonResult; |
| | | } |
| | | } |
| | | #endregion |
| | | } |
| | | } |