using FineUIPro;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace BLL
{
    /// 
    /// 人员信息
    /// 
    public static class PersonService
    {
        public static Model.SGGLDB db = Funs.DB;
        #region 劳务人员列表
        /// 
        /// 记录数
        /// 
        public static int count2
        {
            get;
            set;
        }
        /// 
        /// 定义变量
        /// 
        private static IQueryable getDataLists = from x in db.View_SitePerson_Person
                                                                               select x;
        /// 
        /// 数据列表
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static IEnumerable getListData(string projetcId, string unitId, string workPostId, string name, string idCard, string states, Grid Grid1)
        {
            IQueryable getDataList = getDataLists.OrderBy(x => x.ProjectId).ThenBy(x => x.UnitId);
            if (!string.IsNullOrEmpty(projetcId) && projetcId != Const._Null)
            {
                getDataList = getDataList.Where(e => e.ProjectId == projetcId);
            }
            if (!string.IsNullOrEmpty(unitId) && unitId != Const._Null)
            {
                getDataList = getDataList.Where(e => e.UnitId == unitId);
            }
            if (!string.IsNullOrEmpty(workPostId) && workPostId != Const._Null)
            {
                getDataList = getDataList.Where(e => e.WorkPostId == workPostId);
            }
            if (!string.IsNullOrEmpty(states) && states != "-2")
            {
                getDataList = getDataList.Where(e => e.IsUsed == Convert.ToBoolean(states));
            }
            if (!string.IsNullOrEmpty(name))
            {
                getDataList = getDataList.Where(e => e.PersonName.Contains(name));
            }
            if (!string.IsNullOrEmpty(idCard))
            {
                getDataList = getDataList.Where(e => e.IdentityCard.Contains(idCard));
            }
            count2 = getDataList.Count();
            if (count2 == 0)
            {
                return null;
            }
            getDataList = SortConditionHelper.SortingAndPaging(getDataList, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
            return from x in getDataList
                   select new
                   {
                       x.PersonId,
                       x.PersonName,
                       x.CardNo,
                       x.IdentityCard,
                       x.Sex,
                       x.SexName,
                       x.UnitId,
                       x.UnitName,
                       x.WorkPostId,
                       x.WorkPostName,
                       x.ProjectId,
                       ProjectName = db.Base_Project.First(u => u.ProjectId == x.ProjectId).ProjectName,
                       ShortName = db.Base_Project.First(u => u.ProjectId == x.ProjectId).ShortName,
                       NativePlace = x.CountryName ?? "" + x.ProvinceName ?? "",
                       x.TeamGroupId,
                       x.TeamGroupName,
                       x.InTime,
                       x.OutTime,
                       x.IsUsed,
                       OutName = (x.IsUsed == false ? "是" : "否"),
                   };
        }
        #endregion
        #region 获取列表
        /// 
        /// 记录数
        /// 
        public static int count
        {
            get;
            set;
        }
        /// 
        /// 定义变量
        /// 
        private static IQueryable getPersonLists = from x in db.View_SitePerson_Person select x;
        /// 
        /// 获取分页列表
        /// 
        /// 页码
        /// 每页数量
        /// 
        public static IEnumerable getListData(string projectId, string unitId, string personName, string identityCard, string treamGroupId, string workPostIds,
                    bool ckTrain, string postType, bool ckJT, bool ckIdCardInfoNotOK, Grid Grid1)
        {
            IQueryable getPersonList = getPersonLists.Where(x => x.ProjectId == projectId);
            if (!string.IsNullOrEmpty(unitId))
            {
                if (unitId == "0")
                {
                    getPersonList = getPersonList.Where(x => x.UnitId == null);
                }
                else
                {
                    getPersonList = getPersonList.Where(x => x.UnitId == unitId);
                }
            }
            if (!string.IsNullOrEmpty(personName))
            {
                getPersonList = getPersonList.Where(x => x.PersonName.Contains(personName));
            }
            if (!string.IsNullOrEmpty(identityCard))
            {
                getPersonList = getPersonList.Where(x => x.IdentityCard.Contains(identityCard));
            }
            if (!string.IsNullOrEmpty(treamGroupId) && treamGroupId != Const._Null)
            {
                getPersonList = getPersonList.Where(x => x.TeamGroupId == treamGroupId);
            }
            if (!string.IsNullOrEmpty(workPostIds))
            {
                List wIds = Funs.GetStrListByStr(workPostIds, ',');
                getPersonList = getPersonList.Where(x => wIds.Contains(x.WorkPostId));
            }
            if (ckTrain)
            {
                getPersonList = getPersonList.Where(x => x.TrainCount == 0);
            }
            if (postType == "0")
            {
                getPersonList = getPersonList.Where(x => x.IsUsed == false || x.InTime.Value > DateTime.Now
                                || (x.OutTime.HasValue && x.OutTime < DateTime.Now));
            }
            else if (postType == "1")
            {
                getPersonList = getPersonList.Where(x => x.IsUsed == true && x.InTime <= DateTime.Now && (!x.OutTime.HasValue || x.OutTime.Value > DateTime.Now));
            }
            if (ckJT)
            {
                getPersonList = getPersonList.Where(x => x.RealNameAddTime == null);
            }
            if (ckIdCardInfoNotOK)
            {
                getPersonList = getPersonList.Where(x => x.IdentityCard == null || x.HeadImage == null || (x.IdentityCard.Length != 15 && x.IdentityCard.Length != 18));
            }
            count = getPersonList.Count();
            if (count == 0)
            {
                return null;
            }
            getPersonList = SortConditionHelper.SortingAndPaging(getPersonList, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
            return from x in getPersonList
                   select new
                   {
                       x.PersonId,
                       x.CardNo,
                       x.PersonName,
                       x.WorkPostName,
                       x.UnitName,
                       x.IdentityCard,
                       x.TeamGroupName,
                       x.InTime,
                       x.OutTime,
                       PersonState = getPersonState(x.IsUsed, x.AuditorDate, x.InTime, x.OutTime),
                   };
        }
        /// 
        /// 
        /// 
        /// 
        public static string getPersonState(bool isUsed, DateTime? auditorDate, DateTime? inTime, DateTime? outTime)
        {
            string name = string.Empty;
            if (isUsed == false && !auditorDate.HasValue)
            {
                name = "在审";
            }
            else if (isUsed == true && inTime <= DateTime.Now && (!outTime.HasValue || outTime >= DateTime.Now))
            {
                name = "在岗";
            }
            else if (isUsed == true && outTime.HasValue && outTime <= DateTime.Now)
            {
                name = "离岗";
            }
            else if (isUsed == false && auditorDate.HasValue)
            {
                name = "打回";
            }
            return name;
            ////在审
            //int count0 = getViews.Where(x => x.IsUsed == false && !x.AuditorDate.HasValue).Count();
            ////在岗
            //int count1 = getViews.Where(x => x.IsUsed == true && x.InTime <= DateTime.Now && (!x.OutTime.HasValue || x.OutTime >= DateTime.Now)).Count();
            ////离岗
            //int count2 = getViews.Where(x => x.IsUsed == true && x.OutTime <= DateTime.Now).Count();
            ////打回
            //int count3 = getViews.Where(x => x.IsUsed == false && x.AuditorDate.HasValue).Count();
        }
        #endregion
        /// 
        /// 根据主键获取人员信息
        /// 
        /// 
        /// 
        public static Model.SitePerson_Person GetPersonById(string personId)
        {
            return Funs.DB.SitePerson_Person.FirstOrDefault(e => e.PersonId == personId);
        }
        /// 
        /// 根据主键获取人员信息
        /// 
        /// 
        /// 
        public static string GetPersonNameById(string personId)
        {
            string name = string.Empty;
            var getp = Funs.DB.SitePerson_Person.FirstOrDefault(e => e.PersonId == personId);
            if (getp != null)
            {
                name = getp.PersonName;
            }
            return name;
        }
        /// 
        /// 根据UserId主键获取人员信息
        /// 
        /// 
        /// 
        public static string GetPersonIdByUserId(string userId)
        {
            string personId = userId;
            var getPerson = GetPersonById(userId);
            if (getPerson == null)
            {
                var getUser = UserService.GetUserByUserId(userId);
                if (getUser != null)
                {
                    getPerson = Funs.DB.SitePerson_Person.FirstOrDefault(e => e.IdentityCard == getUser.IdentityCard);
                    if (getPerson != null)
                    {
                        personId = getPerson.PersonId;
                    }
                }
            }
            return personId;
        }
        #region 根据多用户ID得到用户名称字符串
        /// 
        /// 根据多用户ID得到用户名称字符串
        /// 
        /// 
        /// 
        public static string getPersonsPersonIds(List personIds)
        {
            string personName = string.Empty;
            foreach (string id in personIds)
            {
                var q = GetPersonNameById(id);
                if (q != null)
                {
                    personName += q + ",";
                }
            }
            if (!string.IsNullOrEmpty(personName))
            {
                personName = personName.Substring(0, personName.Length - 1); ;
            }
            return personName;
        }
        #endregion
        /// 
        /// 根据UserId主键获取人员信息
        /// 
        /// 
        /// 
        public static Model.SitePerson_Person GetPersonByUserId(string userId, string projectId)
        {
            var getPerson = GetPersonById(userId);
            if (getPerson == null)
            {
                var getUser = UserService.GetUserByUserId(userId);
                if (getUser != null)
                {
                    getPerson = Funs.DB.SitePerson_Person.FirstOrDefault(e => e.IdentityCard == getUser.IdentityCard && e.ProjectId == projectId);
                }
            }
            return getPerson;
        }
        /// 
        /// 根据项目单位获取人员信息
        /// 
        /// 
        /// 
        public static List GetPersonLitsByprojectIdUnitId(string projectId, string unitId)
        {
            if (!string.IsNullOrEmpty(unitId))
            {
                return (from x in Funs.DB.SitePerson_Person
                        where x.ProjectId == projectId && x.UnitId == unitId
                        orderby x.PersonName
                        select x).ToList();
            }
            else
            {
                return (from x in Funs.DB.SitePerson_Person
                        where x.ProjectId == projectId
                        orderby x.PersonName
                        select x).ToList();
            }
        }
        /// 
        /// 根据项目单位获取人员信息
        /// 
        /// 
        /// 
        public static List GetPersonLitsByprojectIdUnitIdTeamGroupId(string projectId, string unitId, string teamGroupId)
        {
            var getPersons = GetPersonLitsByprojectIdUnitId(projectId, unitId);
            if (!string.IsNullOrEmpty(teamGroupId))
            {
                getPersons = getPersons.Where(x => x.TeamGroupId == teamGroupId).OrderBy(x => x.PersonName).ToList();
            }
            return getPersons;
        }
        /// 
        /// 获取最大的人员位置
        /// 
        /// 最大的人员位置
        public static int? GetMaxPersonIndex(string projectId)
        {
            return (from x in Funs.DB.SitePerson_Person where x.ProjectId == projectId select x.PersonIndex).Max();
        }
        /// 
        /// 根据单位Id查询所有人员的数量
        /// 
        /// 单位Id
        /// 人员的数量
        public static int GetPersonCountByUnitId(string unitId, string projectId, DateTime inTime, bool isOutside)
        {
            var q = (from x in Funs.DB.SitePerson_Person where x.UnitId == unitId && x.ProjectId == projectId && x.InTime <= inTime && x.IsUsed == true && x.IsOutside == isOutside select x).ToList();
            return q.Count();
        }
        /// 
        /// 根据单位Id查询所有HSE人员的数量
        /// 
        /// 单位Id
        /// HSE人员的数量
        public static int GetHSEPersonCountByUnitId(string unitId, string projectId, DateTime inTime)
        {
            var q = (from x in Funs.DB.SitePerson_Person
                     join y in Funs.DB.Base_WorkPost on x.WorkPostId equals y.WorkPostId
                     where x.UnitId == unitId && x.ProjectId == projectId && x.InTime <= inTime && y.IsHsse == true && x.IsUsed == true
                     select x).ToList();
            //var q = (from x in Funs.DB.SitePerson_Person where x.UnitId == unitId && x.ProjectId == projectId && (x.WorkPostId == BLL.Const.WorkPost_HSSEEngineer || x.WorkPostId == BLL.Const.WorkPost_SafetyManager) && x.IsUsed == true select x).ToList();
            return q.Count();
        }
        /// 
        /// 获取所有人员位置集合
        /// 
        /// 所有人员位置集合
        public static List GetPersonIndexs(string projectId)
        {
            return (from x in Funs.DB.SitePerson_Person where x.ProjectId == projectId select x.PersonIndex).ToList();
        }
        /// 
        /// 根据卡号查询人员信息
        /// 
        /// 卡号
        /// 人员实体
        public static Model.SitePerson_Person GetPersonByCardNo(string projectId, string cardNo)
        {
            return Funs.DB.SitePerson_Person.FirstOrDefault(e => e.ProjectId == projectId && e.CardNo == cardNo);
        }
        /// 
        /// 根据卡号查询所有人员的数量
        /// 
        /// 卡号
        /// 人员的数量
        public static int GetPersonCountByCardNo(string projectId, string cardNo)
        {
            var q = (from x in Funs.DB.SitePerson_Person where x.ProjectId == projectId && x.CardNo == cardNo select x).ToList();
            return q.Count();
        }
        /// 
        /// 根据人员姓名和所在单位判断人员是否存在
        /// 
        /// 
        /// 
        /// 
        public static bool IsExistPersonByUnit(string unitId, string personName, string projectId)
        {
            var q = from x in Funs.DB.SitePerson_Person where x.UnitId == unitId && x.PersonName == personName && x.ProjectId == projectId select x;
            if (q.Count() > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// 
        /// 根据身份证号Id获取人员的数量
        /// 
        /// 身份证号
        /// 人员的数量
        public static Model.SitePerson_Person GetPersonCountByIdentityCard(string identityCard, string projectId)
        {
            var q = Funs.DB.SitePerson_Person.FirstOrDefault(x => x.IdentityCard == identityCard && x.ProjectId == projectId);
            return q;
        }
        /// 
        /// 获取人员信息列表
        /// 
        /// 
        /// 
        public static List GetPersonList(string projectId)
        {
            return (from x in Funs.DB.SitePerson_Person where x.ProjectId == projectId select x).ToList();
        }
        /// 
        /// 增加人员信息
        /// 
        /// 人员实体
        public static void AddPerson(Model.SitePerson_Person person)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                Model.SitePerson_Person newPerson = new Model.SitePerson_Person
                {
                    PersonId = person.PersonId,
                    CardNo = person.CardNo,
                    PersonName = person.PersonName,
                    Sex = person.Sex,
                    IdentityCard = person.IdentityCard,
                    Address = person.Address,
                    ProjectId = person.ProjectId,
                    UnitId = person.UnitId,
                    TeamGroupId = person.TeamGroupId,
                    WorkAreaId = person.WorkAreaId,
                    WorkPostId = person.WorkPostId,
                    OutTime = person.OutTime,
                    OutResult = person.OutResult,
                    Telephone = person.Telephone,
                    PositionId = person.PositionId,
                    PostTitleId = person.PostTitleId,
                    PhotoUrl = person.PhotoUrl,
                    HeadImage = person.HeadImage,
                    IsUsed = person.IsUsed,
                    IsCardUsed = person.IsCardUsed,
                    DepartId = person.DepartId,
                    FromPersonId = person.FromPersonId,
                    Password = GetPersonPassWord(person.IdentityCard),
                    AuditorId = person.AuditorId,
                    AuditorDate = person.AuditorDate,
                    IsForeign = person.IsForeign,
                    IsOutside = person.IsOutside,
                    EduLevel = person.EduLevel,
                    MaritalStatus = person.MaritalStatus,
                    Isprint = "0",
                    MainCNProfessionalId = person.MainCNProfessionalId,
                    ViceCNProfessionalId = person.ViceCNProfessionalId,
                    Birthday = person.Birthday,
                    IdcardType = person.IdcardType,
                    IdcardStartDate = person.IdcardStartDate,
                    IdcardEndDate = person.IdcardEndDate,
                    IdcardForever = person.IdcardForever,
                    PoliticsStatus = person.PoliticsStatus,
                    IdcardAddress = person.IdcardAddress,
                    Nation = person.Nation,
                    CountryCode = person.CountryCode,
                    ProvinceCode = person.ProvinceCode,
                    IsCardNoOK=IDCardValid.CheckIDCard(person.IdentityCard),
                    IsSafetyMonitoring = person.IsSafetyMonitoring,
                };
                newPerson.RawPassword = Funs.getInitialPassword(person.UnitId, person.IdentityCard);
                newPerson.Password = Funs.EncryptionPassword(newPerson.RawPassword);
                if (person.InTime.HasValue)
                {
                    newPerson.InTime = person.InTime;
                }
                else
                {
                    newPerson.InTime = Funs.GetNewDateTime(DateTime.Now.ToShortDateString());
                }
                db.SitePerson_Person.InsertOnSubmit(newPerson);
                db.SubmitChanges();
                ////增加一条编码记录
                BLL.CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitId(BLL.Const.PersonListMenuId, person.ProjectId, person.UnitId, person.PersonId, person.InTime);
            }
        }
        /// 
        /// 修改人员信息
        /// 
        /// 人员实体
        public static void UpdatePerson(Model.SitePerson_Person person)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                Model.SitePerson_Person newPerson = db.SitePerson_Person.FirstOrDefault(e => e.PersonId == person.PersonId);
                if (newPerson != null)
                {
                    newPerson.FromPersonId = person.FromPersonId;
                    newPerson.CardNo = person.CardNo;
                    newPerson.PersonName = person.PersonName;
                    newPerson.Sex = person.Sex;
                    if (newPerson.IdentityCard != person.IdentityCard)
                    {
                        PersonInOutService.UpdateRealNameInOut(newPerson.PersonId, newPerson.IdentityCard, person.IdentityCard);                            
                        newPerson.IdentityCard = person.IdentityCard;
                    }                   
                    newPerson.Address = person.Address;
                    newPerson.ProjectId = person.ProjectId;
                    newPerson.UnitId = person.UnitId;
                    newPerson.TeamGroupId = person.TeamGroupId;
                    newPerson.WorkAreaId = person.WorkAreaId;
                    newPerson.WorkPostId = person.WorkPostId;
                    newPerson.InTime = person.InTime;
                    newPerson.OutTime = person.OutTime;
                    newPerson.OutResult = person.OutResult;
                    newPerson.Telephone = person.Telephone;
                    newPerson.PositionId = person.PositionId;
                    newPerson.PostTitleId = person.PostTitleId;                   
                    if (newPerson.PhotoUrl != person.PhotoUrl && !string.IsNullOrEmpty(person.PhotoUrl))
                    {
                        newPerson.PhotoUrl = person.PhotoUrl;
                        newPerson.ExchangeTime = null;
                        newPerson.HeadImage = person.HeadImage;
                    }
                    
                    newPerson.IsUsed = person.IsUsed;
                    newPerson.IsCardUsed = person.IsCardUsed;
                    newPerson.EduLevel = person.EduLevel;
                    newPerson.MaritalStatus = person.MaritalStatus;
                    newPerson.DepartId = person.DepartId;
                    newPerson.QRCodeAttachUrl = person.QRCodeAttachUrl;
                    newPerson.IsSafetyMonitoring = person.IsSafetyMonitoring;
                    newPerson.Password = GetPersonPassWord(person.IdentityCard);
                    if (!newPerson.OutTime.HasValue)
                    {
                        newPerson.OutTime = null;
                        newPerson.ExchangeTime = null;
                    }
                    newPerson.ExchangeTime2 = null;
                    newPerson.RealNameUpdateTime = null;
                    if (!string.IsNullOrEmpty(person.AuditorId))
                    {
                        newPerson.AuditorId = person.AuditorId;
                    }
                    if (person.AuditorDate.HasValue)
                    {
                        newPerson.AuditorDate = person.AuditorDate;
                    }
                   
                    newPerson.IsForeign = person.IsForeign;
                    newPerson.IsOutside = person.IsOutside;
                    newPerson.Birthday = person.Birthday;
                    newPerson.MainCNProfessionalId = person.MainCNProfessionalId;
                    newPerson.ViceCNProfessionalId = person.ViceCNProfessionalId;
                    newPerson.IdcardType = person.IdcardType;
                    newPerson.IdcardStartDate = person.IdcardStartDate;
                    newPerson.IdcardEndDate = person.IdcardEndDate;
                    newPerson.IdcardForever = person.IdcardForever;
                    newPerson.PoliticsStatus = person.PoliticsStatus;
                    newPerson.IdcardAddress = person.IdcardAddress;
                    newPerson.Nation = person.Nation;
                    newPerson.CountryCode = person.CountryCode;
                    newPerson.ProvinceCode = person.ProvinceCode;
                    newPerson.IsCardNoOK = IDCardValid.CheckIDCard(person.IdentityCard);
                    newPerson.RawPassword = Funs.getInitialPassword(person.UnitId, person.IdentityCard);
                    newPerson.Password = Funs.EncryptionPassword(newPerson.RawPassword);
                    db.SubmitChanges();
                }
            }
        }
        public static void UpdateDoorPerson(Model.SitePerson_Person person)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                Model.SitePerson_Person newPerson = db.SitePerson_Person.FirstOrDefault(e => e.PersonId == person.PersonId);
                if (newPerson != null)
                {
                    
                    newPerson.PersonName = person.PersonName;
                    newPerson.Sex = person.Sex;
                    if (newPerson.IdentityCard != person.IdentityCard)
                    {
                        PersonInOutService.UpdateRealNameInOut(newPerson.PersonId, newPerson.IdentityCard, person.IdentityCard);
                        newPerson.IdentityCard = person.IdentityCard;
                    }
                    newPerson.Address = person.Address;                
                    newPerson.UnitId = person.UnitId;
                    newPerson.TeamGroupId = person.TeamGroupId;
                    newPerson.WorkAreaId = person.WorkAreaId;
                    newPerson.WorkPostId = person.WorkPostId;
                    newPerson.InTime = person.InTime;
                    newPerson.OutTime = person.OutTime;
                    newPerson.OutResult = person.OutResult;
                    newPerson.Telephone = person.Telephone;
                    newPerson.PhotoUrl = person.PhotoUrl;
                    newPerson.HeadImage = person.HeadImage;
                    newPerson.IsUsed = person.IsUsed;
                    if (!newPerson.OutTime.HasValue)
                    {
                        newPerson.OutTime = null;
                        newPerson.ExchangeTime = null;
                    }
                    if (!string.IsNullOrEmpty(person.AuditorId))
                    {
                        newPerson.AuditorId = person.AuditorId;
                    }
                    if (person.AuditorDate.HasValue)
                    {
                        newPerson.AuditorDate = person.AuditorDate;
                    }
                    newPerson.Birthday = person.Birthday;
                    newPerson.IdcardType = person.IdcardType;
                    newPerson.IdcardStartDate = person.IdcardStartDate;
                    newPerson.IdcardEndDate = person.IdcardEndDate;
                    newPerson.IdcardForever = person.IdcardForever;
                    newPerson.IdcardAddress = person.IdcardAddress;
                    newPerson.IsCardNoOK = IDCardValid.CheckIDCard(person.IdentityCard);
                    db.SubmitChanges();
                }
            }
        }
        /// 
        /// 修改密码
        /// 
        /// 
        /// 
        public static void UpdateSitePersonPassword(string personId, string password)
        {
            var m = Funs.DB.SitePerson_Person.FirstOrDefault(x => x.PersonId == personId);
            if (m != null)
            {
                m.RawPassword = password;
                m.Password = Funs.EncryptionPassword(password);
                Funs.DB.SubmitChanges();
            }
        }
        /// 
        ///  人员离岗
        /// 
        /// 
        public static void PersonOut(string personId, DateTime date)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var person = db.SitePerson_Person.FirstOrDefault(x => x.PersonId == personId);
                if (person != null)
                {
                    person.OutTime = date;
                    person.IsUsed = true;
                    person.ExchangeTime = null;
                    person.ExchangeTime2 = null;
                    person.RealNameUpdateTime = null;
                   db.SubmitChanges();
                }
            }
        }
        public static void UpdatePhotoUrl(string personId, string photoUrl, System.Data.Linq.Binary headImage )
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var person = db.SitePerson_Person.FirstOrDefault(x => x.PersonId == personId);
                if (person != null)
                {
                    person.PhotoUrl = photoUrl;
                    person.HeadImage = headImage;
                    db.SubmitChanges();
                }
            }
        }
        /// 
        /// 根据人员Id删除一个人员信息
        /// 
        /// 人员Id
        public static void DeletePerson(string personId)
        {
            Model.SitePerson_Person person = Funs.DB.SitePerson_Person.FirstOrDefault(e => e.PersonId == personId);
            if (person != null)
            {
                ///删除编码表记录
                BLL.CodeRecordsService.DeleteCodeRecordsByDataId(personId);
                //删除特岗人员资质
                var personQuality = PersonQualityService.GetPersonQualityByPersonId(personId);
                if (personQuality != null)
                {
                    CodeRecordsService.DeleteCodeRecordsByDataId(personQuality.PersonQualityId);//删除编号
                    CommonService.DeleteAttachFileById(personQuality.PersonQualityId);//删除附件
                    Funs.DB.QualityAudit_PersonQuality.DeleteOnSubmit(personQuality);
                    Funs.DB.SubmitChanges();
                }
                //删除安全人员资质
                Model.QualityAudit_SafePersonQuality safePersonQuality = Funs.DB.QualityAudit_SafePersonQuality.FirstOrDefault(e => e.PersonId == personId);
                if (safePersonQuality != null)
                {
                    CodeRecordsService.DeleteCodeRecordsByDataId(safePersonQuality.SafePersonQualityId);
                    CommonService.DeleteAttachFileById(safePersonQuality.SafePersonQualityId);
                    Funs.DB.QualityAudit_SafePersonQuality.DeleteOnSubmit(safePersonQuality);
                    Funs.DB.SubmitChanges();
                }
                ///违规人员
                var getViolation = from x in Funs.DB.Check_ViolationPerson where x.PersonId == person.PersonId select x;
                if (getViolation.Count() > 0)
                {
                    Funs.DB.Check_ViolationPerson.DeleteAllOnSubmit(getViolation);
                    Funs.DB.SubmitChanges();
                }
                ///删除培训任务
                var getTask = from x in Funs.DB.Training_Task where x.UserId == person.PersonId select x;
                if (getTask.Count() > 0)
                {
                    foreach (var item in getTask)
                    {
                        TrainingTaskService.DeleteTaskById(item.TaskId);
                    }
                }
                ///删除培训记录
                var getTrainRecord = from x in Funs.DB.EduTrain_TrainRecordDetail where x.PersonId == person.PersonId select x;
                if (getTrainRecord.Count() > 0)
                {
                    foreach (var item in getTrainRecord)
                    {
                        EduTrain_TrainRecordDetailService.DeleteTrainDetailByTrainDetail(item.TrainDetailId);
                    }
                }
                ///删除考试记录
                var getTestRecode = from x in Funs.DB.Training_TestRecord where x.TestManId == person.PersonId select x;
                if (getTestRecode.Count() > 0)
                {
                    foreach (var item in getTestRecode)
                    {
                        TestRecordService.DeleteTestRecordByTestRecordId(item.TestRecordId);
                    }
                }
                ///删除人员绩效
                var getPerfomances = from x in Funs.DB.Perfomance_PersonPerfomance where x.PersonId == person.PersonId select x;
                if (getPerfomances.Count() > 0)
                {
                    foreach (var item in getPerfomances)
                    {
                        PersonPerfomanceService.DeletePersonPerfomanceById(item.PersonPerfomanceId);
                    }
                }
                ///删除人员出入场记录
                BLL.PersonInOutService.DeletePersonInOutByPersonId(person.PersonId);
                ///删除编码表记录
                BLL.CodeRecordsService.DeleteCodeRecordsByDataId(personId);
                Funs.DB.SitePerson_Person.DeleteOnSubmit(person);
                Funs.DB.SubmitChanges();
            }
        }
        /// 
        /// 根据身份证号获取人员信息
        /// 
        /// 身份证号
        /// 人员信息
        public static Model.SitePerson_Person GetPersonByIdentityCard(string projectId, string identityCard)
        {
            if (!string.IsNullOrEmpty(identityCard))
            {
                return Funs.DB.SitePerson_Person.FirstOrDefault(e => e.ProjectId == projectId && e.IdentityCard == identityCard);
            }
            else
            {
                return null;
            }
        }
        /// 
        /// 根据身份证号获取人员信息
        /// 
        /// 身份证号
        /// 人员信息
        public static Model.SitePerson_Person GetPersonByProjectCodeIdentityCard(string projectCode, string identityCard)
        {
            if (!string.IsNullOrEmpty(identityCard))
            {
                var getProject = ProjectService.GetProjectByProjectCode(projectCode);
                if (getProject != null)
                {
                    return Funs.DB.SitePerson_Person.FirstOrDefault(e => e.ProjectId == getProject.ProjectId && e.IdentityCard == identityCard);
                }
                else
                {
                    return Funs.DB.SitePerson_Person.FirstOrDefault(e => e.IdentityCard == identityCard && e.ProjectId == null);
                }
            }
            else
            {
                return null;
            }
        }
        /// 
        /// 根据身份证号获取人员信息
        /// 
        /// 姓名
        /// 人员信息
        public static Model.SitePerson_Person GetPersonByName(string projectId, string name)
        {
            if (!string.IsNullOrEmpty(name))
            {
                return Funs.DB.SitePerson_Person.FirstOrDefault(e => e.ProjectId == projectId && e.PersonName == name);
            }
            else
            {
                return null;
            }
        }
        /// 
        /// 保存发卡信息
        /// 
        /// 
        /// 
        public static void SaveSendCard(string personId, string cardNo, int personIndex)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                Model.SitePerson_Person card = db.SitePerson_Person.FirstOrDefault(e => e.CardNo == cardNo);
                if (card != null)
                {
                    card.CardNo = null;
                }
                else
                {
                    Model.SitePerson_Person person = db.SitePerson_Person.FirstOrDefault(e => e.PersonId == personId);
                    person.CardNo = cardNo;
                    person.PersonIndex = personIndex;
                    //person.CardNo = sendCardNo;
                }
                db.SubmitChanges();
            }
        }
        /// 
        /// 根据作业区域获取人员
        /// 
        /// 
        /// 
        public static List GetPersonListByWorkAreaId(string workAreaId)
        {
            return (from x in Funs.DB.SitePerson_Person where x.WorkAreaId == workAreaId select x).ToList();
        }
        #region 表下拉框
        /// 
        ///  表下拉框
        /// 
        /// 下拉框名字
        /// 是否显示请选择
        public static void InitPersonByProjectUnitDropDownList(FineUIPro.DropDownList dropName, string projectId, string unitId, bool isShowPlease)
        {
            dropName.DataValueField = "PersonId";
            dropName.DataTextField = "PersonName";
            dropName.DataSource = GetPersonLitsByprojectIdUnitId(projectId, unitId);
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }
        /// 
        ///  表下拉框
        /// 
        /// 下拉框名字
        /// 是否显示请选择
        public static void InitPersonByProjectUnitTeamGroupDropDownList(FineUIPro.DropDownList dropName, string projectId, string unitId, string teamGroupId, bool isShowPlease)
        {
            dropName.DataValueField = "PersonId";
            dropName.DataTextField = "PersonName";
            dropName.DataSource = GetPersonLitsByprojectIdUnitIdTeamGroupId(projectId, unitId, teamGroupId);
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }
        #endregion
        /// 
        /// 获取人员密码
        /// 
        /// 
        /// 
        public static string GetPersonPassWord(string idCard)
        {
            string passWord = Funs.EncryptionPassword(Const.Password);
            ////现场人员密码
            if (!string.IsNullOrEmpty(idCard))
            {
                if (idCard.Length > 3)
                {
                    passWord = Funs.EncryptionPassword(idCard.Substring(idCard.Length - 4));
                }
                else
                {
                    passWord = Funs.EncryptionPassword(idCard);
                }
            }
            return passWord;
        }
    }
}