DingtalkController.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.google.gson.JsonArray;
  5. import com.google.gson.JsonObject;
  6. import com.template.annotation.DESRespondSecret;
  7. import com.template.api.DingtalkControllerAPI;
  8. import com.template.common.utils.DingTalkInterface;
  9. import com.template.common.utils.TimeExchange;
  10. import com.template.model.pojo.AttColumns;
  11. import com.template.model.pojo.SmartUser;
  12. import com.template.model.result.CommonResult;
  13. import com.template.services.SmartUserService;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.web.bind.annotation.RestController;
  17. import javax.annotation.Resource;
  18. import java.util.*;
  19. import java.util.stream.Collectors;
  20. /**
  21. * @Author: binguo
  22. * @Date: 2023/7/5 星期三 9:28
  23. * @Description: com.template.controller
  24. * @Version: 1.0
  25. */
  26. @RestController
  27. //返回参数加密注解
  28. @DESRespondSecret
  29. @Slf4j
  30. public class DingtalkController implements DingtalkControllerAPI {
  31. @Autowired
  32. private DingTalkInterface dingTalkInterface;
  33. @Autowired
  34. private SmartUserService smartUserService;
  35. /**
  36. * 获取列定义
  37. * 遍历用户
  38. * 根据手机号获取用户id
  39. * 根据id获取列值
  40. * 存入新表
  41. */
  42. @Override
  43. @DESRespondSecret(validated = true)
  44. public CommonResult queryAttReport(int currentPage, int pageCount, String name, String state) {
  45. try {
  46. JSONObject jsonObject=dingTalkInterface.getattcolumns();
  47. String errcode = String.valueOf(jsonObject.get("errcode"));
  48. if("0".equals(errcode)){
  49. JSONObject result= jsonObject.getJSONObject("result");
  50. JSONArray columeArray=result.getJSONArray("columns");
  51. // 拼接列id
  52. StringBuilder stringInsertCols = new StringBuilder();
  53. List<Map<String, String>> attColumnsList = new ArrayList<>();
  54. for (int i = 0; i < columeArray.size(); i++) {
  55. // 入库
  56. JSONObject column=columeArray.getJSONObject(i);
  57. // AttColumns attColumns=new AttColumns();
  58. Map<String,String> attColumnsMap=new HashMap<>();
  59. attColumnsMap.put("id",column.getString("id"));
  60. attColumnsMap.put("name",column.getString("name"));
  61. attColumnsMap.put("alias",column.getString("alias"));
  62. attColumnsList.add(attColumnsMap);
  63. stringInsertCols.append(column.getString("id")+",");
  64. }
  65. String columnId= stringInsertCols.deleteCharAt(stringInsertCols.length() - 1).toString();
  66. //查询所有用户
  67. List<SmartUser> users=smartUserService.getListUser();
  68. for (SmartUser user:users) {
  69. //查库没有钉钉id则更新
  70. String dingId = user.getDingId();
  71. if(dingId==null){
  72. JSONObject jsonObject1=dingTalkInterface.getUserIdByPhone(user.getPhone());
  73. String flag = String.valueOf(jsonObject.get("errcode"));
  74. if(!"0".equals(flag)){
  75. log.info("获取"+user.getPhone()+"userId失败;");
  76. continue;
  77. }
  78. dingId=jsonObject.getJSONObject("jsonObject").getString("userid");
  79. //存入钉钉id
  80. user.setDingId(dingId);
  81. smartUserService.saveOrUpdate(user);
  82. }
  83. // 获取列值
  84. JSONObject jsonObject1= dingTalkInterface.getcolumnval(dingId,columnId,
  85. TimeExchange.TimeDesD(new Date(),-1)+" 00:00:00",TimeExchange.getDate()+" 00:00:00");
  86. String flag = String.valueOf(jsonObject1.get("errcode"));
  87. if(!"0".equals(flag)){
  88. log.info("获取"+user.getPhone()+"考勤数据失败;");
  89. continue;
  90. }
  91. List<Map<String,String>> keyValueList=new ArrayList<>();
  92. JSONArray columnValsList=jsonObject1.getJSONObject("result").getJSONArray("column_vals");
  93. for (int i = 0; i < columnValsList.size(); i++) {
  94. //获取列名
  95. String columId=columnValsList.getJSONObject(i).getJSONObject("column_vo").getString("id");
  96. List<Map<String, String>> identityData = attColumnsList.stream().filter(e -> e.get("id").equals(columId)).collect(Collectors.toList());
  97. if (identityData.isEmpty()){
  98. log.info("======"+columId+"===此id列未找到列定义");
  99. continue;
  100. }
  101. String alias=identityData.get(0).get("alias");
  102. //获取列值
  103. JSONArray valsArray=columnValsList.getJSONObject(i).getJSONArray("column_vals");
  104. String vals="";
  105. if (valsArray!=null&&valsArray.size()>0){
  106. vals=valsArray.getJSONObject(0).getString("value");
  107. }else{
  108. vals=columnValsList.getJSONObject(i).getString("fixed_value");
  109. }
  110. Map<String,String> keyValue=new HashMap<>();
  111. keyValue.put(alias,vals);
  112. keyValueList.add(keyValue);
  113. }
  114. //根据keyValueList入库
  115. }
  116. }
  117. } catch (Exception e) {
  118. e.printStackTrace();
  119. return CommonResult.fail(e.getMessage());
  120. }
  121. return CommonResult.ok("");
  122. }
  123. }