/// <summary>
/// 获取员工全年考核记录 2018年5月23日
/// </summary>
/// <param name="queryStr"></param>
/// <returns></returns>
[HttpPost]
public JsonResult GetList(string queryStr)
{
try
{
string CustodyId = "";
DateTime d1 = DateTime.Now;
string DateYear = d1.Year.ToString();
string DateMonth = d1.Month.ToString();
if (queryStr == "")
{
CustodyId = LoginInfo.CustodyId.Split(',')[0];
}
else
{
CustodyId = queryStr.Split('&')[0].Split('=')[1];
DateYear = queryStr.Split('&')[1].Split('=')[1].Split('-')[0];
}
//获取全年考勤记录
SqlQuery sq = new Select().From<VPeople_MouthAttendance>()
.Where(VPeople_MouthAttendance.Columns.CustodyId).IsEqualTo(CustodyId)
.And(VPeople_MouthAttendance.Columns.Year).IsEqualTo(DateYear);
List<VPeople_MouthAttendance> list = sq.ExecuteTypedList<VPeople_MouthAttendance>();
List<UserInfo> ulist = new List<UserInfo>();
//将拥有记录的人员录入
foreach (var item in list)
{
UserInfo UI = new UserInfo();
UI.UserID = item.UserId;
ulist.Add(UI);
}
//将拥有记录的人员去重
List<UserInfo> NoUlist = ulist.Where((x, i) => ulist.FindIndex(z => z.UserID == x.UserID) == i).ToList();
//循环去重后的集合
foreach (var item in NoUlist)
{
int YearNum = 0;
int YearChuQinNum = 0;
//定义月考勤集合
List<YearKaoqin> YKlist = new List<YearKaoqin>();
//循环全年考勤记录
foreach (var UserItem in list)
{
//如果全年考勤记录用户ID等于去重后的ID便记录
if (UserItem.UserId == item.UserID)
{
item.Name = UserItem.Name;
//月考勤记录类
YearKaoqin YKQ = new YearKaoqin();
YKQ.Month =int.Parse(UserItem.Month);
PropertyInfo[] propertys = UserItem.GetType().GetProperties();
int Num = 0;
int ChuQinNum = 0;
//遍历循环类属性和值
foreach (PropertyInfo property in propertys)
{
object value = property.GetValue(UserItem, null);
for (int i = 1; i <= 31; i++)
{
string N = "Day" + i + "Name";
if (property.Name == N && value != null)
{
//出勤+1
if (value.ToString() == "出勤")
{
Num++;
YearNum++;
}
}
//不为空便为值班 应当出勤+1
if (property.Name == "Expr" + i && value != null)
{
ChuQinNum++;
YearChuQinNum++;
}
}
YKQ.MonthChuqin = ChuQinNum.ToString();
YKQ.ActualChuqin = Num.ToString();
//如果出勤 值班为0 出勤率为0
if (Num <= 0| ChuQinNum<=0)
{
YKQ.MonthChuqinLv = "0";
}
else
{
decimal ChuQinLv = Math.Round(decimal.Parse(YKQ.ActualChuqin) / decimal.Parse(YKQ.MonthChuqin) * 100, 2);
YKQ.MonthChuqinLv = ChuQinLv.ToString();
}
}
item.YearChuqin = YearChuQinNum.ToString();
item.YearActualChuqin = YearNum.ToString();
if (YearNum <= 0 | YearChuQinNum <= 0)
{
item.YearChuqinLv = "0";
}
else
{
decimal ChuQinLv = Math.Round(decimal.Parse(item.YearActualChuqin) / decimal.Parse(item.YearChuqin) * 100, 2);
item.YearChuqinLv = ChuQinLv.ToString();
}
YKlist.Add(YKQ);
item.Ykaoqin = YKlist;
}
}
}
//如果人员考勤不足12个月补足其他月份
foreach (var item in NoUlist)
{
if (item.Ykaoqin.Count<12)
{
List<YearKaoqin> YKlist = new List<YearKaoqin>();
//获取已存在的月份
int[] SameMonth = (from info in item.Ykaoqin select info.Month).ToArray();
//定义12个月份
int[] Data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
//两个数组比较取考勤记录中没有的月份
int[] arrAdd = Data.Except(SameMonth).ToArray();
//循环数组中的月份加入记录表
foreach (var Month in arrAdd)
{
YearKaoqin YK = new YearKaoqin();
YK.Month = Month;
YK.MonthChuqin = "0";
YK.ActualChuqin = "0";
YK.MonthChuqinLv = "0";
YKlist.Add(YK);
}
YKlist.AddRange(item.Ykaoqin);
//集合按照月份进行排序
item.Ykaoqin = YKlist.OrderBy(x => x.Month).ToList();
}
}
var json = new
{
total = NoUlist.Count,
rows = NoUlist.Select((r, i) => new
{
Name= r.Name,
UserID=r.UserID,
YearChuqin=r.YearChuqin,
YearActualChuqin=r.YearActualChuqin,
YearChuqinLv= r.YearChuqinLv,
Ykaoqin =r.Ykaoqin.Select((n, l) => new
{
Month= n.Month,
MonthChuqin=n.MonthChuqin,
ActualChuqin=n.ActualChuqin,
MonthChuqinLv=n.MonthChuqinLv,
})
})
};
return Json(json);
}
catch (Exception e)
{
throw;
}
}
}