123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- package com.malk.minjiaoyuan.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.malk.Util.UtilMap;
- import com.malk.minjiaoyuan.service.MJYService;
- import com.malk.server.aliwork.YDConf;
- import com.malk.server.aliwork.YDParam;
- import com.malk.server.common.McException;
- import com.malk.service.aliwork.YDClient;
- import com.malk.service.aliwork.YDService;
- import com.malk.service.dingtalk.DDClient;
- import com.malk.service.dingtalk.DDClient_Contacts;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.*;
- import java.util.stream.Collectors;
- @Service
- @Slf4j
- public class MJYImplService implements MJYService {
- @Autowired
- private YDClient ydClient;
- @Autowired
- private YDService ydService;
- // 名额配置
- private List<Map> quotaList = new ArrayList<>();
- // 获取学校与类型比例
- @Override
- public int getSchoolRatio(String schoolName, String typeName) {
- if (quotaList.isEmpty()) {
- List<Map> list = (List<Map>) ydClient.queryData(YDParam.builder()
- .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLKE")
- .pageSize(YDConf.PAGE_SIZE_LIMIT)
- .build(), YDConf.FORM_QUERY.retrieve_list_all).getData();
- quotaList = list.stream().map(item -> (Map) item.get("formData")).collect(Collectors.toList());
- log.info("名额配置数据, {}", quotaList.size());
- }
- Map formData = quotaList.stream().filter(item -> typeName.equals(item.get("selectField_lgf306u6"))).findAny().get();
- int ratio = Integer.valueOf(String.valueOf(formData.get("numberField_lgezizyl")));
- List<Map<String, ?>> details = (List<Map<String, ?>>) formData.get("tableField_lgezizyn");
- Optional detail = details.stream().filter(item -> item.get("selectField_lgezizyo").equals(schoolName)).findAny();
- if (detail.isPresent()) {
- ratio = Integer.valueOf(String.valueOf(((Map) detail.get()).get("numberField_lgezizyq")));
- }
- return ratio;
- }
- // 查询全部数据
- @Override
- public List<Map> queryAllBySync(YDParam param) {
- param.setPageSize(1);
- long totalCount = ydClient.queryData(param, YDConf.FORM_QUERY.retrieve_list).getTotalCount();
- List<Map> dataList = new ArrayList<>();
- // Math.ceil 需要有浮点数, 否则转 int 类型忽略掉, 向上取整就会是当前值
- for (int index = 1; index <= (int) Math.ceil(totalCount * 1.0 / YDConf.PAGE_SIZE_LIMIT); index++) {
- // 对象拷贝: 避免并发下分页条件被修改导致数据混乱
- YDParam ydParam = (YDParam) param.copyParam();
- ydParam.setPageNumber(index);
- ydParam.setPageSize(YDConf.PAGE_SIZE_LIMIT);
- dataList.addAll((List) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_list).getData());
- }
- return dataList;
- }
- // 获取直入名单
- @Override
- public List<String> getDirectList() {
- YDParam ydParam = YDParam.builder()
- .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLKE")
- .searchCondition(JSON.toJSONString(UtilMap.map("selectField_lgf306u6", "直入名单")))
- .pageSize(1)
- .build();
- String formInstanceId = (String) ((List<Map>) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_form).getData()).get(0).get("formInstanceId");
- ydParam.setFormInstanceId(formInstanceId);
- ydParam.setTableFieldId("tableField_lgf2p2jm");
- List<Map> details = ydService.queryDetails(ydParam);
- log.info("直入名单, {}", details.size());
- return details.stream().map(item -> (String) item.get("textField_lgt5j83x")).collect(Collectors.toList());
- }
- // 触发通知
- @Override
- public void triggerNotice(String formUuid, String createUserId, Map formData) {
- YDParam ydParam = YDParam.builder()
- .formUuid(formUuid)
- .formDataJson(JSON.toJSONString(formData))
- .userId(createUserId) // 触发通知
- .build();
- ydClient.operateData(ydParam, YDConf.FORM_OPERATION.create);
- }
- // 匹配学校负责人
- @Override
- public List<Map> matchQuery(List<Map> schoolQuotaList) {
- YDParam ydParam = YDParam.builder()
- .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLUE")
- .build();
- List<Map> schoolAuthList = queryAllBySync(ydParam);
- List list = schoolQuotaList.stream().map(item -> {
- // 条件: 学校全称
- Optional optional = schoolAuthList.stream().filter(row -> ((Map) row.get("formData")).get("selectField_lgf41nj4").equals(item.get("textField_lgezb8r7"))).findAny();
- if (optional.isPresent()) {
- Map data = (Map) ((Map) optional.get()).get("formData");
- // 前端展示格式: prd 学校负责人单选
- List<String> empsName = (List<String>) data.get("employeeField_lgf7h60y");
- List<String> empsId = (List<String>) data.get("employeeField_lgf7h60y_id");
- List<Map> managers = new ArrayList<>();
- for (int i = 0; i < empsName.size(); i++) {
- managers.add(UtilMap.map("name, value", empsName.get(i), empsId.get(i)));
- }
- item.put("employeeField_lgf7m9s4", managers);
- log.info("匹配学校负责人, {}", data);
- }
- return item;
- }).collect(Collectors.toList());
- return list;
- }
- @Autowired
- private DDClient ddClient;
- @Autowired
- private DDClient_Contacts ddClient_contacts;
- // 同步教师档案 [已邀请]
- @Override
- public void syncTeacherStatus() {
- // 查询已邀请教师档案数据
- YDParam ydParam = YDParam.builder()
- .formUuid("FORM-AC666081555ANZAZ6D4IVCQLY5Y12P4ZSRTGLAE")
- .searchFieldJson(JSON.toJSONString(UtilMap.map("radioField_lhlhshbc", "已邀请")))
- .build();
- List<Map> dataList = queryAllBySync(ydParam);
- log.info("同步教师数量, {}", dataList.size());
- for (Map formData : dataList) {
- Map dataForm = (Map) formData.get("formData");
- String userId = dataForm.get("textField_lftczqr5").toString();
- String remark;
- String status = "已邀请";
- // 是否进入架构
- try {
- ddClient_contacts.getUserInfoById(ddClient.getAccessToken(), userId);
- remark = "已同步";
- status = "已同步";
- } catch (McException e) {
- remark = e.getMessage();
- log.error(e.getMessage(), e);
- }
- // 发送同步通知
- if ("已同步".equals(remark)) {
- String notice = dataForm.get("textField_lghs4pmx") + "老师[" + userId + "]";
- notice += ", 您好: \n欢迎加入【闵行区教师梯队管理】架构, 您的档案已同步, 可发起骨干系列评选报名";
- Map data = UtilMap.map("employeeField_lhgj6tc7, textField_lhlj3dgb, textareaField_lhgj6tcu", Arrays.asList(userId), userId, notice);
- triggerNotice("FORM-8Y866XB1FGHAB037F4F7054SZMHI2RFZ1JLHLP", userId, data);
- }
- // 同步邀请状态
- ydParam.setFormInstanceId(formData.get("formInstanceId").toString());
- ydParam.setUpdateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_lhlqrv31, radioField_lhlhshbc, employeeField_lgeyfc4d", remark, status, Arrays.asList(userId))));
- ydClient.operateData(ydParam, YDConf.FORM_OPERATION.update);
- log.info("同步教师状态, {}, {}", userId, remark);
- }
- }
- }
|