FileUpdateInfoController.cs 14 KB

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