You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

624 lines
29 KiB

  1. namespace CounsellorBL.BLStructure.GROUP
  2. {
  3. using CounsellorBL.Common;
  4. using CounsellorBL.GROUP.Helper;
  5. using CounsellorBL.Helper;
  6. using MonumentDefine;
  7. using Newtonsoft.Json;
  8. using Newtonsoft.Json.Linq;
  9. using OT.COM.ArsenalDB;
  10. using OT.COM.LogisticsUtil;
  11. using OT.COM.SignalerMessage;
  12. using SoldierData.EnterprizeV4;
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Linq;
  16. using System.Text;
  17. using static CounsellorBL.GROUP.Helper.FbHelper;
  18. public class GroupManageService : SingleDataTableTemplate<tb_grp_group>
  19. {
  20. private class GroupViewModel
  21. {
  22. public string uid { get; set; }
  23. public string name { get; set; }
  24. public string fb_group_id { get; set; }
  25. public string description { get; set; }
  26. public int seq { get; set; }
  27. public string user_token { get; set; }
  28. public int status_flag { get; set; }
  29. public string announcement { get; set; }
  30. }
  31. public GroupManageService()
  32. {
  33. dgReadCommandPostDataHandler = readCommandPostDataHandler;
  34. dgCreateCommandGenerator = createCommandGenerator;
  35. dgDeleteCommandGenerator = deleteCommandGenerator;
  36. dgUpdateCommandGenerator = updateCommandGenerator;
  37. }
  38. [Auth(false)]
  39. public new CResponseMessage Read(CRequestMessage i_crmInput) => base.Read(i_crmInput);
  40. protected string readCommandPostDataHandler(CRequestMessage i_crmInput, ArsenalInterface i_aiArsenal, Command i_cCmd, JArray i_jaData, tb_sys_session i_sSessionUser, out object o_oReault,
  41. [System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
  42. [System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
  43. [System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
  44. {
  45. string sMsg;
  46. Command cRes = null;
  47. object oResultData = null;
  48. try
  49. {
  50. do
  51. {
  52. // 取得condition
  53. Dictionary<string, string> dicCondition = GetQueryMasterFirstQJEDicwherecols(i_crmInput);
  54. // 登入者所屬社團
  55. var lsBranch = ProjectHelper.GetUserGroup(i_crmInput);
  56. /**開始組指令**/
  57. QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
  58. QueryJsonElement qjeGroup = lBlocks.GetInst();
  59. qjeGroup.table = tb_grp_group.TABLENAME;
  60. qjeGroup.displaycols = new List<string>()
  61. {
  62. tb_grp_group.CN_UID,
  63. tb_grp_group.CN_NAME,
  64. tb_grp_group.CN_FB_GROUP_ID,
  65. tb_grp_group.CN_DESCRIPTION,
  66. tb_grp_group.CN_SEQ,
  67. tb_grp_group.CN_STATUS_FLAG,
  68. tb_grp_group.CN_POST_USER_UID,
  69. tb_grp_group.CN_ANNOUNCEMENT,
  70. tb_grp_group.CN_CLIENT_SECRET,
  71. tb_grp_group.CN_PAGE_ID,
  72. tb_grp_group.CN_APP_ID,
  73. tb_grp_group.CN_PAGES_TOKEN
  74. };
  75. List<WhereNode> wnQuery = new List<WhereNode>();
  76. if (lsBranch.Any())
  77. {
  78. wnQuery.Add(new WhereNode(tb_grp_group.CN_UID, WhereNode.EColumnOperation.EOT_IN, typeof(tb_grp_group), lsBranch.ToArray()));
  79. }
  80. if (wnQuery.Any())
  81. {
  82. qjeGroup.wherecols = new WhereNode(WhereNode.ENodeOperation.ENO_AND, wnQuery.ToArray());
  83. }
  84. if (dicCondition != null && dicCondition.Any())
  85. {
  86. qjeGroup.dicwherecols = dicCondition;
  87. }
  88. lBlocks.Add(qjeGroup);
  89. sMsg = MakeSelectJoinByBlocks(lBlocks, out cRes);
  90. ArsenalInterface ai = ArsenalDBMgr.GetInst(cRes);
  91. List<tb_grp_group> qds = ai.RunQueryList<tb_grp_group>(cRes);
  92. sMsg = MakeSelectJoinByBlocks(lBlocks, out Command cRead);
  93. if (sMsg != null)
  94. {
  95. break;
  96. }
  97. oResultData = qds.OrderBy(x => x.seq);
  98. }
  99. while (false);
  100. }
  101. catch (Exception ex)
  102. {
  103. LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_nCodeLine, i_sMemberName, i_sSourcePath);
  104. sMsg = $"{nameof(readCommandPostDataHandler)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. Call from {i_sMemberName} {i_sSourcePath}({i_nCodeLine}).";
  105. #if DEBUG
  106. System.Diagnostics.Debug.WriteLine(sMsg);
  107. #endif
  108. }
  109. o_oReault = oResultData;
  110. return sMsg;
  111. }
  112. protected string updateCommandGenerator(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lcResult, List<string> i_saQryContainKeys,
  113. [System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
  114. [System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
  115. [System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
  116. {
  117. string sMsg = null;
  118. List<Command> lCmds = new List<Command>();
  119. string uid = null;
  120. try
  121. {
  122. do
  123. {
  124. List<string> data = new List<string>();
  125. foreach (JToken jtk in i_jaData)
  126. {
  127. Dictionary<string, object> dicData = jtk.ToObject<Dictionary<string, object>>();
  128. Dictionary<string, object> dicData2 = jtk[BLWording.DATA].ToObject<Dictionary<string, object>>();
  129. //取得user_uid
  130. if (dicData.ContainsKey(BLWording.WHEREDATA))
  131. {
  132. JObject wheredata = dicData[BLWording.WHEREDATA] as JObject;
  133. Dictionary<string, object> wheredataDic = wheredata.ToObject<Dictionary<string, object>>();
  134. if (wheredataDic.ContainsKey(BLWording.UID))
  135. {
  136. uid = wheredataDic[BLWording.UID].ToString();
  137. }
  138. }
  139. var joData = dicData[BLWording.DATA] as JObject;
  140. if (joData != null)
  141. {
  142. if (joData.ContainsKey(tb_grp_group.CN_POST_USER_UID))
  143. {
  144. joData[tb_grp_group.CN_POST_USER_UID] = joData[tb_grp_group.CN_POST_USER_UID].ToString().Contains("new_add") ? Guid.NewGuid().ToString() : joData[tb_grp_group.CN_POST_USER_UID].ToString();
  145. }
  146. }
  147. tb_grp_group u = new tb_grp_group();
  148. sMsg = valueAssignment(i_crmInput, u, joData, out List<Command> lcAddInsert, i_bIsCreate: false);
  149. if (sMsg != null)
  150. {
  151. break;
  152. }
  153. Command c = Command.SetupUpdateCmd(u, new WhereNode(tb_grp_group.CN_UID, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_grp_group), uid));
  154. lCmds.Add(c);
  155. bool hasUser = false;
  156. if (dicData2.ContainsKey("tb_grp_group2user"))
  157. {
  158. var user = dicData2["tb_grp_group2user"] as JArray;
  159. if (user.Any())
  160. {
  161. hasUser = true;
  162. var updData = new List<string>();
  163. foreach (var item in user)
  164. {
  165. Dictionary<string, object> dicUserData = new Dictionary<string, object>();
  166. if (item.Any())
  167. {
  168. dicUserData = item.ToObject<Dictionary<string, object>>();
  169. }
  170. dicUserData.Remove(tb_grp_group2user.CN_UID);
  171. if (Guid.TryParse(item[tb_grp_group2user.CN_UID].ToString(), out var id))
  172. {
  173. updData.Add(id.ToString());
  174. // 修改
  175. tb_grp_group2user cUpdUser = new tb_grp_group2user();
  176. tb_grp_group2user cUpdCon = new tb_grp_group2user() { uid = id.ToString() };
  177. cUpdUser.FillData(dicUserData);
  178. lCmds.Add(Command.SetupUpdateCmd(cUpdUser, cUpdCon));
  179. }
  180. else
  181. {
  182. // 新增
  183. tb_grp_group2user cNewUser = new tb_grp_group2user();
  184. cNewUser.FillData(dicUserData);
  185. cNewUser.uid = Guid.NewGuid().ToString();
  186. cNewUser.create_date = DateTime.Now;// Set dirty column value
  187. cNewUser.group_uid = uid;
  188. lCmds.Add(Command.SetupInsertCmd(cNewUser));
  189. }
  190. }
  191. tb_grp_group2user cRecord = new tb_grp_group2user();
  192. cRecord.SetFullDirty();
  193. tb_grp_group2user cCon = new tb_grp_group2user() { group_uid = uid };
  194. Command cSelect = Command.SetupSelectCmd(cRecord, cCon);
  195. ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelect);
  196. List<tb_grp_group2user> qds = ai.RunQueryList<tb_grp_group2user>(cSelect);
  197. var delData = qds.Select(x => x.uid.ToString()).ToList().Except(updData);
  198. foreach (var del in delData)
  199. {
  200. tb_grp_group2user cCond = new tb_grp_group2user() { uid = del };
  201. lCmds.Add(Command.SetupDeleteCmd(cCond));
  202. }
  203. }
  204. }
  205. if (!hasUser)
  206. {
  207. sMsg = "至少一位發文者!";
  208. break;
  209. }
  210. }
  211. }
  212. while (false);
  213. }
  214. catch (Exception ex)
  215. {
  216. LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_nCodeLine, i_sMemberName, i_sSourcePath);
  217. sMsg = $"{nameof(updateCommandGenerator)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. Call from {i_sMemberName} {i_sSourcePath}({i_nCodeLine}).";
  218. #if DEBUG
  219. System.Diagnostics.Debug.WriteLine(sMsg);
  220. #endif
  221. }
  222. o_lcResult = lCmds;
  223. return sMsg;
  224. }
  225. protected string createCommandGenerator(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lResult, List<string> i_saQryContainKeys,
  226. [System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
  227. [System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
  228. [System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
  229. {
  230. string sMsg = null;
  231. List<Command> lCmds = new List<Command>();
  232. try
  233. {
  234. do
  235. {
  236. foreach (JToken joData in i_jaData)
  237. {
  238. Dictionary<string, object> dicData = joData.ToObject<Dictionary<string, object>>();
  239. JObject jdata = dicData[BLWording.DATA] as JObject;
  240. Dictionary<string, object> dicInput = jdata.ToObject<Dictionary<string, object>>();
  241. //取得新增的帳號uid
  242. string uid = Guid.NewGuid().ToString();
  243. tb_grp_group cInsert = new tb_grp_group()
  244. {
  245. uid = uid,
  246. fb_group_id = (dicInput[tb_grp_group.CN_FB_GROUP_ID] ?? "").ToString(),
  247. name = dicInput[tb_grp_group.CN_NAME].ToString(),
  248. app_id = dicInput[tb_grp_group.CN_APP_ID].ToString(),
  249. page_id = dicInput[tb_grp_group.CN_PAGE_ID].ToString(),
  250. pages_token = dicInput[tb_grp_group.CN_PAGES_TOKEN].ToString(),
  251. client_secret = dicInput[tb_grp_group.CN_CLIENT_SECRET].ToString(),
  252. seq = Convert.ToInt32(dicInput[tb_grp_group.CN_SEQ] ?? 0),
  253. status_flag = Convert.ToInt32(dicInput[tb_grp_group.CN_STATUS_FLAG] ?? 0)
  254. };
  255. if (dicInput.ContainsKey(tb_grp_group.CN_DESCRIPTION) && !string.IsNullOrEmpty(dicInput[tb_grp_group.CN_DESCRIPTION]?.ToString()))
  256. {
  257. cInsert.description = dicInput[tb_grp_group.CN_DESCRIPTION].ToString();
  258. }
  259. if (dicInput.ContainsKey(tb_grp_group.CN_POST_USER_UID) && !string.IsNullOrEmpty(dicInput[tb_grp_group.CN_POST_USER_UID]?.ToString()))
  260. {
  261. cInsert.post_user_uid = dicInput[tb_grp_group.CN_POST_USER_UID].ToString().Contains("new_add") ? Guid.NewGuid().ToString() : dicInput[tb_grp_group.CN_POST_USER_UID].ToString();
  262. }
  263. Command c = Command.SetupInsertCmd(cInsert);
  264. lCmds.Add(c);
  265. bool hasUser = false;
  266. if (dicInput.ContainsKey("tb_grp_group2user"))
  267. {
  268. var user = dicInput["tb_grp_group2user"] as JArray;
  269. if (user.Any())
  270. {
  271. hasUser = true;
  272. // 新增user
  273. foreach (var item in user)
  274. {
  275. tb_grp_group2user cNewUser = new tb_grp_group2user()
  276. {
  277. uid = cInsert.post_user_uid,
  278. group_uid = uid,
  279. fb_account = item[tb_grp_group2user.CN_FB_ACCOUNT].ToString(),
  280. fb_password = item[tb_grp_group2user.CN_FB_PASSWORD].ToString(),
  281. user_token = item[tb_grp_group2user.CN_USER_TOKEN].ToString(),
  282. status_flag = (int)item[tb_grp_group2user.CN_STATUS_FLAG],
  283. };
  284. lCmds.Add(Command.SetupInsertCmd(cNewUser));
  285. }
  286. }
  287. }
  288. if (!hasUser)
  289. {
  290. sMsg = "至少一位發文者!";
  291. break;
  292. }
  293. // 新增現場銷貨會員資料
  294. tb_meb_member cNewDefaultUser = new tb_meb_member()
  295. {
  296. uid = Guid.NewGuid().ToString(),
  297. group_id = cInsert.fb_group_id,
  298. group_user_id = "0000000000000000",
  299. name = "現貨銷售",
  300. };
  301. lCmds.Add(Command.SetupInsertCmd(cNewDefaultUser));
  302. }
  303. }
  304. while (false);
  305. }
  306. catch (Exception ex)
  307. {
  308. LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_nCodeLine, i_sMemberName, i_sSourcePath);
  309. sMsg = $"{nameof(createCommandGenerator)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. Call from {i_sMemberName} {i_sSourcePath}({i_nCodeLine}).";
  310. #if DEBUG
  311. System.Diagnostics.Debug.WriteLine(sMsg);
  312. #endif
  313. }
  314. o_lResult = lCmds;
  315. return sMsg;
  316. }
  317. protected string deleteCommandGenerator(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lResult, List<string> i_saQryContainKeys,
  318. [System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
  319. [System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
  320. [System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
  321. {
  322. string sMsg = null;
  323. List<Command> lCmds = new List<Command>();
  324. try
  325. {
  326. do
  327. {
  328. foreach (JToken joData in i_jaData)
  329. {
  330. Dictionary<string, object> dicData = joData.ToObject<Dictionary<string, object>>();
  331. Dictionary<string, object> wheredataDic;
  332. string uid = null;
  333. if (dicData.ContainsKey(BLWording.WHEREDATA) && dicData[BLWording.WHEREDATA] is JObject wheredata)
  334. {
  335. wheredataDic = wheredata.ToObject<Dictionary<string, object>>();
  336. if (wheredataDic.ContainsKey(BLWording.UID))
  337. {
  338. uid = wheredataDic[BLWording.UID].ToString();
  339. }
  340. }
  341. tb_grp_branch ur = new tb_grp_branch()
  342. {
  343. group_uid = uid
  344. };
  345. lCmds.Add(Command.SetupDeleteCmd(ur));
  346. tb_grp_group2user dUser = new tb_grp_group2user()
  347. {
  348. group_uid = uid
  349. };
  350. lCmds.Add(Command.SetupDeleteCmd(dUser));
  351. tb_grp_group r = new tb_grp_group()
  352. {
  353. uid = uid
  354. };
  355. lCmds.Add(Command.SetupDeleteCmd(r));
  356. }
  357. }
  358. while (false);
  359. }
  360. catch (Exception ex)
  361. {
  362. LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_nCodeLine, i_sMemberName, i_sSourcePath);
  363. sMsg = $"{nameof(deleteCommandGenerator)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. Call from {i_sMemberName} {i_sSourcePath}({i_nCodeLine}).";
  364. #if DEBUG
  365. System.Diagnostics.Debug.WriteLine(sMsg);
  366. #endif
  367. }
  368. o_lResult = lCmds;
  369. return sMsg;
  370. }
  371. public CResponseMessage GetAnnouncemnet(CRequestMessage i_crmInput)
  372. {
  373. string sMsg;
  374. CResponseMessage crmRes = null;
  375. try
  376. {
  377. do
  378. {
  379. List<string> lsEmpColumns = EntityBase.GetAllColumnName(typeof(tb_grp_group));
  380. // 取得condition
  381. Dictionary<string, string> dicCondition = GetQueryMasterFirstQJEDicwherecols(i_crmInput);
  382. QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
  383. QueryJsonElement qjeGroup = lBlocks.GetInst();
  384. qjeGroup.table = tb_grp_group.TABLENAME;
  385. qjeGroup.displaycols = lsEmpColumns;
  386. if (dicCondition.Any())
  387. {
  388. qjeGroup.dicwherecols = dicCondition;
  389. }
  390. lBlocks.Add(qjeGroup);
  391. sMsg = MakeSelectJoinByBlocks(lBlocks, out Command cRead);
  392. ArsenalInterface ai = ArsenalDBMgr.GetInst(cRead);
  393. var qds = ai.RunQueryList<GroupViewModel>(cRead);
  394. crmRes = new CSuccessResponseMessage(null, i_crmInput);
  395. crmRes.param.Add(BLWording.DATA, qds);
  396. }
  397. while (false);
  398. }
  399. catch (Exception ex)
  400. {
  401. LogHelper.DBLog(Util.GetLastExceptionMsg(ex));
  402. sMsg = $"{nameof(GetAnnouncemnet)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. ";
  403. #if DEBUG
  404. System.Diagnostics.Debug.WriteLine(sMsg);
  405. #endif
  406. }
  407. if (null != sMsg)
  408. {
  409. crmRes = new CErrorResponseMessage(sMsg, i_crmInput);
  410. }
  411. return crmRes;
  412. }
  413. [Auth(false)]
  414. public CResponseMessage RefreshUserAccessToken(CRequestMessage i_crmInput)
  415. {
  416. int prepare_token_counnt = 0, success_refresh_count = 0;
  417. StringBuilder fbErrorString = new StringBuilder();
  418. List<Command> commands = new List<Command>();
  419. try
  420. {
  421. var groupsAndUsers = GetEnableGroupsAndGroup2Users();
  422. List<tb_grp_group> groups = groupsAndUsers.groups;
  423. List<tb_grp_group2user> group2users = groupsAndUsers.group2users;
  424. var FbHelp = new FbHelper();
  425. foreach (var group in groups)
  426. {
  427. var AppId = group.app_id;
  428. var AppSecret = group.client_secret;
  429. foreach (var user in group2users.Where(x => x.group_uid == group.uid))
  430. {
  431. prepare_token_counnt++;
  432. var UserToken = user.user_token;
  433. FbHelp.GetUserAccessToken(ref UserToken, ref AppId, ref AppSecret,
  434. (response) =>
  435. {
  436. success_refresh_count++;
  437. var content = JsonConvert.DeserializeObject<FbGetTokenEntity>(response.Content.ReadAsStringAsync().Result);
  438. commands.Add(Command.SetupUpdateCmd(new tb_grp_group2user() { user_token = content.access_token }, new tb_grp_group2user() { uid = user.uid }));
  439. },
  440. (response, error_code) =>
  441. {
  442. fbErrorString.AppendLine(error_code);
  443. }
  444. );
  445. }
  446. }
  447. if (commands.Any())
  448. {
  449. ArsenalInterface ai = ArsenalDBMgr.GetInst(commands.FirstOrDefault(), GetDefaultSystemColumnInfo());
  450. ai.RunEditCmds(commands);
  451. }
  452. if (prepare_token_counnt != success_refresh_count || fbErrorString.Length > 0)
  453. {
  454. var err = $"Prepare and success token count not same, FB response: {fbErrorString.ToString()}";
  455. Logger.Error(err);
  456. return new CErrorResponseMessage(err, null);
  457. }
  458. }
  459. catch (Exception ex)
  460. {
  461. Logger.Error(ex.ToString());
  462. return new CErrorResponseMessage(ex.ToString(), null);
  463. }
  464. Logger.Info($"Prepare refresh access token count={prepare_token_counnt}, success refresh count= {success_refresh_count}");
  465. return new CSuccessResponseMessage($"{nameof(RefreshUserAccessToken)} success", i_crmInput);
  466. }
  467. private (List<tb_grp_group> groups, List<tb_grp_group2user> group2users) GetEnableGroupsAndGroup2Users()
  468. {
  469. string sMsg = "";
  470. List<tb_grp_group> groups = new List<tb_grp_group>();
  471. List<tb_grp_group2user> group2users = new List<tb_grp_group2user>();
  472. QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
  473. QueryJsonElement qje_groups = lBlocks.GetInst();
  474. qje_groups.table = tb_grp_group.TABLENAME;
  475. qje_groups.displaycols = EntityBase.GetAllColumnName(typeof(tb_grp_group));
  476. qje_groups.wherecols = new WhereNode(tb_grp_group.CN_STATUS_FLAG, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_grp_group), BLWording.STATUS_FLAG_ON);
  477. lBlocks.Add(qje_groups);
  478. sMsg = MakeSelectJoinByBlocks(lBlocks, out Command cRes);
  479. ArsenalInterface ai = ArsenalDBMgr.GetInst(cRes);
  480. groups = ai.RunQueryList<tb_grp_group>(cRes);
  481. lBlocks = new QueryJsonElementCollection();
  482. QueryJsonElement qje_group2user = lBlocks.GetInst();
  483. qje_group2user.table = tb_grp_group2user.TABLENAME;
  484. qje_group2user.displaycols = EntityBase.GetAllColumnName(typeof(tb_grp_group2user));
  485. qje_group2user.wherecols = new WhereNode(tb_grp_group2user.CN_STATUS_FLAG, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_grp_group2user), BLWording.STATUS_FLAG_ON);
  486. lBlocks.Add(qje_group2user);
  487. sMsg = MakeSelectJoinByBlocks(lBlocks, out cRes);
  488. ai = ArsenalDBMgr.GetInst(cRes);
  489. group2users = ai.RunQueryList<tb_grp_group2user>(cRes);
  490. return (groups, group2users);
  491. }
  492. /// <summary>
  493. /// 取得群組的隱私狀態, 只有屬於這群組的人或社團管理人可以查到群組狀態
  494. /// </summary>
  495. /// <param name="i_crmInput"></param>
  496. /// <returns></returns>
  497. [Auth(false)]
  498. public CResponseMessage GetGroupPrivacy(CRequestMessage i_crmInput)
  499. {
  500. string sMsg;
  501. CResponseMessage crmRes = null;
  502. try
  503. {
  504. do
  505. {
  506. Dictionary<string, string> dicCondition = GetQueryMasterFirstQJEDicwherecols(i_crmInput);
  507. string group_id = dicCondition[tb_grp_group.CN_FB_GROUP_ID];
  508. QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
  509. QueryJsonElement group2user = lBlocks.GetInst();
  510. group2user.table = tb_grp_group2user.TABLENAME;
  511. group2user.displaycols = new List<string> { tb_grp_group2user.CN_USER_TOKEN };
  512. group2user.wherecols = new WhereNode(tb_grp_group2user.CN_STATUS_FLAG, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_grp_group2user), BLWording.STATUS_FLAG_ON);
  513. lBlocks.Add(group2user);
  514. QueryJsonElement groups = lBlocks.GetInst();
  515. groups.table = tb_grp_group.TABLENAME;
  516. groups.displaycols = new List<string>();
  517. groups.jointype = QueryJsonElement.LEFT_JOIN;
  518. groups.jointable = group2user;
  519. groups.joincols = new Dictionary<string, string>() { { tb_grp_group.CN_UID, tb_grp_group2user.CN_GROUP_UID } };
  520. if (dicCondition.Any())
  521. {
  522. groups.dicwherecols = dicCondition;
  523. }
  524. lBlocks.Add(groups);
  525. sMsg = MakeSelectJoinByBlocks(lBlocks, out Command cRead);
  526. ArsenalInterface ai = ArsenalDBMgr.GetInst(cRead);
  527. GroupViewModel qds = ai.RunQuerySingleORM<GroupViewModel>(cRead);
  528. var FbHelp = new FbHelper();
  529. FbHelp.GetGroupPublicDescription(group_id, qds.user_token,
  530. (response)=>{
  531. var content = JsonConvert.DeserializeObject<FbGroupEntity>(response.Content.ReadAsStringAsync().Result);
  532. crmRes = new CSuccessResponseMessage(null, i_crmInput);
  533. crmRes.param.Add(BLWording.DATA, content);
  534. },
  535. (response, error_code) =>
  536. {
  537. throw new Exception(error_code);
  538. }
  539. );
  540. }
  541. while (false);
  542. }
  543. catch (Exception ex)
  544. {
  545. LogHelper.DBLog(Util.GetLastExceptionMsg(ex));
  546. sMsg = $"{nameof(GetAnnouncemnet)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. ";
  547. #if DEBUG
  548. System.Diagnostics.Debug.WriteLine(sMsg);
  549. #endif
  550. return new CErrorResponseMessage(sMsg, i_crmInput);
  551. }
  552. return crmRes;
  553. }
  554. }
  555. }