AISettingForm.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. using Microsoft.IdentityModel.Tokens;
  2. using Microsoft.Office.Tools.Ribbon;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.IdentityModel.Tokens.Jwt;
  9. using System.Linq;
  10. using System.Net.Http;
  11. using System.Text;
  12. using System.Text.Json;
  13. using System.Threading.Tasks;
  14. using System.Windows.Forms;
  15. using static HTEXMark.AI_Form;
  16. using static HTEXMark.QRCodeForm;
  17. namespace HTEXMark
  18. {
  19. public partial class AISettingForm : Form
  20. {
  21. public string domain;
  22. public MarkLanguage lang;
  23. private HttpClient httpClient;
  24. public List<IdCodeNameCount> periodSubjects = new List<IdCodeNameCount>();
  25. BindingList<CodeName> bindingList = new BindingList<CodeName>();
  26. private RibbonDropDown schoolDropDown;
  27. public AISettingForm(RibbonDropDown schoolDropDown,List<IdCodeNameCount> periodSubjects, MarkLanguage lang, MarkRibbon markRibbon, string domain)
  28. {
  29. this.lang= lang;
  30. this.periodSubjects = periodSubjects;
  31. this.domain = domain;
  32. this.schoolDropDown = schoolDropDown;
  33. httpClient= HttpClientFactory.Create();
  34. InitializeComponent();
  35. this.Load+=FormLoad;
  36. }
  37. public class CodeName {
  38. public string code { get; set; }
  39. public string name { get; set; }
  40. public int order { get; set; }
  41. }
  42. private async void FormLoad(object sender, EventArgs e) {
  43. var periodTypes = periodSubjects.Where(x => !string.IsNullOrWhiteSpace(x.periodType)).Select(z => z.periodType);
  44. List<CodeName> periods = new List<CodeName>();
  45. List<CodeName> subjects = new List<CodeName>();
  46. List<ItemType> items = new List<ItemType>() {
  47. new ItemType { name=lang.single,type= "single" },
  48. new ItemType { name=lang.multiple,type= "multiple" },
  49. new ItemType { name=lang.sortmultiple,type= "sortmultiple" },
  50. new ItemType { name=lang.judge,type= "judge" },
  51. new ItemType { name=lang.complete,type= "complete" },
  52. new ItemType { name=lang.subjective,type= "subjective" },
  53. new ItemType { name=lang.draw,type= "draw" },
  54. new ItemType { name=lang.connector,type= "connector" },
  55. new ItemType { name=lang.compose,type= "compose" },
  56. };
  57. comboBoxItemTypes.DataSource= items;
  58. comboBoxItemTypes.DisplayMember="name";
  59. comboBoxItemTypes.ValueMember="type";
  60. if (periodTypes!=null && periodTypes.Count()>0)
  61. {
  62. periods.Add(new CodeName { order= periodTypes.Contains("pre") ? 1 : 0, name= periodTypes.Contains("pre") ? lang.pre : lang.pre+lang.unmatched, code="pre" });
  63. periods.Add(new CodeName { order= periodTypes.Contains("primary") ? 1 : 0, name= periodTypes.Contains("primary") ? lang.primary : lang.primary+lang.unmatched, code="primary" });
  64. periods.Add(new CodeName { order= periodTypes.Contains("junior") ? 1 : 0, name= periodTypes.Contains("junior") ? lang.junior : lang.junior+lang.unmatched, code="junior" });
  65. periods.Add(new CodeName { order = periodTypes.Contains("senior") ? 1 : 0, name = periodTypes.Contains("senior") ? lang.senior : lang.senior+lang.unmatched, code="senior" });
  66. periods.Add(new CodeName { order = periodTypes.Contains("secondary") ? 1 : 0, name = periodTypes.Contains("secondary") ? lang.secondary : lang.secondary+lang.unmatched, code="secondary" });
  67. periods.Add(new CodeName { order = periodTypes.Contains("college") ? 1 : 0, name = periodTypes.Contains("college") ? lang.college : lang.college+lang.unmatched, code="college" });
  68. periods.Add(new CodeName { order = periodTypes.Contains("university") ? 1 : 0, name = periodTypes.Contains("university") ? lang.university : lang.university+lang.unmatched, code="university" });
  69. periods.Add(new CodeName { order = periodTypes.Contains("special") ? 1 : 0, name = periodTypes.Contains("special") ? lang.special : lang.special+lang.unmatched, code="special" });
  70. periods.Add(new CodeName { order= periodTypes.Contains("edu_bureau") ? 1 : 0, name= periodTypes.Contains("edu_bureau") ? lang.edu_bureau : lang.edu_bureau+lang.unmatched, code="edu_bureau" });
  71. periods.Add(new CodeName { order= periodTypes.Contains("elecedu_dept") ? 1 : 0, name= periodTypes.Contains("elecedu_dept") ? lang.elecedu_dept : lang.elecedu_dept+lang.unmatched, code="elecedu_dept" });
  72. periods.Add(new CodeName { order= periodTypes.Contains("adult_secondary") ? 1 : 0, name= periodTypes.Contains("adult_secondary") ? lang.adult_secondary : lang.adult_secondary+lang.unmatched, code="adult_secondary" });
  73. periods.Add(new CodeName { order= periodTypes.Contains("adult_higher") ? 1 : 0, name= periodTypes.Contains("adult_higher") ? lang.adult_higher : lang.adult_higher+lang.unmatched, code="adult_higher" });
  74. periods.Add(new CodeName { order= periodTypes.Contains("master") ? 1 : 0, name= periodTypes.Contains("master") ? lang.master : lang.master+lang.unmatched, code="master" });
  75. periods.Add(new CodeName { order = periodTypes.Contains("doctor") ? 1 : 0, name = periodTypes.Contains("doctor") ? lang.doctor : lang.doctor+lang.unmatched, code="doctor" });
  76. periods.Add(new CodeName { order = periodTypes.Contains("enterprise") ? 1 : 0, name = periodTypes.Contains("enterprise") ? lang.enterprise : lang.enterprise+lang.unmatched, code="enterprise" });
  77. periods= periods.OrderByDescending(x => x.order).ToList();
  78. }
  79. else {
  80. periods.Add(new CodeName { name= lang.pre+lang.unmatched, code="pre"});
  81. periods.Add(new CodeName { name= lang.primary+lang.unmatched, code="primary" });
  82. periods.Add(new CodeName { name= lang.junior+lang.unmatched, code="junior" });
  83. periods.Add(new CodeName { name= lang.senior + lang.unmatched, code="senior" });
  84. periods.Add(new CodeName { name= lang.secondary + lang.unmatched, code="secondary" });
  85. periods.Add(new CodeName { name= lang.college + lang.unmatched, code="college" });
  86. periods.Add(new CodeName { name= lang.university +lang.unmatched, code="university" });
  87. periods.Add(new CodeName { name= lang.special+lang.unmatched, code="special" });
  88. periods.Add(new CodeName { name= lang.edu_bureau+lang.unmatched, code="edu_bureau" });
  89. periods.Add(new CodeName { name= lang.elecedu_dept+lang.unmatched, code="elecedu_dept" });
  90. periods.Add(new CodeName { name= lang.adult_secondary + lang.unmatched, code="adult_secondary" });
  91. periods.Add(new CodeName { name= lang.adult_higher + lang.unmatched, code="adult_higher" });
  92. periods.Add(new CodeName { name= lang.master+lang.unmatched, code="master" });
  93. periods.Add(new CodeName { name= lang.doctor + lang.unmatched, code="doctor" });
  94. periods.Add(new CodeName { name= lang.enterprise+lang.unmatched, code="enterprise" });
  95. }
  96. var period = periods.First();
  97. if (period.order==1){
  98. var subject= periodSubjects.FindAll(x => x.periodType.Equals(period.code));
  99. if (subject!=null) {
  100. subject.ForEach(x => {
  101. subjects.Add(new CodeName { name=x.subjectName, code=x.subjectId });
  102. });
  103. bindingList = new BindingList<CodeName>(subjects);
  104. comboBoxSubject.DataSource=bindingList;
  105. comboBoxSubject.DisplayMember="name";
  106. comboBoxSubject.ValueMember="code";
  107. }
  108. }
  109. comboBoxPeriod.DataSource=periods;
  110. comboBoxPeriod.DisplayMember="name";
  111. comboBoxPeriod.ValueMember="code";
  112. comboBoxPeriod.SelectedIndexChanged+=PeriodSelectedIndexChanged;
  113. string schoolId = schoolDropDown.SelectedItem.Tag.ToString() ;
  114. string aidomian = "https://appraisal-test.teammodel.cn";
  115. var tokenData = await HttpClientHelper. CheckToken(UserSettings.Default.access_token, domain, UserSettings.Default.x_auth_token, httpClient);
  116. if (tokenData.ok) {
  117. httpClient= tokenData.httpClient;
  118. ///school admin
  119. ///
  120. List<AiApp> apps =new List<AiApp>();
  121. var jwt = new JwtSecurityToken(UserSettings.Default.x_auth_token);
  122. jwt.Payload.TryGetValue("roles", out object _roles);
  123. List<string> roles = JsonSerializer.Deserialize<List<string>>($"{_roles}");
  124. if (roles.Contains("admin") &&!string.IsNullOrWhiteSpace(jwt.Payload.Azp))
  125. {
  126. try {
  127. var response = await httpClient.PostAsJsonAsync($"{aidomian}/ai/app/list", new { scope = "school", });
  128. if (response.IsSuccessStatusCode)
  129. {
  130. string content = await response.Content.ReadAsStringAsync();
  131. var json = JsonSerializer.Deserialize<JsonElement>(content);
  132. json.TryGetProperty("data", out JsonElement _json);
  133. var aiApps = JsonSerializer.Deserialize<List<AiApp>>(_json);
  134. if (!aiApps.IsNullOrEmpty()) {
  135. apps.AddRange(aiApps);
  136. }
  137. }
  138. } catch (Exception ex) { }
  139. }
  140. if (jwt.Payload.Sub.Contains("1595321354"))
  141. {
  142. try {
  143. var response = await httpClient.PostAsJsonAsync($"{aidomian}/ai/app/list", new { scope = "public", });
  144. if (response.IsSuccessStatusCode)
  145. {
  146. string content = await response.Content.ReadAsStringAsync();
  147. var json = JsonSerializer.Deserialize<JsonElement>(content);
  148. json.TryGetProperty("data", out JsonElement _json);
  149. var aiApps = JsonSerializer.Deserialize<List<AiApp>>(_json);
  150. if (!aiApps.IsNullOrEmpty())
  151. {
  152. apps.AddRange(aiApps);
  153. }
  154. }
  155. } catch (Exception ex ) { }
  156. }
  157. {
  158. try
  159. {
  160. var response = await httpClient.PostAsJsonAsync($"{aidomian}/ai/app/list", new { scope = "private", });
  161. if (response.IsSuccessStatusCode)
  162. {
  163. string content = await response.Content.ReadAsStringAsync();
  164. var json = JsonSerializer.Deserialize<JsonElement>(content);
  165. json.TryGetProperty("data", out JsonElement _json);
  166. var aiApps = JsonSerializer.Deserialize<List<AiApp>>(_json);
  167. if (!aiApps.IsNullOrEmpty())
  168. {
  169. apps.AddRange(aiApps);
  170. }
  171. }
  172. }
  173. catch (Exception ex) { }
  174. }
  175. listBox_itemList.DataSource = apps;
  176. listBox_itemList.DisplayMember="name";
  177. listBox_itemList.ValueMember="id";
  178. }
  179. }
  180. public class AiApp
  181. {
  182. public string id { get; set; }
  183. public string code { get; set; }
  184. public string schoolId { get; set; }
  185. public string icon { get; set; }
  186. public string name { get; set; }
  187. public string bizType { get; set; }
  188. public string scope { get; set; }
  189. public string lang { get; set; }
  190. public string itemType { get; set; }
  191. public string period { get; set; }
  192. public string subject { get; set; }
  193. public string description { get; set; }
  194. public string prompt { get; set; }
  195. public string creator { get; set; }
  196. public string creatorId { get; set; }
  197. public long createTime { get; set; }
  198. }
  199. private void PeriodSelectedIndexChanged(object sender, EventArgs e)
  200. {
  201. // comboBoxSubject.Items.Clear();
  202. List<CodeName> subjects = new List<CodeName>();
  203. CodeName period =(CodeName) comboBoxPeriod.SelectedItem;
  204. if (period.order==1)
  205. {
  206. var subject = periodSubjects.FindAll(x => x.periodType.Equals(period.code));
  207. if (subject!=null)
  208. {
  209. subject.ForEach(x => {
  210. subjects.Add(new CodeName { name=x.subjectName, code=x.subjectId });
  211. });
  212. }
  213. }
  214. comboBoxSubject.SelectedItem=null;
  215. bindingList = new BindingList<CodeName>(subjects);
  216. comboBoxSubject.DataSource=bindingList;
  217. comboBoxSubject.DisplayMember="name";
  218. comboBoxSubject.ValueMember="code";
  219. }
  220. }
  221. }