| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using DingDingDemo.Common;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Caching.Distributed;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.Logging;
- namespace DingDingDemo.Controllers
- {
- /// <summary>
- /// 考勤
- /// </summary>
- [Produces("application/json")]
- [Route("api/[controller]")]
- public class AttendanceController : BaseController
- {
- private readonly ILogger<AttendanceController> _logger;
- private readonly IDistributedCache _cache;
- private readonly IConfiguration _configuration;
- public AttendanceController(IDistributedCache cache, IConfiguration configuration, ILogger<AttendanceController> logger)
- {
- _cache = cache;
- _logger = logger;
- _configuration = configuration;
- }
- /// <summary>
- /// 获取排班列表
- /// </summary>
- /// <param name="date"></param>
- /// <returns></returns>
- [HttpGet("getschedulelist")]
- public async Task<IActionResult> GetScheduleList(DateTime? date)
- {
- string strdate = date == null ? DateTime.Now.ToString("yyyy-MM-dd") : date.Value.ToString("yyyy-MM-dd");
- TokenHelper th = new TokenHelper(_cache, _configuration);
- var strresult = await HttpHelper.HttpGetAsync(string.Format(_configuration["DingTalkSettings:GetSchedule"], th.GetAccessToken()) + "&workDate=" + strdate);
- var result = strresult.ToJObject();
- if (result["errcode"].ToString() == "0")
- {
- var rt = result["result"].ToString().ToJObject();
- return Success("成功", rt["schedules"]);
- }
- else
- {
- return Error(result["errmsg"].ToString());
- }
- }
- /// <summary>
- /// 获取考勤组列表
- /// </summary>
- /// <returns></returns>
- [HttpGet("getgrouplist")]
- public IActionResult GetGroupList()
- {
- TokenHelper th = new TokenHelper(_cache, _configuration);
- return Success("成功", GetGroups(th.GetAccessToken(), 0, 10));
- }
- /// <summary>
- /// 获取列表
- /// </summary>
- /// <param name="token"></param>
- /// <param name="offset"></param>
- /// <param name="size"></param>
- /// <returns></returns>
- [ApiExplorerSettings(IgnoreApi = true)]
- public ArrayList GetGroups(string token, int offset = 0, int size = 10)
- {
- ArrayList arrresult = new ArrayList();
- string url = string.Format(_configuration["DingTalkSettings:GetGroupList"], token);
- //url += "&offset=" + index + "&size=" + size;
- var param = new
- {
- offset,
- size
- };
- var strresult = HttpHelper.HttpPost(url, param.ToJson());
- var result = strresult.ToJObject();
- if (result["errcode"].ToString() == "0")
- {
- var rt = result["result"].ToString().ToJObject();
- var rtlist = rt["groups"].ToJson().ToList<Dictionary<string, object>>();
- arrresult.AddRange(rtlist);
- if (rt["has_more"].ToString().ToLower() == "true")
- {
- arrresult.AddRange(GetGroups(token, offset + size, size));
- }
- }
- return arrresult;
- }
- /// <summary>
- /// 获取打卡列表
- /// </summary>
- /// <param name="userids"></param>
- /// <param name="start"></param>
- /// <param name="end"></param>
- /// <returns></returns>
- [HttpGet("getrecordlist")]
- public async Task<IActionResult> GetRecordList(string[] userids, DateTime? start, DateTime? end)
- {
- if (userids.Length==0)
- {
- return Error("员工id不能为空");
- }
- if (end != null && start != null && end.Value.Subtract(start.Value).TotalDays > 7)
- {
- return Error("时间区间不能超过7天");
- }
- if (start == null && end == null)
- {
- end = DateTime.Now;
- start = end.Value.AddDays(-7);
- }
- TokenHelper th = new TokenHelper(_cache, _configuration);
- string url = string.Format(_configuration["DingTalkSettings:GetRecordList"], th.GetAccessToken());
- //string param = "userIds=" + userid + "&checkDateFrom=" + start.Value.ToString("yyyy-MM-dd HH:mm:ss") + "&checkDateTo=" + end.Value.ToString("yyyy-MM-dd HH:mm:ss");
- var param = new
- {
- userIds = userids,
- checkDateFrom = start.Value.ToString("yyyy-MM-dd HH:mm:ss"),
- checkDateTo = end.Value.ToString("yyyy-MM-dd HH:mm:ss")
- };
- var strresult = await HttpHelper.HttpPostAsync(url, param.ToJson());
- var result = strresult.ToJObject();
- if (result["errcode"].ToString() == "0")
- {
- return Success("成功", result["recordresult"]);
- }
- else
- {
- return Error(result["errmsg"].ToString());
- }
- }
- /// <summary>
- /// 获取打卡结果列表
- /// </summary>
- /// <param name="userids"></param>
- /// <param name="start"></param>
- /// <param name="end"></param>
- /// <returns></returns>
- [HttpGet("getresultlist")]
- public IActionResult GetResultList(string[] userids, DateTime? start, DateTime? end)
- {
- if (userids.Length==0)
- {
- return Error("员工id不能为空");
- }
- if (end != null && start != null && end.Value.Subtract(start.Value).TotalDays > 7)
- {
- return Error("时间区间不能超过7天");
- }
- if (start == null && end == null)
- {
- end = DateTime.Now;
- start = end.Value.AddDays(-7);
- }
- TokenHelper th = new TokenHelper(_cache, _configuration);
- return Success("成功", GetResults(th.GetAccessToken(), userids, start.Value, end.Value, 0, 50));
- }
- /// <summary>
- /// 获取列表
- /// </summary>
- /// <param name="token"></param>
- /// <param name="userids"></param>
- /// <param name="start"></param>
- /// <param name="end"></param>
- /// <param name="offset"></param>
- /// <param name="size"></param>
- /// <returns></returns>
- [ApiExplorerSettings(IgnoreApi = true)]
- public ArrayList GetResults(string token, string[] userids, DateTime start, DateTime end, int offset = 0, int size = 10)
- {
- ArrayList arrresult = new ArrayList();
- string url = string.Format(_configuration["DingTalkSettings:GetRecordResult"], token);
- //url += "&userIdList=" + userid + "&workDateFrom=" + start.ToString("yyyy-MM-dd HH:mm:ss") + "&workDateTo=" + end.ToString("yyyy-MM-dd HH:mm:ss");
- //url += "&offset=" + index + "&limit=" + size;
- var param = new
- {
- userIdList= userids,
- workDateFrom= start.ToString("yyyy-MM-dd HH:mm:ss"),
- workDateTo= end.ToString("yyyy-MM-dd HH:mm:ss"),
- offset,
- limit= size
- };
- var strresult = HttpHelper.HttpPost(url, param.ToJson());
- var result = strresult.ToJObject();
- if (result["errcode"].ToString() == "0")
- {
- var rtlist = result["recordresult"].ToJson().ToList<Dictionary<string, object>>();
- arrresult.AddRange(rtlist);
- if (result["hasMore"].ToString().ToLower() == "true")
- {
- arrresult.AddRange(GetResults(token, userids, start, end, offset + size, size));
- }
- }
- return arrresult;
- }
- /// <summary>
- /// 查询请假状态
- /// </summary>
- /// <returns></returns>
- [HttpGet("getleavestatuslist")]
- public IActionResult GetLeaveStatusList(string[] userids, DateTime? start, DateTime? end)
- {
- if (userids.Length == 0)
- {
- return Error("员工id不能为空");
- }
- if (end != null && start != null && end.Value.Subtract(start.Value).TotalDays > 180)
- {
- return Error("时间区间不能超过180天");
- }
- if (start == null && end == null)
- {
- end = DateTime.Now;
- start = DateTime.Parse(end.Value.ToString("yyyy-MM") + "-01");
- }
- TokenHelper th = new TokenHelper(_cache, _configuration);
- return Success("成功", GetLeaveStatus(th.GetAccessToken(), userids, start.Value, end.Value, 0, 20));
- }
- /// <summary>
- /// 获取列表
- /// </summary>
- /// <param name="token"></param>
- /// <param name="userids"></param>
- /// <param name="start"></param>
- /// <param name="end"></param>
- /// <param name="offset"></param>
- /// <param name="size"></param>
- /// <returns></returns>
- [ApiExplorerSettings(IgnoreApi = true)]
- public ArrayList GetLeaveStatus(string token, string[] userids, DateTime start, DateTime end, int offset = 0, int size = 10)
- {
- ArrayList arrresult = new ArrayList();
- string url = string.Format(_configuration["DingTalkSettings:GetLeaveStatus"], token);
- var param = new
- {
- userid_list = userids,
- start_time = Common.Common.GetTimeStamp(start),
- end_time = Common.Common.GetTimeStamp(end),
- offset,
- size
- };
- var strresult = HttpHelper.HttpPost(url, param.ToJson());
- var result = strresult.ToJObject();
- if (result["errcode"].ToString() == "0")
- {
- var rt = result["result"].ToString().ToJObject();
- var rtlist = rt["leave_status"].ToJson().ToList<Dictionary<string, object>>();
- arrresult.AddRange(rtlist);
- if (rt["has_more"].ToString().ToLower() == "true")
- {
- arrresult.AddRange(GetGroups(token, offset + size, size));
- }
- }
- return arrresult;
- }
- /// <summary>
- /// 获取请假时长
- /// </summary>
- /// <returns></returns>
- [HttpGet("getleaveapproveduration")]
- public IActionResult GetLeaveApproveDuration(string userid, DateTime? start, DateTime? end)
- {
- if (string.IsNullOrEmpty(userid))
- {
- return Error("员工id不能为空");
- }
- //if (end != null && start != null && end.Value.Subtract(start.Value).TotalDays > 180)
- //{
- // return Error("时间区间不能超过180天");
- //}
- if (start == null && end == null)
- {
- end = DateTime.Now;
- start = DateTime.Parse(end.Value.ToString("yyyy-MM") + "-01");
- }
- TokenHelper th = new TokenHelper(_cache, _configuration);
- string url = string.Format(_configuration["DingTalkSettings:GetLeaveApproveDuration"], th.GetAccessToken());
- var param = new
- {
- userid ,
- from_date = start,
- to_date = end
- };
- var strresult = HttpHelper.HttpPost(url, param.ToJson());
- var result = strresult.ToJObject();
- if (result["errcode"].ToString() == "0")
- {
- var rt = result["result"].ToString().ToJObject();
- return Success("成功", rt["duration_in_minutes"]);
- }
- else
- {
- return Error(result["errmsg"].ToString());
- }
- }
- /// <summary>
- /// 获取用户考勤组
- /// </summary>
- /// <param name="userid"></param>
- /// <returns></returns>
- [HttpGet("getusergroup")]
- public async Task<IActionResult> GetUserGroup(string userid)
- {
- if (string.IsNullOrEmpty(userid))
- {
- return Error("员工id不能为空");
- }
- TokenHelper th = new TokenHelper(_cache, _configuration);
- var strresult = await HttpHelper.HttpGetAsync(string.Format(_configuration["DingTalkSettings:GetUserGroup"], th.GetAccessToken()) + "&userid=" + userid);
- var result = strresult.ToJObject();
- if (result["errcode"].ToString() == "0")
- {
- return Success("成功", result["result"]);
- }
- else
- {
- return Error(result["errmsg"].ToString());
- }
- }
- }
- }
|