454 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			454 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | 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 | |||
|  | { | |||
|  |     /// <summary> | |||
|  |     ///  | |||
|  |     /// </summary> | |||
|  |     public class FaceController : ApiController | |||
|  |     { | |||
|  | 
 | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         ///  | |||
|  |         /// </summary> | |||
|  |         /// <param name="form"></param> | |||
|  |         /// <returns></returns> | |||
|  |         [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<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; | |||
|  |                 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; | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <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; | |||
|  |                 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<Gpslocation> gpsLoactions = new List<Gpslocation>(); | |||
|  |                                     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 保存人脸识别出入记录信息 | |||
|  |         /// <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(); | |||
|  |                              | |||
|  |                             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 保存刷卡出入记录信息 | |||
|  |         /// <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(); | |||
|  | 
 | |||
|  |                             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 获取门禁人员考勤统计 | |||
|  |         /// <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 | |||
|  |     } | |||
|  | } |