MJYImplService.java 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package com.malk.minjiaoyuan.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.malk.Util.UtilMap;
  4. import com.malk.minjiaoyuan.service.MJYService;
  5. import com.malk.server.aliwork.YDConf;
  6. import com.malk.server.aliwork.YDParam;
  7. import com.malk.server.common.McException;
  8. import com.malk.service.aliwork.YDClient;
  9. import com.malk.service.aliwork.YDService;
  10. import com.malk.service.dingtalk.DDClient;
  11. import com.malk.service.dingtalk.DDClient_Contacts;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import java.util.*;
  16. import java.util.stream.Collectors;
  17. @Service
  18. @Slf4j
  19. public class MJYImplService implements MJYService {
  20. @Autowired
  21. private YDClient ydClient;
  22. @Autowired
  23. private YDService ydService;
  24. // 名额配置
  25. private List<Map> quotaList = new ArrayList<>();
  26. // 获取学校与类型比例
  27. @Override
  28. public int getSchoolRatio(String schoolName, String typeName) {
  29. if (quotaList.isEmpty()) {
  30. List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder()
  31. .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLKE")
  32. .pageSize(YDConf.PAGE_SIZE_LIMIT)
  33. .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
  34. quotaList = list.stream().map(item -> (Map) item.get("formData")).collect(Collectors.toList());
  35. log.info("名额配置数据, {}", quotaList.size());
  36. }
  37. Map formData = quotaList.stream().filter(item -> typeName.equals(item.get("selectField_lgf306u6"))).findAny().get();
  38. int ratio = Integer.valueOf(String.valueOf(formData.get("numberField_lgezizyl")));
  39. List<Map<String, ?>> details = (List<Map<String, ?>>) formData.get("tableField_lgezizyn");
  40. Optional detail = details.stream().filter(item -> item.get("selectField_lgezizyo").equals(schoolName)).findAny();
  41. if (detail.isPresent()) {
  42. ratio = Integer.valueOf(String.valueOf(((Map) detail.get()).get("numberField_lgezizyq")));
  43. }
  44. return ratio;
  45. }
  46. // 查询全部数据
  47. @Override
  48. public List<Map> queryAllBySync(YDParam param) {
  49. param.setPageSize(1);
  50. long totalCount = ydClient.queryData(param, YDConf.FORM_QUERY.retrieve_list).getTotalCount();
  51. List<Map> dataList = new ArrayList<>();
  52. // Math.ceil 需要有浮点数, 否则转 int 类型忽略掉, 向上取整就会是当前值
  53. for (int index = 1; index <= (int) Math.ceil(totalCount * 1.0 / YDConf.PAGE_SIZE_LIMIT); index++) {
  54. // 对象拷贝: 避免并发下分页条件被修改导致数据混乱
  55. YDParam ydParam = (YDParam) param.copyParam();
  56. ydParam.setPageNumber(index);
  57. ydParam.setPageSize(YDConf.PAGE_SIZE_LIMIT);
  58. dataList.addAll((List) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_list).getData());
  59. }
  60. return dataList;
  61. }
  62. // 获取直入名单
  63. @Override
  64. public List<String> getDirectList() {
  65. YDParam ydParam = YDParam.builder()
  66. .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLKE")
  67. .searchCondition(JSON.toJSONString(UtilMap.map("selectField_lgf306u6", "直入名单")))
  68. .pageSize(1)
  69. .build();
  70. String formInstanceId = (String) ((List<Map>) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_form).getData()).get(0).get("formInstanceId");
  71. ydParam.setFormInstanceId(formInstanceId);
  72. ydParam.setTableFieldId("tableField_lgf2p2jm");
  73. List<Map> details = ydService.queryDetails(ydParam);
  74. log.info("直入名单, {}", details.size());
  75. return details.stream().map(item -> (String) item.get("textField_lgt5j83x")).collect(Collectors.toList());
  76. }
  77. // 触发通知
  78. @Override
  79. public void triggerNotice(String formUuid, String createUserId, Map formData) {
  80. YDParam ydParam = YDParam.builder()
  81. .formUuid(formUuid)
  82. .formDataJson(JSON.toJSONString(formData))
  83. .userId(createUserId) // 触发通知
  84. .build();
  85. ydClient.operateData(ydParam, YDConf.FORM_OPERATION.create);
  86. }
  87. // 匹配学校负责人
  88. @Override
  89. public List<Map> matchQuery(List<Map> schoolQuotaList) {
  90. YDParam ydParam = YDParam.builder()
  91. .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLUE")
  92. .build();
  93. List<Map> schoolAuthList = queryAllBySync(ydParam);
  94. List list = schoolQuotaList.stream().map(item -> {
  95. // 条件: 学校全称
  96. Optional optional = schoolAuthList.stream().filter(row -> ((Map) row.get("formData")).get("selectField_lgf41nj4").equals(item.get("textField_lgezb8r7"))).findAny();
  97. if (optional.isPresent()) {
  98. Map data = (Map) ((Map) optional.get()).get("formData");
  99. // 前端展示格式: prd 学校负责人单选
  100. List<String> empsName = (List<String>) data.get("employeeField_lgf7h60y");
  101. List<String> empsId = (List<String>) data.get("employeeField_lgf7h60y_id");
  102. List<Map> managers = new ArrayList<>();
  103. for (int i = 0; i < empsName.size(); i++) {
  104. managers.add(UtilMap.map("name, value", empsName.get(i), empsId.get(i)));
  105. }
  106. item.put("employeeField_lgf7m9s4", managers);
  107. log.info("匹配学校负责人, {}", data);
  108. }
  109. return item;
  110. }).collect(Collectors.toList());
  111. return list;
  112. }
  113. @Autowired
  114. private DDClient ddClient;
  115. @Autowired
  116. private DDClient_Contacts ddClient_contacts;
  117. // 同步教师档案 [已邀请]
  118. @Override
  119. public void syncTeacherStatus() {
  120. // 查询已邀请教师档案数据
  121. YDParam ydParam = YDParam.builder()
  122. .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLAE")
  123. .searchFieldJson(JSON.toJSONString(UtilMap.map("radioField_lhlhshbc", "已邀请")))
  124. .build();
  125. List<Map> dataList = queryAllBySync(ydParam);
  126. log.info("同步教师数量, {}", dataList.size());
  127. for (Map formData : dataList) {
  128. Map dataForm = (Map) formData.get("formData");
  129. String userId = dataForm.get("textField_lftczqr5").toString();
  130. String remark;
  131. String status = "已邀请";
  132. // 是否进入架构
  133. try {
  134. ddClient_contacts.getUserInfoById(ddClient.getAccessToken(), userId);
  135. remark = "已同步";
  136. status = "已同步";
  137. } catch (McException e) {
  138. remark = e.getMessage();
  139. log.error(e.getMessage(), e);
  140. }
  141. // 发送同步通知
  142. if ("已同步".equals(remark)) {
  143. String notice = dataForm.get("textField_lghs4pmx") + "老师[" + userId + "]";
  144. notice += ", 您好: \n欢迎加入【闵行区教师梯队管理】架构, 您的档案已同步, 可发起骨干系列评选报名";
  145. Map data = UtilMap.map("employeeField_lhgj6tc7, textField_lhlj3dgb, textareaField_lhgj6tcu", Arrays.asList(userId), userId, notice);
  146. triggerNotice("FORM-8Y866XB1FGHAB037F4F7054SZMHI2RFZ1JLHLP", userId, data);
  147. }
  148. // 同步邀请状态
  149. ydParam.setFormInstanceId(formData.get("formInstanceId").toString());
  150. ydParam.setUpdateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_lhlqrv31, radioField_lhlhshbc, employeeField_lgeyfc4d", remark, status, Arrays.asList(userId))));
  151. ydClient.operateData(ydParam, YDConf.FORM_OPERATION.update);
  152. log.info("同步教师状态, {}, {}", userId, remark);
  153. }
  154. }
  155. }