Commit 63dc7a74 by baochunxin

家校通讯录查询上传

parent 272909d3
package yangtz.cs.liu.dingding.controller;
import cn.hutool.http.HttpUtil;
//import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import yangtz.cs.liu.dingding.utils.AccessTokenUtils;
import yangtz.cs.liu.dingding.vo.DingJiaXiaoVo;
import java.util.ArrayList;
import java.util.List;
/**
* 家校通讯录
*/
@RestController
@RequestMapping("/dd/djtx")
public class DingJiaXiaoController {
@Autowired
private AccessTokenUtils accessTokenUtils;
final String listUrl ="https://oapi.dingtalk.com/topapi/edu/dept/list?access_token=";
final String userUrl ="https://oapi.dingtalk.com/topapi/edu/user/list?access_token=";
public List<String> userTypes = new ArrayList<String>(){
{
this.add("teacher");
this.add("guardian");
this.add("student");
}
};
@GetMapping("/getList")
private List<DingJiaXiaoVo> getList(){
//年级
List<DingJiaXiaoVo> njInfoList = new ArrayList<>();
// 0 获取校园信息
String token = accessTokenUtils.getToken();
JSONObject jsonObjectParme = new JSONObject();
jsonObjectParme.put("page_no",1);
jsonObjectParme.put("page_size",30);
String post = HttpUtil.post(listUrl+token, jsonObjectParme);
JSONObject jsonObject = JSONObject.parseObject(post);
if ((Integer) jsonObject.get("errcode") != 0){
throw new RuntimeException("获取校园列表失败");
}
Integer deptId = null;
JSONObject result = (JSONObject)jsonObject.get("result");
JSONArray detailsArray = JSONArray.of(result.get("details"));
for (int i = 0 ; i < detailsArray.size(); i ++){
JSONObject da = detailsArray.getJSONArray(i).getJSONObject(i);
deptId = (Integer) da.get("dept_id");
}
//1 获取校园学历类型
JSONObject xyParme = new JSONObject();
xyParme.put("page_no",1);
xyParme.put("page_size",30);
xyParme.put("super_id",deptId);
String xyPost = HttpUtil.post(listUrl+token, xyParme);
JSONObject xyObject = JSONObject.parseObject(xyPost);
if ((Integer) xyObject.get("errcode") != 0){
throw new RuntimeException("获取年纪列表失败");
}
JSONObject xyResult = (JSONObject)xyObject.get("result");
JSONArray xyDetailsArray = JSONArray.of(xyResult.get("details"));
for (int i = 0 ; i < xyDetailsArray.size(); i ++){
JSONObject da = xyDetailsArray.getJSONArray(i).getJSONObject(i);
deptId = (Integer) da.get("dept_id");
}
//2.获取校园年级
JSONObject njParme = new JSONObject();
njParme.put("page_no",1);
njParme.put("page_size",30);
njParme.put("super_id",deptId);
String njPost = HttpUtil.post(listUrl+token, njParme);
JSONObject njObject = JSONObject.parseObject(njPost);
if ((Integer) njObject.get("errcode") != 0){
throw new RuntimeException("获取年纪列表失败");
}
JSONObject njResult = (JSONObject)njObject.get("result");
JSONArray njDetailsArray = JSONArray.of(njResult.get("details"));
for (int i = 0 ; i < njDetailsArray.size(); i ++){
for (int q = 0 ; q < njDetailsArray.getJSONArray(i).size(); q++){
JSONObject da = njDetailsArray.getJSONArray(i).getJSONObject(q);
Integer supId = (Integer) da.get("dept_id");
DingJiaXiaoVo dingJiaXiaoVo = new DingJiaXiaoVo();
dingJiaXiaoVo.setGradeId((Integer) da.get("dept_id"));
dingJiaXiaoVo.setGradeName((String) da.get("name"));
//3.查询年纪下的班级
JSONObject bjParme = new JSONObject();
bjParme.put("page_no",1);
bjParme.put("page_size",30);
bjParme.put("super_id",supId);
String bjPost = HttpUtil.post(listUrl+token, bjParme);
JSONObject bjObject = JSONObject.parseObject(bjPost);
if ((Integer) bjObject.get("errcode") != 0){
throw new RuntimeException("获取班级列表失败");
}
JSONObject bjResult = (JSONObject)bjObject.get("result");
JSONArray bjDetailsArray = JSONArray.of(bjResult.get("details"));
//班级
List<DingJiaXiaoVo.ClassInfo> classInfoList = new ArrayList<>();
//查询班级班级
for (int j = 0 ; j < bjDetailsArray.size(); j ++) {
for (int n = 0; n < bjDetailsArray.getJSONArray(j).size(); n++) {
JSONObject classDate = bjDetailsArray.getJSONArray(j).getJSONObject(n);
Integer classId = (Integer) classDate.get("dept_id");
//创建班级
DingJiaXiaoVo.ClassInfo classInfo = new DingJiaXiaoVo().new ClassInfo();
classInfo.setClassId((Integer) classDate.get("dept_id"));
classInfo.setClassName((String) classDate.get("name"));
/**
* 学生信息
*/
List<DingJiaXiaoVo.StudentUserInfo> studentUserInfos = new ArrayList<>();
/**
* 老师信息
*/
List<DingJiaXiaoVo.StudentUserInfo> teacherUserInfos = new ArrayList<>();
/**
* 监护人信息
*/
List<DingJiaXiaoVo.StudentUserInfo> guardianUserInfos = new ArrayList<>();
//分页查询,每次查询数据最大只有30条,分5次查询 一个班判断最大150人
for (String type : userTypes) {
if (type.equals("teacher")) {
//老师
teacherUserInfos = this.addUserList(token, type, classId);
} else if (type.equals("guardian")) {
//监护人
guardianUserInfos = this.addUserList(token, type, classId);
} else if (type.equals("student")) {
//学生
studentUserInfos = this.addUserList(token, type, classId);
}
}
//将人员存入班级中
classInfo.setStudentUserInfos(studentUserInfos);
classInfo.setTeacherUserInfos(teacherUserInfos);
classInfo.setGuardianUserInfos(guardianUserInfos);
classInfoList.add(classInfo);
}
}
dingJiaXiaoVo.setClassInfoList(classInfoList);
njInfoList.add(dingJiaXiaoVo);
}
}
return njInfoList;
}
private List<DingJiaXiaoVo.StudentUserInfo> addUserList(String token,String type,Integer classId){
List<DingJiaXiaoVo.StudentUserInfo> userList = new ArrayList<>();
//分页查询,每次查询数据最大只有30条,分5次查询 一个班判断最大150人
for (int k = 1;k <= 5; k++ ){
//查询班级下边的人员
JSONObject ryParme = new JSONObject();
ryParme.put("page_no",k);
ryParme.put("page_size",30);
ryParme.put("role",type);
ryParme.put("class_id",classId);
String ryPost = HttpUtil.post(userUrl+token, ryParme);
JSONObject ryObject = JSONObject.parseObject(ryPost);
if ((Integer) ryObject.get("errcode") != 0){
throw new RuntimeException("获取班级人员列表失败");
}
JSONObject ryResult = (JSONObject)ryObject.get("result");
JSONArray xyDetailsArray = JSONArray.of(ryResult.get("details"));
for (int o = 0; o < xyDetailsArray.size(); o++){
for (int i = 0 ; i < xyDetailsArray.getJSONArray(o).size(); i++){
JSONObject userInfo = xyDetailsArray.getJSONArray(o).getJSONObject(i);
DingJiaXiaoVo.StudentUserInfo studentUserInfo = new DingJiaXiaoVo().new StudentUserInfo();
studentUserInfo.setUserId(userInfo.get("userid").toString());
studentUserInfo.setClassId((Integer) userInfo.get("class_id"));
studentUserInfo.setRole(userInfo.get("role")==null?null:userInfo.get("role").toString());
studentUserInfo.setUnionid(userInfo.get("unionid")==null?null:userInfo.get("unionid").toString());
studentUserInfo.setName(userInfo.get("name").toString());
studentUserInfo.setIsAdviser(userInfo.getJSONObject("feature").get("is_adviser") ==null ? null:userInfo.getJSONObject("feature").get("is_adviser").toString());
studentUserInfo.setStudentNo(userInfo.get("student_no")==null?null:userInfo.get("student_no").toString());
userList.add(studentUserInfo);
}
}
}
return userList;
}
}
package yangtz.cs.liu.dingding.vo;
import lombok.Data;
import java.util.List;
@Data
public class DingJiaXiaoVo {
/**
* 年纪id
*/
Integer gradeId;
/**
* 年纪名称
*/
String gradeName;
/**
* 班级信息
*/
List<ClassInfo> classInfoList;
/**
* 班级信息
*/
@Data
public class ClassInfo{
/**
* 班级id
*/
Integer classId;
/**
* 年纪名称
*/
String className;
/**
* 学生信息
*/
List<StudentUserInfo> studentUserInfos;
/**
* 老师信息
*/
List<StudentUserInfo> teacherUserInfos;
/**
* 监护人信息
*/
List<StudentUserInfo> guardianUserInfos;
}
/**
* 学生信息
*/
@Data
public class StudentUserInfo{
/**
* 班级id
*/
Integer classId;
/**
* 人员的userId。
*/
String userId;
/**
* 人员姓名。
*/
String name;
/**
* 人员的unionId,无手机号的学生为""。
*/
String unionid;
/**
* 家校人员角色。
* teacher:老师
* guardian:监护人
* student:学生
*/
String role;
/**
* 只在老师角色下意义。
* 1:班主任
* 0:非班主任
*/
String isAdviser;
/**
* 学号,只有在学生角色下才有意义,并且需确认各个班级的设置,如果没有设置,则不会返回此字段。
*/
String studentNo;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment