using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Xml; using System.Data; using System.Data.SqlClient; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Text; //using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; using System.Windows.Forms; using System.Data.SqlTypes; using System.Xml.Linq; using System.Web.UI.WebControls; using System.Net.NetworkInformation; using System.Text.RegularExpressions; using System.IO; using MySql.Data.MySqlClient; using System.Runtime.CompilerServices; using System.Web.Caching; using Quartz; using BLWWS_BLL.Job; using BLWWS_BLL.Common; namespace BLWWS_BLL { public static class BLL { //设置APPID/AK/SK,可以到百度申请,链接:https://console.bce.baidu.com/ai/?fromai=1#/ai/face/app/list //var APP_ID = "10461316"; //private static string API_KEY = "2HDaFPcV5cY3mXqwLf4UeuVW";//用于人脸识别 //private static string SECRET_KEY = "B122PgXT6GBif67mTGztURZoKDC9XEe3";//用于人脸识别 private static readonly string _face_url = System.Configuration.ConfigurationManager.AppSettings["face_url"]; private static readonly string _face_url_new = System.Configuration.ConfigurationManager.AppSettings["face_url_new"]; private static readonly int ImageMaxHeight = int.Parse(System.Configuration.ConfigurationManager.AppSettings["ImageMaxHeight"]); private static readonly int ImageMaxWidth = int.Parse(System.Configuration.ConfigurationManager.AppSettings["ImageMaxWidth"]); private static readonly int ImageMinHeight = int.Parse(System.Configuration.ConfigurationManager.AppSettings["ImageMinHeight"]); private static readonly int ImageMinWidth = int.Parse(System.Configuration.ConfigurationManager.AppSettings["ImageMinWidth"]); /// /// 获取酒店记录 /// /// 酒店编码 /// public static DataTable GetHotelCode(string code) { string sql = "select * from tb_HotelCode where code='" + code + "'"; return SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql).Tables[0]; } /// /// 获取所有酒店 /// /// public static DataSet GetHotelCode() { string sql = "select Code,Remark,HotelID from tb_HotelCode order by Remark"; return SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql); } public static void EnableBaoJing(string hotelcode, int isenable) { string sql = "update tb_HotelCode set Is_Push_BaoJing=@baojing where Code=@code;"; SqlParameter p1 = new SqlParameter("@code", hotelcode); SqlParameter p2 = new SqlParameter("@baojing", isenable); SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql, new SqlParameter[] { p1, p2 }); } public static int AddHotelInfo(string hotelcode, string hotelname, int hotelid) { string sql = "insert into tb_HotelCode(Code,Remark,HotelID) values(@code,@hotelName,@hotelid)"; SqlParameter p1 = new SqlParameter("@code", hotelcode); SqlParameter p2 = new SqlParameter("@hotelName", hotelname); SqlParameter p3 = new SqlParameter("@hotelid", hotelid); return SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql, new SqlParameter[] { p1, p2, p3 }); } public static int GetEnableBaoJing(string code) { string sql = "select Is_Push_BaoJing from tb_HotelCode where code=@code;"; SqlParameter p1 = new SqlParameter("@code", code); object ooo = SqlHelper.ExecuteScalar(SqlHelper.connectionString, CommandType.Text, sql, new SqlParameter[] { p1 }); int ia = 0; int.TryParse(ooo.ToString(), out ia); return ia; } /// /// 开房 /// /// 酒店编码 /// 房号 /// 入住日期 /// 入住客人信息 /// 手机号码,多个已逗号,隔开 /// 身份证号:用于获取验证码 /// 入住记录ID /// public static int CheckIn(string code, string roomNumber, DateTime checkInDate, string xmlString, int YesNoFace, string key, ref long checkInID, string phoneNumber = "", string idNumber = "", string MsgId = "") { CheckInYuanShidata data1 = new CheckInYuanShidata(); data1.RequestId = MsgId; data1.Step = 2; data1.CurrentTime = DateTime.Now; var vvv = JsonConvert.SerializeObject(data1); CSRedisCacheHelper.Publish(StaticData.PMSLogMonitor, vvv); //判断该房号是否已退房 string sql = "select ID from tb_RoomCheck where Code='" + code + "' and RoomNumber='" + roomNumber + "' and isnull(CheckOutDate,'')=''"; DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql); #region 新添加的代码 if (YesNoFace == 1) { try { bool containsInvalidChar = Regex.IsMatch(xmlString, @"[\x00-\x08\x0B-\x0C\x0E-\x1F]"); if (containsInvalidChar) { LogHelper.WriteLog("传递的xml文件格式不正确"); } XDocument doc = XDocument.Parse(xmlString); Dictionary customerInfo = new Dictionary(); foreach (var item in doc.Descendants("item")) { string customer = item.Attribute("customer").Value; string sex = item.Attribute("sex").Value; customerInfo[customer] = sex; } foreach (var kvp in customerInfo) { string ip = ""; // 获取所有网络接口 NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); // 遍历每个网络接口 foreach (NetworkInterface networkInterface in interfaces) { // 获取IP地址 IPInterfaceProperties ipProperties = networkInterface.GetIPProperties(); UnicastIPAddressInformationCollection ipAddresses = ipProperties.UnicastAddresses; // 遍历每个IP地址 foreach (UnicastIPAddressInformation ipAddress in ipAddresses) { // 判断是否为IPv4地址 if (ipAddress.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { //过滤本地ip if (ipAddress.Address.ToString() != "127.0.0.1") { //局域网ip ip = ipAddress.Address.ToString(); } } } } Uploadinfo uploadinfo = new Uploadinfo() { key = key, code = code, checkInID = checkInID, idType = 0, idCard = idNumber, name = kvp.Key, sex = kvp.Value == "男" ? 1 : 0, //birthday = birthday, //photoUrl = photoUrl, //photo = "photo.Length_"+ photo.Length, }; string jsonString = JsonConvert.SerializeObject(uploadinfo); PmsInterface info = new PmsInterface() { pmstype = 1, DateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), pmsContent = jsonString, hotelid = -1, }; int pmsid = SqlSugarBase.GesmartDb().Insertable(info).ExecuteReturnIdentity(); if (containsInvalidChar) { pmsLog pmslog1 = new pmsLog { pmsid = pmsid, app = 1, step = 100, Data = xmlString, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "XML文件格式不正确", Ip = ip }; SqlSugarBase.GesmartDb().Insertable(pmslog1).ExecuteCommand(); } pmsLog pmslogs = new pmsLog { pmsid = pmsid, app = 1, step = 101, Data = jsonString, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "pms CheckIn服务收到信息", Ip = ip }; SqlSugarBase.GesmartDb().Insertable(pmslogs).ExecuteCommand(); //Console.WriteLine($"Customer: {kvp.Key}, Sex: {kvp.Value}"); StringBuilder sb = new StringBuilder(); sb.Append("/checkinInterface?key=abc&data="); var postData = new { LodgerNmae = kvp.Key, IDNumber = idNumber, Sex = kvp.Value == "男" ? 1 : 0, picture = "", HotelCode = code, roomid = roomNumber, phonenumber = phoneNumber, CheckTime = Convert.ToDateTime(checkInDate).ToString("yyyy-MM-dd HH:mm:ss"), pmsinfoid = pmsid }; sb.Append(Newtonsoft.Json.JsonConvert.SerializeObject(postData)); pmsLog pmslog = new pmsLog { pmsid = pmsid, app = 1, step = 102, Data = sb.ToString(), Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "pms CheckIn 服务转发信息成功", HotelCode = code, roomid = roomNumber }; SqlSugarBase.GesmartDb().Insertable(pmslog).ExecuteCommand(); string strResult = Tools.PostWebRequest(_face_url + sb.ToString(), "");//调用人脸机接口 LogHelper.WriteLog("没有人脸机的开房信息:" + sb.ToString()); LogHelper.WriteLog(_face_url + sb.ToString() + ",没有人脸机的开房信息结果:" + strResult); } } catch (Exception ex) { LogHelper.WriteLog("没有人脸机的推送给服务器信息错误:" + ex.ToString()); } } #endregion //如果该房号尚未退房,只是更新客人信息 if (ds.Tables[0].Rows.Count > 0) { sql = "update tb_RoomCheck set XmlString='" + xmlString + "' where Code='" + code + "' and RoomNumber='" + roomNumber + "' and isnull(CheckOutDate,'')=''"; checkInID = Convert.ToInt64(ds.Tables[0].Rows[0]["ID"]); CheckInYuanShidata data2 = new CheckInYuanShidata(); data2.RequestId = MsgId; data2.Step = 3; data2.CurrentTime = DateTime.Now; var vvv1 = JsonConvert.SerializeObject(data1); CSRedisCacheHelper.Publish(StaticData.PMSLogMonitor, vvv1); return SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql); } else { string validateCode = "8888"; //判断是否使用微信功能,如果是发送验证码,默认取身份证后四位 if (Convert.ToBoolean(GetHotelCode(code).Rows[0]["UserWX"])) { if (!string.IsNullOrEmpty(idNumber)) { validateCode = ""; foreach (string id in idNumber.Split(',')) { if (id.Length > 3) { validateCode += id.Substring(id.Length - 4) + ","; } } } //if (code == "1001" || code == "BLW_Hotel")//云端默认酒店和200服务器 //{ // if (!string.IsNullOrEmpty(phoneNumber)) // { // validateCode = Tools.CreateValidateCode(4); // AliyunSMSHelper.SendVerifySMS(phoneNumber, validateCode);//发送短信验证码 // } //} } sql = "insert into tb_RoomCheck(Code,RoomNumber,XmlString,CheckInDate,PhoneNumber,IDNumber,ValidateCode) values('" + code + "','" + roomNumber + "','" + xmlString + "','" + checkInDate.ToString("yyyy-MM-dd HH:mm:ss") + "','" + phoneNumber + "','" + idNumber + "','" + validateCode + "');"; //LogHelper.WriteLog(sql); object result = SqlHelper.ExecuteScalar(SqlHelper.connectionString, CommandType.Text, sql + "select @@IDENTITY as 'ID'"); checkInID = Convert.ToInt64(result); if (checkInID > 0) { //同步房态 return 1; } CheckInYuanShidata data2 = new CheckInYuanShidata(); data2.RequestId = MsgId; data2.Step = 3; data2.CurrentTime = DateTime.Now; var vvv1 = JsonConvert.SerializeObject(data1); CSRedisCacheHelper.Publish(StaticData.PMSLogMonitor, vvv1); return 0; } } /// /// 更改住客手机号码 /// /// 酒店编码 /// 房号 /// 新手机号码,多个已逗号,隔开 /// 身份证号:用于获取验证码 /// public static int ChangePhoneNumber(string code, string roomNumber, string phoneNumber = "", string idNumber = "") { //判断该房号是否已退房 string sql = "select ID from tb_RoomCheck where Code='" + code + "' and RoomNumber='" + roomNumber + "' and isnull(CheckOutDate,'')=''"; DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql); //如果该房号尚未退房,只是更新客人电话号码信息 if (ds.Tables[0].Rows.Count > 0) { string validateCode = "8888"; //判断是否使用微信功能,如果是发送验证码,默认取身份证后四位 if (Convert.ToBoolean(GetHotelCode(code).Rows[0]["UserWX"])) { if (!string.IsNullOrEmpty(idNumber)) { validateCode = ""; foreach (string id in idNumber.Split(',')) { if (id.Length > 4) { validateCode += id.Substring(id.Length - 4) + ","; } } } if (code == "1001" || code == "BLW_Hotel")//云端默认酒店和200服务器 { if (!string.IsNullOrEmpty(phoneNumber)) { validateCode = Tools.CreateValidateCode(4); AliyunSMSHelper.SendVerifySMS(phoneNumber, validateCode);//发送短信验证码 } } } sql = "update tb_RoomCheck set PhoneNumber='" + phoneNumber + "',IDNumber='" + idNumber + "',ValidateCode='" + validateCode + "' where Code='" + code + "' and RoomNumber='" + roomNumber + "' and isnull(CheckOutDate,'')=''"; return SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql); } return 0; } /// /// 退房 /// /// 酒店编码 /// 房号 /// 退房日期 /// /// pms编号 /// public static int CheckOut(string code, string roomNumber, DateTime checkOutDate, int pmsid, string MsgId) { CheckInYuanShidata data1 = new CheckInYuanShidata(); data1.CommandType = "CheckOut"; data1.RequestId = MsgId; data1.Step = 2; data1.CurrentTime = DateTime.Now; var vvv = JsonConvert.SerializeObject(data1); CSRedisCacheHelper.Publish(StaticData.PMSLogMonitor, vvv); string sqls = " select * from tb_RoomCheck where Code='" + code + "' and RoomNumber='" + roomNumber + "' and isnull(CheckOutDate,'')=''"; DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sqls); int result = 0; if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { string sql = "update tb_RoomCheck set CheckOutDate='" + checkOutDate.ToString("yyyy-MM-dd HH:mm:ss") + "',SyncCheckOut=0 where Code='" + code + "' and RoomNumber='" + roomNumber + "' and isnull(CheckOutDate,'')=''"; result = SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql); if (result > 0 && !string.IsNullOrEmpty(_face_url)) { try { StringBuilder sb = new StringBuilder(); sb.Append("/CheckOut?key=abc&data="); var postData = new { HotelCode = code, roomid = roomNumber, checkOutTime = checkOutDate.ToString("yyyy-MM-dd HH:mm:ss"), pmsinfoid = pmsid }; sb.Append(Newtonsoft.Json.JsonConvert.SerializeObject(postData)); pmsLog pmslog = new pmsLog { pmsid = pmsid, app = 1, step = 102, Data = sb.ToString(), Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "pms服务转发信息成功", HotelCode = code, roomid = roomNumber }; SqlSugarBase.GesmartDb().Insertable(pmslog).ExecuteCommand(); LogHelper.WriteLog("新添加的代码:" + sb.ToString()); string strResult = Tools.PostWebRequest(_face_url + sb.ToString(), "");//调用人脸机接口 LogHelper.WriteLog(_face_url + sb.ToString() + ",结果:" + strResult); } catch (Exception ex) { pmsLog pmslog = new pmsLog { pmsid = pmsid, app = 1, step = 140, //Data = sb.ToString(), Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "pms服务转发信息失败", HotelCode = code, roomid = roomNumber }; SqlSugarBase.GesmartDb().Insertable(pmslog).ExecuteCommand(); LogHelper.WriteLog(ex.ToString()); } } CheckInYuanShidata data2 = new CheckInYuanShidata(); data2.RequestId = MsgId; data2.Step = 3; data2.CurrentTime = DateTime.Now; var vvv1 = JsonConvert.SerializeObject(data2); CSRedisCacheHelper.Publish(StaticData.PMSLogMonitor, vvv1); } else { string sql = "insert into tb_RoomCheck (CheckOutDate,Code,RoomNumber,CheckInDate,SyncCheckIn,SyncCheckOut,SyncRent) values " + "('" + checkOutDate.ToString("yyyy-MM-dd HH:mm:ss") + "','" + code + "','" + roomNumber + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'," + 0 + "," + 0 + "," + 0 + ")"; result = SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql); if (result > 0 && !string.IsNullOrEmpty(_face_url)) { try { StringBuilder sb = new StringBuilder(); sb.Append("/CheckOut?key=abc&data="); var postData = new { HotelCode = code, roomid = roomNumber, checkOutTime = checkOutDate.ToString("yyyy-MM-dd HH:mm:ss"), pmsinfoid = pmsid }; sb.Append(Newtonsoft.Json.JsonConvert.SerializeObject(postData)); pmsLog pmslog = new pmsLog { pmsid = pmsid, app = 1, step = 102, Data = sb.ToString(), Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "pms服务转发信息成功", HotelCode = code, roomid = roomNumber }; SqlSugarBase.GesmartDb().Insertable(pmslog).ExecuteCommand(); LogHelper.WriteLog("新添加的代码:" + sb.ToString()); string strResult = Tools.PostWebRequest(_face_url + sb.ToString(), "");//调用人脸机接口 LogHelper.WriteLog(_face_url + sb.ToString() + ",结果:" + strResult); } catch (Exception ex) { pmsLog pmslog = new pmsLog { pmsid = pmsid, app = 1, step = 141, //Data = sb.ToString(), Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "pms服务转发信息失败", HotelCode = code, roomid = roomNumber }; LogHelper.WriteLog(ex.ToString()); } } CheckInYuanShidata data2 = new CheckInYuanShidata(); data2.CommandType = "CheckOut"; data2.RequestId = MsgId; data2.Step = 3; data2.CurrentTime = DateTime.Now; var vvv1 = JsonConvert.SerializeObject(data2); CSRedisCacheHelper.Publish(StaticData.PMSLogMonitor, vvv1); } return result; } /// /// 待租 /// /// 酒店编码 /// 房号 /// 变更待租日期 /// public static int RentRoom(string code, string roomNumber, DateTime rentDate,string MsgId) { try { CheckInYuanShidata data1 = new CheckInYuanShidata(); data1.CommandType = "RentRoom"; data1.RequestId = MsgId; data1.Step = 2; data1.CurrentTime = DateTime.Now; var vvv = JsonConvert.SerializeObject(data1); CSRedisCacheHelper.Publish(StaticData.PMSLogMonitor, vvv); string sql = " select * from tb_RoomCheck where Code='" + code + "' and RoomNumber='" + roomNumber + "' and isnull(CheckOutDate,'')=''"; DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { sql = "update tb_RoomCheck set RentDate='" + rentDate.ToString("yyyy-MM-dd HH:mm:ss") + "' where Code='" + code + "' and RoomNumber='" + roomNumber + "'"; LogHelper.WriteLog("修改待租信息"); } else { sql = "insert into tb_RoomCheck (RentDate,Code,RoomNumber,CheckInDate,SyncCheckIn,SyncCheckOut,SyncRent) values " + "('" + rentDate.ToString("yyyy-MM-dd HH:mm:ss") + "','" + code + "','" + roomNumber + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'," + 0 + "," + 0 + "," + 1 + ")"; LogHelper.WriteLog("添加待租信息"); } CheckInYuanShidata data2 = new CheckInYuanShidata(); data2.CommandType = "RentRoom"; data2.RequestId = MsgId; data2.Step = 3; data2.CurrentTime = DateTime.Now; var vvv2 = JsonConvert.SerializeObject(data2); CSRedisCacheHelper.Publish(StaticData.PMSLogMonitor, vvv2); return SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql); } catch (Exception ex) { LogHelper.WriteLog("变更待租错误:" + ex); return 0; } } /// /// 获取客房记录 /// /// /// /// public static DataSet GetRoomRecords(string code, string roomNumber, string tableName) { //if (string.IsNullOrEmpty(tableName)) //{ // tableName = "tb_RoomCheck"; //} //string sql = "select ID,RoomNumber,CheckInDate,SyncCheckIn,CheckOutDate,SyncCheckOut,RentDate,SyncRent,PhoneNumber,IDNumber,ValidateCode from " + // tableName + " where Code='" + code + "' and RoomNumber like '%" + roomNumber + "%' order by ID desc"; string sql = string.Format("select * from(" + "select ID,RoomNumber,CheckInDate,SyncCheckIn,CheckOutDate,SyncCheckOut,RentDate,SyncRent,PhoneNumber,IDNumber,ValidateCode " + "from tb_RoomCheck where Code='{0}' and RoomNumber like '%{1}%' " + "union " + "select ID,RoomNumber,CheckInDate,SyncCheckIn,CheckOutDate,SyncCheckOut,RentDate,SyncRent,PhoneNumber,IDNumber,ValidateCode " + "from tb_RoomCheck_bak where Code='{2}' and RoomNumber like '%{3}%') x " + "order by x.ID desc", code, roomNumber, code, roomNumber); return SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql); } /// /// 获取入住人信息 /// /// /// public static DataSet GetRoomCustomer(long checkInID) { string sql = string.Format("select *,'' as StatusName,'' as SexName from tb_RoomCustomer where CheckInID={0}", checkInID); return SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql); } /// /// 定时获取酒店新的开房/退房/待租记录 /// /// 酒店编码 /// public static DataSet GetCheckInOrOutRecord(string code) { if (string.IsNullOrEmpty(code)) { return null; } SqlParameter[] parameters = { new SqlParameter("@code", SqlDbType.VarChar, 30) }; parameters[0].Value = code; return SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.StoredProcedure, "sp_GetCheckInOrOutRecord", parameters); } /// /// 更新已同步的新开房/退房/待租状态 /// /// 酒店编码 /// 记录ID /// 0开房,1退房,2待租 /// public static int UpdateCheckInOrOutRecord(string code, Int64 id, int flag) { string cloumnName = ""; switch (flag) { case 0: cloumnName = "SyncCheckIn"; break; case 1: cloumnName = "SyncCheckOut"; break; case 2: cloumnName = "SyncRent"; break; } if (!string.IsNullOrEmpty(cloumnName)) { string sql = "update tb_RoomCheck set " + cloumnName + "=1 where ID=" + id + " and Code='" + code + "'"; return SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql); } //string sql = ""; //switch (flag) //{ // case 0: // sql = "update tb_RoomCheck set SyncRent=0,SyncCheckOut=0,SyncCheckIn=1 where ID=" + id + " and Code='" + code + "'"; // LogHelper.WriteLog("同步开房状态"); // break; // case 1: // sql = "update tb_RoomCheck set SyncRent=0,SyncCheckOut=1,SyncCheckIn=0 where ID=" + id + " and Code='" + code + "'"; // LogHelper.WriteLog("同步退房状态"); // break; // case 2: // sql = "update tb_RoomCheck set SyncRent=1,SyncCheckOut=0,SyncCheckIn=0 where ID=" + id + " and Code='" + code + "'"; // LogHelper.WriteLog("同步待租状态"); // break; //} //int count = SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql); //if (count>0) //{ // return count; //} return 0; } /// /// 根据酒店ID,房号获取当前入住人信息 /// /// 酒店ID /// 房号 /// public static string GetRoomCustomer(int hotelID, string roomNumber, ref string phoneNumber) { StringBuilder sql = new StringBuilder(); sql.Append("select r.XmlString,r.PhoneNumber from tb_RoomCheck r inner join tb_HotelCode h on r.Code=h.Code where h.HotelID=" + hotelID + " and r.RoomNumber='" + roomNumber + "' and isnull(r.CheckOutDate,'')=''"); sql.Append(" union "); sql.Append("select r.XmlString,r.PhoneNumber from tb_RoomCheck_bak r inner join tb_HotelCode h on r.Code=h.Code where h.HotelID=" + hotelID + " and r.RoomNumber='" + roomNumber + "' and isnull(r.CheckOutDate,'')=''"); DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql.ToString()); if (ds.Tables.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { phoneNumber = row[1].ToString(); return row[0].ToString(); } } return ""; } /// /// 判断验证码是否正确 /// /// 酒店ID /// 房号 /// 用户输入验证码 /// public static bool ValidateNumber(int hotelID, string roomNumber, string validateCode) { //根据酒店ID,房号和手机验证码查找记录 StringBuilder sql = new StringBuilder(); sql.Append("select r.ValidateCode from tb_RoomCheck r inner join tb_HotelCode h on r.Code=h.Code where h.HotelID=" + hotelID + " and r.RoomNumber='" + roomNumber + "' and isnull(r.CheckOutDate,'')=''"); sql.Append(" union "); sql.Append("select r.ValidateCode from tb_RoomCheck_bak r inner join tb_HotelCode h on r.Code=h.Code where h.HotelID=" + hotelID + " and r.RoomNumber='" + roomNumber + "' and isnull(r.CheckOutDate,'')=''"); DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql.ToString()); if (ds.Tables.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { if (null != row[0] && !string.IsNullOrEmpty(row[0].ToString())) { foreach (string v1 in row[0].ToString().Split(',')) { if (v1 == validateCode) { return true; } } } } } return false; } /// /// 判断验证码是否正确 /// /// 酒店编码 /// 房号 /// 用户输入验证码 /// public static bool ValidateNumberByCode(string code, string roomNumber, string validateCode) { //根据酒店Code,房号和手机验证码查找记录 StringBuilder sql = new StringBuilder(); sql.Append("select r.ValidateCode from tb_RoomCheck r where r.Code='" + code + "' and r.RoomNumber='" + roomNumber + "' and isnull(r.CheckOutDate,'')=''"); sql.Append(" union "); sql.Append("select r.ValidateCode from tb_RoomCheck_bak r where r.Code='" + code + "' and r.RoomNumber='" + roomNumber + "' and isnull(r.CheckOutDate,'')=''"); DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql.ToString()); if (ds.Tables.Count > 0) { foreach (DataRow row in ds.Tables[0].Rows) { if (null != row[0] && !string.IsNullOrEmpty(row[0].ToString())) { foreach (string v1 in row[0].ToString().Split(',')) { if (v1 == validateCode) { return true; } } } } } return false; } /// /// 根据手机号获取当前入住记录信息 /// /// /// public static DataTable GetCodeAndRoomNumberByPhone(string phone) { StringBuilder sql = new StringBuilder(); sql.Append("select r.* from tb_RoomCheck r where r.PhoneNumber like '%" + phone + "%' and isnull(r.CheckOutDate,'')=''"); sql.Append(" union "); sql.Append("select r.* from tb_RoomCheck_bak r where r.PhoneNumber like '%" + phone + "%' and isnull(r.CheckOutDate,'')=''"); DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql.ToString()); if (ds.Tables.Count > 0) { return ds.Tables[0]; } return null; } /// /// 上传/变更图像及信息 /// /// 证件类型:0身份证,1护照 /// 证件号码 /// 姓名 /// 性别:0女,1男 /// 图像 /// public static int UploadPhoto(int idType, string idCard, string name, int sex, string birthday, byte[] photo) { //根据身份类型和编号获取记录 string sql = "select r.ID from tb_RoomCustomer r where r.IDType=" + idType + " and r.IDCard='" + idCard + "'"; DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { sql = "update tb_RoomCustomer set IDType=@IDType,IDCard=@IDCard,Name=@Name,Sex=@Sex,Birthday=@Birthday,Photo=@Photo,ModifiedDate=getdate() where ID=" + Convert.ToInt16(ds.Tables[0].Rows[0][0]); } else { sql = "insert into tb_RoomCustomer (IDType,IDCard,[Name],Sex,Birthday,Photo) values (@IDType,@IDCard,@Name,@Sex,@Birthday,@Photo)"; } SqlParameter[] sqlParams = new SqlParameter[6] { new SqlParameter("@IDType", idType), new SqlParameter("@IDCard", idCard), new SqlParameter("@Name", name), new SqlParameter("@Sex", sex), new SqlParameter("@Birthday", birthday), new SqlParameter("@Photo", photo)}; return SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql, sqlParams); } /// /// 上传图片 /// /// /// /// /// /// /// /// /// /// /// public static int UploadPhoto(int idType, string idCard, string name, int sex, string birthday, string photoUrl, byte[] photo, long checkInID, int pmsid, ref string msg) { if (!string.IsNullOrEmpty(photoUrl))//取云端图片内容保存在数据库 { try { System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(photoUrl); webRequest.Method = "GET"; System.Net.HttpWebResponse webResponse = (System.Net.HttpWebResponse)webRequest.GetResponse(); System.IO.Stream s = webResponse.GetResponseStream(); List list = new List(); while (true) { int data = s.ReadByte(); if (data == -1) break; else { byte b = (byte)data; list.Add(b); } } photo = list.ToArray(); } catch (Exception) { pmsLog pms = new pmsLog { pmsid = pmsid, app = 1, step = 142, //Data = sb.ToString(), Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "读取云端图片失败", }; SqlSugarBase.GesmartDb().Insertable(pms).ExecuteCommand(); } } else { if (photo == null) { pmsLog pmsinfo = new pmsLog { pmsid = pmsid, app = 1, step = 143, //Data = sb.ToString(), Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "图片内容为空", }; SqlSugarBase.GesmartDb().Insertable(pmsinfo).ExecuteCommand(); //LogHelper.WriteLog(string.Format("图片内容不能为空。checkInID:{0}", checkInID)); return 0; } string picName = idCard + "_" + checkInID.ToString() + ".jpg";//二进制转换为本地图片 using (System.IO.FileStream fs = new System.IO.FileStream(LogHelper.ExePath + "\\pic\\" + picName, System.IO.FileMode.Create, System.IO.FileAccess.Write)) { fs.Write(photo, 0, photo.Length); photoUrl = "http://pms.boonlive-rcu.com:89/pic/" + picName; } } string sql = "insert into tb_RoomCustomer (IDType,IDCard,[Name],Sex,Birthday,PhotoUrl,Photo,CheckInID) values (@IDType,@IDCard,@Name,@Sex,@Birthday,@PhotoUrl,@Photo,@CheckInID)"; SqlParameter[] sqlParams = new SqlParameter[8] { new SqlParameter("@IDType", idType), new SqlParameter("@IDCard", idCard), new SqlParameter("@Name", name), new SqlParameter("@Sex", sex), new SqlParameter("@Birthday", birthday), new SqlParameter("@PhotoUrl", photoUrl), new SqlParameter("@Photo", photo), new SqlParameter("@CheckInID", checkInID)}; int result = SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql, sqlParams); if (result > 0 && !string.IsNullOrEmpty(_face_url)) { try { DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, "select * from tb_RoomCheck where ID=" + checkInID); //if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) DataTable DT = ds.Tables[0]; if (DT != null && DT.Rows.Count > 0) { //DataRow dr = ds.Tables[0].Rows[0]; DataRow dr = DT.Rows[0]; StringBuilder sb = new StringBuilder(); sb.Append("/checkinInterface?key=abc&data="); var postData = new { LodgerNmae = name, IDNumber = idCard, Sex = sex, picture = photoUrl, HotelCode = dr["Code"].ToString(), roomid = dr["RoomNumber"].ToString(), phonenumber = dr["PhoneNumber"].ToString(), CheckTime = Convert.ToDateTime(dr["CheckInDate"]).ToString("yyyy-MM-dd HH:mm:ss"), pmsinfoid = pmsid }; sb.Append(Newtonsoft.Json.JsonConvert.SerializeObject(postData)); #region 新添加代码 pmsLog pmslog = new pmsLog { pmsid = pmsid, app = 1, step = 102, Data = sb.ToString(), Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "pms服务转发信息成功", HotelCode = dr["Code"].ToString(), roomid = dr["RoomNumber"].ToString() }; SqlSugarBase.GesmartDb().Insertable(pmslog).ExecuteCommand(); //LogHelper.WriteLog("新添加的代码:" + sb.ToString()); //查询人脸 机的状态 和故障 string hotelid = ""; DataTable dt = GetHotelCode(postData.HotelCode); string Key = "HotelCode_" + postData.HotelCode; object ooo = HttpContext.Current.Cache.Get(Key); if (ooo != null) { hotelid = ooo.ToString(); } else { if (dt != null && dt.Rows.Count > 0) { hotelid = dt.Rows[0]["HotelID"].ToString(); HttpContext.Current.Cache.Insert(Key, hotelid, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration); } } //查询人脸机连接状态 LogHelper.WriteLog("查询人脸机在线:" + hotelid + ":" + postData.roomid); var client1 = new RestSharp.RestClient(_face_url_new); var request1 = new RestSharp.RestRequest("/FaceRoom/RoomIdbyRoom", RestSharp.Method.POST); request1.AddParameter("HotelId", hotelid); request1.AddParameter("RoomNum", postData.roomid); var Response = client1.Execute(request1).Content; var LLL = JsonConvert.DeserializeObject>(Response); FaceResult r = new FaceResult(); var DDD = LLL.FirstOrDefault(); if (DDD != null) { //人脸机 是否在线 bool Is_OnLine = DDD.Status; int GuZhang = DDD.maintainStatus; if (Is_OnLine) { r.Status = 200; r.Message = "人脸机在线"; } else { r.Status = 403; r.Message = "人脸机离线"; } //人脸机出故障了 /*if (GuZhang == 0) { r.Status = 200; r.Message = "人脸机无故障,正常使用"; } else { r.Status = 403; r.Message = "人脸机不可用"; }*/ } else { r.Status = 403; r.Message = "找不到该房间的人脸机数据"; } //分辨率 判断 using (var ms = new MemoryStream(photo)) { ms.Write(photo, 0, photo.Length); using (System.Drawing.Image image = System.Drawing.Image.FromStream(ms, false, false)) // 不加载图像数据 { decimal nnn1 = Convert.ToDecimal(photo.Length); decimal lll = nnn1 / 1024; decimal a = Math.Round(lll, 2); string message = "图片分辨率 W:" + image.Width + " H:" + image.Height + "图片大小: " + a + "KB"; LogHelper.WriteLog(message); pmsLog pmslog_fenbianlv = new pmsLog { pmsid = pmsid, app = 1, step = 144, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = message + " " + r.Message, }; SqlSugarBase.GesmartDb().Insertable(pmslog_fenbianlv).ExecuteCommand(); #region 分辨率判断 //bool bf = image.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg); //if (image.Width > ImageMaxWidth || image.Height > ImageMaxHeight) //{ // LogHelper.WriteLog("图片分辨率太大"); // pmsLog pmslog = new pmsLog // { // pmsid = pmsid, // app = 1, // step = 0, // Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), // message = "图片分辨率太大 W:" + image.Width + " H:" + image.Height, // }; // SqlSugarBase.GesmartDb().Insertable(pmslog).ExecuteCommand(); // return 0; //} //if (image.Width < ImageMinWidth || image.Height < ImageMinHeight) //{ // LogHelper.WriteLog("图片分辨率太小 W:" + image.Width + " H:" + image.Height); // pmsLog pmslog = new pmsLog // { // pmsid = pmsid, // app = 1, // step = 0, // Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), // message = "图片分辨率太小", // }; // SqlSugarBase.GesmartDb().Insertable(pmslog).ExecuteCommand(); // return 0; //} #endregion } } LogHelper.WriteLog("人脸机在线结果:" + Response); #endregion #region 原来的人脸机判定结果 //string strResult = ""; //if (pmslog.HotelCode.Equals("2079")) //{ // strResult = Tools.PostWebRequestNew(_face_url + sb.ToString(), "");//调用人脸机接口 //} //else //{ // strResult = Tools.PostWebRequest(_face_url + sb.ToString(), "");//调用人脸机接口 //} //LogHelper.WriteLog(_face_url + sb.ToString() + ",结果:" + strResult); //FaceResult faceReslut = Newtonsoft.Json.JsonConvert.DeserializeObject(strResult); //if (faceReslut != null && faceReslut.Status == 200) //{ // result = 1; //} //else //{ // result = 0; //} #endregion #region 换成后台任务 try { if (sb != null) { string sbstr = sb.ToString(); string pullstr = _face_url + sbstr; LogHelper.WriteLog("face pull data:" + pullstr); if (!string.IsNullOrEmpty(pullstr)) { GlobalCache.Add(pullstr); } } } catch (Exception ex) { LogHelper.WriteLog("Error: " + ex.Message); } if (r != null && r.Status == 200) { result = 1; } else { result = 0; msg = r.Status + " " + r.Message; } #endregion } else if (checkInID == 0) { pmsLog pms_111 = new pmsLog { pmsid = pmsid, app = 1, step = 100, Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "checkinId 为 0" }; SqlSugarBase.GesmartDb().Insertable(pms_111).ExecuteCommand(); result = 0; msg = pms_111.message; return result; } } catch (Exception ex) { pmsLog pmslog = new pmsLog { pmsid = pmsid, app = 1, step = 145, //Data = sb.ToString(), Creationtime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), message = "pms服务转发信息失败", //HotelCode = dr["Code"].ToString(), //roomid = dr["RoomNumber"].ToString() }; SqlSugarBase.GesmartDb().Insertable(pmslog).ExecuteCommand(); result = 0; LogHelper.WriteLog(ex.ToString()); } } return result; } /// /// 人脸识别 /// /// /// /// /// /// /// /// public static bool FaceMatch(byte[] photo, ref int idType, ref string idCard, ref string name, ref int sex, ref byte[] matchPhoto) { if (!photo.Equals(null)) { string sql = "select * from tb_RoomCustomer"; DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql); //if (ds != null && ds.Tables.Count > 0) //{ // var client = new Baidu.Aip.Face.Face(API_KEY, SECRET_KEY); // foreach (DataRow dr in ds.Tables[0].Rows) // { // var images = new byte[][] { photo, (byte[])dr["Photo"] }; // var result = double.Parse(client.FaceMatch(images).First.First.Last.Last.First.ToString()); // if (result >= 90) // { // idType = (int)dr["IDType"]; // idCard = dr["IDCard"].ToString(); // name = dr["Name"].ToString(); // sex = (int)dr["Sex"]; // matchPhoto = (byte[])dr["Photo"]; // return true; // } // } //} return false; } return false; } /// /// 获取人脸机信息 /// /// /// public static DataSet GetDevices(string code) { string sql = string.Format("select a.*,b.Remark from tb_Devices a left join tb_HotelCode b on a.HotelCode=b.Code where isnull(a.HotelCode,'')='' or isnull(a.HotelCode,'') like '%{0}%' order by a.HotelCode desc,a.RoomNumber,a.SerialNo", code); return SqlHelper.ExecuteDataset(SqlHelper.connectionString, CommandType.Text, sql); } /// /// 人脸机绑定房号 /// /// /// /// /// public static int SaveDevice(long id, string hotelCode, string roomNumber) { string sql = string.Format("update tb_Devices set HotelCode='{1}',RoomNumber='{2}',ModifiedDate=getdate() where ID={0}", id, hotelCode, roomNumber); return SqlHelper.ExecuteNonQuery(SqlHelper.connectionString, CommandType.Text, sql); } } public class FaceResult { /// /// /// public int Status { get; set; } /// /// /// public string Message { get; set; } } public class FaceStatus { public int Facelid { get; set; } public string SerialNo { get; set; } public string CreatedDate { get; set; } public int RoomId { get; set; } public bool Status { get; set; } public bool bindingStatus { get; set; } public int maintainStatus { get; set; } public string ROOM_NUMBER { get; set; } } }