Files
Web_PMSApi_Server_V1_Prod/BLWWS_BLL/BLL.cs

1228 lines
60 KiB
C#
Raw Normal View History

2025-11-20 15:56:30 +08:00
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)
{
2025-12-11 14:13:27 +08:00
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,'')=''";
2025-11-20 15:56:30 +08:00
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 +
2025-12-11 14:13:27 +08:00
"," + 0 +
2025-11-20 15:56:30 +08:00
"," + 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; }
}
}