SysUserFileString.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. using JLHHJSvr;
  2. using JLHHJSvr.BLL;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Diagnostics;
  6. using System.IO;
  7. using System.IO.Compression;
  8. using System.Linq;
  9. namespace PhoneUI.BLL.L1BLL
  10. {
  11. /// <summary>
  12. /// 获取用户filestring
  13. /// </summary>
  14. internal sealed class SysUserFileString : HelperBase
  15. {
  16. /// <summary>
  17. /// 获取用户自定义值
  18. /// </summary>
  19. /// <param name="empid">用户ID</param>
  20. /// <param name="dwname">窗口名</param>
  21. /// <param name="itemname">表格名</param>
  22. /// <param name="defaultvalue">默认值</param>
  23. /// <returns></returns>
  24. public string GetValue(int empid, string dwname, string itemname, string defaultvalue, bool compress = false)
  25. {
  26. try
  27. {
  28. cmd.CommandText = "SELECT itemvalue FROM sys_user_filestring WHERE empid = @empid AND dwname = @dwname AND itemname = @itemname";
  29. cmd.Parameters.Clear();
  30. cmd.Parameters.AddWithValue("@empid", empid);
  31. cmd.Parameters.AddWithValue("@dwname", dwname ?? string.Empty);
  32. cmd.Parameters.AddWithValue("@itemname", itemname ?? string.Empty);
  33. var val = string.Empty;
  34. using (var reader = cmd.ExecuteReader())
  35. {
  36. if (!reader.Read())
  37. {
  38. return defaultvalue;
  39. }
  40. val = Convert.ToString(reader["itemvalue"]);
  41. }
  42. if (compress && !string.IsNullOrEmpty(val))
  43. {
  44. val = Uncompress(val);
  45. }
  46. else if (val != null && val.StartsWith("H4sIAAAA"))
  47. {
  48. val = Uncompress(val);
  49. SetValue(empid, dwname, itemname, val);
  50. }
  51. return val;
  52. }
  53. catch (Exception ex)
  54. {
  55. Trace.Write(ex);
  56. return defaultvalue;
  57. }
  58. }
  59. /// <summary>
  60. /// 设置用户自定义值
  61. /// </summary>
  62. /// <param name="empid">用户ID</param>
  63. /// <param name="dwname">窗口名</param>
  64. /// <param name="itemname">表格名</param>
  65. /// <param name="strvalue">保存值</param>
  66. /// <returns></returns>
  67. public bool SetValue(int empid, string dwname, string itemname, string strvalue, bool compress = false)
  68. {
  69. try
  70. {
  71. var newvalue = strvalue;
  72. if (compress)
  73. {
  74. newvalue = Compress(strvalue);
  75. }
  76. cmd.CommandText = "UPDATE sys_user_filestring SET itemvalue = @itemvalue WHERE empid = @empid AND dwname = @dwname AND itemname = @itemname";
  77. cmd.Parameters.Clear();
  78. cmd.Parameters.AddWithValue("@empid", empid);
  79. cmd.Parameters.AddWithValue("@dwname", dwname ?? string.Empty);
  80. cmd.Parameters.AddWithValue("@itemname", itemname ?? string.Empty);
  81. cmd.Parameters.AddWithValue("@itemvalue", newvalue);
  82. var nrows = cmd.ExecuteNonQuery();
  83. if (nrows == 0)
  84. {
  85. cmd.CommandText = "INSERT INTO sys_user_filestring(empid, dwname, itemname, itemvalue) VALUES(@empid, @dwname, @itemname, @itemvalue)";
  86. cmd.Parameters.Clear();
  87. cmd.Parameters.AddWithValue("@empid", empid);
  88. cmd.Parameters.AddWithValue("@dwname", dwname ?? string.Empty);
  89. cmd.Parameters.AddWithValue("@itemname", itemname ?? string.Empty);
  90. cmd.Parameters.AddWithValue("@itemvalue", newvalue);
  91. cmd.ExecuteNonQuery();
  92. }
  93. return true;
  94. }
  95. catch (Exception ex)
  96. {
  97. Trace.Write(strvalue, "错误参数");
  98. Trace.Write(ex);
  99. return false;
  100. }
  101. }
  102. /// <summary>
  103. /// 获取用户窗口下的自定义键
  104. /// </summary>
  105. /// <param name="empid">用户ID</param>
  106. /// <param name="dwname">窗口名</param>
  107. /// <returns>键列表</returns>
  108. public List<string> GetItemnames(int empid, string dwname)
  109. {
  110. var rslt = new List<string>();
  111. try
  112. {
  113. cmd.CommandText = "SELECT itemname FROM sys_user_filestring WHERE empid = @empid AND dwname = @dwname ORDER BY itemname";
  114. cmd.Parameters.Clear();
  115. cmd.Parameters.AddWithValue("@empid", empid);
  116. cmd.Parameters.AddWithValue("@dwname", dwname);
  117. using (var reader = cmd.ExecuteReader())
  118. {
  119. while (reader.Read())
  120. {
  121. rslt.Add(Convert.ToString(reader["itemname"]).Trim());
  122. }
  123. }
  124. }
  125. catch (Exception ex)
  126. {
  127. Trace.Write(ex);
  128. }
  129. return rslt;
  130. }
  131. /// <summary>
  132. /// 获取用户自定义值中,是否包含对应窗口名与表格名
  133. /// </summary>
  134. /// <param name="empid">用户ID</param>
  135. /// <param name="dwname">窗口名</param>
  136. /// <param name="itemname">表格名</param>
  137. /// <returns>是否存在</returns>
  138. public bool Exists(int empid, string dwname, string itemname)
  139. {
  140. try
  141. {
  142. cmd.CommandText = "SELECT COUNT(0) FROM sys_user_filestring WHERE empid = @empid AND dwname = @dwname AND itemname = @itemname";
  143. cmd.Parameters.Clear();
  144. cmd.Parameters.AddWithValue("@empid", empid);
  145. cmd.Parameters.AddWithValue("@dwname", dwname);
  146. cmd.Parameters.AddWithValue("@itemname", itemname);
  147. var cnt = Convert.ToInt32(cmd.ExecuteScalar());
  148. return cnt > 0;
  149. }
  150. catch (Exception ex)
  151. {
  152. Trace.Write(ex);
  153. }
  154. return false;
  155. }
  156. private static string Compress(string value)
  157. {
  158. using (var ms = new MemoryStream())
  159. using (var gzip = new GZipStream(ms, CompressionMode.Compress, true))
  160. using (var writer = new BinaryWriter(gzip))
  161. {
  162. writer.Write(value);
  163. writer.Flush();
  164. gzip.Close();
  165. var data = ms.ToArray();
  166. return Convert.ToBase64String(data);
  167. }
  168. }
  169. private static string Uncompress(string value)
  170. {
  171. var data = Convert.FromBase64String(value);
  172. using (var ms = new MemoryStream(data))
  173. using (var gzip = new GZipStream(ms, CompressionMode.Decompress, true))
  174. using (var reader = new BinaryReader(gzip))
  175. {
  176. return reader.ReadString();
  177. }
  178. }
  179. /// <summary>
  180. /// 当保存为系统方案的时候,删除所有其他人的布局方案
  181. /// </summary>
  182. public void delOtherLayout(string dwname, string itemname)
  183. {
  184. cmd.CommandText = @"delete sys_user_filestring where empid<>-1 and dwname = @dwname and itemname = @itemname";
  185. cmd.Parameters.Clear();
  186. cmd.Parameters.AddWithValue("@dwname", dwname);
  187. cmd.Parameters.AddWithValue("@itemname", itemname);
  188. cmd.ExecuteNonQuery();
  189. }
  190. /// <summary>
  191. /// 删除某人的布局方案
  192. /// </summary>
  193. public void delLayout(int empid, string dwname, string itemname)
  194. {
  195. cmd.CommandText = @"delete sys_user_filestring where empid = @empid and dwname = @dwname and itemname = @itemname";
  196. cmd.Parameters.Clear();
  197. cmd.Parameters.AddWithValue("@empid", empid);
  198. cmd.Parameters.AddWithValue("@dwname", dwname);
  199. cmd.Parameters.AddWithValue("@itemname", itemname);
  200. cmd.ExecuteNonQuery();
  201. }
  202. public void saveSystemLayout(string itemname, string itemvalue)
  203. {
  204. string rootPath;
  205. rootPath = Path.Combine(GlobalVar.DataPath, "UserFilestring");
  206. #if DEBUG
  207. string basePath;
  208. int binIndex = GlobalVar.DataPath.IndexOf("\\bin\\", StringComparison.OrdinalIgnoreCase);
  209. if (binIndex == -1) throw new InvalidOperationException("DEBUG模式下未检测到bin目录路径结构");
  210. basePath = GlobalVar.DataPath.Substring(0, binIndex);
  211. rootPath = Path.Combine(basePath, "UserFilestring");
  212. #endif
  213. if (!Directory.Exists(rootPath)) Directory.CreateDirectory(rootPath);
  214. var filePath = Path.Combine(rootPath, $"{itemname}.json");
  215. if (File.Exists(filePath))
  216. {
  217. File.Delete(filePath);
  218. }
  219. File.WriteAllText(filePath, itemvalue);
  220. }
  221. public string getSystemLayout(string dwname, string itemname, byte ifcompress)
  222. {
  223. string rootPath;
  224. string defaultRootPath;
  225. string result;
  226. rootPath = Path.Combine(GlobalVar.DataPath, "UserFilestring");
  227. defaultRootPath = Path.Combine(GlobalVar.DataPath, "DefaultLayout");
  228. #if DEBUG
  229. string basePath;
  230. int binIndex = GlobalVar.DataPath.IndexOf("\\bin\\", StringComparison.OrdinalIgnoreCase);
  231. if (binIndex == -1) throw new InvalidOperationException("DEBUG模式下未检测到bin目录路径结构");
  232. basePath = GlobalVar.DataPath.Substring(0, binIndex);
  233. rootPath = Path.Combine(basePath, "BLL", "L1BLL", "UserFilestring");
  234. defaultRootPath = Path.Combine(basePath, "BLL", "L1BLL", "DefaultLayout");
  235. #endif
  236. var filePath = Path.Combine(rootPath, $"{itemname}.json");
  237. var filePath_default = Path.Combine(defaultRootPath, $"{itemname}.json");
  238. if (File.Exists(filePath))
  239. {
  240. result = File.ReadAllText(filePath);
  241. }
  242. else if (File.Exists(filePath_default))
  243. {
  244. result = File.ReadAllText(filePath_default);
  245. }
  246. else
  247. {
  248. result = GetValue(-1, dwname, itemname, string.Empty, ifcompress == 1 ? true : false);
  249. }
  250. return result;
  251. }
  252. }
  253. }