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 { /// /// 考勤 /// [Produces("application/json")] [Route("api/[controller]")] public class AttendanceController : BaseController { private readonly ILogger _logger; private readonly IDistributedCache _cache; private readonly IConfiguration _configuration; public AttendanceController(IDistributedCache cache, IConfiguration configuration, ILogger logger) { _cache = cache; _logger = logger; _configuration = configuration; } /// /// 获取排班列表 /// /// /// [HttpGet("getschedulelist")] public async Task 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()); } } /// /// 获取考勤组列表 /// /// [HttpGet("getgrouplist")] public IActionResult GetGroupList() { TokenHelper th = new TokenHelper(_cache, _configuration); return Success("成功", GetGroups(th.GetAccessToken(), 0, 10)); } /// /// 获取列表 /// /// /// /// /// [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>(); arrresult.AddRange(rtlist); if (rt["has_more"].ToString().ToLower() == "true") { arrresult.AddRange(GetGroups(token, offset + size, size)); } } return arrresult; } /// /// 获取打卡列表 /// /// /// /// /// [HttpGet("getrecordlist")] public async Task 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()); } } /// /// 获取打卡结果列表 /// /// /// /// /// [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)); } /// /// 获取列表 /// /// /// /// /// /// /// /// [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>(); arrresult.AddRange(rtlist); if (result["hasMore"].ToString().ToLower() == "true") { arrresult.AddRange(GetResults(token, userids, start, end, offset + size, size)); } } return arrresult; } /// /// 查询请假状态 /// /// [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)); } /// /// 获取列表 /// /// /// /// /// /// /// /// [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>(); arrresult.AddRange(rtlist); if (rt["has_more"].ToString().ToLower() == "true") { arrresult.AddRange(GetGroups(token, offset + size, size)); } } return arrresult; } /// /// 获取请假时长 /// /// [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()); } } /// /// 获取用户考勤组 /// /// /// [HttpGet("getusergroup")] public async Task 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()); } } } }