XTMKService.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using PMS.BusinessModels.SysManager;
  5. using PMS.EntityModels.SysManager;
  6. using QWPlatform.DataIntface;
  7. using QWPlatform.IService;
  8. using QWPlatform.SystemLibrary;
  9. using QWPlatform.SystemLibrary.LogManager;
  10. namespace PMS.DBService.SysManager
  11. {
  12. /// <summary>
  13. /// 创 建 人:王海洋
  14. /// 创建日期:2018-12-8
  15. /// 功能描述:系统模块数据服务类
  16. /// </summary>
  17. public class XTMKService : DataServiceBase
  18. {
  19. /// <summary>
  20. /// 重写数据工厂
  21. /// </summary>
  22. /// <param name="conName"></param>
  23. protected override void DBFctory(string conName)
  24. {
  25. base.DBFctory(conName);
  26. }
  27. /// <summary>
  28. /// 增加数据记录
  29. /// </summary>
  30. /// <param name="model"></param>
  31. /// <returns></returns>
  32. public int Add(XTMKModel model)
  33. {
  34. model.SetDataFactory(this.DataFactoryObject);
  35. return model.Insert();
  36. }
  37. /// <summary>
  38. /// 增加数据记录
  39. /// </summary>
  40. /// <param name="model"></param>
  41. /// <returns></returns>
  42. public int Add(XTMKModel model, ITransaction trans)
  43. {
  44. model.SetDataFactory(this.DataFactoryObject);
  45. if (trans == null)
  46. {
  47. return model.Insert();
  48. }
  49. else
  50. {
  51. return model.Insert(trans);
  52. }
  53. }
  54. /// <summary>
  55. /// 更新数据库记录
  56. /// </summary>
  57. /// <param name="model"></param>
  58. /// <returns></returns>
  59. public int Update(XTMKModel model)
  60. {
  61. model.SetDataFactory(this.DataFactoryObject);
  62. List<string> where = new List<string>();
  63. where.Add("ID");
  64. return model.Update(where, "上级ID", "名称", "地址", "启用", "图标", "序号", "备注", "首页");
  65. }
  66. /// <summary>
  67. /// 更新数据库记录
  68. /// </summary>
  69. /// <param name="model"></param>
  70. /// <returns></returns>
  71. public int Update(XTMKModel model, ITransaction trans)
  72. {
  73. model.SetDataFactory(this.DataFactoryObject);
  74. List<string> where = new List<string>();
  75. where.Add("ID");
  76. if (trans == null)
  77. {
  78. return model.Update(where, string.Empty);
  79. }
  80. else
  81. {
  82. return model.Update(trans, where, string.Empty);
  83. }
  84. }
  85. //检查名称是否存在
  86. public bool CheckNameExists(string name, int id)
  87. {
  88. var sql = @"select 1 from 系统模块 where 名称=:名称 ";
  89. if (id > 0)
  90. {//修改模块
  91. sql += " and ID!=:ID";
  92. return this.SqlBuilder
  93. .SqlText(sql)
  94. .Parameters("名称", name)
  95. .Parameters("ID", id)
  96. .Exists();
  97. }
  98. else
  99. {//新增模块
  100. return this.SqlBuilder
  101. .SqlText(sql)
  102. .Parameters("名称", name)
  103. .Exists();
  104. }
  105. }
  106. /// <summary>
  107. /// 删除数据记录
  108. /// </summary>
  109. /// <param name="model"></param>
  110. /// <returns></returns>
  111. public int Delete(XTMKModel model)
  112. {
  113. using (var trans = this.DBTransaction.BeginTrans())
  114. {
  115. try
  116. {
  117. model.SetDataFactory(this.DataFactoryObject);
  118. //删除系统角色权限中的模块ID
  119. this.DeleteBulider.Delete("系统角色权限")
  120. .Where("模块ID", model.ID)
  121. .Execute(trans);
  122. //删除系统模块按钮
  123. this.DeleteBulider.Delete("系统模块按钮")
  124. .Where("模块ID", model.ID)
  125. .Execute(trans);
  126. var cnt = model.Delete(trans, "ID");
  127. //提交事务
  128. trans.CommitTrans();
  129. return cnt;
  130. }
  131. catch(Exception ex)
  132. {
  133. trans.Rollback();
  134. return 0;
  135. }
  136. }
  137. }
  138. /// <summary>
  139. /// 删除数据记录
  140. /// </summary>
  141. /// <param name="model"></param>
  142. /// <returns></returns>
  143. public int Delete(XTMKModel model, ITransaction trans)
  144. {
  145. model.SetDataFactory(this.DataFactoryObject);
  146. if (trans == null)
  147. {
  148. return model.Delete("ID");
  149. }
  150. else
  151. {
  152. return model.Delete(trans, "ID");
  153. }
  154. }
  155. /// <summary>
  156. /// 查询数据对象并进行赋值
  157. /// </summary>
  158. /// <returns></returns>
  159. public XTMKModel Select(XTMKModel model)
  160. {
  161. model.SetDataFactory(this.DataFactoryObject);
  162. model.Select();
  163. return model;
  164. }
  165. /// <summary>
  166. /// 列表查询
  167. /// </summary>
  168. /// <returns></returns>
  169. public List<XTMKModel> SelectList(XTMKModel model)
  170. {
  171. model.SetDataFactory(this.DataFactoryObject);
  172. return model.SelectList<XTMKModel>();
  173. }
  174. /// <summary>
  175. /// 调用存储过程
  176. /// </summary>
  177. /// <returns></returns>
  178. public void CallProcedure(XTMKModel model)
  179. {
  180. this.ProcedureBuilder
  181. .Procedure("p_PT_系统模块_INSERT")
  182. .Paramter("ID_IN", model.ID)
  183. .Paramter("上级ID_IN", model.SJID)
  184. .Paramter("名称_IN", model.MC)
  185. .Paramter("地址_IN", model.DZ)
  186. .Paramter("启用_IN", model.QY)
  187. .Paramter("图标_IN", model.TB)
  188. .Paramter("序号_IN", model.XH)
  189. .Paramter("备注_IN", model.BZ)
  190. .Execute();
  191. }
  192. /// <summary>
  193. /// 根据用户ID查询出树型结果
  194. /// 用户权限(获取已访问的模块)
  195. /// </summary>
  196. /// <param name="userid">用户id</param>
  197. /// <returns></returns>
  198. public List<MenuModel> GetSysMenus(List<string> roleids, bool isAdmin)
  199. {//todo:后续需要增加用户ID
  200. var dt = GetSystemMenus(roleids, isAdmin);
  201. if (dt != null && dt.Rows.Count > 0)
  202. {
  203. var list = new List<MenuModel>();
  204. GetMenus(dt, "", list);
  205. //重新修改Level
  206. return list;
  207. }
  208. return null;
  209. }
  210. /// <summary>
  211. /// 根据用户信息获取
  212. /// </summary>
  213. /// <param name="userid"></param>
  214. /// <returns></returns>
  215. public DataTable GetSystemMenus(List<string> roleids, bool isAdmin)
  216. {
  217. var sql = @"Select ID, 上级ID, 名称, 地址, 图标,Level,颜色,首页
  218. From 系统模块 t
  219. Where t.启用 = 1
  220. Start With 上级id Is Null
  221. Connect By Prior ID = 上级id
  222. Order Siblings By 序号";
  223. if (!isAdmin)
  224. {//不是管理员,需要根据角色来加载
  225. sql = @"Select ID, 上级ID, 名称, 地址, 图标,Level,颜色,首页
  226. From 系统模块 t
  227. Where t.启用 = 1
  228. And (t.Id in (select j.模块ID from 系统角色权限 j, table(f_split_string(:角色Ids,',')) x
  229. where j.角色id = x.column_value)
  230. )
  231. Start With 上级id Is Null
  232. Connect By Prior ID = 上级id
  233. Order Siblings By 序号";
  234. return this
  235. .SqlBuilder
  236. .SqlText(sql)
  237. .Parameters("角色Ids", string.Join(",", roleids))
  238. .Select();
  239. }
  240. else
  241. {
  242. return this
  243. .SqlBuilder
  244. .SqlText(sql)
  245. .Select();
  246. }
  247. }
  248. //获取子级菜单
  249. private void GetMenus(DataTable dt, string parentid, List<XTMKModel> list)
  250. {
  251. var query = string.Empty;
  252. if (!string.IsNullOrEmpty(parentid))
  253. {//根据上级ID查询子级
  254. query = string.Format("上级ID ={0}", parentid);
  255. }
  256. else
  257. {//没有父级ID
  258. query = string.Format("上级ID Is Null");
  259. }
  260. //查询结果
  261. var rows = dt.Select(query);
  262. if (rows.Length > 0)
  263. {//找到子级
  264. foreach (var row in rows)
  265. {
  266. var id = row.GetValueByName<int>("ID");
  267. var m = new XTMKModel()
  268. {//当前节点
  269. ID = id,
  270. DZ = row.GetValueByName<string>("地址"),
  271. MC = row.GetValueByName<string>("名称"),
  272. TB = row.GetValueByName<string>("图标")
  273. };
  274. list.Add(m);
  275. m.children = new List<XTMKModel>();
  276. //再次查询子级
  277. GetMenus(dt, id.ToString(), m.children);
  278. }
  279. }//
  280. else
  281. {
  282. list = null;
  283. }
  284. }
  285. //获取主页菜单
  286. private void GetMenus(DataTable dt, string parentid, List<MenuModel> list)
  287. {
  288. var query = string.Empty;
  289. if (!string.IsNullOrEmpty(parentid))
  290. {//根据上级ID查询子级
  291. query = string.Format("上级ID ={0}", parentid);
  292. }
  293. else
  294. {//没有父级ID
  295. query = string.Format("上级ID Is Null");
  296. }
  297. //查询结果
  298. var rows = dt.Select(query);
  299. if (rows.Length > 0)
  300. {//找到子级
  301. foreach (var row in rows)
  302. {
  303. var id = row.GetValueByName<int>("ID");
  304. var m = new MenuModel()
  305. {//当前节点
  306. ID = id,
  307. href = row.GetValueByName<string>("地址"),
  308. text = row.GetValueByName<string>("名称"),
  309. icon = row.GetValueByName<string>("图标"),
  310. color = row.GetValueByName<string>("颜色"),
  311. OpenMode = 0,//默认都为0
  312. TheLevel = row.GetValueByName<int>("Level"),
  313. };
  314. var menuModel = new MenuModel()
  315. {
  316. text = m.text,
  317. href = m.href,
  318. ID = m.ID,
  319. icon = m.icon,
  320. color = m.color,
  321. OpenMode = m.OpenMode,
  322. TheLevel = m.TheLevel,
  323. parent = m,
  324. child = new List<MenuModel>()
  325. };
  326. list.Add(menuModel);
  327. if (row.GetValueByName<int>("首页") == 1)
  328. {//首页处理
  329. menuModel.parent = null;
  330. menuModel.child.Add(m);
  331. continue;
  332. }
  333. //再次查询子级
  334. GetMenus(dt, id.ToString(), menuModel.child);
  335. if (menuModel.child.Count == 0)
  336. {//没有子节点,直接设置为空
  337. menuModel.child = null;
  338. }
  339. }
  340. }//
  341. }
  342. //获取菜单树列表
  343. public DataTable GetList()
  344. {
  345. var sql = @"Select t.Id,
  346. t.上级id,
  347. t.名称,
  348. t.地址,
  349. t.启用,
  350. t.首页,
  351. t.图标,
  352. t.序号,
  353. t.备注
  354. From 系统模块 t Start With 上级id Is Null Connect By Prior ID = 上级id Order Siblings By 序号";
  355. return this.SqlBuilder.SqlText(sql)
  356. .Select();
  357. }
  358. //获取菜单树列表(授权时显示使用)
  359. public DataTable GetMenuActiveList()
  360. {
  361. var sql = @"Select t.Id,
  362. t.上级id,
  363. t.名称
  364. From 系统模块 t
  365. Where t.启用 = 1
  366. Start With 上级id Is Null
  367. Connect By Prior ID = 上级id
  368. Order Siblings By 序号";
  369. return this.SqlBuilder.SqlText(sql)
  370. .Select();
  371. }
  372. public DataTable GetInfoById(int id)
  373. {
  374. return this.SelectBuilder.Columns("*")
  375. .From("系统模块")
  376. .Where("ID", id)
  377. .Select();
  378. }
  379. //根据模块ID,取得该模块下的功能列表
  380. public DataTable SelectButtonsByMid(int id)
  381. {
  382. return this.SelectBuilder.Columns("a.id,a.序号,a.分组名,b.名称,b.标识,b.图标,b.颜色")
  383. .From("系统模块按钮 a")
  384. .From("系统按钮 b")
  385. .Where("a.按钮ID = b.ID")
  386. .Where("b.启用 = 1")
  387. .Where("a.模块ID", id)
  388. .OrderBy("a.分组名,a.序号 ASC")
  389. .Select();
  390. }
  391. //根据模块ID,按钮ID,及分组名,检查是否重复
  392. public bool CheckModuleButtonExists(int id, string group, int bid)
  393. {
  394. return this.SelectBuilder
  395. .Columns("1")
  396. .From("系统模块按钮")
  397. .Where("模块ID", id)
  398. .Where("按钮ID", bid)
  399. .Where("分组名", group)
  400. .Exists();
  401. }
  402. //添加模块的按钮功能
  403. public int AddModuleButton(int id, string group, int buttonId, int orderNum)
  404. {
  405. var model = new ModuleButtonModel(this.DataFactoryObject)
  406. {
  407. ANID = buttonId,
  408. MKID = id,
  409. FZM = group,
  410. XH = orderNum
  411. };
  412. return model.Insert();
  413. }
  414. //移除模块的功能
  415. public int RemoveModuleButton(int mid)
  416. {
  417. var model = new ModuleButtonModel(this.DataFactoryObject);
  418. model.ID = mid;
  419. model.Where("ID");
  420. return model.Delete();
  421. }
  422. }
  423. }