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());
}
}
}
}