DDStructController.cs 101 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613
  1. using DingTalk.Api;
  2. using DingTalk.Api.Request;
  3. using DingTalk.Api.Response;
  4. using Microsoft.AspNetCore.Http;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Microsoft.Extensions.Configuration;
  7. using Microsoft.Extensions.Options;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text.Json;
  12. using System.Threading.Tasks;
  13. using TEAMModelOS.Models;
  14. using TEAMModelOS.SDK.DI;
  15. using TEAMModelOS.SDK.Extension;
  16. using TEAMModelOS.SDK.Models.Service;
  17. using Azure.Cosmos;
  18. using TEAMModelOS.SDK.Models;
  19. using TEAMModeBI.Controllers.BISchool;
  20. using TEAMModelOS.SDK.Models.Cosmos.BI;
  21. using Microsoft.Azure.Cosmos.Table;
  22. namespace TEAMModeBI.Controllers.DingDingStruc
  23. {
  24. [ProducesResponseType(StatusCodes.Status200OK)]
  25. [ProducesResponseType(StatusCodes.Status400BadRequest)]
  26. [Route("dd")]
  27. [ApiController]
  28. public class DDStructController : ControllerBase
  29. {
  30. private readonly IConfiguration _configuration;
  31. //数据容器
  32. private readonly AzureCosmosFactory _azureCosmos;
  33. //文件容器
  34. private readonly AzureStorageFactory _azureStorage;
  35. //钉钉提示信息
  36. private readonly DingDing _dingDing;
  37. //雪花ID
  38. private readonly SnowflakeId _snowflakeId;
  39. private readonly Option _option;
  40. public DDStructController(IConfiguration configuration, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option, CoreAPIHttpService aoreAPIHttpService, SnowflakeId snowflakeId)
  41. {
  42. _configuration = configuration;
  43. _azureCosmos = azureCosmos;
  44. _azureStorage = azureStorage;
  45. _dingDing = dingDing;
  46. _option = option?.Value;
  47. _snowflakeId = snowflakeId;
  48. }
  49. /// <summary>
  50. /// 获取分支组织列表信息
  51. /// </summary>
  52. /// <returns></returns>
  53. [ProducesDefaultResponseType]
  54. [HttpPost("ddbranchstruc")]
  55. public async Task<IActionResult> DDBranchStruc()
  56. {
  57. string str_appKey = _configuration["DingDingAuth:appKey"];
  58. string str_appSecret = _configuration["DingDingAuth:appSecret"];
  59. //获取企业内部应用的accessToken
  60. IDingTalkClient Iclient = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
  61. OapiGettokenRequest request = new OapiGettokenRequest();
  62. request.Appkey = str_appKey;
  63. request.Appsecret = str_appSecret;
  64. request.SetHttpMethod("GET");
  65. OapiGettokenResponse tokenResponse = Iclient.Execute(request);
  66. if (tokenResponse.IsError)
  67. {
  68. return Ok(new { state = 0, message = "请检查配置" });
  69. }
  70. IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/org/union/branch/get");
  71. OapiOrgUnionBranchGetRequest req = new OapiOrgUnionBranchGetRequest();
  72. OapiOrgUnionBranchGetResponse rsp = client.Execute(req, tokenResponse.AccessToken);
  73. return Ok(new { Result = rsp.Result, Body = rsp.Body, RequestId = rsp.RequestId, SubErrCode = rsp.SubErrCode, Success = rsp.Success });
  74. }
  75. /// <summary>
  76. /// 获取企业部门列表
  77. /// </summary>
  78. [ProducesDefaultResponseType]
  79. [HttpPost("get-deptlist")]
  80. public async Task<IActionResult> GetDeptList()
  81. {
  82. try
  83. {
  84. string appKey = _configuration["DingDingAuth:appKey"];
  85. string appSecret = _configuration["DingDingAuth:appSecret"];
  86. //获取access_token
  87. DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
  88. OapiGettokenRequest request = new OapiGettokenRequest();
  89. request.Appkey = appKey;
  90. request.Appsecret = appSecret;
  91. request.SetHttpMethod("Get");
  92. OapiGettokenResponse response = client.Execute(request);
  93. if (response.IsError)
  94. {
  95. return BadRequest();
  96. }
  97. //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
  98. string access_token = response.AccessToken;
  99. //获取一级部门列表
  100. IDingTalkClient v2ListsubClient1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
  101. OapiV2DepartmentListsubRequest reqlistsub1 = new OapiV2DepartmentListsubRequest() { DeptId = 1L, Language = "zh_CN" };
  102. OapiV2DepartmentListsubResponse rsplistsub1 = v2ListsubClient1.Execute(reqlistsub1, access_token);
  103. List<DeptInfo> templsit = new List<DeptInfo>();
  104. if (rsplistsub1.Result != null)
  105. {
  106. foreach (var deptList in rsplistsub1.Result)
  107. {
  108. DeptInfo deptInfo = new DeptInfo();
  109. deptInfo.deptId = deptList.DeptId;
  110. deptInfo.deptName = deptList.Name;
  111. deptInfo.parentId = deptList.ParentId;
  112. //获取一级部门用户列表
  113. IDingTalkClient userListClient1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
  114. OapiUserListidRequest reqUserList1 = new OapiUserListidRequest() { DeptId = deptList.DeptId };
  115. OapiUserListidResponse rspUserList1 = userListClient1.Execute(reqUserList1, access_token);
  116. if (rspUserList1.Result != null)
  117. {
  118. deptInfo.ddUserList = rspUserList1.Result.UseridList;
  119. }
  120. //获取用户详细信息
  121. IDingTalkClient v2UserListClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
  122. OapiV2UserGetRequest reqv2UserList = new OapiV2UserGetRequest();
  123. OapiV2UserGetResponse rspv2UserList = v2UserListClient.Execute(reqv2UserList, access_token);
  124. //获取二级部门列表
  125. OapiV2DepartmentListsubRequest reqlistsub = new OapiV2DepartmentListsubRequest() { DeptId = deptList.DeptId, Language = "zh_CN" };
  126. OapiV2DepartmentListsubResponse rsplistsub = v2ListsubClient1.Execute(reqlistsub, access_token);
  127. List<DeptBaseResponseDomain> deptBaseResponseDomainList = new List<DeptBaseResponseDomain>();
  128. if (rsplistsub.Result != null)
  129. {
  130. foreach (var deptlist2 in rsplistsub.Result)
  131. {
  132. //添加二级部门
  133. DeptBaseResponseDomain deptBaseResponseDomain2 = new DeptBaseResponseDomain();
  134. deptBaseResponseDomain2.deptId = deptlist2.DeptId;
  135. deptBaseResponseDomain2.Name = deptlist2.Name;
  136. deptBaseResponseDomain2.ParentId = deptlist2.ParentId;
  137. //获取三级部门用户列表
  138. OapiUserListidRequest reqUserList2 = new OapiUserListidRequest() { DeptId = deptlist2.DeptId };
  139. OapiUserListidResponse rspUserList2 = userListClient1.Execute(reqUserList2, access_token);
  140. if (rspUserList2.Result != null)
  141. {
  142. //添加三级部门用户
  143. deptBaseResponseDomain2.ddUserList = rspUserList2.Result.UseridList;
  144. }
  145. //获取三级部门列表
  146. OapiV2DepartmentListsubRequest reqlistsub3 = new OapiV2DepartmentListsubRequest() { DeptId = deptlist2.DeptId, Language = "zh_CN" };
  147. OapiV2DepartmentListsubResponse rsplistsub3 = v2ListsubClient1.Execute(reqlistsub3, access_token);
  148. List<DeptBaseResponseDomain> deptBaseResponseDomain3List = new List<DeptBaseResponseDomain>();
  149. if (rsplistsub3.Result != null)
  150. {
  151. foreach (var dept3List in rsplistsub3.Result)
  152. {
  153. //添加三级部门
  154. DeptBaseResponseDomain deptBaseResponseDomain3 = new DeptBaseResponseDomain();
  155. deptBaseResponseDomain3.deptId = dept3List.DeptId;
  156. deptBaseResponseDomain3.Name = dept3List.Name;
  157. deptBaseResponseDomain3.ParentId = dept3List.ParentId;
  158. //获取部门用户列表
  159. OapiUserListidRequest reqUserList3 = new OapiUserListidRequest() { DeptId = dept3List.DeptId };
  160. OapiUserListidResponse rspUserList3 = userListClient1.Execute(reqUserList3, access_token);
  161. if (rspUserList3.Result != null)
  162. {
  163. //添加三级部门的用户
  164. deptBaseResponseDomain3.ddUserList = rspUserList3.Result.UseridList;
  165. }
  166. //获取部门列表 四级目录
  167. OapiV2DepartmentListsubRequest reqlistsub4 = new OapiV2DepartmentListsubRequest() { DeptId = dept3List.DeptId, Language = "zh_CN" };
  168. OapiV2DepartmentListsubResponse rsplistsu4 = v2ListsubClient1.Execute(reqlistsub4, access_token);
  169. List<DeptBaseResponseDomain> deptBaseResponseDomain4List = new List<DeptBaseResponseDomain>();
  170. if (rsplistsu4.Result != null)
  171. {
  172. foreach (var dept4List in rsplistsu4.Result)
  173. {
  174. DeptBaseResponseDomain deptBaseResponseDomain4 = new DeptBaseResponseDomain();
  175. deptBaseResponseDomain4.deptId = dept4List.DeptId;
  176. deptBaseResponseDomain4.Name = dept4List.Name;
  177. deptBaseResponseDomain4.ParentId = dept4List.ParentId;
  178. deptBaseResponseDomain4List.Add(deptBaseResponseDomain4);
  179. //获取四级部门用户列表
  180. OapiUserListidRequest reqUserList4 = new OapiUserListidRequest() { DeptId = dept4List.DeptId };
  181. OapiUserListidResponse rspUserList4 = userListClient1.Execute(reqUserList4, access_token);
  182. if (rspUserList4.Result != null)
  183. {
  184. //添加四级部门的用户
  185. deptBaseResponseDomain4.ddUserList = rspUserList4.Result.UseridList;
  186. }
  187. }
  188. }
  189. //添加四级部门列表
  190. deptBaseResponseDomain3.LowerDeip_List = deptBaseResponseDomain4List;
  191. deptBaseResponseDomain3List.Add(deptBaseResponseDomain3);
  192. }
  193. }
  194. //添加三级部门列表
  195. deptBaseResponseDomain2.LowerDeip_List = deptBaseResponseDomain3List;
  196. deptBaseResponseDomainList.Add(deptBaseResponseDomain2);
  197. }
  198. }
  199. //添加二级部门列表
  200. deptInfo.deptList = deptBaseResponseDomainList;
  201. templsit.Add(deptInfo);
  202. }
  203. }
  204. return Ok(new { state = 200, deptlist = templsit });
  205. }
  206. catch (Exception ex)
  207. {
  208. return Ok(new { state = 1, message=$"查询失败!:状态:{ex.StackTrace}错误:{ex.Message}" }) ;
  209. }
  210. }
  211. /// <summary>
  212. /// 查询钉钉的研发中心B人员
  213. /// </summary>
  214. /// <param name="jsonElement"></param>
  215. /// <returns></returns>
  216. [ProducesDefaultResponseType]
  217. [HttpPost("get-tmdandddusers")]
  218. public async Task<IActionResult> GetTmdAndDdUsers(JsonElement jsonElement)
  219. {
  220. try
  221. {
  222. jsonElement.TryGetProperty("deptId", out JsonElement deptId);
  223. string tempDeptId = string.IsNullOrEmpty($"{deptId}") ? "67863053" : $"{deptId}";
  224. string appKey = _configuration["DingDingAuth:appKey"];
  225. string appSecret = _configuration["DingDingAuth:appSecret"];
  226. Dictionary<string, object> dic = new Dictionary<string, object> { { "PartitionKey", "authority-bi" } };
  227. List<Authority> authorityBIList = await _azureStorage.FindListByDict<Authority>(dic);
  228. //获取access_token
  229. DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
  230. OapiGettokenRequest request = new OapiGettokenRequest();
  231. request.Appkey = appKey;
  232. request.Appsecret = appSecret;
  233. request.SetHttpMethod("Get");
  234. OapiGettokenResponse response = client.Execute(request);
  235. if (response.IsError)
  236. {
  237. return BadRequest();
  238. }
  239. //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
  240. string access_token = response.AccessToken;
  241. IDingTalkClient userListClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/list");
  242. OapiV2UserListRequest reqUserList1 = new OapiV2UserListRequest();
  243. reqUserList1.DeptId = long.Parse($"{tempDeptId}");
  244. reqUserList1.Cursor = 0L;
  245. reqUserList1.Size = 50L;
  246. reqUserList1.ContainAccessLimit = false;
  247. reqUserList1.OrderField = "custom";
  248. reqUserList1.Language = "zh_CN";
  249. reqUserList1.SetHttpMethod("GET");
  250. OapiV2UserListResponse rspV2UserList1 = userListClient.Execute(reqUserList1, access_token);
  251. List<DDUserInfoAndTMD> dDAndTmdInfos = new List<DDUserInfoAndTMD>();
  252. List<DingDingUserInfo> ddUserInfos = new List<DingDingUserInfo>();
  253. if (rspV2UserList1.Result.List != null)
  254. {
  255. foreach (var itemUser in rspV2UserList1.Result.List)
  256. {
  257. List<DingDingUserInfo> temp = await _azureStorage.FindListByDict<DingDingUserInfo>(new Dictionary<string, object> { { "RowKey", $"{itemUser.Userid}" } });
  258. foreach (var item in temp)
  259. {
  260. ddUserInfos.Add(item);
  261. }
  262. //DDUserInfoAndTMD dDAndTmdInfo = new DDUserInfoAndTMD();
  263. //dDAndTmdInfo.unionid = itemUser.Unionid;
  264. //dDAndTmdInfo.userid = itemUser.Userid;
  265. //dDAndTmdInfo.title = itemUser.Title;
  266. //dDAndTmdInfo.name = itemUser.Name;
  267. //dDAndTmdInfo.mobile = itemUser.Mobile;
  268. //dDAndTmdInfo.jobNumber = itemUser.JobNumber;
  269. //dDAndTmdInfo.avatar = itemUser.Avatar;
  270. //dDAndTmdInfo.depts = itemUser.DeptIdList;
  271. //List<string> roles = new List<string>();//角色列表
  272. //List<string> power = new List<string>();//权限列表
  273. //string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser.Userid}'";
  274. //try
  275. //{
  276. // await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  277. // {
  278. // dDAndTmdInfo.tmdId = item.id;
  279. // dDAndTmdInfo.isexist = true;
  280. // if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  281. // {
  282. // var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  283. // if (schoolRoles.Status == 200)
  284. // {
  285. // using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  286. // if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  287. // {
  288. // foreach (var obj in _roles.EnumerateArray())
  289. // {
  290. // //初始定义顾问的assistant 更改为assist
  291. // if (obj.GetString().Equals($"assist"))
  292. // {
  293. // roles.Add(obj.GetString());
  294. // }
  295. // }
  296. // }
  297. // if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  298. // {
  299. // foreach (var obj in _permissions.EnumerateArray())
  300. // {
  301. // //显示BI权限
  302. // foreach (var aut in authorityBIList)
  303. // {
  304. // if (aut.RowKey.Equals(obj.GetString()))
  305. // {
  306. // power.Add(obj.GetString());
  307. // }
  308. // }
  309. // }
  310. // }
  311. // }
  312. // dDAndTmdInfo.tmdroles = roles;
  313. // dDAndTmdInfo.tmdpower = power;
  314. // }
  315. // }
  316. //}
  317. //catch { }
  318. }
  319. }
  320. if (!string.IsNullOrEmpty($"{tempDeptId}"))
  321. {
  322. //获取下级部门列表
  323. IDingTalkClient v2DeptListClient2 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
  324. OapiV2DepartmentListsubRequest reqDeptList2 = new OapiV2DepartmentListsubRequest() { DeptId = long.Parse($"{tempDeptId}"), Language = "zh_CN" };
  325. OapiV2DepartmentListsubResponse rspDeptLis2 = v2DeptListClient2.Execute(reqDeptList2, access_token);
  326. if (rspDeptLis2.Result != null)
  327. {
  328. foreach (var tempDept in rspDeptLis2.Result)
  329. {
  330. OapiV2UserListRequest reqUserList2 = new OapiV2UserListRequest();
  331. reqUserList2.DeptId = long.Parse($"{tempDept.DeptId}");
  332. reqUserList2.Cursor = 0L;
  333. reqUserList2.Size = 50L;
  334. reqUserList2.ContainAccessLimit = false;
  335. reqUserList2.OrderField = "custom";
  336. reqUserList2.Language = "zh_CN";
  337. reqUserList2.SetHttpMethod("GET");
  338. OapiV2UserListResponse rspV2UserList2 = userListClient.Execute(reqUserList2, access_token);
  339. if (rspV2UserList2.Result.List != null)
  340. {
  341. foreach (var itemUser2 in rspV2UserList2.Result.List)
  342. {
  343. var tempInfo = dDAndTmdInfos.Find(x => x.unionid.Equals(itemUser2.Unionid));
  344. if (string.IsNullOrEmpty($"{tempInfo}"))
  345. {
  346. DDUserInfoAndTMD dDAndTmdInfo2 = new DDUserInfoAndTMD();
  347. dDAndTmdInfo2.unionid = itemUser2.Unionid;
  348. dDAndTmdInfo2.userid = itemUser2.Userid;
  349. dDAndTmdInfo2.title = itemUser2.Title;
  350. dDAndTmdInfo2.name = itemUser2.Name;
  351. dDAndTmdInfo2.mobile = itemUser2.Mobile;
  352. dDAndTmdInfo2.jobNumber = itemUser2.JobNumber;
  353. dDAndTmdInfo2.avatar = itemUser2.Avatar;
  354. dDAndTmdInfo2.depts = itemUser2.DeptIdList;
  355. List<string> roles = new List<string>();//角色列表
  356. List<string> power = new List<string>();//权限列表
  357. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser2.Userid}'";
  358. try
  359. {
  360. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  361. {
  362. dDAndTmdInfo2.tmdId = item.id;
  363. dDAndTmdInfo2.isexist = true;
  364. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  365. {
  366. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  367. if (schoolRoles.Status == 200)
  368. {
  369. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  370. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  371. {
  372. foreach (var obj in _roles.EnumerateArray())
  373. {
  374. //初始定义顾问的assistant 更改为assist
  375. if (obj.GetString().Equals($"assist"))
  376. {
  377. roles.Add(obj.GetString());
  378. }
  379. }
  380. }
  381. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  382. {
  383. foreach (var obj in _permissions.EnumerateArray())
  384. {
  385. //显示BI权限
  386. foreach (var aut in authorityBIList)
  387. {
  388. if (aut.RowKey.Equals(obj.GetString()))
  389. {
  390. power.Add(obj.GetString());
  391. }
  392. }
  393. }
  394. }
  395. }
  396. dDAndTmdInfo2.tmdroles = roles;
  397. dDAndTmdInfo2.tmdpower = power;
  398. }
  399. }
  400. }
  401. catch { }
  402. dDAndTmdInfos.Add(dDAndTmdInfo2);
  403. }
  404. }
  405. }
  406. }
  407. }
  408. }
  409. return Ok(new { state = 200, count = ddUserInfos.Count, ddUserInfos }) ;
  410. }
  411. catch (Exception ex)
  412. {
  413. await _dingDing.SendBotMsg($"BI,{_option.Location} dd/get-tmdandddusers \n {ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
  414. return BadRequest();
  415. }
  416. }
  417. /// <summary>
  418. /// 依据钉钉UserID查询钉钉用户信息
  419. /// </summary>
  420. /// <param name="jsonElement"></param>
  421. /// <returns></returns>
  422. [ProducesDefaultResponseType]
  423. [HttpPost("get-dduserinfo")]
  424. public async Task<IActionResult> GetDDUserInfo(JsonElement jsonElement)
  425. {
  426. try
  427. {
  428. if (!jsonElement.TryGetProperty("userids", out JsonElement userIds)) return Ok(new { state = 1, message = "参数问题" });
  429. List<DDUserInfoAndTMD> dDUserInfoAndTMDs = new List<DDUserInfoAndTMD>();//返回钉钉信息和查询的醍摩豆信息
  430. string appKey = _configuration["DingDingAuth:appKey"];
  431. string appSecret = _configuration["DingDingAuth:appSecret"];
  432. //获取access_token
  433. DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
  434. OapiGettokenRequest request = new OapiGettokenRequest();
  435. request.Appkey = appKey;
  436. request.Appsecret = appSecret;
  437. request.SetHttpMethod("Get");
  438. OapiGettokenResponse response = client.Execute(request);
  439. if (response.IsError)
  440. {
  441. return BadRequest();
  442. }
  443. //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
  444. string access_token = response.AccessToken;
  445. IDingTalkClient userInfoClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
  446. Dictionary<string, object> dic = new Dictionary<string, object> { { "PartitionKey", "authority-bi" } };
  447. List<Authority> authorityBIList = await _azureStorage.FindListByDict<Authority>(dic);
  448. if (!string.IsNullOrEmpty($"{userIds}"))
  449. {
  450. //List<string> str_userids = userIds.ToObject<List<string>>().Distinct().ToList();//通过数组的Equals实现去重
  451. List<string> str_userids1 = userIds.ToObject<List<string>>();
  452. List<string> str_userids = str_userids1.Where((x, i) => str_userids1.FindIndex(z => z == x) == i).ToList();//Lambda表达式去重
  453. foreach (var tempid in str_userids)
  454. {
  455. OapiV2UserGetRequest reqUserInfo = new OapiV2UserGetRequest() { Userid = $"{tempid}", Language = "zh_CN" };
  456. OapiV2UserGetResponse rspUserInfo = userInfoClient.Execute(reqUserInfo, access_token);
  457. if (rspUserInfo.Result != null)
  458. {
  459. List<string> roles = new List<string>();//角色列表
  460. List<string> power = new List<string>();//权限列表
  461. DDUserInfoAndTMD dDUserInfoAndTMD = new DDUserInfoAndTMD();
  462. dDUserInfoAndTMD.unionid = rspUserInfo.Result.Unionid;
  463. dDUserInfoAndTMD.title = rspUserInfo.Result.Title;
  464. dDUserInfoAndTMD.userid = rspUserInfo.Result.Userid;
  465. dDUserInfoAndTMD.jobNumber = rspUserInfo.Result.JobNumber;
  466. dDUserInfoAndTMD.name = rspUserInfo.Result.Name;
  467. dDUserInfoAndTMD.depts = rspUserInfo.Result.DeptIdList;
  468. dDUserInfoAndTMD.mobile = rspUserInfo.Result.Mobile;
  469. dDUserInfoAndTMD.avatar = rspUserInfo.Result.Avatar;
  470. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{tempid}'";
  471. try
  472. {
  473. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  474. {
  475. dDUserInfoAndTMD.tmdId = item.id;
  476. dDUserInfoAndTMD.isexist = true;
  477. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  478. {
  479. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  480. if (schoolRoles.Status == 200)
  481. {
  482. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  483. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  484. {
  485. foreach (var obj in _roles.EnumerateArray())
  486. {
  487. //初始定义顾问的assistant 更改为assist
  488. if (obj.GetString().Equals($"assist"))
  489. {
  490. roles.Add(obj.GetString());
  491. }
  492. }
  493. }
  494. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  495. {
  496. foreach (var obj in _permissions.EnumerateArray())
  497. {
  498. //显示BI权限
  499. foreach (var aut in authorityBIList)
  500. {
  501. if (aut.RowKey.Equals(obj.GetString()))
  502. {
  503. power.Add(obj.GetString());
  504. }
  505. }
  506. }
  507. }
  508. }
  509. dDUserInfoAndTMD.tmdroles = roles;
  510. dDUserInfoAndTMD.tmdpower = power;
  511. }
  512. }
  513. }
  514. catch { }
  515. dDUserInfoAndTMDs.Add(dDUserInfoAndTMD);
  516. }
  517. else return Ok(new { state = 2, message = "访问失败!" });
  518. }
  519. }
  520. return Ok(new { state = 200, ddUserInfos = dDUserInfoAndTMDs});
  521. }
  522. catch (Exception ex)
  523. {
  524. await _dingDing.SendBotMsg($"BI,{_option.Location},dd/get-dduserinfo \n{ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
  525. return BadRequest();
  526. }
  527. }
  528. /// <summary>
  529. /// 查询钉钉和醍摩豆绑定信息
  530. /// </summary>
  531. /// <returns></returns>
  532. [ProducesDefaultResponseType]
  533. [HttpPost("get-allusers")]
  534. public async Task<IActionResult> GetAllUsers()
  535. {
  536. string appKey = _configuration["DingDingAuth:appKey"];
  537. string appSecret = _configuration["DingDingAuth:appSecret"];
  538. Dictionary<string, object> dic = new Dictionary<string, object> { { "PartitionKey", "authority-bi" } };
  539. List<Authority> authorityBIList = await _azureStorage.FindListByDict<Authority>(dic);
  540. //获取access_token
  541. DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
  542. OapiGettokenRequest request = new OapiGettokenRequest() { Appkey = appKey, Appsecret = appSecret };
  543. request.SetHttpMethod("Get");
  544. OapiGettokenResponse response = client.Execute(request);
  545. if (response.IsError)
  546. {
  547. return BadRequest();
  548. }
  549. //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
  550. string access_token = response.AccessToken;
  551. //获取一级部门列表
  552. IDingTalkClient v2DeptListClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
  553. OapiV2DepartmentListsubRequest reqDeptList1 = new OapiV2DepartmentListsubRequest() { DeptId = 1L, Language = "zh_CN" };
  554. OapiV2DepartmentListsubResponse rspDeptList1 = v2DeptListClient.Execute(reqDeptList1, access_token);
  555. //获取部门人员信息
  556. IDingTalkClient userListClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/list");
  557. //List<DeptUserInfo> deptUserInfos = new List<DeptUserInfo>();
  558. //人员集合
  559. List<DDUserInfoAndTMD> dDAndTmdInfos = new List<DDUserInfoAndTMD>();
  560. if (rspDeptList1.Result != null)
  561. {
  562. foreach (var tempDept1 in rspDeptList1.Result)
  563. {
  564. //获取一级
  565. OapiV2UserListRequest reqUserList1 = new OapiV2UserListRequest()
  566. {
  567. DeptId = tempDept1.DeptId,
  568. Cursor = 0L,
  569. Size = 50L,
  570. OrderField = "custom",
  571. Language= "zh_CN"
  572. };
  573. reqUserList1.SetHttpMethod("GET");
  574. OapiV2UserListResponse rspV2UserList1 = userListClient.Execute(reqUserList1, access_token);
  575. if (rspV2UserList1.Result.List != null)
  576. {
  577. foreach (var itemUser1 in rspV2UserList1.Result.List)
  578. {
  579. var tempInfo = dDAndTmdInfos.Find(x => x.unionid.Equals(itemUser1.Unionid));
  580. if (string.IsNullOrEmpty($"{tempInfo}"))
  581. {
  582. DDUserInfoAndTMD dDAndTmdInfo1 = new DDUserInfoAndTMD();
  583. dDAndTmdInfo1.unionid = itemUser1.Unionid;
  584. dDAndTmdInfo1.userid = itemUser1.Userid;
  585. dDAndTmdInfo1.title = itemUser1.Title;
  586. dDAndTmdInfo1.name = itemUser1.Name;
  587. dDAndTmdInfo1.mobile = itemUser1.Mobile;
  588. dDAndTmdInfo1.jobNumber = itemUser1.JobNumber;
  589. dDAndTmdInfo1.avatar = itemUser1.Avatar;
  590. dDAndTmdInfo1.deptId = tempDept1.DeptId;
  591. dDAndTmdInfo1.deptName = tempDept1.Name;
  592. //dDAndTmdInfo1.depts = itemUser.DeptIdList;
  593. List<string> roles = new List<string>();//角色列表
  594. List<string> power = new List<string>();//权限列表
  595. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser1.Userid}'";
  596. try
  597. {
  598. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  599. {
  600. dDAndTmdInfo1.tmdId = item.id;
  601. dDAndTmdInfo1.isexist = true;
  602. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  603. {
  604. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  605. if (schoolRoles.Status == 200)
  606. {
  607. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  608. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  609. {
  610. foreach (var obj in _roles.EnumerateArray())
  611. {
  612. //初始定义顾问的assistant 更改为assist
  613. if (obj.GetString().Equals($"assist"))
  614. {
  615. roles.Add(obj.GetString());
  616. }
  617. }
  618. }
  619. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  620. {
  621. foreach (var obj in _permissions.EnumerateArray())
  622. {
  623. //显示BI权限
  624. foreach (var aut in authorityBIList)
  625. {
  626. if (aut.RowKey.Equals(obj.GetString()))
  627. {
  628. power.Add(obj.GetString());
  629. }
  630. }
  631. }
  632. }
  633. }
  634. dDAndTmdInfo1.tmdroles = roles;
  635. dDAndTmdInfo1.tmdpower = power;
  636. }
  637. }
  638. }
  639. catch { }
  640. dDAndTmdInfos.Add(dDAndTmdInfo1);//添加一级
  641. }
  642. }
  643. }
  644. //获取二级部门
  645. OapiV2DepartmentListsubRequest reqDeptList2 = new OapiV2DepartmentListsubRequest() { DeptId = tempDept1.DeptId, Language = "zh_CN" };
  646. OapiV2DepartmentListsubResponse rspDeptList2 = v2DeptListClient.Execute(reqDeptList2, access_token);
  647. if (rspDeptList2.Result != null)
  648. {
  649. foreach (var tempDept2 in rspDeptList2.Result)
  650. {
  651. //获取二级部门用户
  652. OapiV2UserListRequest reqUserList2 = new OapiV2UserListRequest()
  653. {
  654. DeptId = tempDept2.DeptId,
  655. Cursor = 0L,
  656. Size = 50L,
  657. OrderField = "custom",
  658. Language = "zh_CN"
  659. };
  660. reqUserList1.SetHttpMethod("GET");
  661. OapiV2UserListResponse rspV2UserList2 = userListClient.Execute(reqUserList2, access_token);
  662. if (rspV2UserList2.Result.List != null)
  663. {
  664. foreach (var itemUser2 in rspV2UserList2.Result.List)
  665. {
  666. var tempInfo = dDAndTmdInfos.Find(x => x.unionid.Equals(itemUser2.Unionid));
  667. if (string.IsNullOrEmpty($"{tempInfo}"))
  668. {
  669. DDUserInfoAndTMD dDAndTmdInfo2 = new DDUserInfoAndTMD();
  670. dDAndTmdInfo2.unionid = itemUser2.Unionid;
  671. dDAndTmdInfo2.userid = itemUser2.Userid;
  672. dDAndTmdInfo2.title = itemUser2.Title;
  673. dDAndTmdInfo2.name = itemUser2.Name;
  674. dDAndTmdInfo2.mobile = itemUser2.Mobile;
  675. dDAndTmdInfo2.jobNumber = itemUser2.JobNumber;
  676. dDAndTmdInfo2.avatar = itemUser2.Avatar;
  677. dDAndTmdInfo2.deptId = tempDept2.DeptId;
  678. dDAndTmdInfo2.deptName = tempDept2.Name;
  679. //dDAndTmdInfo1.depts = itemUser2.DeptIdList;
  680. List<string> roles = new List<string>();//角色列表
  681. List<string> power = new List<string>();//权限列表
  682. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser2.Userid}'";
  683. try
  684. {
  685. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  686. {
  687. dDAndTmdInfo2.tmdId = item.id;
  688. dDAndTmdInfo2.isexist = true;
  689. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  690. {
  691. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  692. if (schoolRoles.Status == 200)
  693. {
  694. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  695. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  696. {
  697. foreach (var obj in _roles.EnumerateArray())
  698. {
  699. //初始定义顾问的assistant 更改为assist
  700. if (obj.GetString().Equals($"assist"))
  701. {
  702. roles.Add(obj.GetString());
  703. }
  704. }
  705. }
  706. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  707. {
  708. foreach (var obj in _permissions.EnumerateArray())
  709. {
  710. //显示BI权限
  711. foreach (var aut in authorityBIList)
  712. {
  713. if (aut.RowKey.Equals(obj.GetString()))
  714. {
  715. power.Add(obj.GetString());
  716. }
  717. }
  718. }
  719. }
  720. }
  721. dDAndTmdInfo2.tmdroles = roles;
  722. dDAndTmdInfo2.tmdpower = power;
  723. }
  724. }
  725. }
  726. catch { }
  727. dDAndTmdInfos.Add(dDAndTmdInfo2);//添加二级
  728. }
  729. }
  730. }
  731. //获取三级部门
  732. OapiV2DepartmentListsubRequest reqDeptList3 = new OapiV2DepartmentListsubRequest() { DeptId = tempDept2.DeptId, Language = "zh_CN" };
  733. OapiV2DepartmentListsubResponse rspDeptList3 = v2DeptListClient.Execute(reqDeptList3, access_token);
  734. if (rspDeptList3.Result != null)
  735. {
  736. foreach (var tempDept3 in rspDeptList3.Result)
  737. {
  738. //获取三级部门用户
  739. OapiV2UserListRequest reqUserList3 = new OapiV2UserListRequest()
  740. {
  741. DeptId = tempDept3.DeptId,
  742. Cursor = 0L,
  743. Size = 50L,
  744. OrderField = "custom",
  745. Language = "zh_CN"
  746. };
  747. reqUserList1.SetHttpMethod("GET");
  748. OapiV2UserListResponse rspV2UserList3 = userListClient.Execute(reqUserList3, access_token);
  749. if (rspV2UserList3.Result.List != null)
  750. {
  751. foreach (var itemUser3 in rspV2UserList3.Result.List)
  752. {
  753. var tempInfo = dDAndTmdInfos.Find(x => x.unionid.Equals(itemUser3.Unionid));
  754. if (string.IsNullOrEmpty($"{tempInfo}"))
  755. {
  756. DDUserInfoAndTMD dDAndTmdInfo3 = new DDUserInfoAndTMD();
  757. dDAndTmdInfo3.unionid = itemUser3.Unionid;
  758. dDAndTmdInfo3.userid = itemUser3.Userid;
  759. dDAndTmdInfo3.title = itemUser3.Title;
  760. dDAndTmdInfo3.name = itemUser3.Name;
  761. dDAndTmdInfo3.mobile = itemUser3.Mobile;
  762. dDAndTmdInfo3.jobNumber = itemUser3.JobNumber;
  763. dDAndTmdInfo3.avatar = itemUser3.Avatar;
  764. dDAndTmdInfo3.deptId = tempDept3.DeptId;
  765. dDAndTmdInfo3.deptName = tempDept3.Name;
  766. //dDAndTmdInfo1.depts = itemUser3.DeptIdList;
  767. List<string> roles = new List<string>();//角色列表
  768. List<string> power = new List<string>();//权限列表
  769. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser3.Userid}'";
  770. try
  771. {
  772. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  773. {
  774. dDAndTmdInfo3.tmdId = item.id;
  775. dDAndTmdInfo3.isexist = true;
  776. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  777. {
  778. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  779. if (schoolRoles.Status == 200)
  780. {
  781. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  782. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  783. {
  784. foreach (var obj in _roles.EnumerateArray())
  785. {
  786. //初始定义顾问的assistant 更改为assist
  787. if (obj.GetString().Equals($"assist"))
  788. {
  789. roles.Add(obj.GetString());
  790. }
  791. }
  792. }
  793. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  794. {
  795. foreach (var obj in _permissions.EnumerateArray())
  796. {
  797. //显示BI权限
  798. foreach (var aut in authorityBIList)
  799. {
  800. if (aut.RowKey.Equals(obj.GetString()))
  801. {
  802. power.Add(obj.GetString());
  803. }
  804. }
  805. }
  806. }
  807. }
  808. dDAndTmdInfo3.tmdroles = roles;
  809. dDAndTmdInfo3.tmdpower = power;
  810. }
  811. }
  812. }
  813. catch { }
  814. dDAndTmdInfos.Add(dDAndTmdInfo3);//添加二级
  815. }
  816. }
  817. }
  818. //获取四级部门
  819. OapiV2DepartmentListsubRequest reqDeptList4 = new OapiV2DepartmentListsubRequest() { DeptId = tempDept2.DeptId, Language = "zh_CN" };
  820. OapiV2DepartmentListsubResponse rspDeptList4 = v2DeptListClient.Execute(reqDeptList4, access_token);
  821. if (rspDeptList4.Result != null)
  822. {
  823. foreach (var tempDept4 in rspDeptList4.Result)
  824. {
  825. //获取四级部门用户
  826. OapiV2UserListRequest reqUserList4 = new OapiV2UserListRequest()
  827. {
  828. DeptId = tempDept4.DeptId,
  829. Cursor = 0L,
  830. Size = 50L,
  831. OrderField = "custom",
  832. Language = "zh_CN"
  833. };
  834. reqUserList1.SetHttpMethod("GET");
  835. OapiV2UserListResponse rspV2UserList4 = userListClient.Execute(reqUserList4, access_token);
  836. if (rspV2UserList4.Result.List != null)
  837. {
  838. foreach (var itemUser4 in rspV2UserList4.Result.List)
  839. {
  840. var tempInfo = dDAndTmdInfos.Find(x => x.unionid.Equals(itemUser4.Unionid));
  841. if (string.IsNullOrEmpty($"{tempInfo}"))
  842. {
  843. DDUserInfoAndTMD dDAndTmdInfo3 = new DDUserInfoAndTMD();
  844. dDAndTmdInfo3.unionid = itemUser4.Unionid;
  845. dDAndTmdInfo3.userid = itemUser4.Userid;
  846. dDAndTmdInfo3.title = itemUser4.Title;
  847. dDAndTmdInfo3.name = itemUser4.Name;
  848. dDAndTmdInfo3.mobile = itemUser4.Mobile;
  849. dDAndTmdInfo3.jobNumber = itemUser4.JobNumber;
  850. dDAndTmdInfo3.avatar = itemUser4.Avatar;
  851. dDAndTmdInfo3.deptId = tempDept4.DeptId;
  852. dDAndTmdInfo3.deptName = tempDept4.Name;
  853. //dDAndTmdInfo1.depts = itemUser3.DeptIdList;
  854. List<string> roles = new List<string>();//角色列表
  855. List<string> power = new List<string>();//权限列表
  856. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser4.Userid}'";
  857. try
  858. {
  859. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  860. {
  861. dDAndTmdInfo3.tmdId = item.id;
  862. dDAndTmdInfo3.isexist = true;
  863. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  864. {
  865. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  866. if (schoolRoles.Status == 200)
  867. {
  868. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  869. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  870. {
  871. foreach (var obj in _roles.EnumerateArray())
  872. {
  873. //初始定义顾问的assistant 更改为assist
  874. if (obj.GetString().Equals($"assist"))
  875. {
  876. roles.Add(obj.GetString());
  877. }
  878. }
  879. }
  880. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  881. {
  882. foreach (var obj in _permissions.EnumerateArray())
  883. {
  884. //显示BI权限
  885. foreach (var aut in authorityBIList)
  886. {
  887. if (aut.RowKey.Equals(obj.GetString()))
  888. {
  889. power.Add(obj.GetString());
  890. }
  891. }
  892. }
  893. }
  894. }
  895. dDAndTmdInfo3.tmdroles = roles;
  896. dDAndTmdInfo3.tmdpower = power;
  897. }
  898. }
  899. }
  900. catch { }
  901. dDAndTmdInfos.Add(dDAndTmdInfo3);//添加四级用户信息
  902. }
  903. }
  904. }
  905. //获取五级部门
  906. OapiV2DepartmentListsubRequest reqDeptList5 = new OapiV2DepartmentListsubRequest() { DeptId = tempDept2.DeptId, Language = "zh_CN" };
  907. OapiV2DepartmentListsubResponse rspDeptList5 = v2DeptListClient.Execute(reqDeptList5, access_token);
  908. if (rspDeptList5.Result != null)
  909. {
  910. foreach (var tempDept5 in rspDeptList4.Result)
  911. {
  912. //获取五级部门用户
  913. OapiV2UserListRequest reqUserList5 = new OapiV2UserListRequest()
  914. {
  915. DeptId = tempDept5.DeptId,
  916. Cursor = 0L,
  917. Size = 50L,
  918. OrderField = "custom",
  919. Language = "zh_CN"
  920. };
  921. reqUserList1.SetHttpMethod("GET");
  922. OapiV2UserListResponse rspV2UserList5 = userListClient.Execute(reqUserList5, access_token);
  923. if (rspV2UserList5.Result.List != null)
  924. {
  925. foreach (var itemUser5 in rspV2UserList5.Result.List)
  926. {
  927. var tempInfo = dDAndTmdInfos.Find(x => x.unionid.Equals(itemUser5.Unionid));
  928. if (string.IsNullOrEmpty($"{tempInfo}"))
  929. {
  930. DDUserInfoAndTMD dDAndTmdInfo5 = new DDUserInfoAndTMD();
  931. dDAndTmdInfo5.unionid = itemUser5.Unionid;
  932. dDAndTmdInfo5.userid = itemUser5.Userid;
  933. dDAndTmdInfo5.title = itemUser5.Title;
  934. dDAndTmdInfo5.name = itemUser5.Name;
  935. dDAndTmdInfo5.mobile = itemUser5.Mobile;
  936. dDAndTmdInfo5.jobNumber = itemUser5.JobNumber;
  937. dDAndTmdInfo5.avatar = itemUser5.Avatar;
  938. dDAndTmdInfo5.deptId = tempDept5.DeptId;
  939. dDAndTmdInfo5.deptName = tempDept5.Name;
  940. //dDAndTmdInfo1.depts = itemUser3.DeptIdList;
  941. List<string> roles = new List<string>();//角色列表
  942. List<string> power = new List<string>();//权限列表
  943. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser5.Userid}'";
  944. try
  945. {
  946. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  947. {
  948. dDAndTmdInfo5.tmdId = item.id;
  949. dDAndTmdInfo5.isexist = true;
  950. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  951. {
  952. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  953. if (schoolRoles.Status == 200)
  954. {
  955. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  956. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  957. {
  958. foreach (var obj in _roles.EnumerateArray())
  959. {
  960. //初始定义顾问的assistant 更改为assist
  961. if (obj.GetString().Equals($"assist"))
  962. {
  963. roles.Add(obj.GetString());
  964. }
  965. }
  966. }
  967. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  968. {
  969. foreach (var obj in _permissions.EnumerateArray())
  970. {
  971. //显示BI权限
  972. foreach (var aut in authorityBIList)
  973. {
  974. if (aut.RowKey.Equals(obj.GetString()))
  975. {
  976. power.Add(obj.GetString());
  977. }
  978. }
  979. }
  980. }
  981. }
  982. dDAndTmdInfo5.tmdroles = roles;
  983. dDAndTmdInfo5.tmdpower = power;
  984. }
  985. }
  986. }
  987. catch { }
  988. dDAndTmdInfos.Add(dDAndTmdInfo5);//添加五级用户信息
  989. }
  990. }
  991. }
  992. }
  993. }
  994. //五级部门和下面的人员信息 结束
  995. }
  996. }
  997. //四级部门和下面的人员信息 结束
  998. }
  999. }
  1000. //三级部门和下面的人员信息 结束
  1001. }
  1002. }
  1003. //三级部门和下面的人员信息 结束
  1004. }
  1005. }
  1006. return Ok(new { state = 200, dDAndTmdInfos });
  1007. }
  1008. /// <summary>
  1009. /// 查询钉钉所有人数 -----还未完成
  1010. /// </summary>
  1011. /// <returns></returns>
  1012. [ProducesDefaultResponseType]
  1013. [HttpPost("get-ddstrucandymdinfo")]
  1014. public async Task<IActionResult> GetDDStrucAndTmdInfo()
  1015. {
  1016. try
  1017. {
  1018. string appKey = _configuration["DingDingAuth:appKey"];
  1019. string appSecret = _configuration["DingDingAuth:appSecret"];
  1020. Dictionary<string, object> dic = new Dictionary<string, object> { { "PartitionKey", "authority-bi" } };
  1021. List<Authority> authorityBIList = await _azureStorage.FindListByDict<Authority>(dic);
  1022. //获取access_token
  1023. DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
  1024. OapiGettokenRequest request = new OapiGettokenRequest() { Appkey = appKey, Appsecret = appSecret };
  1025. request.SetHttpMethod("Get");
  1026. OapiGettokenResponse response = client.Execute(request);
  1027. if (response.IsError)
  1028. {
  1029. return BadRequest();
  1030. }
  1031. //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
  1032. string access_token = response.AccessToken;
  1033. //获取一级部门列表
  1034. IDingTalkClient v2DeptListClient1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
  1035. OapiV2DepartmentListsubRequest reqDeptList1 = new OapiV2DepartmentListsubRequest() { DeptId = 1L, Language = "zh_CN" };
  1036. OapiV2DepartmentListsubResponse rspDeptList1 = v2DeptListClient1.Execute(reqDeptList1, access_token);
  1037. IDingTalkClient userListClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/list");
  1038. //var deptlist = rspDeptList1.Result;
  1039. List<DeptStruc> deptStrucs = new List<DeptStruc>();
  1040. if (rspDeptList1.Result != null)
  1041. {
  1042. foreach (var tempDept in rspDeptList1.Result)
  1043. {
  1044. DeptStruc deptStruc = new DeptStruc();
  1045. deptStruc.deptId = tempDept.DeptId;
  1046. deptStruc.parentId = tempDept.ParentId;
  1047. deptStruc.name = tempDept.Name;
  1048. OapiV2UserListRequest reqUserList1 = new OapiV2UserListRequest();
  1049. reqUserList1.DeptId = tempDept.DeptId;
  1050. reqUserList1.Cursor = 0L;
  1051. reqUserList1.Size = 50L;
  1052. reqUserList1.ContainAccessLimit = false;
  1053. reqUserList1.OrderField = "custom";
  1054. reqUserList1.Language = "zh_CN";
  1055. reqUserList1.SetHttpMethod("GET");
  1056. OapiV2UserListResponse rspV2UserList1 = userListClient.Execute(reqUserList1, access_token);
  1057. if (rspV2UserList1.Result.List != null)
  1058. {
  1059. List<DDUserInfoAndTMD> dDAndTmdInfos = new List<DDUserInfoAndTMD>();
  1060. foreach (var itemUser in rspV2UserList1.Result.List)
  1061. {
  1062. DDUserInfoAndTMD dDAndTmdInfo = new DDUserInfoAndTMD();
  1063. dDAndTmdInfo.unionid = itemUser.Unionid;
  1064. dDAndTmdInfo.userid = itemUser.Userid;
  1065. dDAndTmdInfo.title = itemUser.Title;
  1066. dDAndTmdInfo.name = itemUser.Name;
  1067. dDAndTmdInfo.mobile = itemUser.Mobile;
  1068. dDAndTmdInfo.jobNumber = itemUser.JobNumber;
  1069. dDAndTmdInfo.avatar = itemUser.Avatar;
  1070. dDAndTmdInfo.depts = itemUser.DeptIdList;
  1071. List<string> roles = new List<string>();//角色列表
  1072. List<string> power = new List<string>();//权限列表
  1073. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser.Userid}'";
  1074. try
  1075. {
  1076. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  1077. {
  1078. dDAndTmdInfo.tmdId = item.id;
  1079. dDAndTmdInfo.isexist = true;
  1080. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  1081. {
  1082. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  1083. if (schoolRoles.Status == 200)
  1084. {
  1085. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  1086. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  1087. {
  1088. foreach (var obj in _roles.EnumerateArray())
  1089. {
  1090. //初始定义顾问的assistant 更改为assist
  1091. if (obj.GetString().Equals($"assist"))
  1092. {
  1093. roles.Add(obj.GetString());
  1094. }
  1095. }
  1096. }
  1097. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  1098. {
  1099. foreach (var obj in _permissions.EnumerateArray())
  1100. {
  1101. //显示BI权限
  1102. foreach (var aut in authorityBIList)
  1103. {
  1104. if (aut.RowKey.Equals(obj.GetString()))
  1105. {
  1106. power.Add(obj.GetString());
  1107. }
  1108. }
  1109. }
  1110. }
  1111. }
  1112. dDAndTmdInfo.tmdroles = roles;
  1113. dDAndTmdInfo.tmdpower = power;
  1114. }
  1115. }
  1116. }
  1117. catch { }
  1118. dDAndTmdInfos.Add(dDAndTmdInfo);
  1119. deptStruc.tmddd = dDAndTmdInfos;
  1120. }
  1121. }
  1122. //获取二级部门列表
  1123. OapiV2DepartmentListsubRequest reqDeptList2 = new OapiV2DepartmentListsubRequest() { DeptId = tempDept.DeptId, Language = "zh_CN" };
  1124. OapiV2DepartmentListsubResponse rspDeptList2 = v2DeptListClient1.Execute(reqDeptList2, access_token);
  1125. if (rspDeptList2.Result != null)
  1126. {
  1127. List<DeptStruc> deptStrucs2 = new List<DeptStruc>();
  1128. foreach (var tempDept2 in rspDeptList2.Result)
  1129. {
  1130. DeptStruc deptStruc2 = new DeptStruc();
  1131. deptStruc2.deptId = tempDept2.DeptId;
  1132. deptStruc2.parentId = tempDept2.ParentId;
  1133. deptStruc2.name = tempDept2.Name;
  1134. //获取二级部门列表
  1135. OapiV2UserListRequest reqUserList2 = new OapiV2UserListRequest();
  1136. reqUserList2.DeptId = tempDept2.DeptId;
  1137. reqUserList2.Cursor = 0L;
  1138. reqUserList2.Size = 50L;
  1139. reqUserList2.ContainAccessLimit = false;
  1140. reqUserList2.OrderField = "custom";
  1141. reqUserList2.Language = "zh_CN";
  1142. reqUserList2.SetHttpMethod("GET");
  1143. OapiV2UserListResponse rspV2UserList2 = userListClient.Execute(reqUserList2, access_token);
  1144. if (rspV2UserList2.Result.List != null)
  1145. {
  1146. List<DDUserInfoAndTMD> dDAndTmdInfos2 = new List<DDUserInfoAndTMD>();
  1147. foreach (var itemUser in rspV2UserList2.Result.List)
  1148. {
  1149. DDUserInfoAndTMD dDAndTmdInfo2 = new DDUserInfoAndTMD();
  1150. dDAndTmdInfo2.unionid = itemUser.Unionid;
  1151. dDAndTmdInfo2.userid = itemUser.Userid;
  1152. dDAndTmdInfo2.title = itemUser.Title;
  1153. dDAndTmdInfo2.name = itemUser.Name;
  1154. dDAndTmdInfo2.mobile = itemUser.Mobile;
  1155. dDAndTmdInfo2.jobNumber = itemUser.JobNumber;
  1156. dDAndTmdInfo2.avatar = itemUser.Avatar;
  1157. dDAndTmdInfo2.depts = itemUser.DeptIdList;
  1158. List<string> roles = new List<string>();//角色列表
  1159. List<string> power = new List<string>();//权限列表
  1160. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser.Userid}'";
  1161. try
  1162. {
  1163. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  1164. {
  1165. dDAndTmdInfo2.tmdId = item.id;
  1166. dDAndTmdInfo2.isexist = true;
  1167. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  1168. {
  1169. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  1170. if (schoolRoles.Status == 200)
  1171. {
  1172. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  1173. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  1174. {
  1175. foreach (var obj in _roles.EnumerateArray())
  1176. {
  1177. //初始定义顾问的assistant 更改为assist
  1178. if (obj.GetString().Equals($"assist"))
  1179. {
  1180. roles.Add(obj.GetString());
  1181. }
  1182. }
  1183. }
  1184. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  1185. {
  1186. foreach (var obj in _permissions.EnumerateArray())
  1187. {
  1188. //显示BI权限
  1189. foreach (var aut in authorityBIList)
  1190. {
  1191. if (aut.RowKey.Equals(obj.GetString()))
  1192. {
  1193. power.Add(obj.GetString());
  1194. }
  1195. }
  1196. }
  1197. }
  1198. }
  1199. dDAndTmdInfo2.tmdroles = roles;
  1200. dDAndTmdInfo2.tmdpower = power;
  1201. }
  1202. }
  1203. }
  1204. catch { }
  1205. dDAndTmdInfos2.Add(dDAndTmdInfo2);
  1206. deptStruc2.tmddd = dDAndTmdInfos2;
  1207. }
  1208. }
  1209. //获取三级部门列表
  1210. OapiV2DepartmentListsubRequest reqDeptList3 = new OapiV2DepartmentListsubRequest() { DeptId = tempDept2.DeptId, Language = "zh_CN" };
  1211. OapiV2DepartmentListsubResponse rspDeptList3 = v2DeptListClient1.Execute(reqDeptList2, access_token);
  1212. if (rspDeptList3.Result != null)
  1213. {
  1214. List<DeptStruc> deptStrucs3 = new List<DeptStruc>();
  1215. foreach (var tempDept3 in rspDeptList2.Result)
  1216. {
  1217. DeptStruc deptStruc3 = new DeptStruc();
  1218. deptStruc3.deptId = tempDept3.DeptId;
  1219. deptStruc3.parentId = tempDept3.ParentId;
  1220. deptStruc3.name = tempDept3.Name;
  1221. //获取三级部门列表
  1222. OapiV2UserListRequest reqUserList3 = new OapiV2UserListRequest();
  1223. reqUserList3.DeptId = tempDept3.DeptId;
  1224. reqUserList3.Cursor = 0L;
  1225. reqUserList3.Size = 50L;
  1226. reqUserList3.ContainAccessLimit = false;
  1227. reqUserList3.OrderField = "custom";
  1228. reqUserList3.Language = "zh_CN";
  1229. reqUserList3.SetHttpMethod("GET");
  1230. OapiV2UserListResponse rspV2UserList3 = userListClient.Execute(reqUserList2, access_token);
  1231. if (rspV2UserList3.Result.List != null)
  1232. {
  1233. List<DDUserInfoAndTMD> dDAndTmdInfos3 = new List<DDUserInfoAndTMD>();
  1234. foreach (var itemUser in rspV2UserList3.Result.List)
  1235. {
  1236. DDUserInfoAndTMD dDAndTmdInfo3 = new DDUserInfoAndTMD();
  1237. dDAndTmdInfo3.unionid = itemUser.Unionid;
  1238. dDAndTmdInfo3.userid = itemUser.Userid;
  1239. dDAndTmdInfo3.title = itemUser.Title;
  1240. dDAndTmdInfo3.name = itemUser.Name;
  1241. dDAndTmdInfo3.mobile = itemUser.Mobile;
  1242. dDAndTmdInfo3.jobNumber = itemUser.JobNumber;
  1243. dDAndTmdInfo3.avatar = itemUser.Avatar;
  1244. dDAndTmdInfo3.depts = itemUser.DeptIdList;
  1245. List<string> roles = new List<string>();//角色列表
  1246. List<string> power = new List<string>();//权限列表
  1247. string sqltxt = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid ='{itemUser.Userid}'";
  1248. try
  1249. {
  1250. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
  1251. {
  1252. dDAndTmdInfo3.tmdId = item.id;
  1253. dDAndTmdInfo3.isexist = true;
  1254. if (!string.IsNullOrEmpty($"{item.defaultSchool}"))
  1255. {
  1256. var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(item.id, new PartitionKey($"Teacher-{item.defaultSchool}"));
  1257. if (schoolRoles.Status == 200)
  1258. {
  1259. using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
  1260. if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
  1261. {
  1262. foreach (var obj in _roles.EnumerateArray())
  1263. {
  1264. //初始定义顾问的assistant 更改为assist
  1265. if (obj.GetString().Equals($"assist"))
  1266. {
  1267. roles.Add(obj.GetString());
  1268. }
  1269. }
  1270. }
  1271. if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
  1272. {
  1273. foreach (var obj in _permissions.EnumerateArray())
  1274. {
  1275. //显示BI权限
  1276. foreach (var aut in authorityBIList)
  1277. {
  1278. if (aut.RowKey.Equals(obj.GetString()))
  1279. {
  1280. power.Add(obj.GetString());
  1281. }
  1282. }
  1283. }
  1284. }
  1285. }
  1286. dDAndTmdInfo3.tmdroles = roles;
  1287. dDAndTmdInfo3.tmdpower = power;
  1288. }
  1289. }
  1290. }
  1291. catch { }
  1292. dDAndTmdInfos3.Add(dDAndTmdInfo3);
  1293. deptStruc3.tmddd = dDAndTmdInfos3;
  1294. }
  1295. }
  1296. deptStrucs3.Add(deptStruc2);
  1297. deptStruc.depts = deptStrucs3;
  1298. }
  1299. }
  1300. deptStrucs2.Add(deptStruc2);
  1301. deptStruc.depts = deptStrucs2;
  1302. }
  1303. }
  1304. deptStrucs.Add(deptStruc);
  1305. var deptlist2 = rspDeptList2.Result;
  1306. }
  1307. }
  1308. return Ok(new { deptStrucs });
  1309. }
  1310. catch (Exception ex)
  1311. {
  1312. await _dingDing.SendBotMsg($"BI,{_option.Location} dd/get-dduserinfo \n {ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
  1313. return BadRequest();
  1314. }
  1315. }
  1316. /// <summary>
  1317. ///
  1318. /// </summary>
  1319. public record DeptStruc
  1320. {
  1321. /// <summary>
  1322. /// 部门ID
  1323. /// </summary>
  1324. public long deptId { get; set; }
  1325. /// <summary>
  1326. /// 父级部门
  1327. /// </summary>
  1328. public long parentId { get; set; }
  1329. /// <summary>
  1330. /// 部门名称
  1331. /// </summary>
  1332. public string name { get; set; }
  1333. public List<DeptStruc> depts { get; set; }
  1334. public List<DDUserInfoAndTMD> tmddd { get; set; }
  1335. }
  1336. /// <summary>
  1337. /// 返回钉钉和能查询到醍摩豆信息
  1338. /// </summary>
  1339. public class DDUserInfoAndTMD
  1340. {
  1341. /// <summary>
  1342. /// 是否存在醍摩豆账户
  1343. /// </summary>
  1344. public bool isexist { get; set; }
  1345. /// <summary>
  1346. /// 绑定的醍摩豆账户
  1347. /// </summary>
  1348. public string tmdId { get; set; }
  1349. /// <summary>
  1350. /// 醍摩豆角色
  1351. /// </summary>
  1352. public List<string> tmdroles { get; set; }
  1353. /// <summary>
  1354. /// 醍摩豆角色权限
  1355. /// </summary>
  1356. public List<string> tmdpower { get; set; }
  1357. /// <summary>
  1358. /// 员工在当前开发者企业账号范围内的唯一标识
  1359. /// </summary>
  1360. public string unionid { get; set; }
  1361. /// <summary>
  1362. /// 用户ID
  1363. /// </summary>
  1364. public string userid { get; set; }
  1365. /// <summary>
  1366. /// 员工名称
  1367. /// </summary>
  1368. public string name { get; set; }
  1369. /// <summary>
  1370. /// 职位
  1371. /// </summary>
  1372. public string title { get; set; }
  1373. /// <summary>
  1374. /// 手机号
  1375. /// </summary>
  1376. public string mobile { get; set; }
  1377. /// <summary>
  1378. /// 员工工号
  1379. /// </summary>
  1380. public string jobNumber { get; set; }
  1381. /// <summary>
  1382. /// 所属部门
  1383. /// </summary>
  1384. public long deptId { get; set; }
  1385. /// <summary>
  1386. /// 部门名称
  1387. /// </summary>
  1388. public string deptName { get; set; }
  1389. /// <summary>
  1390. /// 所属部门id列表
  1391. /// </summary>
  1392. public List<long> depts { get; set; }
  1393. /// <summary>
  1394. /// 钉钉头像
  1395. /// </summary>
  1396. public string avatar { get; set; }
  1397. }
  1398. /// <summary>
  1399. /// 部门信息
  1400. /// </summary>
  1401. public record DeptInfo
  1402. {
  1403. /// <summary>
  1404. /// 部门ID
  1405. /// </summary>
  1406. public long deptId { get; set; }
  1407. /// <summary>
  1408. /// 部门名称
  1409. /// </summary>
  1410. public string deptName { get; set; }
  1411. /// <summary>
  1412. /// 父部门id,根部门为1
  1413. /// </summary>
  1414. public long parentId { get; set; }
  1415. /// <summary>
  1416. /// 部门集合
  1417. /// </summary>
  1418. public List<DeptBaseResponseDomain> deptList { get; set; }
  1419. /// <summary>
  1420. /// 钉钉用户列表
  1421. /// </summary>
  1422. public List<string> ddUserList { get; set; }
  1423. }
  1424. public record DeptBaseResponseDomain
  1425. {
  1426. /// <summary>
  1427. /// 部门ID
  1428. /// </summary>
  1429. public long deptId { get; set; }
  1430. /// <summary>
  1431. /// 部门名称
  1432. /// </summary>
  1433. public string Name { get; set; }
  1434. /// <summary>
  1435. /// 父部门ID
  1436. /// </summary>
  1437. public long ParentId { get; set; }
  1438. /// <summary>
  1439. /// 下级列表
  1440. /// </summary>
  1441. public List<DeptBaseResponseDomain> LowerDeip_List { get; set; }
  1442. /// <summary>
  1443. /// 钉钉用户列表
  1444. /// </summary>
  1445. public List<string> ddUserList { get; set; }
  1446. }
  1447. }
  1448. }