SGGL_JT/SUBQHSE/BLL/DoorServer/DoorServerService.cs

294 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
///上午下班 1230
DateTime TOffDuty1 = newInOut.ChangeTime.Value.Date.AddHours(12).AddMinutes(30);
///下午上班 130
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;
}
}
}