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
 | |
|     }
 | |
| }
 |