Commit c3544982 by 陶然

升级统计

parent 9b731e1b
using Kivii;
using Kivii.HumanResources.Entities;
using Kivii.Linq;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Jst.HumanResources.Oa.Transforms
{
[RequiresAnyRole(SystemRoles.Everyone)]
public class AttendanceQueryEx : RestfulExecution<Attendance>
{
#region QueryArgs
public virtual int? Skip { get; set; }
public virtual int? Take { get; set; }
public virtual string OrderBy { get; set; }
public string OrderByDesc { get; set; }
public virtual string Include { get; set; }
public virtual string Fields { get; set; }
public string QueryKeys { get; set; }
public string QueryValues { get; set; }
#endregion
public string Type { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
if (Type == null) Type = "day";
if (Type.ToLower() != "month") Type = "day";
var conn = KiviiContext.GetOpenedDbConnection<Attendance>();
var dynamicParams = Request.GetRequestParams();
var autoQuery = Request.TryResolve<IAutoQueryDb>();
autoQuery.IncludeTotal = true;
var request = new RestfulQuery<Attendance>();
request = request.PopulateWith(this);
var sqlExpress = autoQuery.CreateQuery(Request, conn, request, dynamicParams);
sqlExpress.Rows = null;
var results = autoQuery.Execute(Request, conn, request, sqlExpress);
var rtns = new RestfulQueryResponse<Attendance>();
rtns.Results = new List<Attendance>();
results.Results.ForEach(o => { o.BaseCheckTime = DateTime.Parse(o.BaseCheckTime.ToString("yyyy-MM-dd")); o.BizType = o.BaseCheckTime.ToString("yyyy-MM"); });
//按月统计
var month = new List<Attendance>();
var group = results.Results.GroupBy(o => new { o.BaseCheckTime, o.UserName, o.UserDepartment });
foreach (var kv in group)
{
var rtn = new Attendance();
rtn.BaseCheckTime = kv.Key.BaseCheckTime;
rtn.UserDepartment = kv.Key.UserDepartment;
rtn.UserName = kv.Key.UserName;
rtn.Metadata = new Dictionary<string, string>();
foreach (var item in kv)
{
rtn.BizType = item.BizType;
//if (item.TimeResult == "Normal") continue;
item.CreatorName = string.Empty;
item.CreatorName = (item.CheckType == "OnDuty" ? "上班" : "下班");
item.CheckType = (item.CheckType == "OnDuty" ? "上午" : "下午");
item.TimeResult = item.TimeResult == "Early" ? "早退" : (item.TimeResult == "Late" ? "迟到" : (item.TimeResult == "SeriousLate" ? "严重迟到" : (item.TimeResult == "Absenteeism" ? "旷工迟到" : (item.TimeResult == "NotSigned" ? "未打卡" : (item.TimeResult == "Normal" ? "正常" : "请假")))));
rtn.Metadata[item.CheckType] = item.TimeResult;
if (!item.CreatorName.IsNullOrEmpty())
{
rtn.Metadata[item.CreatorName] = "";
if (item.UserCheckTime != null) rtn.Metadata[item.CreatorName] = item.UserCheckTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
}
//rtn.TimeResult += $"{item.CheckType}{item.TimeResult} ";
if (!item.Summary.IsNullOrEmpty() & rtn.Summary != item.Summary) rtn.Summary += item.Summary;
if (!item.Remark.IsNullOrEmpty() & rtn.Remark != item.Remark) rtn.Remark += item.Remark;
}
if (!rtn.Metadata.ContainsKey("上午")) rtn.Metadata["上午"] = "";
if (!rtn.Metadata.ContainsKey("下午")) rtn.Metadata["下午"] = "";
if (rtn.Metadata["上午"] == rtn.Metadata["下午"]) rtn.TimeResult = rtn.Metadata["上午"];
//if (rtn.Metadata["上午"] == rtn.Metadata["下午"]) rtn.TimeResult = $"{(rtn.Metadata["上午"].IsNullOrEmpty() ? "" : "上下班" + rtn.Metadata["上午"])}";
else
{
rtn.TimeResult = $"{(rtn.Metadata["上午"].IsNullOrEmpty() ? "" : "上午" + rtn.Metadata["上午"])} {(rtn.Metadata["下午"].IsNullOrEmpty() ? "" : "下午" + rtn.Metadata["下午"])}";
}
month.Add(rtn);
if (Type.ToLower() == "day") rtns.Results.Add(rtn);
}
if (Type.ToLower() == "month")
{
var groupMonth = month.GroupBy(o => new { o.BizType, o.UserName, o.UserDepartment });
foreach (var kv in groupMonth)
{
var rtn = new Attendance();
rtn.BizType = kv.Key.BizType;
rtn.BaseCheckTime = DateTime.Parse(rtn.BizType);
rtn.UserDepartment = kv.Key.UserDepartment;
rtn.UserName = kv.Key.UserName;
rtn.Metadata = new Dictionary<string, string>();
foreach (var item in kv)
{
var key = item.BaseCheckTime.Day;
rtn.Metadata[key.ToString()] = item.TimeResult.IsNullOrEmpty() ? "正常" : item.TimeResult;
}
rtns.Results.Add(rtn);
}
}
rtns.Total = rtns.Results.Count;
return rtns;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment