1
yusijie
7 小时以前 c2730f1b141733c452549ff3e99f90d22db67771
WebAPI/Controllers/BaseSet/Xt_grdAlignment_WMESController.cs
@@ -4,7 +4,9 @@
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;
@@ -711,8 +713,6 @@
        }
        #endregion
        #region 基础资料 获取数据
        [Route("Gy_GetBaseData/Gy_GetBaseData")]
        [HttpGet]
@@ -750,5 +750,297 @@
            }
        }
        #endregion
        #region 单据翻译 初始化 查询
        [Route("Xt_grdAlignment_WMES/SelectMESLanguage")]
        [HttpGet]
        public object SelectMESLanguage(string sWhere)
        {
            try
            {
                //获取公共数据的数量
                int count = 0;
                DataSet dataSet = oCN.RunProcReturn("select * from  h_v_Xt_LanModuleList where 1=1 and HModuleCode in('GYModel')", "h_v_Xt_LanModuleList");
                if (dataSet.Tables[0].Rows.Count > 0)
                {
                    count = dataSet.Tables[0].Rows.Count;
                }
                //根据单据模块名称 和 翻译类型 去 模块表里查询 如果没有数据 就新增,如果有数据就不保存
                ds = oCN.RunProcReturn("select * from  h_v_Xt_LanModuleList where 1=1 " + sWhere, "h_v_Xt_LanModuleList");
                objJsonResult.code = "1";
                objJsonResult.count = count;
                objJsonResult.Message = "";
                objJsonResult.data = ds.Tables[0];
                return objJsonResult;
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region 单据翻译 初始化 保存
        [Route("Xt_grdAlignment_WMES/SaveMESLanguage")]
        [HttpPost]
        public object SaveMESLanguage([FromBody] JObject sMainSub)
        {
            try
            {
                var _value = sMainSub["sMainSub"].ToString();
                string msg1 = _value.ToString();
                string[] sArray = msg1.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
                string msg2 = sArray[0];
                string HModName = sArray[1];
                //如果没有数据 就新增,如果有数据就不保存
                //通过,进行分组
                string[] data = msg2.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                oCN.BeginTran();
                string HBillType = "3033";
                long HInterID = DBUtility.ClsPub.CreateBillID(HBillType, ref DBUtility.ClsPub.sExeReturnInfo);
                //定义一个空集合 去 判断是否有重复的id
                string[] list = new string[data.Length];
                //判断是否跟公共字段重复
                ds = oCN.RunProcReturn(" select * from  h_v_Xt_LanModuleList where  HModuleCode='GYModel'", "h_v_Xt_LanModuleList");
                string[] Datalist = new string[ds.Tables[0].Rows.Count];
                if (ds.Tables[0].Rows.Count > 0)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        Datalist[i] = ds.Tables[0].Rows[i]["HFieldCode"].ToString() + ds.Tables[0].Rows[i]["HFieldName"].ToString();
                    }
                }
                //定义一个 num 去定义 当前的索引
                int num = 0;
                for (int i = 0; i < data.Length; i++)
                {
                    string[] Lable = data[i].Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
                    if (Lable.Length == 3) {
                        string HFieldCode = Lable[0];
                        string HFieldName = Lable[1];
                        string HFieldModelType = Lable[2];
                        if (!list.Contains(HFieldCode + HFieldName) && !Datalist.Contains(HFieldCode + HFieldName))
                        {
                            list[num] = HFieldCode + HFieldName;
                            num += 1;
                            oCN.RunProc("insert into Xt_LanModuleSub(HInterID,HEntryID,HFieldModelType,HFieldCode,HFieldName)" +
                              "values(" + HInterID + "," + num + ",'" + HFieldModelType + "','" + HFieldCode + "','" + HFieldName + "')");
                        }
                    }
                }
                oCN.RunProc("insert into Xt_LanModuleMain(HInterID,HBillType,HModuleName,HModuleCode)" +
                 "values(" + HInterID + ",'" + HBillType + "','','" + HModName + "')");
                oCN.Commit();
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "Sucess!";
                objJsonResult.data = null;
                return objJsonResult;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region 报错信息 查询
        [Route("Xt_grdAlignment_WMES/SelectMessageError")]
        [HttpGet]
        public object SelectMessageError(string ErrorCode)
        {
            try
            {
                ds = oCN.RunProcReturn("select * from  Xt_MessageError where HErrorCode='" + ErrorCode + "'", "Xt_MessageError");
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "";
                objJsonResult.data = ds.Tables[0];
                return objJsonResult;
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #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
    }
}