企业提倡一起运动,用钉钉计步方式督促大家积极锻炼,需要对大家的步数做统计,而钉钉后台只能保存近期一个月的运动数据,所以需要调用钉钉提供的开放API获取运动数据并保存在自己的服务器。
//获取部门列表
public static List<ht> getDepart() throws Exception{
try {
//获取当前日期String
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE,-1);
String yesterday = new SimpleDateFormat( "yyyyMMdd").format(cal.getTime());
List<ht> htlist=new ArrayList<ht>();
CorpHealthStepinfoListbyuseridResponse rsp;
CorpHealthStepinfoListbyuseridRequest req = new CorpHealthStepinfoListbyuseridRequest();
DingTalkClient client= new DefaultDingTalkClient("https://eco.taobao.com/router/rest");
JSONObject forj;
JSONObject json;
JSONArray jr;
//获取access token
String accessToken = AuthHelper.getAccessToken();
// 获取部门列表
String parentId = "1";
List<Department> list = DepartmentHelper.listDepartments(accessToken, parentId);
//log("成功获取部门列表", list);
for (int i = 0; i < list.size(); i++)
{
CorpUserList userList = UserHelper.getDepartmentUser(AuthHelper.getAccessToken(), list.get(i).getId(), null, null, null);
String str= new String();
String str1= new String();
if(userList.getUserlist().size() <= 50 && userList.getUserlist().size()!=0 )//有部门没人,userlist is null
{
for(int k=0;k<userList.getUserlist().size();k++)
{
if(k==0)
{
str=userList.getUserlist().get(k).getUserid().toString();
}
else
{
str=str+","+userList.getUserlist().get(k).getUserid().toString();
}
}
req.setUserids(str); //员工userid列表,最多传50个
req.setStatDate(yesterday);//时间,注意时间格式是YYMMDD
rsp = client.execute(req, accessToken);
json= JSONObject.parseObject(rsp.getBody()).getJSONObject("dingtalk_corp_health_stepinfo_listbyuserid_response").getJSONObject("result").getJSONObject("stepinfo_list");
jr=json.getJSONArray("basic_step_info_vo");
if(jr!=null)
{
for(int z=0;z<jr.size();z++)
{
ht ht=new ht();
forj=jr.getJSONObject(z);
ht.setDepa(list.get(i).getName().toString());
ht.setStat_date(forj.get("stat_date").toString());
ht.setStep_count(forj.get("step_count").toString());
ht.setUserid(forj.get("userid").toString());
htlist.add(ht);
}
}
}
else if(userList.getUserlist().size()>50 && userList.getUserlist().size()<=100 )
{
for(int k=0;k<50;k++)
{
if(k==0)
{
str=userList.getUserlist().get(k).getUserid().toString();
}
else
{
str=userList.getUserlist().get(k).getUserid().toString()+","+str;
}
}
req.setUserids(str); //员工userid列表,最多传50个
req.setStatDate(yesterday);//时间,注意时间格式是YYMMDD
rsp = client.execute(req, accessToken);
json= JSONObject.parseObject(rsp.getBody()).getJSONObject("dingtalk_corp_health_stepinfo_listbyuserid_response").getJSONObject("result").getJSONObject("stepinfo_list");
jr=json.getJSONArray("basic_step_info_vo");
if(jr!=null)
{
for(int z=0;z<jr.size();z++)
{
ht ht=new ht();
forj=jr.getJSONObject(z);
ht.setDepa(list.get(i).getName().toString());
ht.setStat_date(forj.get("stat_date").toString());
ht.setStep_count(forj.get("step_count").toString());
ht.setUserid(forj.get("userid").toString());
htlist.add(ht);
}
}
for(int d=50;d<userList.getUserlist().size();d++)
{
if(d==50)
{
str1=userList.getUserlist().get(d).getUserid().toString();
}
else
{
str1=str1+","+userList.getUserlist().get(d).getUserid().toString();
}
}
req.setUserids(str1); //员工userid列表,最多传50个
req.setStatDate(yesterday);//时间,注意时间格式是YYMMDD
rsp = client.execute(req, accessToken);
json= JSONObject.parseObject(rsp.getBody()).getJSONObject("dingtalk_corp_health_stepinfo_listbyuserid_response").getJSONObject("result").getJSONObject("stepinfo_list");//得到的结果需要用到json拆分。
jr=json.getJSONArray("basic_step_info_vo");
if(jr!=null)
{
for(int z=0;z<jr.size();z++)
{
ht ht=new ht();
forj=jr.getJSONObject(z);
ht.setDepa(list.get(i).getName().toString());
ht.setStat_date(forj.get("stat_date").toString());
ht.setStep_count(forj.get("step_count").toString());
ht.setUserid(forj.get("userid").toString());
htlist.add(ht);
}
}
}
}
return htlist;
}
catch (OApiException e)
{
e.printStackTrace();
}
return null;
}