FileUpdateInfoController.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. /*
  2. * 资源文件更新信息
  3. */
  4. using System;
  5. using System.Web;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text.RegularExpressions;
  9. using Microsoft.AspNetCore.Mvc;
  10. using Microsoft.AspNetCore.Http;
  11. using Microsoft.Extensions.Logging;
  12. using Microsoft.Extensions.Options;
  13. using MySystem.BsModels;
  14. using Library;
  15. using LitJson;
  16. using MySystemLib;
  17. namespace MySystem.Areas.Admin.Controllers
  18. {
  19. [Area("Admin")]
  20. [Route("Admin/[controller]/[action]")]
  21. public class FileUpdateInfoController : BaseController
  22. {
  23. public FileUpdateInfoController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
  24. {
  25. OtherMySqlConn.connstr = ConfigurationManager.AppSettings["BsSqlConnStr"].ToString();
  26. }
  27. #region 资源文件更新信息列表
  28. /// <summary>
  29. /// 根据条件查询资源文件更新信息列表
  30. /// </summary>
  31. /// <returns></returns>
  32. public IActionResult Index(FileUpdateInfo data, string right)
  33. {
  34. ViewBag.RightInfo = RightInfo;
  35. ViewBag.right = right;
  36. string Condition = "";
  37. if (!string.IsNullOrEmpty(Condition))
  38. {
  39. Condition = Condition.TrimEnd(',');
  40. Condition = ", where: {" + Condition + "}";
  41. }
  42. ViewBag.Condition = Condition;
  43. return View();
  44. }
  45. #endregion
  46. #region 根据条件查询资源文件更新信息列表
  47. /// <summary>
  48. /// 资源文件更新信息列表
  49. /// </summary>
  50. /// <returns></returns>
  51. public JsonResult IndexData(FileUpdateInfo data, string Kind = "default", int page = 1, int limit = 30)
  52. {
  53. Dictionary<string, string> Fields = new Dictionary<string, string>();
  54. string condition = " and SeoKeyword='" + Kind + "'";
  55. Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).IndexData("FileUpdateInfo", Fields, "Path asc,FileName asc", "False", page, limit, condition);
  56. //List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
  57. //foreach (Dictionary<string, object> dic in diclist)
  58. //{
  59. //}
  60. return Json(obj);
  61. }
  62. #endregion
  63. #region 增加资源文件更新信息
  64. /// <summary>
  65. /// 增加或修改资源文件更新信息信息
  66. /// </summary>
  67. /// <returns></returns>
  68. public IActionResult Add(string right)
  69. {
  70. ViewBag.RightInfo = RightInfo;
  71. ViewBag.right = right;
  72. return View();
  73. }
  74. #endregion
  75. #region 增加资源文件更新信息
  76. /// <summary>
  77. /// 增加或修改资源文件更新信息信息
  78. /// </summary>
  79. /// <returns></returns>
  80. [HttpPost]
  81. public string Add(FileUpdateInfo data)
  82. {
  83. Dictionary<string, object> Fields = new Dictionary<string, object>();
  84. Fields.Add("Version", data.VersionNum); //更新版本
  85. Fields.Add("Path", data.Path); //路径
  86. Fields.Add("FileName", data.FileName); //文件名
  87. Fields.Add("SeoTitle", data.SeoTitle);
  88. // Fields.Add("SeoKeyword", data.SeoKeyword);
  89. Fields.Add("SeoDescription", data.SeoDescription);
  90. int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Add("FileUpdateInfo", Fields, 0);
  91. AddSysLog(data.Id.ToString(), "FileUpdateInfo", "add");
  92. bsdb.SaveChanges();
  93. return "success";
  94. }
  95. #endregion
  96. #region 修改资源文件更新信息
  97. /// <summary>
  98. /// 增加或修改资源文件更新信息信息
  99. /// </summary>
  100. /// <returns></returns>
  101. public IActionResult Edit(string right, int Id = 0)
  102. {
  103. ViewBag.RightInfo = RightInfo;
  104. ViewBag.right = right;
  105. FileUpdateInfo editData = bsdb.FileUpdateInfo.FirstOrDefault(m => m.Id == Id) ?? new FileUpdateInfo();
  106. ViewBag.data = editData;
  107. return View();
  108. }
  109. #endregion
  110. #region 修改资源文件更新信息
  111. /// <summary>
  112. /// 增加或修改资源文件更新信息信息
  113. /// </summary>
  114. /// <returns></returns>
  115. [HttpPost]
  116. public string Edit(FileUpdateInfo data)
  117. {
  118. Dictionary<string, object> Fields = new Dictionary<string, object>();
  119. Fields.Add("Version", data.VersionNum); //更新版本
  120. Fields.Add("Path", data.Path); //路径
  121. Fields.Add("FileName", data.FileName); //文件名
  122. Fields.Add("SeoTitle", data.SeoTitle);
  123. // Fields.Add("SeoKeyword", data.SeoKeyword);
  124. Fields.Add("SeoDescription", data.SeoDescription);
  125. new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Edit("FileUpdateInfo", Fields, data.Id);
  126. AddSysLog(data.Id.ToString(), "FileUpdateInfo", "update");
  127. bsdb.SaveChanges();
  128. return "success";
  129. }
  130. #endregion
  131. #region 删除资源文件更新信息信息
  132. /// <summary>
  133. /// 删除资源文件更新信息信息
  134. /// </summary>
  135. /// <returns></returns>
  136. public string Delete(string Id)
  137. {
  138. string[] idlist = Id.Split(new char[] { ',' });
  139. AddSysLog(Id, "FileUpdateInfo", "del");
  140. foreach (string subid in idlist)
  141. {
  142. int id = int.Parse(subid);
  143. new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Delete("FileUpdateInfo", id);
  144. }
  145. bsdb.SaveChanges();
  146. return "success";
  147. }
  148. #endregion
  149. #region 开启
  150. /// <summary>
  151. /// 开启
  152. /// </summary>
  153. /// <returns></returns>
  154. public string Open(string Id)
  155. {
  156. string[] idlist = Id.Split(new char[] { ',' });
  157. AddSysLog(Id, "FileUpdateInfo", "open");
  158. foreach (string subid in idlist)
  159. {
  160. int id = int.Parse(subid);
  161. Dictionary<string, object> Fields = new Dictionary<string, object>();
  162. Fields.Add("Status", 1);
  163. new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Edit("FileUpdateInfo", Fields, id);
  164. }
  165. bsdb.SaveChanges();
  166. return "success";
  167. }
  168. #endregion
  169. #region 关闭
  170. /// <summary>
  171. /// 关闭
  172. /// </summary>
  173. /// <returns></returns>
  174. public string Close(string Id)
  175. {
  176. string[] idlist = Id.Split(new char[] { ',' });
  177. AddSysLog(Id, "FileUpdateInfo", "close");
  178. foreach (string subid in idlist)
  179. {
  180. int id = int.Parse(subid);
  181. Dictionary<string, object> Fields = new Dictionary<string, object>();
  182. Fields.Add("Status", 0);
  183. new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Edit("FileUpdateInfo", Fields, id);
  184. }
  185. bsdb.SaveChanges();
  186. return "success";
  187. }
  188. #endregion
  189. #region 排序
  190. /// <summary>
  191. /// 排序
  192. /// </summary>
  193. /// <param name="Id"></param>
  194. public string Sort(int Id, int Sort)
  195. {
  196. new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Sort("FileUpdateInfo", Sort, Id);
  197. AddSysLog(Id.ToString(), "FileUpdateInfo", "sort");
  198. return "success";
  199. }
  200. #endregion
  201. #region 导入数据
  202. /// <summary>
  203. /// 导入数据
  204. /// </summary>
  205. /// <param name="ExcelData"></param>
  206. public string Import(string ExcelData)
  207. {
  208. ExcelData = HttpUtility.UrlDecode(ExcelData);
  209. JsonData list = JsonMapper.ToObject(ExcelData);
  210. for (int i = 1; i < list.Count; i++)
  211. {
  212. JsonData dr = list[i];
  213. bsdb.FileUpdateInfo.Add(new FileUpdateInfo()
  214. {
  215. CreateDate = DateTime.Now,
  216. UpdateDate = DateTime.Now,
  217. });
  218. bsdb.SaveChanges();
  219. }
  220. AddSysLog("0", "FileUpdateInfo", "Import");
  221. return "success";
  222. }
  223. #endregion
  224. #region 导出Excel
  225. /// <summary>
  226. /// 导出Excel
  227. /// </summary>
  228. /// <returns></returns>
  229. public JsonResult ExportExcel(FileUpdateInfo data)
  230. {
  231. Dictionary<string, string> Fields = new Dictionary<string, string>();
  232. Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).IndexData("FileUpdateInfo", Fields, "Id desc", "False", 1, 20000, "", "", false);
  233. List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
  234. Dictionary<string, object> result = new Dictionary<string, object>();
  235. result.Add("Status", "1");
  236. result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
  237. result.Add("Obj", diclist);
  238. Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
  239. result.Add("Fields", ReturnFields);
  240. AddSysLog("0", "FileUpdateInfo", "ExportExcel");
  241. return Json(result);
  242. }
  243. #endregion
  244. #region 更新版本
  245. /// <summary>
  246. /// 更新版本
  247. /// </summary>
  248. /// <returns></returns>
  249. public string UpdateVersion(int Id)
  250. {
  251. FileUpdateInfo info = bsdb.FileUpdateInfo.FirstOrDefault(m => m.Id == Id);
  252. if (info != null)
  253. {
  254. info.VersionNum += 1;
  255. bsdb.SaveChanges();
  256. }
  257. return "success";
  258. }
  259. #endregion
  260. #region 更新文件
  261. /// <summary>
  262. /// 更新文件
  263. /// </summary>
  264. /// <returns></returns>
  265. public string UpdateFile(string Kind = "default")
  266. {
  267. SystemSet set = bsdb.SystemSet.FirstOrDefault() ?? new SystemSet();
  268. GetSystemFiles(set, Kind);
  269. foreach (string filename in SystemFiles)
  270. {
  271. string Path = filename.Substring(0, filename.LastIndexOf("/") + 1);
  272. string template = filename.Substring(filename.LastIndexOf("/") + 1);
  273. if (!template.EndsWith(".html") && !template.EndsWith(".DS_Store") && !template.EndsWith("LICENSE") && !template.EndsWith("Thumbs.db"))
  274. {
  275. FileUpdateInfo check = bsdb.FileUpdateInfo.FirstOrDefault(m => m.Path == Path && m.FileName == template && m.SeoKeyword == Kind);
  276. if (check == null)
  277. {
  278. check = bsdb.FileUpdateInfo.Add(new FileUpdateInfo()
  279. {
  280. CreateDate = DateTime.Now,
  281. UpdateDate = DateTime.Now,
  282. FileName = template,
  283. Path = Path,
  284. VersionNum = 0,
  285. SeoKeyword = Kind,
  286. }).Entity;
  287. bsdb.SaveChanges();
  288. }
  289. }
  290. }
  291. List<FileUpdateInfo> list = bsdb.FileUpdateInfo.OrderBy(m => m.Path).OrderBy(m => m.FileName).ToList();
  292. RedisDbconn.Instance.AddList("FileUpdateInfo", list.ToArray());
  293. return "success";
  294. }
  295. List<string> SystemFiles;
  296. private void GetSystemFiles(SystemSet set, string Kind = "default")
  297. {
  298. SystemFiles = new List<string>();
  299. string dataFilePath = function.ReadInstance("/WebRootPath.txt") + "/skin/app/" + Kind + "/";
  300. System.IO.FileSystemInfo info = new System.IO.DirectoryInfo(dataFilePath);
  301. scan(info, set, Kind);
  302. }
  303. private void scan(System.IO.FileSystemInfo info, SystemSet set, string Kind = "default")
  304. {
  305. if (!info.Exists) return;
  306. string sPath = "/skin/app/" + Kind + "/";
  307. System.IO.DirectoryInfo dir = info as System.IO.DirectoryInfo;
  308. //不是目录
  309. if (dir == null) return;
  310. System.IO.FileSystemInfo[] files = dir.GetFileSystemInfos();
  311. for (int i = 0; i < files.Length; i++)
  312. {
  313. System.IO.FileInfo file = files[i] as System.IO.FileInfo;
  314. //是文件
  315. if (file != null)
  316. {
  317. SystemFiles.Add(file.FullName.Substring(file.FullName.IndexOf(sPath) + sPath.Length).Replace("\\", "/"));
  318. }
  319. else scan(files[i], set, Kind);
  320. }
  321. }
  322. #endregion
  323. #region 同步数据到redis
  324. public string SyncAll(string Kind = "default")
  325. {
  326. List<FileUpdateInfo> files = bsdb.FileUpdateInfo.Where(m => m.SeoKeyword == Kind).ToList();
  327. RedisDbconn.Instance.Clear("FileUpdateInfo:" + Kind + "");
  328. // RedisDbconn.Instance.AddList("FileUpdateInfo:" + Kind + "", files.ToArray());
  329. return "success";
  330. }
  331. #endregion
  332. }
  333. }