CM_OrgController.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. using JCSoft.WX.Framework.Api;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Http;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. using Common.Wechat;
  9. using Common;
  10. using System.Data;
  11. using Common.Model;
  12. using ZcPeng.PublicLibrary;
  13. using CoreEntity.Entity;
  14. using CoreEntity.DAL;
  15. using System.Collections.Concurrent;
  16. using Newtonsoft.Json.Converters;
  17. using Newtonsoft.Json;
  18. using System.Data.SqlClient;
  19. using Microsoft.Extensions.Primitives;
  20. using Microsoft.Extensions.Caching.Memory;
  21. using Jwt;
  22. using PublicLibrary.Model;
  23. using Newtonsoft.Json.Linq;
  24. using SupplierWeb.Codes.mvc;
  25. using SupplierWeb.Codes.Auth;
  26. using Common.Config;
  27. namespace SupplierWeb.Controllers
  28. {
  29. [Route("web/org")]
  30. public class OrgController : BaseController
  31. {
  32. public OrgController(IMemoryCache cache, IApiClient client) : base(cache, client)
  33. {
  34. }
  35. private ConcurrentDictionary<int, Role> roleMap = new ConcurrentDictionary<int, Role>();
  36. public class TempTableResult
  37. {
  38. public int id { get; set; }
  39. public string permissionName { get; set; }
  40. public string permissionUrl { get; set; }
  41. public int roleId { get; set; }
  42. public int checkedValue { get; set; }
  43. public string permissionRule { get; set; }
  44. public string permissionRuleType { get; set; }
  45. public int relateId { get; set; }
  46. public string AuthType { get; set; }
  47. }
  48. public class TreeNode
  49. {
  50. public string parentValue { get; set; }
  51. public string label { get; set; }
  52. public int value { get; set; }
  53. }
  54. public class TempQuery
  55. {
  56. public int[] data { get; set; }
  57. public int roleId { get; set; }
  58. }
  59. public class SortContent
  60. {
  61. public Object content { get; set; }//权限内容
  62. public string code { get; set; }//权限id
  63. public int sort { get; set; }//权限序号
  64. }
  65. /// <summary>
  66. /// 获取组织机构列表
  67. /// </summary>
  68. /// <param name="filters"></param>
  69. /// <param name="pageIndex"></param>
  70. /// <param name="pageSize"></param>
  71. /// <param name="sortField"></param>
  72. /// <param name="sortDirection"></param>
  73. /// <param name="sumFields"></param>
  74. /// <param name="data"></param>
  75. /// <returns></returns>
  76. [AuthPermission]
  77. [HttpPost, Route("index")]
  78. public JsonResult Indexp(QueryFilter[] filters, Int32 pageIndex, Int32 pageSize,
  79. string sortField, Int32 sortDirection, string[] sumFields, [FromBody]dynamic data)
  80. {
  81. if (data != null)
  82. {
  83. filters = data.filters.ToObject<QueryFilter[]>();
  84. pageIndex = data.pageIndex;
  85. pageSize = data.pageSize;
  86. sortField = data.sortField;
  87. sortDirection = data.sortDirection;
  88. sumFields = data.sumFields.ToObject<string[]>();
  89. }
  90. #region 获取机构列表
  91. DataTable dt = new DataTable();
  92. string result;
  93. IList<CM_Org> permss = new List<CM_Org>(0);
  94. List<SqlParameter> parameters = new List<SqlParameter>();
  95. string filterstr = QueryFilter.getFilterSqlParam(filters, out parameters, new CM_Org(),"A.");
  96. string direct = " desc ";
  97. if (sortDirection != 1)
  98. {
  99. direct = " asc";
  100. }
  101. int start = (pageIndex - 1) * pageSize;
  102. int end = (start + 1 + pageSize);
  103. string commandText0 = "select * from ";
  104. string commandText1 = "(" +
  105. "select A.*,row_number() over" +
  106. "( order by " + sortField + " " + direct + " ) as rownum from " +
  107. "CM_Org as A " +
  108. " where 1=1 " +
  109. //" and A.CreationPerson = '" + userids + "'" +
  110. filterstr +
  111. ")AAA ";
  112. string commandText2 = " where AAA.rownum>" + start + " and AAA.rownum<" + end;
  113. string commandText3 = commandText0 + commandText1 + commandText2;//-tanyang
  114. bool success = DataAccess.GetValues(commandText3, ref dt, parameters.ToArray(), out result);
  115. #endregion
  116. if (dt != null && dt.Rows.Count > 0)
  117. {
  118. // 把DataTable转换为IList<Permission>
  119. permss = ModelConvertHelper<CM_Org>.ConvertToModel(dt);
  120. #region 获取权限的角色列表,角色列表
  121. ////角色列表
  122. //IList<CM_Org> roles = Roles();
  123. //// 把DataTable转换为IList<Role>
  124. //if (roleMap.Count < roles.Count)
  125. //{
  126. // foreach (Role role in roles)
  127. // {
  128. // roleMap.TryAdd(role.Id, role);
  129. // }
  130. //}
  131. //foreach (CM_Org perms in permss)
  132. //{
  133. // string direct1 = " desc ";
  134. // dt = DataAccess.GetDataTable(Config.TablePrefix + "RoleRelatePermission", "Id", "*", "PermissionId=" + perms.Id+ " and IsDelete = 0 ", "", "Id" + direct1, 1, 100,out var msg);
  135. // // 把DataTable转换为IList<RoleRelatePermission>
  136. // if (dt != null && dt.Rows.Count > 0)
  137. // {
  138. // IList<RoleRelatePermission> permRelates = ModelConvertHelper<RoleRelatePermission>.ConvertToModel(dt);
  139. // //List<Role> listRoles = new List<Role>();
  140. // List<int> superior_list = new List<int>(0);
  141. // foreach (RoleRelatePermission permsr in permRelates)
  142. // {
  143. // //Role role;
  144. // //if (roleMap.TryGetValue(permsr.RoleId, out role))
  145. // //{
  146. // // listRoles.Add(role);
  147. // //}
  148. // superior_list.Add(permsr.RoleId);
  149. // }
  150. // //perms.RoleList = listRoles;
  151. // perms.Roleids = string.Join(",", superior_list.ToArray());
  152. // }
  153. //}
  154. #endregion
  155. }
  156. string result1;
  157. long totalcount = DataAccess.GetRowCountDefine("select count(OrgId) from " + commandText1, parameters.ToArray(), out result1);
  158. IsoDateTimeConverter timejson = new IsoDateTimeConverter
  159. {
  160. DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss"
  161. };
  162. //IList<Menu> menus = Permission.Convert(permss);
  163. var jsonData = JsonConvert.SerializeObject(permss, timejson);
  164. return Json(new
  165. {
  166. items = JsonConvert.DeserializeObject(jsonData),
  167. sum = new { },
  168. totalCount = totalcount
  169. });
  170. }
  171. /// <summary>
  172. /// 组织机构添加
  173. /// </summary>
  174. /// <param name="OrgId"></param>
  175. /// <param name="ParentOrgId"></param>
  176. /// <param name="UserId"></param>
  177. /// <param name="OrgCode"></param>
  178. /// <param name="OrgName"></param>
  179. /// <param name="FullCode"></param>
  180. /// <param name="FullName"></param>
  181. /// <param name="RoleId"></param>
  182. /// <param name="data"></param>
  183. /// <returns></returns>
  184. [AuthPermission]
  185. [HttpPost, Route("add")]
  186. public JsonResult Addp(
  187. String OrgId,String ParentOrgId,String UserId,
  188. string OrgCode, string OrgName,
  189. string FullCode, Int32 FullName,String RoleId,[FromBody]dynamic data
  190. )
  191. {
  192. if (data != null)
  193. {
  194. OrgId = data.id;
  195. ParentOrgId = data.ParentOrgId;
  196. UserId = data.UserId;
  197. OrgCode = data.OrgCode;
  198. OrgName = data.OrgName;
  199. FullCode = data.FullCode;
  200. FullName = data.FullName;
  201. RoleId = data.RoleId;
  202. }
  203. #region 添加机构节点
  204. String uuid = System.Guid.NewGuid().ToString("N");
  205. string commandText = "INSERT INTO CM_Org (ParentOrgId," +
  206. "OrgCode,OrgName,FullCode,FullName,OrgId)" +
  207. " VALUES (@ParentOrgId,@OrgCode,@OrgName,@FullCode,@FullName,'"+ uuid + "')";
  208. //String orgRoleId = System.Guid.NewGuid().ToString("N");
  209. //string commandText1 = "INSERT INTO CM_OrgRole (OrgRoleId,OrgId,RoleId)" +
  210. // " VALUES ('"+ orgRoleId + "','" + uuid + "','"+ RoleId +"')";
  211. //准备参数
  212. //List<List<Object>> orgRoles = new List<List<Object>>();
  213. //orgRoles.Add(new List<Object>() { "OrgRoleId", orgRoleId });
  214. //orgRoles.Add(new List<Object>() { "OrgId", uuid });
  215. //orgRoles.Add(new List<Object>() { "RoleId", RoleId });
  216. string result;
  217. //string result1;
  218. //准备参数
  219. List<List<Object>> parameters = new List<List<Object>>();
  220. parameters.Add(new List<Object>() { "ParentOrgId", ParentOrgId });
  221. parameters.Add(new List<Object>() { "UserId", UserId });
  222. parameters.Add(new List<Object>() { "OrgCode", OrgCode });
  223. parameters.Add(new List<Object>() { "OrgName", OrgName });
  224. parameters.Add(new List<Object>() { "FullCode", FullCode });
  225. parameters.Add(new List<Object>() { "FullName", FullName});
  226. //parameters.Add(new List<Object>() { "UserId", System.Guid.NewGuid().ToString("N")});
  227. List<SqlParameter> parameters1 = DataAccess.ToParameters(parameters);
  228. int success = DataAccess.ExecuteCommand(commandText, parameters1, out result);
  229. //List<SqlParameter> orgRoles1 = DataAccess.ToParameters(orgRoles);
  230. //int success1 = DataAccess.ExecuteCommand(commandText1, orgRoles1, out result1);
  231. #endregion
  232. //#region 添加角色
  233. //int id = BaseDAL.GetId(Config.TablePrefix + "Permission");
  234. //RoleDAL.SaveRolesRelatePermission(id, RoleIdis);
  235. //#endregion
  236. return Json(new
  237. {
  238. //success = success,success1
  239. success = success
  240. });
  241. }
  242. /// <summary>
  243. /// 获取角色
  244. /// </summary>
  245. /// <returns></returns>
  246. [HttpGet, Route("roles")]
  247. public ActionResult Roles()
  248. {
  249. var permss = GetTopRoles();
  250. IList<Option> options = new List<Option>();
  251. foreach (CM_Role perms in permss)
  252. {
  253. var option = new Option() { label = perms.RoleName, value = perms.RoleId.ToString() };
  254. options.Add(option);
  255. }
  256. var jsonData = JsonConvert.SerializeObject(options);
  257. return Content(jsonData);
  258. }
  259. /// <summary>
  260. /// 组织机构修改
  261. /// </summary>
  262. /// <param name="OrgId">组织id</param>
  263. /// <param name="ParentOrgId">父组织id</param>
  264. /// <param name="OrgCode"></param>
  265. /// <param name="OrgName"></param>
  266. /// <param name="FullCode"></param>
  267. /// <param name="FullName"></param>
  268. /// <param name="UserId"></param>
  269. /// <param name="data"></param>
  270. /// <param name="IsDelete"></param>
  271. /// <returns></returns>
  272. [AuthPermission]
  273. [HttpPost, Route("edit")]
  274. public JsonResult editp(string OrgId,
  275. string ParentOrgId, string OrgCode,
  276. string OrgName,
  277. string FullCode,
  278. string FullName, string UserId,
  279. //string RoleId,
  280. [FromBody]dynamic data
  281. //, Int32 IsDelete
  282. )
  283. {
  284. if (data != null)
  285. {
  286. //Newtonsoft.Json.Linq.JArray
  287. OrgId = data.OrgId;
  288. ParentOrgId = data.ParentOrgId;
  289. OrgCode = data.OrgCode;
  290. OrgName = data.OrgName;
  291. FullCode = data.FullCode;
  292. FullName = data.FullName;
  293. UserId = data.UserId;
  294. //RoleId = data.RoleId;
  295. }
  296. //string[] RoleIdss = RoleId.Split(",");
  297. //int[] RoleIdis = Array.ConvertAll(RoleIdss, s => Convert.ToInt32(s));
  298. #region 编辑用户
  299. string commandText = "UPDATE CM_Org " +
  300. " SET OrgId=@OrgId, ParentOrgId = @ParentOrgId,";
  301. commandText += " OrgCode = @OrgCode" +
  302. ",OrgName = @OrgName" +
  303. " ,FullCode = @FullCode" +
  304. ",FullName = @FullName" +
  305. ",UserId = @UserId" +
  306. //",RoleId = @RoleId" +
  307. " WHERE OrgId= @OrgId";
  308. string result;
  309. //准备参数
  310. List<List<Object>> parameters = new List<List<Object>>();
  311. parameters.Add(new List<Object>() { "OrgId", OrgId });
  312. parameters.Add(new List<Object>() { "ParentOrgId", ParentOrgId });
  313. parameters.Add(new List<Object>() { "OrgCode", OrgCode });
  314. parameters.Add(new List<Object>() { "OrgName", OrgName });
  315. parameters.Add(new List<Object>() { "FullCode", FullCode });
  316. parameters.Add(new List<Object>() { "FullName", FullName });
  317. parameters.Add(new List<Object>() { "UserId", UserId });
  318. //parameters.Add(new List<Object>() { "RoleId", RoleId });
  319. List<SqlParameter> parameters1 = DataAccess.ToParameters(parameters);
  320. int success = DataAccess.ExecuteCommand(commandText, parameters1, out result);
  321. #endregion
  322. #region 角色
  323. //RoleDAL.SaveRolesRelatePermission(OrgId, RoleIdis);
  324. #endregion
  325. return Json(new
  326. {
  327. success = success,
  328. result = result,
  329. });
  330. }
  331. /// <summary>
  332. /// 组织机构删除
  333. /// </summary>
  334. /// <param name="id"></param>
  335. /// <returns></returns>
  336. [AuthPermission]
  337. [HttpPost, Route("delete")]
  338. public ActionResult Delete(string id)
  339. {
  340. //SQL语句
  341. string commandText = "DELETE FROM CM_Org WHERE OrgId = @id";
  342. string commandText1 = "DELETE FROM CM_OrgRole WHERE OrgId = @id";
  343. //准备参数
  344. List<List<Object>> parameters = new List<List<Object>>();
  345. parameters.Add(new List<Object>() { "id", id });
  346. string result = "";
  347. string result1 = "";
  348. //参数转换
  349. List<SqlParameter> parameters1 = DataAccess.ToParameters(parameters);
  350. //执行并返回结果
  351. int success = DataAccess.ExecuteCommand(commandText, parameters1, out result);
  352. int success1 = DataAccess.ExecuteCommand(commandText1, parameters1, out result1);
  353. //如果CM_Org和CM_OrgRole表记录都删除成功
  354. int success2 = 0;
  355. if (success > 0 && success1 > 0)
  356. {
  357. success2 = success;//此处应该是success2 = success+success1,由于不清楚前端是怎么接收处理的,暂且这么处理。
  358. }
  359. else
  360. {
  361. success2 = -1;
  362. }
  363. return Content("{success:"+ success2 + "}");
  364. }
  365. /// <summary>
  366. /// 权限列表
  367. /// </summary>
  368. /// <param name="staffid"></param>
  369. /// <returns></returns>
  370. [HttpGet, Route("menus")]
  371. public ActionResult menus(string staffid)
  372. {
  373. HttpRequest request = HttpContext.Request;
  374. StringValues oo;
  375. request.Headers.TryGetValue("token", out oo);
  376. if (oo.Count > 0 && oo.ToArray()[0] != "")
  377. {
  378. staffid = oo.ToArray()[0];
  379. }
  380. //取token
  381. var token = (string)_cache.Get(staffid);
  382. var secret = TokenConfig.SecretKey;
  383. Dictionary<string, object> data;
  384. Object roleid;
  385. Int64 roleid1;
  386. string jsonData = "";
  387. if (token != null)
  388. {
  389. try
  390. {
  391. data = JsonWebToken.DecodeToObject<Dictionary<string, object>>(token, secret);
  392. data.TryGetValue("roleid", out roleid);
  393. roleid1 = (Int64)roleid;
  394. var options = RoleDAL.GetPermissions(roleid1);
  395. var permissions = Permission.Convert(options);
  396. jsonData = JsonConvert.SerializeObject(permissions);
  397. }
  398. catch (SignatureVerificationException)
  399. {
  400. // Given token is either expired or hashed with an unsupported algorithm.
  401. }
  402. }
  403. return Content(jsonData
  404. );
  405. }
  406. [HttpGet, Route("parents")]
  407. public ActionResult parents()
  408. {
  409. var permss = RoleDAL.GetTopPermissions();
  410. IList<Option> options = new List<Option>();
  411. foreach (Permission perms in permss)
  412. {
  413. var option = new Option() { label = perms.PermissionName, value = perms.Id.ToString(), disabled = perms.IsDelete };
  414. options.Add(option);
  415. }
  416. var jsonData = JsonConvert.SerializeObject(options);
  417. return Content(jsonData
  418. );
  419. }
  420. [HttpGet, Route("authtype")]
  421. public ActionResult AuthType()
  422. {
  423. IList<Option> options = new List<Option>();
  424. var option = new Option() { label = "界面", value = "U" ,disabled = false };
  425. options.Add(option);
  426. var option1 = new Option() { label = "操作", value = "O", disabled = false };
  427. options.Add(option1);
  428. var option2 = new Option() { label = "按钮", value = "A", disabled = false };
  429. options.Add(option2);
  430. var jsonData = JsonConvert.SerializeObject(options);
  431. return Content(jsonData
  432. );
  433. }
  434. [HttpGet, Route("permissions")]
  435. public ActionResult Permissions()
  436. {
  437. string roleid = getStaff("roleid");
  438. if(roleid == null || roleid == "")
  439. {
  440. return Json(new { success = false,msg="没有登陆" });
  441. }
  442. Dictionary<string, Permission> permission = PermissionHelper.Permissions(Convert.ToInt32(roleid));
  443. return Json(permission);
  444. }
  445. public IList<CM_Role> GetTopRoles()
  446. {
  447. IList<CM_Role> permsList = new List<CM_Role>(0);
  448. DataTable dt = new DataTable();
  449. string result = string.Empty;
  450. var sortDirection = 1;
  451. var pageIndex = 1;
  452. var pageSize = Config.MaxPageSize;
  453. string direct = " desc ";
  454. if (sortDirection != 1)
  455. direct = " asc";
  456. int start = (pageIndex - 1) * pageSize;
  457. int end = (start + 1 + pageSize);
  458. string commandText = "select * from (" +
  459. "select A.*, row_number() over" +
  460. "( order by A.RoleId " + direct + " ) as rownum" +
  461. " from CM_Role A ) AAA" +
  462. " where AAA.rownum>" + start + " and AAA.rownum<" + end +
  463. " ";
  464. List<List<Object>> parameters1 = new List<List<Object>>();
  465. parameters1.Add(new List<Object>() { "RoleId", 0 });
  466. bool result1 = DataAccess.GetValues(commandText, ref dt, DataAccess.ToParameters(parameters1).ToArray(), out result);
  467. if (result1 && dt.Rows.Count > 0)
  468. {
  469. // 把DataTable转换为IList<Role>
  470. permsList = ModelConvertHelper<CM_Role>.ConvertToModel(dt);
  471. }
  472. return permsList;
  473. }
  474. }
  475. }