Files
Web_PMSApi_Server_V1_Prod/BLWWS_BLL/BLL.cs
2025-12-11 14:13:27 +08:00

1228 lines
60 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"]);
/// <summary>
/// 获取酒店记录
/// </summary>
/// <param name="code">酒店编码</param>
/// <returns></returns>
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];
}
/// <summary>
/// 获取所有酒店
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 开房
/// </summary>
/// <param name="code">酒店编码</param>
/// <param name="roomNumber">房号</param>
/// <param name="checkInDate">入住日期</param>
/// <param name="xmlString">入住客人信息</param>
/// <param name="phoneNumber">手机号码,多个已逗号,隔开</param>
/// <param name="idNumber">身份证号:用于获取验证码</param>
/// <param name="checkInID">入住记录ID</param>
/// <returns></returns>
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<string, string> customerInfo = new Dictionary<string, string>();
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;
}
}
/// <summary>
/// 更改住客手机号码
/// </summary>
/// <param name="code">酒店编码</param>
/// <param name="roomNumber">房号</param>
/// <param name="phoneNumber">新手机号码,多个已逗号,隔开</param>
/// <param name="idNumber">身份证号:用于获取验证码</param>
/// <returns></returns>
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;
}
/// <summary>
/// 退房
/// </summary>
/// <param name="code">酒店编码</param>
/// <param name="roomNumber">房号</param>
/// <param name="checkOutDate">退房日期</param>
/// /// <param name="pmsid">pms编号</param>
/// <returns></returns>
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;
}
/// <summary>
/// 待租
/// </summary>
/// <param name="code">酒店编码</param>
/// <param name="roomNumber">房号</param>
/// <param name="checkOutDate">变更待租日期</param>
/// <returns></returns>
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;
}
}
/// <summary>
/// 获取客房记录
/// </summary>
/// <param name="code"></param>
/// <param name="roomNumber"></param>
/// <returns></returns>
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);
}
/// <summary>
/// 获取入住人信息
/// </summary>
/// <param name="checkInID"></param>
/// <returns></returns>
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);
}
/// <summary>
/// 定时获取酒店新的开房/退房/待租记录
/// </summary>
/// <param name="code">酒店编码</param>
/// <returns></returns>
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);
}
/// <summary>
/// 更新已同步的新开房/退房/待租状态
/// </summary>
/// <param name="code">酒店编码</param>
/// <param name="id">记录ID</param>
/// <param name="flag">0开房1退房2待租</param>
/// <returns></returns>
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;
}
/// <summary>
/// 根据酒店ID房号获取当前入住人信息
/// </summary>
/// <param name="hotelID">酒店ID</param>
/// <param name="roomNumber">房号</param>
/// <returns></returns>
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 "";
}
/// <summary>
/// 判断验证码是否正确
/// </summary>
/// <param name="hotelID">酒店ID</param>
/// <param name="roomNumber">房号</param>
/// <param name="validateCode">用户输入验证码</param>
/// <returns></returns>
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;
}
/// <summary>
/// 判断验证码是否正确
/// </summary>
/// <param name="code">酒店编码</param>
/// <param name="roomNumber">房号</param>
/// <param name="validateCode">用户输入验证码</param>
/// <returns></returns>
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;
}
/// <summary>
/// 根据手机号获取当前入住记录信息
/// </summary>
/// <param name="phone"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 上传/变更图像及信息
/// </summary>
/// <param name="idType">证件类型0身份证1护照</param>
/// <param name="idCard">证件号码</param>
/// <param name="name">姓名</param>
/// <param name="sex">性别0女1男</param>
/// <param name="photo">图像</param>
/// <returns></returns>
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);
}
/// <summary>
/// 上传图片
/// </summary>
/// <param name="idType"></param>
/// <param name="idCard"></param>
/// <param name="name"></param>
/// <param name="sex"></param>
/// <param name="birthday"></param>
/// <param name="photoUrl"></param>
/// <param name="photo"></param>
/// <param name="checkInID"></param>
/// <param name="pmsid"></param>
/// <returns></returns>
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<byte> list = new List<byte>();
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<List<FaceStatus>>(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<FaceResult>(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;
}
/// <summary>
/// 人脸识别
/// </summary>
/// <param name="photo"></param>
/// <param name="idType"></param>
/// <param name="idCard"></param>
/// <param name="name"></param>
/// <param name="sex"></param>
/// <param name="matchPhoto"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 获取人脸机信息
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
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);
}
/// <summary>
/// 人脸机绑定房号
/// </summary>
/// <param name="id"></param>
/// <param name="hotelCode"></param>
/// <param name="roomNumber"></param>
/// <returns></returns>
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
{
/// <summary>
///
/// </summary>
public int Status { get; set; }
/// <summary>
///
/// </summary>
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; }
}
}