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 { /// /// /// public class FaceController : ApiController { /// /// /// /// /// [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 kqFace = null; try { kqFace = (List)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 gpsLoactions = new List(); 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 保存人脸识别出入记录信息 /// /// 保存出入记录信息 /// /// 出入记录信息 /// [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 保存刷卡出入记录信息 /// /// 保存出入记录信息 /// /// 出入记录信息 /// [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 保存出入记录信息 /// /// 保存出入记录信息 /// /// 出入记录信息 /// [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 获取门禁人员考勤统计 /// /// 获取人员信息出入场记录 /// /// /// /// /// 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 } }