using FineUIPro; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace BLL { /// /// 人员信息 /// public static class PersonInOutService { public static Model.SGGLDB db = Funs.DB; /// /// 记录数 /// public static int count { get; set; } /// /// 定义变量 /// private static IQueryable getDataLists = from x in db.SitePerson_PersonInOut select x; /// /// 获取分页列表 /// /// /// /// /// /// /// /// public static IEnumerable getListData(string projectId, string unitId, string name, string inOutWay, DateTime? startDate, DateTime? endDate, Grid Grid1) { IQueryable 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, }; } /// /// 根据主键获取人员出入场信息 /// /// /// public static Model.SitePerson_PersonInOut GetPersonInOutById(string PersonInOutId) { return Funs.DB.SitePerson_PersonInOut.FirstOrDefault(e => e.PersonInOutId == PersonInOutId); } /// /// 根据人员id 出入时间取记录 /// /// 人员id /// 出入场时间 /// 出/入 true-入;false-出 /// 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 新增人员出入场 /// /// 人员出入场 /// /// w /// /// /// 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.PersonId = getPerson.PersonId; newPersonInOut.ProjectId = getPerson.ProjectId; var old = db.SitePerson_PersonInOut.Where(x => x.PersonId == newPersonInOut.PersonId && x.IsIn == newPersonInOut.IsIn && x.ProjectId == newPersonInOut.ProjectId && x.ChangeTime > newPersonInOut.ChangeTime.Value.AddMinutes(-2)).FirstOrDefault(); if(old != null) { return; } 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); } } } } #endregion #region 插入当日出入记录表 /// /// 插入当日出入记录表 /// /// 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 #region 更新人员出入记录 /// /// 更新人员出入记录 /// /// 人员实体 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 /// /// 根据人员主键删除一个人员出入场记录 /// /// 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(); } } /// /// 根据人员主键删除一个人员出入场记录 /// /// 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(); } } } /// /// 身份证号码发生变化时 修改实名制出入记录 /// /// 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(); } } } /// /// 获取出入记录人工时 /// /// public static List getWorkPostStatistic(List getAllPersonInOutList) { Model.SGGLDB db = Funs.DB; List reports = new List(); 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; } } }