SeedDataService.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. using MiniExcelLibs;
  2. using SqlSugar.IOC;
  3. using ZR.Common;
  4. using ZR.Model.Content;
  5. using ZR.Model.System;
  6. namespace ZR.ServiceCore.Services
  7. {
  8. /// <summary>
  9. /// 种子数据处理
  10. /// </summary>
  11. public class SeedDataService
  12. {
  13. /// <summary>
  14. /// 初始化用户数据
  15. /// </summary>
  16. /// <param name="data"></param>
  17. /// <returns></returns>
  18. public (string, object, object) InitUserData(List<SysUser> data)
  19. {
  20. data.ForEach(x =>
  21. {
  22. x.Password = "E10ADC3949BA59ABBE56E057F20F883E";
  23. });
  24. var db = DbScoped.SugarScope;
  25. db.Ado.BeginTran();
  26. //db.Ado.ExecuteCommand("SET IDENTITY_INSERT sys_user ON");
  27. var x = db.Storageable(data)
  28. .SplitInsert(it => it.NotAny())//表示如果有where条件根据条件判断是否存在数据,不存在插入,存在不操作
  29. .SplitError(x => x.Item.UserName.IsEmpty(), "用户名不能为空")
  30. .SplitError(x => !Tools.CheckUserName(x.Item.UserName), "用户名不符合规范")
  31. .WhereColumns(it => it.UserId)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
  32. .ToStorage();
  33. var result = x.AsInsertable.OffIdentity().ExecuteCommand();//插入可插入部分;
  34. //db.Ado.ExecuteCommand("SET IDENTITY_INSERT sys_user OFF");
  35. db.Ado.CommitTran();
  36. string msg = $"[用户数据] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  37. return (msg, x.ErrorList, x.IgnoreList);
  38. }
  39. /// <summary>
  40. /// 菜单数据
  41. /// </summary>
  42. /// <param name="data"></param>
  43. /// <returns></returns>
  44. public (string, object, object) InitMenuData(List<SysMenu> data)
  45. {
  46. var db = DbScoped.SugarScope;
  47. var x = db.Storageable(data)
  48. .SplitInsert(it => it.NotAny())
  49. .WhereColumns(it => it.MenuId)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
  50. .ToStorage();
  51. var result = x.AsInsertable.OffIdentity().ExecuteCommand();//插入可插入部分;
  52. string msg = $"[菜单数据] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  53. return (msg, x.ErrorList, x.IgnoreList);
  54. }
  55. /// <summary>
  56. /// 角色菜单数据
  57. /// </summary>
  58. /// <param name="data"></param>
  59. /// <returns></returns>
  60. public (string, object, object) InitRoleMenuData(List<SysRoleMenu> data)
  61. {
  62. var db = DbScoped.SugarScope;
  63. var x = db.Storageable(data)
  64. .SplitInsert(it => it.NotAny())
  65. .WhereColumns(it => new { it.Menu_id, it.Role_id })
  66. .ToStorage();
  67. var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
  68. string msg = $"[角色菜单] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  69. return (msg, x.ErrorList, x.IgnoreList);
  70. }
  71. /// <summary>
  72. /// 初始化部门数据
  73. /// </summary>
  74. /// <param name="data"></param>
  75. /// <returns></returns>
  76. public (string, object, object) InitDeptData(List<SysDept> data)
  77. {
  78. var db = DbScoped.SugarScope;
  79. var x = db.Storageable(data)
  80. .SplitInsert(it => it.NotAny())
  81. .WhereColumns(it => it.DeptId)
  82. .ToStorage();
  83. var result = x.AsInsertable.OffIdentity().ExecuteCommand();
  84. string msg = $"[部门数据] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  85. return (msg, x.ErrorList, x.IgnoreList);
  86. }
  87. public (string, object, object) InitPostData(List<SysPost> data)
  88. {
  89. var db = DbScoped.SugarScope;
  90. var x = db.Storageable(data)
  91. .SplitInsert(it => it.NotAny())
  92. .WhereColumns(it => it.PostCode)
  93. .ToStorage();
  94. var result = x.AsInsertable.ExecuteCommand();
  95. string msg = $"[岗位数据] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  96. return (msg, x.ErrorList, x.IgnoreList);
  97. }
  98. public (string, object, object) InitRoleData(List<SysRole> data)
  99. {
  100. var db = DbScoped.SugarScope;
  101. var x = db.Storageable(data)
  102. .SplitInsert(it => it.NotAny())
  103. .WhereColumns(it => it.RoleKey)
  104. .ToStorage();
  105. var result = x.AsInsertable.OffIdentity().ExecuteCommand();
  106. string msg = $"[角色数据] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  107. return (msg, x.ErrorList, x.IgnoreList);
  108. }
  109. public (string, object, object) InitUserRoleData(List<SysUserRole> data)
  110. {
  111. var db = DbScoped.SugarScope;
  112. var x = db.Storageable(data)
  113. .SplitInsert(it => it.NotAny())
  114. .WhereColumns(it => new { it.RoleId, it.UserId })
  115. .ToStorage();
  116. var result = x.AsInsertable.ExecuteCommand();
  117. string msg = $"[用户角色] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  118. return (msg, x.ErrorList, x.IgnoreList);
  119. }
  120. /// <summary>
  121. /// 系统配置
  122. /// </summary>
  123. /// <param name="data"></param>
  124. /// <returns></returns>
  125. public (string, object, object) InitConfigData(List<SysConfig> data)
  126. {
  127. var db = DbScoped.SugarScope;
  128. var x = db.Storageable(data)
  129. .SplitInsert(it => it.NotAny())
  130. .WhereColumns(it => it.ConfigKey)
  131. .ToStorage();
  132. var result = x.AsInsertable.ExecuteCommand();
  133. string msg = $"[系统配置] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  134. return (msg, x.ErrorList, x.IgnoreList);
  135. }
  136. /// <summary>
  137. /// 字典
  138. /// </summary>
  139. /// <param name="data"></param>
  140. /// <returns></returns>
  141. public (string, object, object) InitDictType(List<SysDictType> data)
  142. {
  143. var db = DbScoped.SugarScope;
  144. var x = db.Storageable(data)
  145. .SplitInsert(it => it.NotAny())
  146. .WhereColumns(it => it.DictType)
  147. .ToStorage();
  148. var result = x.AsInsertable.ExecuteCommand();
  149. string msg = $"[字典管理] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  150. return (msg, x.ErrorList, x.IgnoreList);
  151. }
  152. /// <summary>
  153. /// 字典数据
  154. /// </summary>
  155. /// <param name="data"></param>
  156. /// <returns></returns>
  157. public (string, object, object) InitDictData(List<SysDictData> data)
  158. {
  159. var db = DbScoped.SugarScope;
  160. var x = db.Storageable(data)
  161. .WhereColumns(it => new { it.DictType, it.DictValue })
  162. .ToStorage();
  163. x.AsInsertable.ExecuteCommand();
  164. x.AsUpdateable.ExecuteCommand();
  165. string msg = $"[字典数据] 插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  166. return (msg, x.ErrorList, x.IgnoreList);
  167. }
  168. /// <summary>
  169. /// 文章目录
  170. /// </summary>
  171. /// <param name="data"></param>
  172. /// <returns></returns>
  173. public (string, object, object) InitArticleCategoryData(List<ArticleCategory> data)
  174. {
  175. var db = DbScoped.SugarScope;
  176. var x = db.Storageable(data)
  177. //.SplitInsert(it => it.NotAny())
  178. .WhereColumns(it => it.Name)
  179. .ToStorage();
  180. x.AsInsertable.ExecuteCommand();
  181. x.AsUpdateable.ExecuteCommand();
  182. string msg = $"[文章目录] 插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  183. return (msg, x.ErrorList, x.IgnoreList);
  184. }
  185. /// <summary>
  186. /// 文章话题
  187. /// </summary>
  188. /// <param name="data"></param>
  189. /// <returns></returns>
  190. public (string, object, object) InitArticleTopicData(List<ArticleTopic> data)
  191. {
  192. var db = DbScoped.SugarScope;
  193. var x = db.Storageable(data)
  194. .WhereColumns(it => it.TopicName)
  195. .ToStorage();
  196. x.AsInsertable.ExecuteCommand();
  197. x.AsUpdateable.ExecuteCommand();
  198. string msg = $"[文章话题] 插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  199. return (msg, x.ErrorList, x.IgnoreList);
  200. }
  201. /// <summary>
  202. /// 任务
  203. /// </summary>
  204. /// <param name="data"></param>
  205. /// <returns></returns>
  206. public (string, object, object) InitTaskData(List<SysTasks> data)
  207. {
  208. var db = DbScoped.SugarScope;
  209. var x = db.Storageable(data)
  210. .SplitInsert(it => it.NotAny())
  211. .WhereColumns(it => it.Name)
  212. .ToStorage();
  213. var result = x.AsInsertable.ExecuteCommand();
  214. string msg = $"[任务数据] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  215. return (msg, x.ErrorList, x.IgnoreList);
  216. }
  217. /// <summary>
  218. /// 公告数据
  219. /// </summary>
  220. /// <param name="data"></param>
  221. /// <returns></returns>
  222. public (string, object, object) InitNoticeData(List<SysNotice> data)
  223. {
  224. var db = DbScoped.SugarScope;
  225. var x = db.Storageable(data)
  226. .WhereColumns(it => new { it.NoticeId })
  227. .ToStorage();
  228. x.AsInsertable.ExecuteCommand();
  229. x.AsUpdateable.ExecuteCommand();
  230. string msg = $"[通知公告数据] 插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}";
  231. return (msg, x.ErrorList, x.IgnoreList);
  232. }
  233. /// <summary>
  234. /// 初始化种子数据
  235. /// </summary>
  236. /// <param name="path"></param>
  237. /// <param name="clean"></param>
  238. /// <returns></returns>
  239. public List<string> InitSeedData(string path, bool clean)
  240. {
  241. List<string> result = new();
  242. var db = DbScoped.SugarScope;
  243. if (clean)
  244. {
  245. db.DbMaintenance.TruncateTable<SysRoleDept>();
  246. db.DbMaintenance.TruncateTable<SysRoleMenu>();
  247. db.DbMaintenance.TruncateTable<SysMenu>();
  248. db.DbMaintenance.TruncateTable<SysRole>();
  249. db.DbMaintenance.TruncateTable<SysUser>();
  250. db.DbMaintenance.TruncateTable<SysDept>();
  251. db.DbMaintenance.TruncateTable<SysPost>();
  252. db.DbMaintenance.TruncateTable<SysDictType>();
  253. db.DbMaintenance.TruncateTable<SysDictData>();
  254. db.DbMaintenance.TruncateTable<SysNotice>();
  255. db.DbMaintenance.TruncateTable<SysUserRole>();
  256. }
  257. var sysUser = MiniExcel.Query<SysUser>(path, sheetName: "user").ToList();
  258. var result1 = InitUserData(sysUser);
  259. result.Add(result1.Item1);
  260. var sysPost = MiniExcel.Query<SysPost>(path, sheetName: "post").ToList();
  261. var result2 = InitPostData(sysPost);
  262. result.Add(result2.Item1);
  263. var sysRole = MiniExcel.Query<SysRole>(path, sheetName: "role").ToList();
  264. var result3 = InitRoleData(sysRole);
  265. result.Add(result3.Item1);
  266. var sysUserRole = MiniExcel.Query<SysUserRole>(path, sheetName: "user_role").ToList();
  267. var result4 = InitUserRoleData(sysUserRole);
  268. result.Add(result4.Item1);
  269. var sysMenu = MiniExcel.Query<SysMenu>(path, sheetName: "menu").ToList();
  270. var result5 = InitMenuData(sysMenu);
  271. result.Add(result5.Item1);
  272. var sysConfig = MiniExcel.Query<SysConfig>(path, sheetName: "config").ToList();
  273. var result6 = InitConfigData(sysConfig);
  274. result.Add(result6.Item1);
  275. var sysRoleMenu = MiniExcel.Query<SysRoleMenu>(path, sheetName: "role_menu").ToList();
  276. var result7 = InitRoleMenuData(sysRoleMenu);
  277. result.Add(result7.Item1);
  278. var sysDict = MiniExcel.Query<SysDictType>(path, sheetName: "dict_type").ToList();
  279. var result8 = InitDictType(sysDict);
  280. result.Add(result8.Item1);
  281. var sysDictData = MiniExcel.Query<SysDictData>(path, sheetName: "dict_data").ToList();
  282. var result9 = InitDictData(sysDictData);
  283. result.Add(result9.Item1);
  284. var sysDept = MiniExcel.Query<SysDept>(path, sheetName: "dept").ToList();
  285. var result10 = InitDeptData(sysDept);
  286. result.Add(result10.Item1);
  287. var sysArticleCategory = MiniExcel.Query<ArticleCategory>(path, sheetName: "article_category").ToList();
  288. var result11 = InitArticleCategoryData(sysArticleCategory);
  289. result.Add(result11.Item1);
  290. var sysArticleTopic = MiniExcel.Query<ArticleTopic>(path, sheetName: "article_topic").ToList();
  291. var result13 = InitArticleTopicData(sysArticleTopic);
  292. result.Add(result13.Item1);
  293. var sysNotice = MiniExcel.Query<SysNotice>(path, sheetName: "notice").ToList();
  294. var result12 = InitNoticeData(sysNotice);
  295. result.Add(result12.Item1);
  296. return result;
  297. }
  298. }
  299. }