294 lines
13 KiB
C#
294 lines
13 KiB
C#
|
using Model;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
namespace BLL
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 事故类型
|
|||
|
/// </summary>
|
|||
|
public static class DoorServerService
|
|||
|
{
|
|||
|
public static Model.SUBQHSEDB db = Funs.DB;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 根据主键获取事故类型
|
|||
|
/// </summary>
|
|||
|
/// <param name="accidentTypeId"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static Model.T_d_EmployInOutRecord GetEmployInOutRecordById(string id)
|
|||
|
{
|
|||
|
return Funs.DB.T_d_EmployInOutRecord.FirstOrDefault(e => e.NewID == id);
|
|||
|
}
|
|||
|
|
|||
|
#region 根据出入记录 写入考勤记录
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 根据出入记录 写入考勤记录
|
|||
|
/// </summary>
|
|||
|
public static void InsertEmployInOutRecord(Model.SitePerson_PersonInOut newInOut)
|
|||
|
{
|
|||
|
using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString))
|
|||
|
|
|||
|
{
|
|||
|
if (newInOut.ChangeTime.HasValue)
|
|||
|
{
|
|||
|
Model.T_d_EmployInOutRecord newInOutRecord = new Model.T_d_EmployInOutRecord
|
|||
|
{
|
|||
|
NewID = SQLHelper.GetNewID(),
|
|||
|
ProjectId = newInOut.ProjectId,
|
|||
|
InstallationName = ProjectService.GetProjectNameByProjectId(newInOut.ProjectId),
|
|||
|
RecordDate = newInOut.ChangeTime.Value.Date,
|
|||
|
IDCardNo = newInOut.IdentityCard,
|
|||
|
};
|
|||
|
////获取人员
|
|||
|
newInOutRecord.UnitId = newInOut.UnitId;
|
|||
|
newInOutRecord.UnitName = newInOut.UnitName;
|
|||
|
newInOutRecord.EmployNO = newInOut.IdentityCard;
|
|||
|
newInOutRecord.EmployName = newInOut.PersonName;
|
|||
|
newInOutRecord.PostId = newInOut.WorkPostId;
|
|||
|
newInOutRecord.PostName = newInOut.WorkPostName;
|
|||
|
|
|||
|
#region 上下班时间
|
|||
|
|
|||
|
///上午上班 8
|
|||
|
DateTime TWorkIn1 = newInOut.ChangeTime.Value.Date.AddHours(8);
|
|||
|
///上午下班 12:30
|
|||
|
DateTime TOffDuty1 = newInOut.ChangeTime.Value.Date.AddHours(12).AddMinutes(30);
|
|||
|
///下午上班 1:30
|
|||
|
DateTime TWorkIn2 = newInOut.ChangeTime.Value.Date.AddHours(13).AddMinutes(30);
|
|||
|
///下午下班 7
|
|||
|
DateTime TOffDuty2 = newInOut.ChangeTime.Value.Date.AddHours(19);
|
|||
|
if (newInOut.IsIn == true)
|
|||
|
{
|
|||
|
///上午上班
|
|||
|
if (newInOut.ChangeTime < TOffDuty1)
|
|||
|
{
|
|||
|
newInOutRecord.WorkIn1 = newInOut.ChangeTime;
|
|||
|
}
|
|||
|
else if (newInOut.ChangeTime < TOffDuty2)
|
|||
|
{
|
|||
|
newInOutRecord.WorkIn2 = newInOut.ChangeTime;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
newInOutRecord.WorkIn3 = newInOut.ChangeTime;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
///上午下班
|
|||
|
if (newInOut.ChangeTime < TWorkIn2)
|
|||
|
{
|
|||
|
newInOutRecord.OffDuty1 = newInOut.ChangeTime;
|
|||
|
}
|
|||
|
else if (newInOut.ChangeTime < TOffDuty2.AddHours(1))
|
|||
|
{
|
|||
|
newInOutRecord.OffDuty2 = newInOut.ChangeTime;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
newInOutRecord.OffDuty3 = newInOut.ChangeTime;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion 上下班时间
|
|||
|
|
|||
|
bool isInsert = false;
|
|||
|
var getInOutRecord =db.T_d_EmployInOutRecord.FirstOrDefault(x => x.ProjectId == newInOut.ProjectId && x.IDCardNo == newInOut.IdentityCard && x.RecordDate == newInOut.ChangeTime.Value.Date);
|
|||
|
if (getInOutRecord == null)
|
|||
|
{
|
|||
|
isInsert = true;
|
|||
|
}
|
|||
|
if (isInsert)
|
|||
|
{
|
|||
|
newInOutRecord.ManHours = 4;
|
|||
|
newInOutRecord.ManOverHours = 0;
|
|||
|
db.T_d_EmployInOutRecord.InsertOnSubmit(newInOutRecord);
|
|||
|
db.SubmitChanges();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
#region 计算人工时
|
|||
|
|
|||
|
if (newInOutRecord.WorkIn1.HasValue && (!getInOutRecord.WorkIn1.HasValue || getInOutRecord.WorkIn1 > newInOutRecord.WorkIn1))
|
|||
|
{
|
|||
|
getInOutRecord.WorkIn1 = newInOutRecord.WorkIn1;
|
|||
|
}
|
|||
|
if (newInOutRecord.WorkIn2.HasValue && (!getInOutRecord.WorkIn2.HasValue || getInOutRecord.WorkIn2 > newInOutRecord.WorkIn2))
|
|||
|
{
|
|||
|
getInOutRecord.WorkIn2 = newInOutRecord.WorkIn2;
|
|||
|
}
|
|||
|
if (newInOutRecord.WorkIn3.HasValue && (!getInOutRecord.WorkIn3.HasValue || getInOutRecord.WorkIn3 > newInOutRecord.WorkIn3))
|
|||
|
{
|
|||
|
getInOutRecord.WorkIn3 = newInOutRecord.WorkIn3;
|
|||
|
}
|
|||
|
|
|||
|
if (newInOutRecord.OffDuty1.HasValue && (!getInOutRecord.OffDuty1.HasValue || getInOutRecord.OffDuty1 < newInOutRecord.OffDuty1))
|
|||
|
{
|
|||
|
getInOutRecord.OffDuty1 = newInOutRecord.OffDuty1;
|
|||
|
}
|
|||
|
if (newInOutRecord.OffDuty2.HasValue && (!getInOutRecord.OffDuty2.HasValue || getInOutRecord.OffDuty2 < newInOutRecord.OffDuty2))
|
|||
|
{
|
|||
|
getInOutRecord.OffDuty2 = newInOutRecord.OffDuty2;
|
|||
|
}
|
|||
|
if (newInOutRecord.OffDuty3.HasValue && (!getInOutRecord.OffDuty3.HasValue || getInOutRecord.OffDuty3 < newInOutRecord.OffDuty3))
|
|||
|
{
|
|||
|
getInOutRecord.OffDuty3 = newInOutRecord.OffDuty3;
|
|||
|
}
|
|||
|
int m1 = 0;
|
|||
|
if (getInOutRecord.WorkIn1.HasValue || getInOutRecord.OffDuty1.HasValue)
|
|||
|
{
|
|||
|
m1 = 240;
|
|||
|
if (getInOutRecord.WorkIn1.HasValue && getInOutRecord.OffDuty1.HasValue)
|
|||
|
{
|
|||
|
m1 = Convert.ToInt32((getInOutRecord.OffDuty1 - getInOutRecord.WorkIn1).Value.TotalMinutes);
|
|||
|
}
|
|||
|
}
|
|||
|
int m2 = 0;
|
|||
|
if (getInOutRecord.WorkIn2.HasValue || getInOutRecord.OffDuty2.HasValue)
|
|||
|
{
|
|||
|
m2 = 240;
|
|||
|
if (getInOutRecord.WorkIn2.HasValue && getInOutRecord.OffDuty2.HasValue)
|
|||
|
{
|
|||
|
m2 = Convert.ToInt32((getInOutRecord.OffDuty2 - getInOutRecord.WorkIn2).Value.TotalMinutes);
|
|||
|
}
|
|||
|
}
|
|||
|
int m3 = 0;
|
|||
|
if (getInOutRecord.WorkIn3.HasValue || getInOutRecord.OffDuty3.HasValue)
|
|||
|
{
|
|||
|
m3 = 240;
|
|||
|
if (getInOutRecord.WorkIn3.HasValue && getInOutRecord.OffDuty3.HasValue)
|
|||
|
{
|
|||
|
m3 = Convert.ToInt32((getInOutRecord.OffDuty3 - getInOutRecord.WorkIn3).Value.TotalMinutes);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion 计算人工时
|
|||
|
|
|||
|
getInOutRecord.ManHours = Convert.ToInt32(Math.Ceiling((m1 + m2 + m3) * 1.0 / 60));
|
|||
|
getInOutRecord.ManOverHours = Convert.ToInt32(Math.Ceiling(m3 * 1.0 / 60));
|
|||
|
db.SubmitChanges();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion 根据出入记录 写入考勤记录
|
|||
|
|
|||
|
#region 获取单位信息
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取单位信息
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public static Model.T_d_department GetSupDep(string projectId, int? departmentID, int ParentID)
|
|||
|
{
|
|||
|
var getDep = Funs.DB.T_d_department.FirstOrDefault(x => x.ProjectId == projectId && x.DepartmentID == departmentID);
|
|||
|
if (getDep != null)
|
|||
|
{
|
|||
|
if (getDep.ParentID == ParentID)
|
|||
|
{
|
|||
|
return getDep;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return GetSupDep(projectId, getDep.ParentID, ParentID);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion 获取单位信息
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取月度门禁人员考勤统计
|
|||
|
/// </summary>
|
|||
|
/// <param name="projectId"></param>
|
|||
|
/// <param name="personid"></param>
|
|||
|
/// <param name="date"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static Model.InOutRecordStatisticOutput getInOutRecordStatistics(string projectId, string personid, DateTime date)
|
|||
|
{
|
|||
|
var result = new InOutRecordStatisticOutput();
|
|||
|
var inOutRecordStatisticList = new List<DayInOutRecordStatistic>();
|
|||
|
result.DayInOutRecordStatistic = new List<DayInOutRecordStatistic>();
|
|||
|
|
|||
|
var queryPersonInOutRecordList = (from x in Funs.DB.SitePerson_PersonInOut
|
|||
|
where x.ProjectId == projectId && x.PersonId == personid
|
|||
|
&& x.ChangeTime.Value.Year == date.Year
|
|||
|
&& x.ChangeTime.Value.Month == date.Month
|
|||
|
select x).ToList(); //获取当月人员的出入记录
|
|||
|
var allCheckInDays = (from x in Funs.DB.SitePerson_PersonInOut
|
|||
|
where x.ProjectId == projectId && x.PersonId == personid
|
|||
|
select x.ChangeTime.Value.Date).Distinct().Count();
|
|||
|
var personModel = PersonService.GetPersonById(personid);//获取人员信息
|
|||
|
var dateList = Funs.GetMonthDay(date.Year, date.Month);//获取当月日期
|
|||
|
|
|||
|
foreach (var day in dateList)
|
|||
|
{
|
|||
|
DayInOutRecordStatistic dayInOutRecordStatistic = new DayInOutRecordStatistic();
|
|||
|
dayInOutRecordStatistic.Date = day.Date;
|
|||
|
dayInOutRecordStatistic.Items = new List<DayInOutRecordStatisticDetail>();
|
|||
|
dayInOutRecordStatistic.State = 0;
|
|||
|
|
|||
|
var dayqueryPersonInOutRecord = queryPersonInOutRecordList.Where(x => x.ChangeTime.Value.Date == day.Date).Select(x =>
|
|||
|
new
|
|||
|
{
|
|||
|
x.ChangeTime,
|
|||
|
x.InOutWay,
|
|||
|
x.IsIn
|
|||
|
}).ToList();
|
|||
|
if (dayqueryPersonInOutRecord.Count > 0)
|
|||
|
{
|
|||
|
dayInOutRecordStatistic.State = 1;
|
|||
|
foreach (var item in dayqueryPersonInOutRecord)
|
|||
|
{
|
|||
|
DayInOutRecordStatisticDetail dayInOutRecordStatisticDetail = new DayInOutRecordStatisticDetail();
|
|||
|
if (item.InOutWay.ToString() == Const.InOutWay_1)
|
|||
|
{
|
|||
|
dayInOutRecordStatisticDetail.InOutWayName = "门禁";
|
|||
|
}
|
|||
|
else if (item.InOutWay.ToString() == Const.InOutWay_2)
|
|||
|
{
|
|||
|
dayInOutRecordStatisticDetail.InOutWayName = "手动";
|
|||
|
}
|
|||
|
else if (item.InOutWay.ToString() == Const.InOutWay_3)
|
|||
|
{
|
|||
|
dayInOutRecordStatisticDetail.InOutWayName = "移动端";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
dayInOutRecordStatisticDetail.InOutWayName = "其他";
|
|||
|
}
|
|||
|
dayInOutRecordStatisticDetail.ChangeTime = item.ChangeTime.Value;
|
|||
|
dayInOutRecordStatisticDetail.IsIn = item.IsIn;
|
|||
|
dayInOutRecordStatistic.Items.Add(dayInOutRecordStatisticDetail);
|
|||
|
}
|
|||
|
|
|||
|
var InOutWayNameList = dayInOutRecordStatistic.Items.Select(x => x.InOutWayName).Distinct().ToList();
|
|||
|
if (InOutWayNameList.Count == 1 && InOutWayNameList[0] == "手动")
|
|||
|
{
|
|||
|
dayInOutRecordStatistic.State = 2;
|
|||
|
}
|
|||
|
}
|
|||
|
result.DayInOutRecordStatistic.Add(dayInOutRecordStatistic);
|
|||
|
}
|
|||
|
|
|||
|
result.UnitId = personModel.UnitId;
|
|||
|
result.PersonId = personModel.PersonId;
|
|||
|
result.ProjectId = projectId;
|
|||
|
result.CheckInDays = result.DayInOutRecordStatistic.Count(x => x.State == 1);
|
|||
|
result.AbsentDays = result.DayInOutRecordStatistic.Count(x => x.State == 0);
|
|||
|
result.EntryDays = int.Parse(Math.Ceiling((DateTime.Now - personModel.InTime.Value).TotalDays).ToString());
|
|||
|
result.AllCheckInDays = allCheckInDays;
|
|||
|
|
|||
|
return result;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|