RSImplService.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. package com.malk.ruisi.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.malk.ruisi.service.RSService;
  6. import com.malk.server.aliwork.YDConf;
  7. import com.malk.server.aliwork.YDParam;
  8. import com.malk.server.common.McException;
  9. import com.malk.server.common.McR;
  10. import com.malk.server.dingtalk.DDR_New;
  11. import com.malk.service.aliwork.YDClient;
  12. import com.malk.service.aliwork.YDService;
  13. import com.malk.service.dingtalk.DDClient;
  14. import com.malk.service.dingtalk.DDClient_Contacts;
  15. import com.malk.utils.UtilDateTime;
  16. import com.malk.utils.UtilHttp;
  17. import com.malk.utils.UtilMap;
  18. import com.malk.utils.UtilServlet;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.apache.commons.lang3.StringUtils;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.scheduling.annotation.EnableScheduling;
  23. import org.springframework.scheduling.annotation.Scheduled;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.web.bind.annotation.PostMapping;
  26. import javax.servlet.http.HttpServletRequest;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. @EnableScheduling
  30. @Service
  31. @Slf4j
  32. public class RSImplService implements RSService {
  33. @Autowired
  34. private YDService ydService;
  35. @Autowired
  36. private YDClient ydClient;
  37. @Autowired
  38. private DDClient_Contacts ddClient_contacts;
  39. @Autowired
  40. private DDClient ddClient;
  41. @Autowired
  42. private static final long DEPT_ID = 933074211L; // 合作加盟校区
  43. /// 数据缓存 + 图片缓存, 10 分钟更新一次
  44. private Map portal_cache = new HashMap();
  45. /// 创建企业账号: loginI/userId 都为 SHR 工号
  46. private void createExclusiveUser(String loginId, String name) {
  47. final String PASS_WORD = "tzr@111111";
  48. Map info = UtilMap.map("userid", loginId);
  49. ddClient_contacts.createUser_dingTalk(ddClient.getAccessToken(), loginId, PASS_WORD, name, Arrays.asList(DEPT_ID), info);
  50. }
  51. /**
  52. * 同步钉钉企业账号
  53. */
  54. @Override
  55. public void syncDingTalk_exclusive() {
  56. List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
  57. .formUuid("FORM-11B80FC621CA4DB9A35364CFBFF7287538KR")
  58. .build());
  59. dataList.forEach(data -> {
  60. if (!"是".equals(UtilMap.getString(data, "radioField_m0hlup9w"))) {
  61. String userId = UtilMap.getString(data, "textField_lztc6k3k");
  62. String message = "";
  63. try {
  64. this.createExclusiveUser(userId, UtilMap.getString(data, "textField_lxsm8xow"));
  65. } catch (McException e) {
  66. message = e.getMessage();
  67. log.error(e.getMessage(), e);
  68. }
  69. ydClient.operateData(YDParam.builder()
  70. .formInstanceId(UtilMap.getString(data, "instanceId"))
  71. .useLatestVersion(true)
  72. .updateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_m0hlup9w, employeeField_m0hlup9v, textareaField_m0hs4k90", "是", Arrays.asList(userId), message)))
  73. .build(), YDConf.FORM_OPERATION.update);
  74. }
  75. });
  76. }
  77. /**
  78. * 重置企业账号密码
  79. */
  80. @Override
  81. public void resetPwd(Map data) {
  82. ddClient_contacts.updateUser_dingTalk(ddClient.getAccessToken(), UtilMap.getString(data, "userId"), Arrays.asList(DEPT_ID), UtilMap.map("init_password", UtilMap.getString(data, "password")));
  83. }
  84. @Override
  85. public List<Map> getPortalList(String section) {
  86. return _portalList(section);
  87. }
  88. @Override
  89. public void getDataList() {
  90. try {
  91. portal_cache = new HashMap();
  92. getPortalList("财务专区");
  93. getPortalList("公司头条");
  94. getPortalList("企业文化");
  95. getPortalList("员工自助");
  96. getPortalList("规章制度");
  97. } catch (Exception e) {
  98. // 记录错误信息
  99. e.printStackTrace();
  100. }
  101. }
  102. @Override
  103. public void shareRecord(String processInstanceId,Map data) {
  104. // 执行分享逻辑 [ 拼接后的权限组 ]
  105. McException.assertParamException_Null(data, "compId, userIds, userId, content, atUserId");
  106. //开始抓取宜搭对应的子表数据
  107. String mapss = null;
  108. ArrayList<Map<String,String>> maps_YD = new ArrayList<>();
  109. // cn.hutool.json.JSONArray jsonArray_YDZB =null;
  110. DDR_New ddrNew1 = ydClient.queryData(YDParam.builder().formInstanceId(processInstanceId).build()
  111. , YDConf.FORM_QUERY.retrieve_id);
  112. Map data1 = ddrNew1.getFormData();
  113. List<Map> list = new ArrayList<>();
  114. if (data1.get("tableField_m2cx8zh5") != null){
  115. list = (List<Map>) data1.get("tableField_m2cx8zh5");
  116. }
  117. // jsonArray_YDZB = new cn.hutool.json.JSONArray(mapss);
  118. Map sss=new HashMap<>();
  119. sss.put("employeeField_m2cx8zh6",data.get("atUserId").toString().split(","));
  120. sss.put("textareaField_m2cx8zh7",data.get("content"));
  121. //原有数据
  122. for (int i = 0; i < list.size(); i++) {
  123. Map sss2 = new HashMap();
  124. Map map = (Map) list.get(i);
  125. // List<Map> user = (List<Map>) ;
  126. sss2.put("employeeField_m2cx8zh6",map.get("employeeField_m2cx8zh6_id"));
  127. sss2.put("textareaField_m2cx8zh7",map.get("textareaField_m2cx8zh7"));
  128. maps_YD.add(sss2);
  129. }
  130. maps_YD.add(sss);//新增数据
  131. Map map = new HashMap();
  132. map.put(UtilMap.getString(data, "compId"),UtilMap.getList(data, "userIds"));
  133. map.put("tableField_m2cx8zh5",maps_YD);
  134. ydClient.operateData(YDParam.builder()
  135. .formInstId(processInstanceId)
  136. .updateFormDataJson(JSON.toJSONString(map))
  137. .build(), YDConf.FORM_OPERATION.update);
  138. String userIds = String.valueOf(data.get("atUserId"));
  139. String[] split = userIds.split(",");
  140. ArrayList<String> names = new ArrayList<>();
  141. for(Object auserId : split){
  142. DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/user/get", null, ddClient.initTokenParams(), UtilMap.map("userid", auserId), DDR_New.class);
  143. Object result = ddrNew.getResult();
  144. if (result != null) {
  145. JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(result));
  146. String name = jsonObject.getString("name");
  147. names.add(name);
  148. }
  149. }
  150. data.put("content", names.stream().collect(Collectors.joining(",")) + ":" +UtilMap.getString(data, "content"));
  151. YDParam ydParam = YDParam.builder()
  152. .formInstanceId(processInstanceId)
  153. .userId(UtilMap.getString(data, "userId"))
  154. .content(UtilMap.getString(data, "content"))
  155. .build();
  156. if (UtilMap.getBoolean(data, "isNotice")) {
  157. ydParam.setAtUserId(UtilMap.getString(data, "atUserId"));
  158. }
  159. ydClient.operateData(ydParam, YDConf.FORM_OPERATION.remarks);
  160. }
  161. @Override
  162. public Map approvalRecord(String processInstanceId, Map data) {
  163. List<Map> records = (List<Map>) ydClient.queryData(YDParam.builder()
  164. .processInstanceId(processInstanceId)
  165. .build(), YDConf.FORM_QUERY.retrieve_approval_record).getResult();
  166. List<String> userIds = new ArrayList<>(); // 后端格式
  167. List<Map> users = new ArrayList<>(); // 前端格式
  168. for (Map record : records) {
  169. // 节点多人情况处理
  170. List<Map> domainList = UtilMap.getList(record, "domainList");
  171. if (!domainList.isEmpty()) {
  172. for (Map operator : domainList) {
  173. String userId = UtilMap.getString(operator, "operator");
  174. if (!userIds.contains(userId)) {
  175. userIds.add(userId);
  176. // 前端格式显示通过label控制
  177. users.add(UtilMap.map("name, label, value", operator.get("operatorName"), operator.get("operatorName"), userId));
  178. }
  179. }
  180. } else {
  181. // 单人审批节点处理
  182. String userId = UtilMap.getString(record, "operatorUserId");
  183. if (!userIds.contains(userId)) {
  184. userIds.add(userId);
  185. // 前端格式显示通过label控制
  186. users.add(UtilMap.map("name, label, value", record.get("operatorName"), record.get("operatorName"), userId));
  187. }
  188. }
  189. }
  190. // 执行更新逻辑
  191. if (UtilMap.getBoolean(data, "isUpdate")) {
  192. McException.assertParamException_Null(data, "compId");
  193. ydClient.operateData(YDParam.builder()
  194. .formInstId(processInstanceId)
  195. .updateFormDataJson(JSON.toJSONString(UtilMap.map(UtilMap.getString(data, "compId"), userIds)))
  196. .build(), YDConf.FORM_OPERATION.update);
  197. }
  198. return UtilMap.map("users, userIds", users, userIds);
  199. //
  200. }
  201. @Override
  202. public void syncDingTalk_delect() {
  203. List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
  204. .formUuid("FORM-11B80FC621CA4DB9A35364CFBFF7287538KR")
  205. .build());
  206. dataList.forEach(data -> {
  207. if ("未启用".equals(UtilMap.getString(data, "radiofield_MMa26Yu4"))) {
  208. String userId = UtilMap.getString(data, "textField_lztc6k3k");
  209. String message = "";
  210. try {
  211. this.delectExclusiveUser(userId);
  212. } catch (McException e) {
  213. message = e.getMessage();
  214. log.error(e.getMessage(), e);
  215. }
  216. // ydClient.operateData(YDParam.builder()
  217. // .formInstanceId(UtilMap.getString(data, "instanceId"))
  218. // .useLatestVersion(true)
  219. // .updateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_m0hlup9w, employeeField_m0hlup9v, textareaField_m0hs4k90", "是", Arrays.asList(userId), message)))
  220. // .build(), YDConf.FORM_OPERATION.update);
  221. }
  222. });
  223. }
  224. private void delectExclusiveUser(String userId) throws McException {
  225. Map param2 = new HashMap();
  226. param2.put("access_token", dingshiqiImpl.getAccessToken_PJSS());
  227. Map body = new HashMap();
  228. body.put("userid", userId);
  229. String s = UtilHttp.doGet("https://oapi.dingtalk.com/topapi/v2/user/delete", param2, (Map<String, Object>) body);
  230. JSONObject obj = JSONObject.parseObject(s);
  231. JSONArray arr = obj.getJSONArray("result");
  232. }
  233. /**
  234. * 工作台数据
  235. */
  236. private List<Map> _portalList(String type) {
  237. List<Map> pList = UtilMap.getList(portal_cache, type);
  238. if (pList.isEmpty()) {
  239. List<Map> dataList = (List<Map>) ydClient.queryData(YDParam.builder()
  240. .formUuid("FORM-D46C46DACD644467B8F6902EBFD8FDFEYFOX")
  241. .pageSize(5)
  242. .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_m17kv4an", type)))
  243. .build(), YDConf.FORM_QUERY.retrieve_search_form).getData();
  244. dataList.sort(Comparator.comparingInt(item -> UtilMap.getInt(item, "numberField_m17kv4ao"))); // 排序
  245. pList = dataList.stream().map(item -> {
  246. Map formData = UtilMap.getMap(item, "formData");
  247. Map row = UtilMap.map("title, source, link", UtilMap.getString(formData, "textField_m17kv4aq"), UtilMap.getString(formData, "textField_m17kv4as"), UtilMap.getString(formData, "textField_m17kv4at"));
  248. long date = UtilMap.getLong(formData, "dateField_m17kv4ar");
  249. if (date > 0L) {
  250. row.put("dateTime", UtilDateTime.format(new Date(date), "yyyy-MM-dd HH:mm"));
  251. }
  252. // 图片免登处理
  253. String image = UtilMap.getString(formData, "imageField_m1abjxl0");
  254. if (StringUtils.isNotBlank(image)) {
  255. List<Map> attas = (List<Map>) JSON.parse(image);
  256. row.put("image", ydClient.convertTemporaryUrl(UtilMap.getString(attas.get(0), "url")));
  257. Object image1 = row.get("image");
  258. System.out.println("image========="+UtilMap.getString(attas.get(0), "url"));
  259. // System.out.println("image1========="+image1);
  260. }
  261. return row;
  262. }).collect(Collectors.toList());
  263. portal_cache.put(type, pList);
  264. }
  265. log.info("type: {},list:{}", type, pList);
  266. return pList;
  267. }
  268. }