using BLL; using BLL.API.HJGL; using Model; 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 Recognition([FromBody]FaceRecordForm form) { var responeData = new Model.ResponeData(); HttpFileCollection files = HttpContext.Current.Request.Files; string localRoot = form.AttachUrl1;// HttpContext.Current.Request["AttachUrl1"]; string projectId = form.projectId;//HttpContext.Current.Request["projectId"]; 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; try { responeData.message = BaiduError.getBaiduError(kqFace[0].errCode); responeData.message = kqFace[0].errMess + "" + kqFace[0].errCode; } catch { } } else { try { string idCard = kqFace[0].user_id; var welder = APIWelderService.GetWelderByIdCard(idCard,projectId ); if (welder != null) { var installtion1 = APIBaseInfoService.GetInstallationList(projectId, welder.WED_Unit); var method = APIWelderService.GetWelderMethod(welder.WED_ID); var steel = APIWelderService.GetWelderBSSteel(welder.WED_ID); var consumables = APIWelderService.GetConsumables(); responeData.data = new { welder, installtion1, method, steel, consumables }; } else { responeData.code = 0; responeData.message = "识别成功,但焊工信息"; } } catch (Exception e) { responeData.message = e.StackTrace; responeData.code = 0; } } return responeData; } /// /// /// /// /// [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; try { responeData.message = BaiduError.getBaiduError(kqFace[0].errCode); responeData.message = kqFace[0].errMess+""+ kqFace[0].errCode; } catch { } } else { string idCard = kqFace[0].user_id; using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { var person = db.SitePerson_Person.FirstOrDefault(u => u.IdentityCard == idCard && u.ProjectId == projectId); 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 areas = db.WxProjectGpsAre.Where(u => u.ProjectId == person.ProjectId).ToList(); if (areas != null && areas.Count > 0) { foreach (var area in areas) { var points = db.WxProjectGpsPoint.Where(u => u.GpsAreId == area.GpsAreId).OrderBy(x => x.Orders).ToList(); if (points != null && points.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 points) { 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.AreaID = area.GpsAreId; newFacerecordItem.AreaName = area.GpsAreName; newFacerecordItem.RecordDes += "打卡成功"; //APIPersonService.getPersonInOut(person.ProjectId, person.IdentityCard, isIn, DateTime.Now); responeData.message = "打卡成功"; } } } } if (responeData.message != "打卡成功") { newFacerecordItem.RecordDes += "识别成功,不在项目区域内打卡"; //responeData.code = 0; responeData.message = "不在项目区域内打卡"; } if(string.IsNullOrEmpty(location)) { newFacerecordItem.RecordDes += "识别成功,无项目坐标信息"; // APIPersonService.getPersonInOut(person.ProjectId, person.CardNo, isIn, DateTime.Now); responeData.message = "识别成功,无项目坐标信息"; } SaveFacerecord(newFacerecordItem); } else { responeData.code = 0; responeData.message = "识别成功,但无人员项目信息"; } } } using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { Model.Sys_FaceRecordLog newLog = new Sys_FaceRecordLog { FaceRecordId = SQLHelper.GetNewID(), RecordTime = DateTime.Now, ProjectId = projectId, UserId = userId, UserName = userName, LocalRoot = localRoot, InOrOut = inOrOut, Location = location, Message = responeData.message, }; db.Sys_FaceRecordLog.InsertOnSubmit(newLog); db.SubmitChanges(); } 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(); if (facerecord.DateTimeRecord.HasValue) { Model.SitePerson_PersonInOut newInOut = new Model.SitePerson_PersonInOut { ProjectId = facerecord.ProjectId, IdentityCard = facerecord.EmployNO, IsIn = facerecord.InOrOut == "进门" ? true : false, ChangeTime = facerecord.DateTimeRecord.Value, InOutWay = Const.InOutWay_3, }; PersonInOutService.AddPersonInOut(newInOut); } } } 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(); if (validcardevent.RecordDateTime.HasValue) { Model.SitePerson_PersonInOut newInOut = new Model.SitePerson_PersonInOut { ProjectId = validcardevent.ProjectId, IdentityCard = validcardevent.IDCardNo, IsIn = validcardevent.InOrOut == 1 ? true : false, ChangeTime = validcardevent.RecordDateTime.Value, InOutWay = Const.InOutWay_1, }; PersonInOutService.AddPersonInOut(newInOut); } } } 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 } }