using DBUtility; using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace Site_Interface.WO { /// /// WOJLBack 的摘要说明 /// public class WOJLBack : IHttpHandler { public void ProcessRequest(HttpContext context) { string responseText = String.Format("{{\"result\": \"-1\",\"code\": \"\",\"msg\": \"{0}\"}}", "failue"); try { //string ss = "2020-02-25T01:28:36+0000".ToString().Substring(0, 19).Replace("T"," "); //DateTime ddd = TimeZone.CurrentTimeZone.ToLocalTime(Convert.ToDateTime(ss)); string deviceType = context.Request["deviceType"]; //格式 "2020-02-25T01:28:36+0000"; string showTime = context.Request["showTime"].ToString().Substring(0, 19).Replace("T", " "); string showTimeBak = context.Request["showTime"].ToString(); string deviceKey = context.Request["deviceKey"]; string personName = context.Request["personName"]; string personGuid = context.Request["personGuid"]; string photoUrl = context.Request["photoUrl"]; string type = context.Request["type"]; string temperature = "-1"; /* string deviceType = "1"; //格式 "2020-02-25T01:28:36+0000"; string showTime = "2020-05-22T15:25:36+0000".Substring(0, 19).Replace("T", " "); string deviceKey = "84E0F422D38051FA"; string personName = "蔡天武"; string personGuid = "619B10790C834653959C1016F70F015A"; string type = "1"; string temperature = "-1"; string photoUrl = "https://wo-device.oss-cn-hangzhou.aliyuncs.com/release/spot/photo/84E0F422D38051FA/2020-05-22/_202005221518362513486657_rgb.jpg"; */ //BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备deviceKey{0}", deviceKey)); //BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备personGuid{0}", personGuid)); if (personName == "STRANGERBABY" || personGuid == "STRANGERBABY")//陌生人 { responseText = responseText = String.Format("{{\"result\": \"1\",\"code\": \"\",\"msg\": \"{0}\"}}", "成功"); } else if (type == "0")//1:比对成功 2:比对失败 { responseText = responseText = String.Format("{{\"result\": \"1\",\"code\": \"\",\"msg\": \"{0}\"}}", "成功"); } else { BLL.WO.JLInfo repsonsedata = new BLL.WO.JLInfo(); repsonsedata.deviceType = deviceType; repsonsedata.deviceKey = deviceKey; repsonsedata.photoUrl = photoUrl; DateTime recog_time = TimeZone.CurrentTimeZone.ToLocalTime(Convert.ToDateTime(showTime)); // DateTime recog_time = Convert.ToDateTime(showTime); repsonsedata.showTime = showTime = recog_time.ToString("yyyy-MM-dd HH:mm:ss"); repsonsedata.personGuid = personGuid; if (repsonsedata != null) { Model.LTPCache mac = DAL.cache.GetCache(repsonsedata.deviceKey); BLL.KqJLDeal.AddDBTime(mac); if (deviceKey == "84E0F422D38051FA") { BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备showTime:{0}", repsonsedata.showTime), mac.DBName); BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备deviceKey{0}", deviceKey), mac.DBName); BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备personGuid{0}", personGuid), mac.DBName); BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备photoUrl{0}", photoUrl), mac.DBName); BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备personName{0}", personName), mac.DBName); } BLL.MacTime.AddMacTime(mac, recog_time); bool hasAddFk = false; string photopath = "", photoname = "", fullname = "", kstrsql = ""; string Shenfenzheng = "", Name = "", BadgeNumber = "", photoes = "", strSqlModel = ""; int EmpID = 0; string newImageNameGID = Guid.NewGuid().ToString(); switch (Global.interType) { case 1: //工地模式 #region 工地 try { string xfjkkey = String.Format("{0}_{1}", mac.machine_sn, repsonsedata.personGuid); if (Global.jlSpanTime.ContainsKey(xfjkkey)) { DateTime xftime = Global.jlSpanTime[xfjkkey]; if (recog_time > xftime) { double sec = new TimeSpan(recog_time.Ticks - xftime.Ticks).TotalSeconds; if (sec < 60) { // BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("设备12秒钟短时间同个人重复识别,结果集user_id:{0},打卡时间:{1},上笔时间:{2},sn:{3},DateTime.Now:{4}", repsonsedata.personGuid, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), xftime.ToString("yyyy-MM-dd HH:mm:ss"), mac.machine_sn, DateTime.Now.ToString("yyyy-MM-dd HH:mm")), mac.DBName); responseText = responseText = String.Format("{{\"result\": \"1\",\"code\": \"\",\"msg\": \"{0}\"}}", "成功"); return; } else { Global.jlSpanTime[xfjkkey] = recog_time; } } } else { Global.jlSpanTime.Add(xfjkkey, recog_time); } } catch (Exception exxx) { BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别.ToString(), String.Format("设备12秒钟短时间同个人重复识别排重异常,结果集user_id:{0},recog_time:{1},sn:{2},DateTime.Now:{3};异常信息如下:{4}", repsonsedata.personGuid, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.machine_sn, DateTime.Now.ToString("yyyy-MM-dd HH:mm"), exxx.Message), mac.DBName); } finally { } DAL.cache.GetGongDiEmpWO(mac.DeptID, repsonsedata.personGuid, ref EmpID, ref Shenfenzheng, ref Name, ref BadgeNumber); if (BadgeNumber == "") { BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】人员不存在,设备showTime-{0},deviceKey-{1},personGuid-{2},personName-{3}", showTime + "-" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), deviceKey, personGuid, personName)); responseText = responseText = String.Format("{{\"result\": \"1\",\"code\": \"\",\"msg\": \"{0}\"}}", "成功"); return; } if (repsonsedata.photoUrl != "") { System.Drawing.Image img = DBUtility.Util.UrlToImage(repsonsedata.photoUrl); string newImageData = DBUtility.Util.Base64GenImagePath_Watermark(Shenfenzheng, Name, img, newImageNameGID, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.inout.ToString()); if (newImageData != "") photoes = newImageData; //插入照片 if (photoes != "") { strSqlModel = @"INSERT INTO [kqphotoes_temp]([badgenumber] ,[checktime] ,[photopath],[photoname],[machine_sn],[flag],[webip],[DeptID]) VALUES('{0}','{1}' ,'{2}','{3}','{4}',0,'127.0.0.1',{5})"; photopath = Global.HRServerPhotoPath.TrimEnd('\\') + "\\" + recog_time.ToString("yyyyMMdd"); photoname = mac.DeptID.ToString() + "-" + recog_time.ToString("yyyyMMddHHmmssfff") + "-" + BadgeNumber + ".JPEG"; fullname = photopath + "\\" + photoname; if (Util.Base64StringToImage(photoes, photopath, fullname) != null) { string strSql = string.Format(strSqlModel, BadgeNumber, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), photopath, photoname, mac.machine_sn, mac.Area); DBUtility.DbHelperSQL.ExecuteSql(strSql); decimal dectemperature = 0.0M; if (!string.IsNullOrEmpty(temperature) && decimal.TryParse(temperature, out dectemperature) && EmpID > 0) { if (dectemperature > 30) { string strsqlTemp = String.Format(@"IF NOT EXISTS(SELECT 8 FROM KqTemperature WHERE EmpID={0} AND checktime='{4}') begin INSERT INTO KqTemperature( EmpID, MachineID, Area, Temperature, checktime, photopath, photoname, EveryDay) VALUES({0},{1},{2},{3},'{4}','{5}','{6}',{7}) end", EmpID, mac.ID, mac.Area, temperature, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), photopath, photoname, recog_time.ToString("yyyyMMdd")); DBUtility.DbHelperSQL.ExecuteSql(strsqlTemp); } } } } } //插入记录 strSqlModel = @"insert into [KqJLLS_temp] (BadgeNumber,CheckTime,CheckType,NerifyCode,MachineID,AreaID,machine_sn,cardid,door,inout,DeptID) values ('{0}','{1}',0,4,{2},{3},'{4}','{5}','{6}',{7},{3})"; string strsql = String.Format(strSqlModel, BadgeNumber, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.ID, mac.Area, mac.machine_sn, "", "0", mac.inout); DBUtility.DbHelperSQL.ExecuteSql(strsql); break; #endregion case 3: //学校模式 #region 学校模式 DAL.cache.GetBSEmpWO(mac.DBName, repsonsedata.personGuid, ref Shenfenzheng, ref Name, ref BadgeNumber); if (BadgeNumber == "") { BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】人员不存在,设备showTime-{0},deviceKey-{1},personGuid-{2},personName-{3}", showTime + "-" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), deviceKey, personGuid, personName)); responseText = responseText = String.Format("{{\"result\": \"1\",\"code\": \"\",\"msg\": \"{0}\"}}", "成功"); return; } if (repsonsedata.photoUrl != "") { System.Drawing.Image img = DBUtility.Util.UrlToImage(repsonsedata.photoUrl); string newImageData = DBUtility.Util.Base64GenImagePath_Watermark(Shenfenzheng, Name, img, newImageNameGID, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.inout.ToString()); if (newImageData != "") photoes = newImageData; //插入照片 if (photoes != "") { strSqlModel = @"INSERT INTO [" + mac.DBName + @"].dbo.[kqphotoes_temp]([badgenumber] ,[checktime] ,[photopath],[photoname],[machine_sn],[flag],[webip],temperature) VALUES('{0}','{1}' ,'{2}','{3}','{4}',0,'127.0.0.1',{5})"; photopath = Global.HRServerPhotoPath.TrimEnd('\\') + "\\" + mac.CustomCode + "\\" + recog_time.ToString("yyyyMMdd"); photoname = mac.DBName + "-" + recog_time.ToString("HHmmss") + "-" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-" + BadgeNumber + ".JPEG"; fullname = photopath + "\\" + photoname; if (Util.Base64StringToImage(photoes, photopath, fullname) != null) { string strSql = string.Format(strSqlModel, BadgeNumber, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), photopath, photoname, mac.machine_sn, temperature); DBUtility.DbHelperSQL.ExecuteSql(strSql); } } } string[] devType = mac.devTypeUse.Split(','); bool hasAddJl = false; for (int j = 0; j < devType.Length; j++) { string devTypeUser = devType[j]; switch (devTypeUser) { case "4": //宿舍 string Sstrsql = String.Format(@"INSERT INTO [" + mac.DBName + @"].dbo.SSRoomKqJl ( badgenumber,checktime,checktype,machine_sn ,machineID,AreaID,empid,inout)VALUES( '{0}','{1}',4,'{2}', '{3}', '{4}',{5},{6})", BadgeNumber, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.machine_sn, mac.ID, mac.Area, EmpID, mac.inout); DBUtility.DbHelperSQL.ExecuteSql(Sstrsql); break; case "3": //会议 string hstr = @"insert into [" + mac.DBName + @"].dbo.MeetingAttenJL (badgenumber,checktime,checktype,machine_sn,MachineID,AreaID,flag,inout,EmpID) VALUES('{0}','{1}',4,'{2}','{3}','{4}',0,{5},{6})"; string hstrsql = String.Format(hstr, BadgeNumber, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.machine_sn, mac.ID, mac.Area, mac.inout, EmpID); // BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别.ToString(), String.Format("设备序列号-{0},会议:{1}", repsonsedata.sn, hstrsql)); DBUtility.DbHelperSQL.ExecuteSql(hstrsql); break; case "5": //报餐 if (!hasAddJl) { string bstrSql = @"insert into [" + mac.DBName + @"].dbo.[KqJLLS_temp] (BadgeNumber,CheckTime,CheckType,NerifyCode,MachineID,AreaID,machine_sn,flag,everyday,temperature) values ('{0}','{1}',0,4,{2},{3},'{4}',0,{5},{6})"; string bcstrsql = String.Format(bstrSql, BadgeNumber, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.ID, mac.Area, mac.machine_sn, DateTime.Now.ToString("yyyyMMdd"), temperature); DBUtility.DbHelperSQL.ExecuteSql(bcstrsql); hasAddJl = true; } break; case "0": //考勤 if (!hasAddJl) { string kkstr = @"insert into [" + mac.DBName + @"].dbo.[KqJLLS_temp] (BadgeNumber,CheckTime,CheckType,NerifyCode,MachineID,AreaID,machine_sn,flag,everyday,photopath,photoname,temperature) values ('{0}','{1}',0,4,{2},{3},'{4}',0,{5},'{6}','{7}',{8})"; string kkstrsql = String.Format(kkstr, BadgeNumber, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.ID, mac.Area, mac.machine_sn, DateTime.Now.ToString("yyyyMMdd"), photopath, photoname, temperature); BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别.ToString(), kkstrsql); DBUtility.DbHelperSQL.ExecuteSql(kkstrsql); hasAddJl = true; } //更新人员的进出状态 if (mac.InSchool > 0) { string InSchoolSql = String.Format(@"UPDATE [" + mac.DBName + @"].dbo.EmpInfo SET inout='{0}',lasttime='{1}' WHERE Kaoqinhao='{2}' and lasttime<'{1}'", mac.inout, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), BadgeNumber); DBUtility.DbHelperSQL.ExecuteSql(InSchoolSql); } break; case "1"://门禁记录 string strmj = String.Format(@"INSERT INTO [" + mac.DBName + @"].dbo.wmMjjl(checktime,type,DevSN,badgenumber,FromTable,EmpID,InOut)VALUES ( '{0}',4,'{1}','{2}','{3}',{4},{5})", recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.machine_sn, BadgeNumber, "Machines", EmpID, mac.inout); DBUtility.DbHelperSQL.ExecuteSql(strmj); //更新人员的进出状态 if (mac.InSchool > 0) { string InSchoolSql = String.Format(@"UPDATE [" + mac.DBName + @"].dbo.EmpInfo SET inout='{0}',lasttime='{1}' WHERE Kaoqinhao='{2}' and lasttime<'{1}'", mac.inout, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), BadgeNumber); DBUtility.DbHelperSQL.ExecuteSql(InSchoolSql); } break; } } break; #endregion default: //云考勤 #region 云考勤 DAL.cache.GetBSEmpWO(mac.DBName, repsonsedata.personGuid, ref Shenfenzheng, ref Name, ref BadgeNumber); if (BadgeNumber == "") { BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】人员不存在,设备showTime-{0},deviceKey-{1},personGuid-{2},personName-{3}", showTime + "-" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), deviceKey, personGuid, personName), mac.DBName); responseText = responseText = String.Format("{{\"result\": \"1\",\"code\": \"\",\"msg\": \"{0}\"}}", "成功"); return; } if (repsonsedata.photoUrl != "") { photoname = recog_time.ToString("yyyyMMddHHmmssfff") + "-" + DateTime.Now.ToString("MMddHHmmssfff") + "-" + BadgeNumber + ".JPEG"; if (Global.interType == 4) { photopath = Global.HRServerPhotoPath.TrimEnd('\\') + "\\" + mac.CustomCode + "\\" + recog_time.ToString("yyyyMMdd"); } else { photopath = Global.HRServerPhotoPath.TrimEnd('\\') + "\\" + recog_time.ToString("yyyyMMdd"); } fullname = photopath + "\\" + photoname; System.Drawing.Image img = DBUtility.Util.UrlToImage(repsonsedata.photoUrl); string newImageData = DBUtility.Util.Base64GenImagePath_Watermark(BadgeNumber, Name, img, newImageNameGID, recog_time.ToString("yyyy-MM-dd HH:mm:ss"), mac.inout.ToString()); if (newImageData != "") photoes = newImageData; if (photoes !="" && Util.Base64StringToImage(photoes, photopath, fullname) != null) { if (BadgeNumber.IndexOf("FK") >= 0) { if (Global.interType == 4) { strSqlModel = @"IF NOT exists(SELECT 8 FROM [" + mac.DBName + @"].dbo.[FKEmpInOut] WHERE Kaoqinhao='{5}' AND Checktime='{0}') begin INSERT INTO [" + mac.DBName + @"].dbo.FKEmpInOut(Checktime, Photopath, Photoname, EveryDay, MachineID, Kaoqinhao, temperature) VALUES('{0}','{1}','{2}',{3},{4},'{5}',{6}) end"; } else { strSqlModel = @"IF NOT exists(SELECT 8 FROM [FKEmpInOut] WHERE Kaoqinhao='{5}' AND Checktime='{0}') begin INSERT INTO FKEmpInOut(Checktime, Photopath, Photoname, EveryDay, MachineID, Kaoqinhao, temperature) VALUES('{0}','{1}','{2}',{3},{4},'{5}',{6}) end"; } kstrsql = string.Format(strSqlModel, repsonsedata.showTime, photopath, photoname, recog_time.ToString("yyyyMMdd"), mac.ID, BadgeNumber, temperature); DBUtility.DbHelperSQL.ExecuteSql(kstrsql); hasAddFk = true; } else { if (Global.interType == 4) { strSqlModel = @"INSERT INTO [" + mac.DBName + @"].dbo.[kqphotoes_temp]([badgenumber] ,[checktime] ,[photopath],[photoname],[machine_sn],[flag],[webip],temperature) VALUES('{0}','{1}' ,'{2}','{3}','{4}',0,'127.0.0.1',{5})"; } else { strSqlModel = @"INSERT INTO dbo.[kqphotoes_temp]([badgenumber] ,[checktime] ,[photopath],[photoname],[machine_sn],[flag],[webip],temperature) VALUES('{0}','{1}' ,'{2}','{3}','{4}',0,'127.0.0.1',{5})"; } kstrsql = string.Format(strSqlModel, BadgeNumber, repsonsedata.showTime, photopath, photoname, mac.machine_sn, mac.Area, temperature); DBUtility.DbHelperSQL.ExecuteSql(kstrsql); } } else { BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备showTime-{0},deviceKey-{1},personGuid-{2},personName-{3},photoUrl-{4} 照片保存失败,kstrsql:{5}", showTimeBak, deviceKey, personGuid, personName, photoUrl, kstrsql), mac.DBName); } } if (BadgeNumber.IndexOf("FK") >= 0) { if (!hasAddFk) { if (Global.interType == 4) { strSqlModel = @"IF NOT exists(SELECT 8 FROM [" + mac.DBName + @"].dbo.[FKEmpInOut] WHERE Kaoqinhao='{5}' AND Checktime='{0}') begin INSERT INTO [" + mac.DBName + @"].dbo.FKEmpInOut(Checktime, Photopath, Photoname, EveryDay, MachineID, Kaoqinhao, temperature) VALUES('{0}','{1}','{2}',{3},{4},'{5}',{6}) end"; } else { strSqlModel = @"IF NOT exists(SELECT 8 FROM [FKEmpInOut] WHERE Kaoqinhao='{5}' AND Checktime='{0}') begin INSERT INTOFKEmpInOut(Checktime, Photopath, Photoname, EveryDay, MachineID, Kaoqinhao, temperature) VALUES('{0}','{1}','{2}',{3},{4},'{5}',{6}) end"; } kstrsql = string.Format(strSqlModel, repsonsedata.showTime, "", "", recog_time.ToString("yyyyMMdd"), mac.ID, BadgeNumber, temperature); DBUtility.DbHelperSQL.ExecuteSql(kstrsql); } } else { //插入记录 if (Global.interType == 4) { strSqlModel = @"insert into [" + mac.DBName + @"].dbo.[KqJLLS_temp] (BadgeNumber,CheckTime,CheckType,NerifyCode,MachineID,AreaID,machine_sn,temperature) values ('{0}','{1}',0,4,{2},{3},'{4}',{5})"; } else { strSqlModel = @"insert into [KqJLLS_temp] (BadgeNumber,CheckTime,CheckType,NerifyCode,MachineID,AreaID,machine_sn,temperature) values ('{0}','{1}',0,4,{2},{3},'{4}',{5})"; } kstrsql = String.Format(strSqlModel, BadgeNumber, repsonsedata.showTime, mac.ID, mac.Area, mac.machine_sn, temperature); } // BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备showTime-{0},deviceKey-{1},personGuid-{2},personName-{3},photoUrl-{4} 插入记录,kstrsql:{5}", //showTimeBak, deviceKey, personGuid, personName, photoUrl, kstrsql), mac.DBName); DBUtility.DbHelperSQL.ExecuteSql(kstrsql); break; #endregion } } responseText = responseText = String.Format("{{\"result\": \"1\",\"code\": \"\",\"msg\": \"{0}\"}}", "成功"); } } catch (Exception ex) { responseText = responseText = String.Format("{{\"result\": \"-1\",\"code\": \"\",\"msg\": \"{0}\"}}", ex.Message); BLL.LogManage.WriteLog(Model.AccessLog.AllLogType.人脸识别WO.ToString(), String.Format("【WOJLBack】设备记录回调处理异常:{0}", ex.Message.ToString() + ex.StackTrace)); } finally { #region 支持跨域请求 context.Response.Clear(); context.Response.ClearHeaders(); string origin = context.Request.Headers["Origin"]; context.Response.AppendHeader("Access-Control-Allow-Origin", string.IsNullOrEmpty(origin) ? "*" : origin); string requestHeaders = context.Request.Headers["Access-Control-Request-Headers"]; context.Response.AppendHeader("Access-Control-Allow-Headers", string.IsNullOrEmpty(requestHeaders) ? "*" : requestHeaders); context.Response.AppendHeader("Access-Control-Allow-Methods", "POST, OPTIONS"); #endregion context.Response.Clear(); context.Response.Write(responseText); context.Response.End(); } } public bool IsReusable { get { return false; } } } }