394 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			394 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C#
		
	
	
	
using BLL;
 | 
						|
using SgManager.AI;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Configuration;
 | 
						|
using System.Linq;
 | 
						|
using System.Web;
 | 
						|
using System.Web.Http;
 | 
						|
using WebAPI.Models;
 | 
						|
 | 
						|
namespace WebAPI.Controllers
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// 
 | 
						|
    /// </summary>
 | 
						|
    public class FaceController : ApiController
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="form"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost]        
 | 
						|
        public Model.ResponeData SaveWXFacerecord([FromBody]FaceRecordForm form)
 | 
						|
        {
 | 
						|
            var responeData = new Model.ResponeData();
 | 
						|
            HttpFileCollection files = HttpContext.Current.Request.Files;
 | 
						|
            string localRoot = form.AttachUrl1;// HttpContext.Current.Request["AttachUrl1"];
 | 
						|
            string inOrOut = form.inOrOut;//HttpContext.Current.Request["inOrOut"];
 | 
						|
            string projectId = form.projectId;//HttpContext.Current.Request["projectId"];
 | 
						|
            string location = form.location;//HttpContext.Current.Request["location"];
 | 
						|
            string userId = form.userId;// HttpContext.Current.Request["userId"];
 | 
						|
            string userName = form.userName;////HttpContext.Current.Request["userName"];
 | 
						|
            localRoot = ConfigurationManager.AppSettings["localRoot"] + localRoot; //物理路径
 | 
						|
            string reUrl = string.Empty;
 | 
						|
            List<SgManager.AI.faceResult> kqFace = null;
 | 
						|
            try
 | 
						|
            {
 | 
						|
                kqFace = (List<SgManager.AI.faceResult>)SgManager.AI.FaceClass.SearchFileFace(localRoot);
 | 
						|
 | 
						|
            }
 | 
						|
            catch (Exception e)
 | 
						|
            {
 | 
						|
                responeData.message = "识别失败,人脸库信息为空"+ localRoot;
 | 
						|
                responeData.data = localRoot;
 | 
						|
                responeData.code = 0;
 | 
						|
            }
 | 
						|
 | 
						|
            if (kqFace == null || kqFace.Count == 0)
 | 
						|
            {
 | 
						|
                responeData.code = 0;
 | 
						|
                responeData.message = "识别失败,人脸库信息为空";
 | 
						|
            }
 | 
						|
            else if (kqFace[0].errMess != "SUCCESS")
 | 
						|
            {
 | 
						|
                responeData.code = 0;
 | 
						|
                responeData.message = BaiduError.getBaiduError(kqFace[0].errCode);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                string idCard = kqFace[0].user_id;
 | 
						|
                using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
 | 
						|
                {
 | 
						|
                    var person = db.SitePerson_Person.Where(u => u.IdentityCard == idCard && u.ProjectId == projectId).FirstOrDefault();            
 | 
						|
                    if (person != null)
 | 
						|
                    {
 | 
						|
                        string inOrOutS = "进门";
 | 
						|
                        if (inOrOut == "1")
 | 
						|
                        {
 | 
						|
                            inOrOutS ="出门";
 | 
						|
                        }
 | 
						|
 | 
						|
                        Model.t_d_facerecordItem newFacerecordItem = new Model.t_d_facerecordItem()
 | 
						|
                        {
 | 
						|
                            ProjectId = person.ProjectId,
 | 
						|
                            ID = 0,
 | 
						|
                            EmployName = person.PersonName,
 | 
						|
                            DepartmentID = person.TeamGroupId,
 | 
						|
                            DepartName = TeamGroupService.GetTeamGroupNameByTeamGroupId(person.TeamGroupId),                        
 | 
						|
                            EmployNO = person.IdentityCard,                         
 | 
						|
                            RoleID = "微信端",
 | 
						|
                            DateTimeRecord =DateTime.Now,
 | 
						|
                            RecordDes = "微信端:",           
 | 
						|
                            InOrOut = inOrOutS,
 | 
						|
                            Des1 = form.AttachUrl1,
 | 
						|
                            Des2= form.location,
 | 
						|
                        };
 | 
						|
                        var getfacerecord = db.T_d_facerecord.Where(x => x.ProjectId == person.ProjectId);
 | 
						|
                        if (getfacerecord.Count() > 0)
 | 
						|
                        {
 | 
						|
                            newFacerecordItem.ID = getfacerecord.Max(x => x.ID) + 1;
 | 
						|
                        }
 | 
						|
                        var area = db.WxProjectGpsPoint.Where(u => u.ProjectId == person.ProjectId).ToList();
 | 
						|
                        if (area != null && area.Count > 0)
 | 
						|
                        {
 | 
						|
                            //  string points = area.Point;
 | 
						|
                            //if (!string.IsNullOrEmpty(points))
 | 
						|
                            //{
 | 
						|
                            //    string[] ps = points.Split('|');
 | 
						|
                            Gpslocation myLocation = new Gpslocation();
 | 
						|
                            string[] myp = location.Split(',');
 | 
						|
                            myLocation.lat = float.Parse(myp[0]);
 | 
						|
                            myLocation.lng = float.Parse(myp[1]);
 | 
						|
                            List<Gpslocation> gpsLoactions = new List<Gpslocation>();
 | 
						|
                            foreach (var po in area)
 | 
						|
                            {
 | 
						|
                                Gpslocation gp = new Gpslocation();
 | 
						|
                                string[] p = po.Point.Split(',');
 | 
						|
                                gp.lat = float.Parse(p[0]);
 | 
						|
                                gp.lng = float.Parse(p[1]);
 | 
						|
                                gpsLoactions.Add(gp);
 | 
						|
 | 
						|
                            }
 | 
						|
                            if (GpsPolygonHelper.isPointInPolygon(myLocation, gpsLoactions))
 | 
						|
                            {
 | 
						|
                                newFacerecordItem.RecordDes+= "打卡成功";
 | 
						|
                                //APIPersonService.getPersonInOut(person.ProjectId, person.IdentityCard, isIn, DateTime.Now);
 | 
						|
                                responeData.message = "打卡成功";
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                newFacerecordItem.RecordDes += "识别成功,不在项目区域内打卡";
 | 
						|
                                //responeData.code = 0;
 | 
						|
                                responeData.message = "不在项目区域内打卡";
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            newFacerecordItem.RecordDes += "识别成功,无项目坐标信息";                           
 | 
						|
                            // APIPersonService.getPersonInOut(person.ProjectId, person.CardNo, isIn, DateTime.Now);
 | 
						|
                            responeData.message = "识别成功,无项目坐标信息";
 | 
						|
                        }
 | 
						|
                        SaveFacerecord(newFacerecordItem);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        responeData.code = 0;
 | 
						|
                        responeData.message = "识别成功,但无人员项目信息";
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return responeData;
 | 
						|
        }
 | 
						|
        
 | 
						|
        #region 保存人脸识别出入记录信息
 | 
						|
        /// <summary>
 | 
						|
        /// 保存出入记录信息
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="facerecord">出入记录信息</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost]
 | 
						|
        public Model.ResponeData SaveFacerecord([FromBody] Model.t_d_facerecordItem facerecord)
 | 
						|
        {
 | 
						|
            var responeData = new Model.ResponeData();
 | 
						|
            try
 | 
						|
            {
 | 
						|
                using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
 | 
						|
                {
 | 
						|
                    if (facerecord != null)
 | 
						|
                    {
 | 
						|
                        var getFacerecord = db.T_d_facerecord.FirstOrDefault(x => x.ID == facerecord.ID && x.ProjectId == facerecord.ProjectId);
 | 
						|
                        if (getFacerecord == null)
 | 
						|
                        {
 | 
						|
                            Model.T_d_facerecord newFacerecord = new Model.T_d_facerecord()
 | 
						|
                            {
 | 
						|
                                NewID = SQLHelper.GetNewID(),
 | 
						|
                                ProjectId = facerecord.ProjectId,
 | 
						|
                                ID = facerecord.ID,
 | 
						|
                                EmployName = facerecord.EmployName,
 | 
						|
                                DepartmentID = facerecord.DepartmentID,
 | 
						|
                                DepartName = facerecord.DepartName,
 | 
						|
                                AreaID = facerecord.AreaID,
 | 
						|
                                AreaName = facerecord.AreaName,
 | 
						|
                                EmployNO = facerecord.EmployNO,
 | 
						|
                                CardID = facerecord.CardID,
 | 
						|
                                RoleID = facerecord.RoleID,
 | 
						|
                                DateTimeRecord = facerecord.DateTimeRecord,
 | 
						|
                                RecordDes = facerecord.RecordDes,
 | 
						|
                                FaceIP = facerecord.FaceIP,
 | 
						|
                                InOrOut = facerecord.InOrOut,
 | 
						|
                                Des1 = facerecord.Des1,
 | 
						|
                                Des2 = facerecord.Des2,
 | 
						|
                                Des3 = facerecord.Des3,
 | 
						|
                                Des4 = facerecord.Des4,
 | 
						|
                            };
 | 
						|
 | 
						|
                            db.T_d_facerecord.InsertOnSubmit(newFacerecord);
 | 
						|
                            db.SubmitChanges();
 | 
						|
                            ///// 根据出入记录 写入考勤记录
 | 
						|
                            facerecord.IDCardNo = facerecord.EmployNO;
 | 
						|
 | 
						|
                            var getPerson = db.SitePerson_Person.FirstOrDefault(x => x.ProjectId == newFacerecord.ProjectId && x.IdentityCard == newFacerecord.EmployNO);
 | 
						|
                            if (getPerson != null)
 | 
						|
                            {
 | 
						|
                                DoorServerService.InsertEmployInOutRecord(facerecord, getPerson);
 | 
						|
                                if (facerecord.DateTimeRecord.HasValue)
 | 
						|
                                {
 | 
						|
                                    int isIn = 0;
 | 
						|
                                    if (facerecord.InOrOut == "进门")
 | 
						|
                                    {
 | 
						|
                                        isIn = 1;
 | 
						|
                                    }
 | 
						|
                                    APIPersonService.getPersonInOut(getPerson, isIn, facerecord.DateTimeRecord.Value);
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        responeData.code = 2;
 | 
						|
                        responeData.message = "信息有误!";
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            catch (Exception ex)
 | 
						|
            {
 | 
						|
                responeData.code = 0;
 | 
						|
                responeData.message = ex.Message;
 | 
						|
                ErrLogInfo.WriteLog("WX接口-保存出入记录", ex);
 | 
						|
            }
 | 
						|
 | 
						|
            return responeData;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region 保存刷卡出入记录信息
 | 
						|
        /// <summary>
 | 
						|
        /// 保存出入记录信息
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="validcardevent">出入记录信息</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost]
 | 
						|
        public Model.ResponeData SaveValidcardevent([FromBody] Model.t_d_validcardeventItem validcardevent)
 | 
						|
        {
 | 
						|
            var responeData = new Model.ResponeData();
 | 
						|
            try
 | 
						|
            {
 | 
						|
                using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
 | 
						|
                {
 | 
						|
                    if (validcardevent != null)
 | 
						|
                    {
 | 
						|
                        var getValidcardevent = db.T_d_facerecord.FirstOrDefault(x => x.ID == validcardevent.ValidEventID && x.ProjectId == validcardevent.ProjectId);
 | 
						|
                        if (getValidcardevent == null)
 | 
						|
                        {
 | 
						|
                            Model.T_d_validcardevent newValidcardevent = new Model.T_d_validcardevent()
 | 
						|
                            {
 | 
						|
                                NewID = SQLHelper.GetNewID(),
 | 
						|
                                ProjectId = validcardevent.ProjectId,
 | 
						|
                                ValidEventID = validcardevent.ValidEventID,
 | 
						|
                                RecordDateTime = validcardevent.RecordDateTime,
 | 
						|
                                CardNO = validcardevent.CardNO,
 | 
						|
                                ConsumerID = validcardevent.ConsumerID,
 | 
						|
                                InOrOut = validcardevent.InOrOut,
 | 
						|
                                ControllerID = validcardevent.ControllerID,
 | 
						|
                                ReaderNO = validcardevent.ReaderNO,
 | 
						|
                                RecordFlashLoc = validcardevent.RecordFlashLoc,
 | 
						|
                                RecordAll = validcardevent.RecordAll,
 | 
						|
                                JPGPath = validcardevent.JPGPath,
 | 
						|
                                IsDown = validcardevent.IsDown,
 | 
						|
                                EquipmentSN = validcardevent.EquipmentSN,
 | 
						|
                                ConsumerNO = validcardevent.ConsumerNO,
 | 
						|
                                EmployNO = validcardevent.EmployNO,
 | 
						|
                                EmployName = validcardevent.EmployName,
 | 
						|
                                CardType = validcardevent.CardType,
 | 
						|
                                Card = validcardevent.Card,
 | 
						|
                                DepartmentID = validcardevent.DepartmentID,
 | 
						|
                                DepartmentName = validcardevent.DepartmentName,
 | 
						|
                                ControllerSN = validcardevent.ControllerSN,
 | 
						|
                                DoorID = validcardevent.DoorID,
 | 
						|
                                DoorName = validcardevent.DoorName,
 | 
						|
                                ReaderName = validcardevent.ReaderName,
 | 
						|
                                AreaID = validcardevent.AreaID,
 | 
						|
                                AreaName = validcardevent.AreaName,
 | 
						|
                                WorkType = validcardevent.WorkType,
 | 
						|
                                Positions = validcardevent.Positions,
 | 
						|
                                IDCardNo = validcardevent.IDCardNo,
 | 
						|
                            };
 | 
						|
 | 
						|
                            db.T_d_validcardevent.InsertOnSubmit(newValidcardevent);
 | 
						|
                            db.SubmitChanges();
 | 
						|
                            ///// 根据出入记录 写入考勤记录
 | 
						|
                            Model.t_d_facerecordItem newFacerecord = new Model.t_d_facerecordItem
 | 
						|
                            {
 | 
						|
                                ProjectId = validcardevent.ProjectId,
 | 
						|
                                ID = validcardevent.ValidEventID,
 | 
						|
                                EmployName = validcardevent.EmployName,
 | 
						|
                                DepartmentID = validcardevent.DepartmentID,
 | 
						|
                                DepartName = validcardevent.DepartmentName,
 | 
						|
                                AreaID = validcardevent.AreaID,
 | 
						|
                                AreaName = validcardevent.AreaName,
 | 
						|
                                EmployNO = validcardevent.IDCardNo,
 | 
						|
                                IDCardNo = validcardevent.IDCardNo,
 | 
						|
                                DateTimeRecord = validcardevent.RecordDateTime,
 | 
						|
                                InOrOut = validcardevent.InOrOut == 1 ? "进门" : "出门",
 | 
						|
                            };
 | 
						|
                            var getPerson = db.SitePerson_Person.FirstOrDefault(x => x.ProjectId == validcardevent.ProjectId && x.IdentityCard == validcardevent.IDCardNo);
 | 
						|
                            if (getPerson != null)
 | 
						|
                            {
 | 
						|
                                DoorServerService.InsertEmployInOutRecord(newFacerecord, getPerson);
 | 
						|
                                if (validcardevent.RecordDateTime.HasValue)
 | 
						|
                                {
 | 
						|
                                    int isIn = 0;
 | 
						|
                                    if (validcardevent.InOrOut == 1)
 | 
						|
                                    {
 | 
						|
                                        isIn = 1;
 | 
						|
                                    }
 | 
						|
                                    APIPersonService.getPersonInOut(getPerson, isIn, validcardevent.RecordDateTime.Value);
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        responeData.code = 2;
 | 
						|
                        responeData.message = "信息有误!";
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            catch (Exception ex)
 | 
						|
            {
 | 
						|
                responeData.code = 0;
 | 
						|
                responeData.message = ex.Message;
 | 
						|
            }
 | 
						|
 | 
						|
            return responeData;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region 保存出入记录信息
 | 
						|
        /// <summary>
 | 
						|
        /// 保存出入记录信息
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="facerecord">出入记录信息</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost]
 | 
						|
        public Model.ResponeData SaveEmployInOutRecord([FromBody] Model.t_d_facerecordItem facerecord)
 | 
						|
        {
 | 
						|
            var responeData = new Model.ResponeData();
 | 
						|
            try
 | 
						|
            {
 | 
						|
                if (facerecord != null)
 | 
						|
                {
 | 
						|
                    ///// 根据出入记录 写入考勤记录
 | 
						|
                    facerecord.IDCardNo = facerecord.EmployNO;
 | 
						|
                    var getPerson = Funs.DB.SitePerson_Person.FirstOrDefault(x => x.ProjectId == facerecord.ProjectId && x.IdentityCard == facerecord.EmployNO);
 | 
						|
                    if (getPerson != null)
 | 
						|
                    {
 | 
						|
                        DoorServerService.InsertEmployInOutRecord(facerecord, getPerson);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    responeData.code = 2;
 | 
						|
                    responeData.message = "信息有误!";
 | 
						|
                }
 | 
						|
            }
 | 
						|
            catch (Exception ex)
 | 
						|
            {
 | 
						|
                responeData.code = 0;
 | 
						|
                responeData.message = ex.Message;
 | 
						|
            }
 | 
						|
 | 
						|
            return responeData;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region 获取门禁人员考勤统计
 | 
						|
        /// <summary>
 | 
						|
        /// 获取人员信息出入场记录
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="projectId"></param>
 | 
						|
        /// <param name="startDate"></param>
 | 
						|
        /// <param name="endDate"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public Model.ResponeData getInOutstatistics(string projectId,  DateTime startDate, DateTime endDate)
 | 
						|
        {
 | 
						|
            var responeData = new Model.ResponeData();
 | 
						|
            try
 | 
						|
            {
 | 
						|
                string unitId = null;
 | 
						|
                string postId = null;
 | 
						|
                responeData.data = Funs.DB.spInOutManHoursReport(projectId, unitId, postId, startDate, endDate).ToList(); ;
 | 
						|
            }
 | 
						|
            catch (Exception ex)
 | 
						|
            {
 | 
						|
                responeData.code = 0;
 | 
						|
                responeData.message = ex.Message;
 | 
						|
            }
 | 
						|
            return responeData;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |