504 lines
23 KiB
C#
504 lines
23 KiB
C#
using FineUIPro;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Net;
|
||
using System.Text;
|
||
|
||
namespace BLL
|
||
{
|
||
/// <summary>
|
||
/// 人员信息
|
||
/// </summary>
|
||
public static class PersonInOutService
|
||
{
|
||
public static Model.SGGLDB db = Funs.DB;
|
||
|
||
/// <summary>
|
||
/// 记录数
|
||
/// </summary>
|
||
public static int count
|
||
{
|
||
get;
|
||
set;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 定义变量
|
||
/// </summary>
|
||
private static IQueryable<Model.SitePerson_PersonInOut> getDataLists = from x in db.SitePerson_PersonInOut
|
||
select x;
|
||
|
||
/// <summary>
|
||
/// 获取分页列表
|
||
/// </summary>
|
||
/// <param name="projectId"></param>
|
||
/// <param name="unitId"></param>
|
||
/// <param name="name"></param>
|
||
/// <param name="startDate"></param>
|
||
/// <param name="endDate"></param>
|
||
/// <param name="Grid1"></param>
|
||
/// <returns></returns>
|
||
public static IEnumerable getListData(string projectId, string unitId, string name, string inOutWay, DateTime? startDate, DateTime? endDate, Grid Grid1)
|
||
{
|
||
IQueryable<Model.SitePerson_PersonInOut> getDataList = getDataLists.Where(x => x.ProjectId == projectId && (inOutWay == "0" || x.InOutWay == inOutWay));
|
||
if (!string.IsNullOrEmpty(unitId) && unitId != Const._Null)
|
||
{
|
||
getDataList = getDataList.Where(e => e.UnitId == unitId);
|
||
}
|
||
if (!string.IsNullOrEmpty(name))
|
||
{
|
||
getDataList = getDataList.Where(e => e.PersonName.Contains(name));
|
||
}
|
||
|
||
if (startDate.HasValue)
|
||
{
|
||
getDataList = getDataList.Where(e => e.ChangeTime >= startDate);
|
||
}
|
||
if (endDate.HasValue)
|
||
{
|
||
getDataList = getDataList.Where(e => e.ChangeTime <= endDate);
|
||
}
|
||
|
||
count = getDataList.Count();
|
||
if (count == 0)
|
||
{
|
||
return null;
|
||
}
|
||
getDataList = SortConditionHelper.SortingAndPaging(getDataList, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
|
||
return from x in getDataList
|
||
select new
|
||
{
|
||
x.PersonInOutId,
|
||
x.ProjectId,
|
||
x.UnitId,
|
||
x.PostType,
|
||
x.WorkPostId,
|
||
x.PersonId,
|
||
x.IsIn,
|
||
IsInName = (x.IsIn ==true ? "进门" : "出门"),
|
||
x.ChangeTime,
|
||
x.UnitName,
|
||
x.WorkPostName,
|
||
x.WorkAreaId,
|
||
x.WorkAreaName,
|
||
x.PersonName,
|
||
x.IdentityCard,
|
||
x.InOutWay,
|
||
x.OldID,
|
||
x.Address,
|
||
x.Remark,
|
||
x.InCount,
|
||
x.OutCount,
|
||
x.TotalCount,
|
||
};
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 根据主键获取人员出入场信息
|
||
/// </summary>
|
||
/// <param name="PersonInOutId"></param>
|
||
/// <returns></returns>
|
||
public static Model.SitePerson_PersonInOut GetPersonInOutById(string PersonInOutId)
|
||
{
|
||
return Funs.DB.SitePerson_PersonInOut.FirstOrDefault(e => e.PersonInOutId == PersonInOutId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据人员id 出入时间取记录
|
||
/// </summary>
|
||
/// <param name="personId">人员id</param>
|
||
/// <param name="time">出入场时间</param>
|
||
/// <param name="isIn">出/入 true-入;false-出</param>
|
||
/// <returns></returns>
|
||
public static Model.SitePerson_PersonInOut GetPersonInOutByTimePersonId(string personId, DateTime ChangeTime, bool isIn)
|
||
{
|
||
return Funs.DB.SitePerson_PersonInOut.FirstOrDefault(x => x.PersonId == personId && x.ChangeTime == ChangeTime && x.IsIn == isIn);
|
||
}
|
||
|
||
#region 新增人员出入场
|
||
/// <summary>
|
||
/// 人员出入场
|
||
/// </summary>
|
||
/// <param name="projectId"></param>w
|
||
/// <param name="idCard"></param>
|
||
/// <param name="isIn"></param>
|
||
/// <param name="changeTime"></param>
|
||
public static void AddPersonInOut(Model.SitePerson_PersonInOut personInOut)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
Model.SitePerson_PersonInOut newPersonInOut = new Model.SitePerson_PersonInOut
|
||
{
|
||
PersonInOutId = SQLHelper.GetNewID(),
|
||
IsIn = personInOut.IsIn ?? true,
|
||
ChangeTime = personInOut.ChangeTime,
|
||
InOutWay = personInOut.InOutWay ?? Const.InOutWay_Other,
|
||
WorkAreaId = personInOut.WorkAreaId,
|
||
WorkAreaName = personInOut.WorkAreaName,
|
||
OldID = personInOut.OldID,
|
||
Address=personInOut.Address,
|
||
Remark = personInOut.Remark,
|
||
};
|
||
|
||
Model.SitePerson_Person getPerson = new Model.SitePerson_Person();
|
||
if (!string.IsNullOrEmpty(personInOut.PersonId))
|
||
{
|
||
getPerson = PersonService.GetPersonById(personInOut.PersonId);
|
||
}
|
||
if (getPerson == null || string.IsNullOrEmpty(getPerson.PersonId))
|
||
{
|
||
getPerson = PersonService.GetPersonByIdentityCard(personInOut.ProjectId, personInOut.IdentityCard);
|
||
}
|
||
if (getPerson != null && !string.IsNullOrEmpty(getPerson.PersonId))
|
||
{
|
||
newPersonInOut.ProjectId = getPerson.ProjectId;
|
||
newPersonInOut.PersonId = getPerson.PersonId;
|
||
newPersonInOut.PersonName = getPerson.PersonName;
|
||
newPersonInOut.IdentityCard = getPerson.IdentityCard;
|
||
newPersonInOut.UnitId = getPerson.UnitId;
|
||
newPersonInOut.UnitName = UnitService.GetUnitNameByUnitId(getPerson.UnitId);
|
||
newPersonInOut.WorkPostId = getPerson.WorkPostId;
|
||
if (!string.IsNullOrEmpty(getPerson.WorkPostId))
|
||
{
|
||
var getWorkPost = WorkPostService.GetWorkPostById(getPerson.WorkPostId);
|
||
if (getWorkPost != null)
|
||
{
|
||
newPersonInOut.WorkPostName = getWorkPost.WorkPostName;
|
||
newPersonInOut.PostType = getWorkPost.PostType;
|
||
}
|
||
}
|
||
if (string.IsNullOrEmpty(newPersonInOut.WorkAreaName) && !string.IsNullOrEmpty(newPersonInOut.WorkAreaId))
|
||
{
|
||
newPersonInOut.WorkAreaName = UnitWorkService.GetUnitWorkName(newPersonInOut.WorkAreaId);
|
||
}
|
||
db.SitePerson_PersonInOut.InsertOnSubmit(newPersonInOut);
|
||
db.SubmitChanges();
|
||
//// 人员考勤上下班
|
||
DoorServerService.InsertEmployInOutRecord(newPersonInOut);
|
||
//// 插入当日记录表
|
||
/// 监理 业主 不进入
|
||
var getPUnit = db.Project_ProjectUnit.FirstOrDefault(x => x.ProjectId == newPersonInOut.ProjectId && x.UnitId == newPersonInOut.UnitId);
|
||
if (getPUnit.IsSynchro == true && (!getPerson.OutTime.HasValue || getPerson.OutTime > DateTime.Now))
|
||
{
|
||
PersonInOutService.InsertPersonInOutNowNow(newPersonInOut);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
public static void AddPersonInOut(List<Model.SitePerson_PersonInOut> personInOuts)
|
||
{
|
||
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
|
||
db.SitePerson_PersonInOut.InsertAllOnSubmit(personInOuts);
|
||
db.SubmitChanges();
|
||
//// 人员考勤上下班
|
||
DoorServerService.InsertEmployInOutRecord(personInOuts);
|
||
//// 插入当日记录表
|
||
/// 监理 业主 不进入
|
||
///
|
||
foreach (var newPersonInOut in personInOuts)
|
||
{
|
||
var getPUnit = db.Project_ProjectUnit.FirstOrDefault(x => x.ProjectId == newPersonInOut.ProjectId && x.UnitId == newPersonInOut.UnitId);
|
||
if (getPUnit.IsSynchro == true)
|
||
{
|
||
PersonInOutService.InsertPersonInOutNowNow(newPersonInOut);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
#endregion
|
||
|
||
#region 插入当日出入记录表
|
||
/// <summary>
|
||
/// 插入当日出入记录表
|
||
/// </summary>
|
||
/// <param name="PersonInOut"></param>
|
||
public static void InsertPersonInOutNowNow(Model.SitePerson_PersonInOut PersonInOut)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
string proCode = ProjectService.GetContractNoByProjectId(PersonInOut.ProjectId);
|
||
var getRealNameP = db.RealName_Project.FirstOrDefault(x => x.ProCode == proCode);
|
||
if (getRealNameP != null && PersonInOut.ChangeTime.HasValue)
|
||
{
|
||
var getNow = db.RealName_PersonInOutNow.FirstOrDefault(x => x.PersonInOutId == PersonInOut.PersonInOutId);
|
||
if (getNow == null)
|
||
{
|
||
int hour = PersonInOut.ChangeTime.Value.Hour;
|
||
bool isIn = PersonInOut.IsIn ?? true;
|
||
DateTime date = PersonInOut.ChangeTime.Value;
|
||
var getMorning = db.RealName_PersonInOutNow.FirstOrDefault(x => x.PersonId == PersonInOut.PersonId
|
||
&& ((x.ChangeTime.Value.Hour < 12 && hour < 12) || (x.ChangeTime.Value.Hour >= 12 && hour >= 12))
|
||
&& x.ChangeTime >= date.Date && x.ChangeTime.Value < date.Date.AddDays(1)
|
||
&& ((x.IsIn == true && x.ChangeTime < date) || (x.IsIn == false && x.ChangeTime > date)));
|
||
if (getMorning == null)
|
||
{
|
||
Model.RealName_PersonInOutNow newR = new Model.RealName_PersonInOutNow
|
||
{
|
||
PersonInOutId = PersonInOut.PersonInOutId,
|
||
ProjectId = PersonInOut.ProjectId,
|
||
UnitId = PersonInOut.UnitId,
|
||
PersonId = PersonInOut.PersonId,
|
||
IsIn = PersonInOut.IsIn,
|
||
ChangeTime = PersonInOut.ChangeTime,
|
||
WorkPostId = PersonInOut.WorkPostId,
|
||
PostType = PersonInOut.PostType,
|
||
ProCode = proCode,
|
||
Name = PersonInOut.PersonName,
|
||
IdcardType = "SHENFEN_ZHENGJIAN",
|
||
IdcardNumber = PersonInOut.IdentityCard,
|
||
CheckType = "ZHENGCHANG_KAOQINLEIBIE",
|
||
CheckWay = "FACE_FANGSHI",
|
||
};
|
||
db.RealName_PersonInOutNow.InsertOnSubmit(newR);
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
var getLastList = from x in db.SitePerson_PersonInOutNow
|
||
where x.ChangeTime <= PersonInOut.ChangeTime.Value.AddHours(-48)
|
||
select x;
|
||
if (getLastList.Count() > 0)
|
||
{
|
||
db.SitePerson_PersonInOutNow.DeleteAllOnSubmit(getLastList);
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
|
||
/// <summary>
|
||
/// 插入当日出入记录表
|
||
/// </summary>
|
||
/// <param name="PersonInOut"></param>
|
||
public static void InsertPersonInOutNowNow(Model.SitePerson_PersonInOutNow PersonInOut)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
var getNow = db.SitePerson_PersonInOutNow.FirstOrDefault(x => x.PersonInOutId == PersonInOut.PersonInOutId);
|
||
if (getNow == null)
|
||
{
|
||
Model.SitePerson_PersonInOutNow newPersonInOut = new Model.SitePerson_PersonInOutNow
|
||
{
|
||
PersonInOutId = PersonInOut.PersonInOutId,
|
||
ProjectId = PersonInOut.ProjectId,
|
||
UnitId = PersonInOut.UnitId,
|
||
PersonId = PersonInOut.PersonId,
|
||
IsIn = PersonInOut.IsIn,
|
||
ChangeTime = PersonInOut.ChangeTime,
|
||
WorkPostId = PersonInOut.WorkPostId,
|
||
PostType = PersonInOut.PostType,
|
||
ProCode = PersonInOut.ProCode,
|
||
Name = PersonInOut.Name,
|
||
IdcardType = PersonInOut.IdcardType ?? "SHENFEN_ZHENGJIAN",
|
||
IdcardNumber = PersonInOut.IdcardNumber,
|
||
CheckType = "ZHENGCHANG_KAOQINLEIBIE",
|
||
CheckWay = "FACE_FANGSHI",
|
||
};
|
||
db.SitePerson_PersonInOutNow.InsertOnSubmit(newPersonInOut);
|
||
db.SubmitChanges();
|
||
/// 监理 业主 不进入
|
||
var getPUnit = db.Project_ProjectUnit.FirstOrDefault(x => x.ProjectId == newPersonInOut.ProjectId && x.UnitId == newPersonInOut.UnitId);
|
||
if (getPUnit.IsSynchro == true)
|
||
{
|
||
var getRealNameP = db.RealName_Project.FirstOrDefault(x => x.ProCode == newPersonInOut.ProCode);
|
||
if (getRealNameP != null)
|
||
{
|
||
Model.RealName_PersonInOutNow newR = new Model.RealName_PersonInOutNow
|
||
{
|
||
PersonInOutId = newPersonInOut.PersonInOutId,
|
||
ProjectId = newPersonInOut.ProjectId,
|
||
UnitId = newPersonInOut.UnitId,
|
||
PersonId = newPersonInOut.PersonId,
|
||
IsIn = newPersonInOut.IsIn,
|
||
ChangeTime = newPersonInOut.ChangeTime,
|
||
WorkPostId = newPersonInOut.WorkPostId,
|
||
PostType = newPersonInOut.PostType,
|
||
ProCode = newPersonInOut.ProCode,
|
||
Name = newPersonInOut.Name,
|
||
IdcardType = newPersonInOut.IdcardType ?? "SHENFEN_ZHENGJIAN",
|
||
IdcardNumber = newPersonInOut.IdcardNumber,
|
||
CheckType = "ZHENGCHANG_KAOQINLEIBIE",
|
||
CheckWay = "FACE_FANGSHI",
|
||
};
|
||
|
||
db.RealName_PersonInOutNow.InsertOnSubmit(newR);
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
#region 更新人员出入记录
|
||
/// <summary>
|
||
/// 更新人员出入记录
|
||
/// </summary>
|
||
/// <param name="person">人员实体</param>
|
||
public static void UpdatePersonInfo(Model.SitePerson_PersonInOut personInOut)
|
||
{
|
||
Model.SGGLDB db = Funs.DB;
|
||
var getPersonInOut = db.SitePerson_PersonInOut.FirstOrDefault(x => x.PersonInOutId == personInOut.PersonInOutId);
|
||
if (getPersonInOut != null)
|
||
{
|
||
getPersonInOut.IsIn = personInOut.IsIn ?? true;
|
||
getPersonInOut.ChangeTime = personInOut.ChangeTime;
|
||
getPersonInOut.InOutWay = personInOut.InOutWay ?? Const.InOutWay_Other;
|
||
getPersonInOut.WorkAreaId = personInOut.WorkAreaId;
|
||
getPersonInOut.WorkAreaName = personInOut.WorkAreaName;
|
||
getPersonInOut.OldID = personInOut.OldID;
|
||
getPersonInOut.Address = personInOut.Address;
|
||
getPersonInOut.Remark = personInOut.Remark;
|
||
|
||
Model.SitePerson_Person getPerson = new Model.SitePerson_Person();
|
||
if (!string.IsNullOrEmpty(personInOut.PersonId))
|
||
{
|
||
getPerson = PersonService.GetPersonById(personInOut.PersonId);
|
||
}
|
||
if (getPerson == null)
|
||
{
|
||
getPerson = PersonService.GetPersonByIdentityCard(personInOut.ProjectId, personInOut.IdentityCard);
|
||
}
|
||
if (getPerson != null)
|
||
{
|
||
getPersonInOut.ProjectId = getPerson.ProjectId;
|
||
getPersonInOut.PersonId = getPerson.PersonId;
|
||
getPersonInOut.PersonName = getPerson.PersonName;
|
||
getPersonInOut.IdentityCard = getPerson.IdentityCard;
|
||
getPersonInOut.UnitId = getPerson.UnitId;
|
||
getPersonInOut.UnitName = UnitService.GetUnitNameByUnitId(getPerson.UnitId);
|
||
getPersonInOut.WorkPostId = getPerson.WorkPostId;
|
||
if (!string.IsNullOrEmpty(getPerson.WorkPostId))
|
||
{
|
||
var getWorkPost = WorkPostService.GetWorkPostById(getPerson.WorkPostId);
|
||
if (getWorkPost != null)
|
||
{
|
||
getPersonInOut.WorkPostName = getWorkPost.WorkPostName;
|
||
getPersonInOut.PostType = getWorkPost.PostType;
|
||
}
|
||
}
|
||
if (string.IsNullOrEmpty(getPersonInOut.WorkAreaName) && !string.IsNullOrEmpty(getPersonInOut.WorkAreaId))
|
||
{
|
||
getPersonInOut.WorkAreaName = UnitWorkService.GetUnitWorkName(getPersonInOut.WorkAreaId);
|
||
}
|
||
if (string.IsNullOrEmpty(getPersonInOut.WorkAreaId) && !string.IsNullOrEmpty(getPersonInOut.WorkAreaName))
|
||
{
|
||
getPersonInOut.WorkAreaId = UnitWorkService.getWorkAreaIdByWorkAreaName(getPersonInOut.ProjectId, getPersonInOut.WorkAreaName);
|
||
}
|
||
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
/// <summary>
|
||
/// 根据人员主键删除一个人员出入场记录
|
||
/// </summary>
|
||
/// <param name="personId"></param>
|
||
public static void DeletePersonInOutByPersonId(string personId)
|
||
{
|
||
Model.SGGLDB db = Funs.DB;
|
||
var personInOut = from x in db.SitePerson_PersonInOut where x.PersonId == personId select x;
|
||
if (personInOut.Count() > 0)
|
||
{
|
||
db.SitePerson_PersonInOut.DeleteAllOnSubmit(personInOut);
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 根据人员主键删除一个人员出入场记录
|
||
/// </summary>
|
||
/// <param name="personId"></param>
|
||
public static void DeletePersonInOutById(string id)
|
||
{
|
||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||
{
|
||
var realName = db.RealName_PersonInOutNow.FirstOrDefault(x => x.PersonInOutId == id);
|
||
if (realName != null)
|
||
{
|
||
db.RealName_PersonInOutNow.DeleteOnSubmit(realName);
|
||
db.SubmitChanges();
|
||
}
|
||
var personInOutNow = db.SitePerson_PersonInOutNow.FirstOrDefault(x => x.PersonInOutId == id);
|
||
if (personInOutNow != null)
|
||
{
|
||
db.SitePerson_PersonInOutNow.DeleteOnSubmit(personInOutNow);
|
||
db.SubmitChanges();
|
||
}
|
||
var personInOut = db.SitePerson_PersonInOut.FirstOrDefault(x => x.PersonInOutId == id);
|
||
if (personInOut != null)
|
||
{
|
||
db.SitePerson_PersonInOut.DeleteOnSubmit(personInOut);
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 身份证号码发生变化时 修改实名制出入记录
|
||
/// </summary>
|
||
/// <param name="personId"></param>
|
||
public static void UpdateRealNameInOut(string personId, string oldCardNo, string newIdCardNo)
|
||
{
|
||
Model.SGGLDB db = Funs.DB;
|
||
var personInOuts = from x in db.RealName_PersonInOutNow
|
||
where x.PersonId == personId && x.IdcardNumber == oldCardNo
|
||
select x;
|
||
if (personInOuts.Count() > 0)
|
||
{
|
||
foreach (var item in personInOuts)
|
||
{
|
||
item.IdcardNumber = newIdCardNo;
|
||
db.SubmitChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取出入记录人工时
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static List<Model.WorkPostStatisticItem> getWorkPostStatistic(List<Model.SitePerson_PersonInOut> getAllPersonInOutList)
|
||
{
|
||
Model.SGGLDB db = Funs.DB;
|
||
List<Model.WorkPostStatisticItem> reports = new List<Model.WorkPostStatisticItem>();
|
||
|
||
var getUnitIdList = getAllPersonInOutList.Select(x => x.UnitId).Distinct();
|
||
foreach (var uitem in getUnitIdList)
|
||
{
|
||
var getU = getAllPersonInOutList.Where(x => x.UnitId == uitem);
|
||
var getWorkPostIdList = getU.Select(x => x.WorkPostId).Distinct();
|
||
foreach (var witem in getWorkPostIdList)
|
||
{
|
||
var getW = getU.Where(x => x.WorkPostId == witem);
|
||
Model.WorkPostStatisticItem newWItem = new Model.WorkPostStatisticItem
|
||
{
|
||
ID = SQLHelper.GetNewID(),
|
||
UnitId = uitem,
|
||
UnitName = UnitService.GetUnitNameByUnitId(uitem),
|
||
WorkPostId = witem,
|
||
WorkPostName = WorkPostService.getWorkPostNameById(witem),
|
||
PersonCount = getW.Select(x => x.PersonId).Distinct().Count(),
|
||
UnitWorkPostID = uitem + "|" + witem,
|
||
};
|
||
|
||
reports.Add(newWItem);
|
||
}
|
||
}
|
||
return reports;
|
||
}
|
||
}
|
||
} |