/// <summary>/// 部门数据返回及状态码/// </summary>public class DingDeptMessage{/// <summary>/// 返回码/// </summary>public string errcode { get; set; }/// <summary>/// 对返回码的文本描述内容/// </summary>public string errmsg { get; set; }/// <summary>///部门列表数据/// </summary>public List<DingDeptData> department { get; set; }}   /// <summary>/// 部门数据/// </summary>public class DingDeptData{/// <summary>///  部门自定义字段/// </summary>public string ext { get; set; }/// <summary>/// 是否同步创建一个关联此部门的企业群,true表示是,false表示不是/// </summary>public bool createDeptGroup { get; set; }/// <summary>///  部门名称/// </summary>public string name { get; set; }/// <summary>/// 部门id/// </summary>public long id { get; set; }/// <summary>/// 当群已经创建后,是否有新人加入部门会自动加入该群,true表示是,false表示不是/// </summary>public bool autoAddUser { get; set; }/// <summary>/// 父部门id,根部门为1/// </summary>public string parentid { get; set; }}  /// <summary>/// 用户数据返回及状态码/// </summary>public class DingUserMessage{/// <summary>/// 返回码/// </summary>public string errcode { get; set; }/// <summary>/// 对返回码的文本描述内容/// </summary>public string errmsg { get; set; }/// <summary>/// 在分页查询时返回,代表是否还有下一页更多数据/// </summary>public bool hasMore { get; set; }/// <summary>///    成员列表/// </summary>public List<DingUser> userlist { get; set; }}/// <summary>/// 用户数据/// </summary>public class DingUser{/// <summary>/// 员工id/// </summary>public string userid { get; set; }/// <summary>/// 成员名称/// </summary>public string name { get; set; }}/// <summary>/// 考勤数据返回及状态码/// </summary>public class DingUserKQ_Message{/// <summary>/// 返回码/// </summary>public string errcode { get; set; }/// <summary>/// 对返回码的文本描述内容/// </summary>public string errmsg { get; set; }/// <summary>/// 在分页查询时返回,代表是否还有下一页更多数据/// </summary>public bool hasMore { get; set; }/// <summary>///  成员列表/// </summary>public List<Recordresult> recordresult { get; set; }}/// <summary>/// 钉钉考勤结果接收类/// </summary>public class Recordresult{public long ApproveId { get; set; }public string BaseAccuracy { get; set; }public string BaseAddress { get; set; }public string BaseCheckTime { get; set; }public string BaseLatitude { get; set; }public string BaseLongitude { get; set; }public string BaseMacAddr { get; set; }public string BaseSsid { get; set; }public string CheckType { get; set; }public string ClassId { get; set; }public string DeviceId { get; set; }public string GmtCreate { get; set; }public string GmtModified { get; set; }public long GroupId { get; set; }public long Id { get; set; }public string InvalidRecordMsg { get; set; }public string InvalidRecordType { get; set; }public string IsLegal { get; set; }public string LocationMethod { get; set; }public string LocationResult { get; set; }public string OutsideRemark { get; set; }public string PlanCheckTime { get; set; }public long PlanId { get; set; }public string ProclnstId { get; set; }public string SourceType { get; set; }public string TimeResult { get; set; }public string UserAccuracy { get; set; }public string UserAddress { get; set; }public long UserCheckTime { get; set; }public string UserId { get; set; }public string UserLatitude { get; set; }public string UserLongitude { get; set; }public string UserMacAddr { get; set; }public string UserSsid { get; set; }public long WorkDate { get; set; }}
/// <summary>/// 日期格式转换/// </summary>/// <param name="dateTime"></param>/// <returns></returns>public static string TransformDataLong(DateTime? dateTime){string result = "";if (dateTime.HasValue){result = dateTime.Value.ToString("yyyy-MM-dd HH:mm:ss");}return result;}
/// <summary>/// 生成Token字段类/// </summary>/// <returns></returns>public class wx_token{public DateTime dtime { get; set; }public string access_token { get; set; }}

using System;
using System.Web;
using System.Web.Caching;
using System.Collections;
using System.Text.RegularExpressions;namespace BMOA.Common
{/// <summary>/// <para> </para>///  常用工具类——缓存类/// <para> --------------------------------------------------------------------------------</para>/// <para> SetCache:设置当前应用程序指定CacheKey的Cache值[ +2方法重载 ]</para>/// <para> GetCache:获取当前应用程序指定CacheKey的Cache值</para>/// <para> RemoveCache:删除缓存</para>/// </summary>public class ZCache{static Cache GetCacheObject(){HttpContext context = HttpContext.Current;if (context != null){return context.Cache;}else{return HttpRuntime.Cache;}}#region 设置当前应用程序指定CacheKey的Cache值/// <summary>/// 设置当前应用程序指定CacheKey的Cache值/// </summary>/// <param name="CacheKey">键</param>/// <param name="objObject"></param>public static void SetCache(string CacheKey, object objObject){System.Web.Caching.Cache objCache = GetCacheObject();objCache.Insert(CacheKey, objObject);}#endregion#region 获取当前应用程序指定CacheKey的Cache值/// <summary>/// 获取当前应用程序指定CacheKey的Cache值/// </summary>/// <param name="CacheKey"></param>/// <returns></returns>public static object GetCache(string CacheKey){System.Web.Caching.Cache objCache = GetCacheObject();return objCache[CacheKey];}#endregion#region 设置当前应用程序指定CacheKey的Cache值[带过期时间等参数]/// <summary>/// 设置当前应用程序指定CacheKey的Cache值/// </summary>/// <param name="CacheKey"></param>/// <param name="objObject"></param>/// <param name="absoluteExpiration">可设置为Cache.NoAbsoluteExpiration</param>/// <param name="slidingExpiration">可设置为Cache.NoSlidingExpiration</param>public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration){System.Web.Caching.Cache objCache = GetCacheObject();objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);}#endregion#region 删除缓存/// <summary>/// 删除缓存/// </summary>/// <param name="CacheKey"></param>public static void RemoveCache(string CacheKey){System.Web.Caching.Cache objCache = GetCacheObject();objCache.Remove(CacheKey);}#endregion/// <summary>/// 清空Cash对象/// </summary>public static void Clear(){Cache _cache = GetCacheObject();IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();ArrayList al = new ArrayList();while (CacheEnum.MoveNext()){al.Add(CacheEnum.Key);}foreach (string key in al){_cache.Remove(key);}}/// <summary>/// 根据正则表达式的模式移除Cache/// </summary>/// <param name="pattern">模式</param>public static void RemoveByPattern(string pattern){Cache _cache = GetCacheObject();IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();Regex regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);while (CacheEnum.MoveNext()){if (regex.IsMatch(CacheEnum.Key.ToString()))_cache.Remove(CacheEnum.Key.ToString());}}}
}
/// <summary>/// 获取dingding token/// </summary>/// <returns></returns>private string GetDingDing_access_token(){var dd_access_token = ZCache.GetCache("dd_access_token") as wx_token;if (dd_access_token != null && dd_access_token.dtime > DateTime.Now){return dd_access_token.access_token;}else{DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");OapiGettokenRequest request = new OapiGettokenRequest{Appkey = AppID,         --授权IdAppsecret = AppSecret   --授权秘钥};request.SetHttpMethod("GET");OapiGettokenResponse response = client.Execute(request);dd_access_token = new wx_token(){dtime = DateTime.Now.AddMinutes(120),access_token = response.AccessToken};ZCache.SetCache("dd_access_token", dd_access_token);return response.AccessToken;}}
        /// <summary>/// 获取钉钉考勤记录/// </summary>public List<Recordresult>DingDingcCheckWorkAttendance(){var recordresults = new List<Recordresult>();        //考勤记录(临时记录,不入库)var today = DateTime.Now;                            //今天var yesterday = today.AddDays(-1);                   //昨天var weekSeveral = Convert.ToInt32(today.DayOfWeek);  //获取今天是周几(今天取昨天的考勤,双休(周天,周一跳过))try{if (weekSeveral >1){var token = GetDingDing_access_token();      //获取钉钉token#region 获取钉钉考勤//获取公司钉钉部门IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");OapiDepartmentListRequest req = new OapiDepartmentListRequest();req.SetHttpMethod("GET");OapiDepartmentListResponse rsp = client.Execute(req, token);var dempList = JsonConvert.DeserializeObject<DingDeptMessage>(rsp.Body);if (dempList != null && dempList.errcode == "0" && dempList.errmsg == "ok" && dempList.department.Count() > 0){//获取部门存在的员工Idfor (int i = 0; i < dempList.department.Count(); i++){//获取钉钉部门下的员工IDingTalkClient demoClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/simplelist");OapiUserSimplelistRequest dempreq = new OapiUserSimplelistRequest{DepartmentId = dempList.department[i].id};dempreq.SetHttpMethod("GET");var demprsp = demoClient.Execute(dempreq, token);var Data = JsonConvert.DeserializeObject<DingUserMessage>(demprsp.Body);if (Data.userlist.Any()){var userIds = Data.userlist.Select(m => m.userid).ToList();var stateTime = TransformDataLong(yesterday);var endTime = TransformDataLong(today);//批量获取范围内的用户考勤记录IDingTalkClient kq_client = new DefaultDingTalkClient("https://oapi.dingtalk.com/attendance/listRecord");OapiAttendanceListRecordRequest kq_req = new OapiAttendanceListRecordRequest{UserIds = userIds,CheckDateFrom = stateTime,CheckDateTo = endTime,};kq_req.SetHttpMethod("POST");OapiAttendanceListRecordResponse kq_rsp = kq_client.Execute(kq_req, token);var result = JsonConvert.DeserializeObject<DingUserKQ_Message>(kq_rsp.Body);if (result.errcode == "0" && result.errmsg == "ok" && result.recordresult.Any()){recordresults.AddRange(result.recordresult);}}}}#endregion}}catch (Exception e){var msg = e.Message;throw new Exception(e.Message);}finally{}    return recordresults;}

.Net获取公司所有员工前一天钉钉考勤记录相关推荐

  1. 叮叮获取所有用户信息_钉钉如何获取员工位置?

    展开全部 钉钉通过32313133353236313431303231363533e4b893e5b19e31333365666331"签到功能获取位置,最新版本即便你屏蔽了WIFI和GPS ...

  2. 员工用钉钉下载文件到手机被开除,状告公司要求赔偿30多万

    刘某某原是上海盒马网络科技有限公司(以下简称盒马公司)的一名员工,令她疑惑的是,工作兢兢业业的自己却接连两个季度考核不合格,并最终被公司单方面解约.对此,她将盒马公司告上法院.上了庭,她才知道是手机上 ...

  3. 获取钉钉企业部门用户信息

    获取钉钉企业用户信息 有一个需求,需要获取本公司钉钉里面所有部门的员工信息,查阅钉钉官方文档后整理出了以下步骤: 1.登录钉钉企业管理员账号,创建一个应用 因为是公司内部使用区别第三方,所以选择企业内 ...

  4. 从企业钉钉的接口获取数据

    公司需要,搞了一下钉钉的接口. 首先说明我是帮使用钉钉软件的客户通过钉钉的接口获取数据,所以说我是有权限的.如果你是ISV,去看官方文档吧. 我暂时还不知道ISV开发人员是什么需求,但是至少对于钉钉来 ...

  5. 钉钉二次开发-组织机构同步 获取用户信息 单点登录接口

    建用户 调试工具:在线调试 请求方式:POST(HTTPS) 请求地址:https://oapi.dingtalk.com/user/create?access_token=ACCESS_TOKEN ...

  6. thinkphp5 引入钉钉接口 调取企业员工信息 存入数据库

    原创文章转自:https://www.ympfb.com/show-29-30-1.html 大家在使用tp5 开发的时候,大部分都需要用到第三方SDK ,那么如何引入呢? 今天站长为大家分享一下 我 ...

  7. 赚四五百万,一款打卡作弊软件的 CEO 被判5年6个月!因破坏了钉钉系统获取用户真实地理位置...

    ‍ ‍上面这个公号,是我的一个备用号,平时我也会发一些很短.很生活的图片.文字,也会推荐看到的好书.节目.电影等. 1 发现商机 昨天看到这个案例,蛮唏嘘的,特别对于我们技术人创业来讲,也算是提了一个 ...

  8. 7年员工因拒绝钉钉打卡被开除,索赔近60万,终审判决来了!

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Life is more like a battlefield. ...

  9. 【钉钉-场景化能力包】管理员工在岗/离岗情况

    客户痛点 随着生活质量水平的提高,人们对居住的条件也提出了更高的要求,同时物业公司对物业员工的管理也上升了一个难度.员工不到岗.到岗不及时.早退等情况不仅影响了物业公司在业主心目中的权威,更降低了物业 ...

最新文章

  1. 2022-2028年中国汽车用胶管行业市场深度分析及投资前景趋势报告
  2. mysql多表连接 索引_MySQL多表查询之外键、表连接、子查询、索引
  3. 在Struts 2中实现文件上传
  4. Oracle中的Union、Union All、Intersect、Minus 使用用法区别
  5. centos08-Linux服务器上发布java项目
  6. 使用sklearn自带公式计算余弦相似度
  7. rhel5.5_Apache配置openssl支持https服务
  8. 征战蓝桥 —— 2016年第七届 —— C/C++A组第7题——剪邮票
  9. 学习angularjs的内置API函数
  10. Python使用os.listdir()函数来得目录内容的介绍
  11. 【ROS系统】解决找不到用户工作空间下的程序包的问题——E:No such package
  12. 解决React Native使用Fetch API请求网络报Network request failed
  13. 昨天写的档,今天就被转盗,51CTO老大们来管管
  14. WEB攻防-ASP安全
  15. 跨境B2B电商市场血雨腥风,供应链管理系统成争夺焦点
  16. 视频剪切合并器如何分割音频文件
  17. 《乐者为王——自由软件Linux之父李纳斯·托沃兹自述》
  18. 华文行楷字帖欣赏_毛笔行书欣赏,华文行楷在线转换,偏旁部首练字帖,
  19. hadoop配置文件workers
  20. 我的2018新年计划

热门文章

  1. 什么是字节对齐,为什么需要字节对齐
  2. python爬取微信好友头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法...
  3. 哪吒之魔童降世视听语言影评_《哪吒之魔童降世》观后感——不用吹爆,但值得点赞...
  4. CSS实现反方向圆角
  5. 利用for循环写三角形(倒立反方向直角三角形 )
  6. Python Appium自动化测试框架 综合实践案例(中)
  7. java string转elements_Java异常堆栈信息转String
  8. 谈谈c语言程序如何变成可执行文件,C语言从代码变成可执行程序的步骤
  9. jNs 在 ASP.NET MVC 项目中的应用
  10. mfc对话框ok没效果_利用PS制作逼真双重曝光效果案例演示,合成紫色城市建筑风格海报图片...