有恶意请求,增加恶意请求的拦截

如题
This commit is contained in:
tianshuanbao
2025-12-19 16:58:44 +08:00
parent fe9a71d896
commit 7963156155
13 changed files with 637 additions and 446 deletions

View File

@@ -537,277 +537,285 @@ namespace Service.Implement
/// <param name="wxValidate"></param>
public void ChangeRoomStatus(Host host, RoomStatus roomStatus, string wxValidate)
{
logger.Error("触发状态ID" + roomStatus.ID);
RoomStatusChangedReceiver.SendRoomStatus(host, roomStatus);
host.RoomStatus = roomStatus;
Host host_takeout = null;
string Key = CacheKey.HostInfo_Key_HostNumber + "_" + host.HostNumber;
object obj = MemoryCacheHelper.Get(Key);
if (obj != null)
try
{
host_takeout = (Host)obj;
host_takeout.RoomStatus = roomStatus;
}
logger.Error("触发状态ID" + roomStatus.ID);
RoomStatusChangedReceiver.SendRoomStatus(host, roomStatus);
host.RoomStatus = roomStatus;
if (!string.IsNullOrEmpty(wxValidate))
{
host.WXValidate = wxValidate;
}
CurrentRepository.Update(host);
#region
if (roomStatus.ID == 2 || roomStatus.ID == 8)//开房和退房时重置
{
if (!string.IsNullOrEmpty(host.XiaoDuCUID))
Host host_takeout = null;
string Key = CacheKey.HostInfo_Key_HostNumber + "_" + host.HostNumber;
object obj = MemoryCacheHelper.Get(Key);
if (obj != null)
{
string accessToken = SysOauth2Repository.GetXiaoDuToken();
if (!string.IsNullOrEmpty(accessToken) && host.SysHotel.IsPowerOffResetXiaoDu)
host_takeout = (Host)obj;
host_takeout.RoomStatus = roomStatus;
}
if (!string.IsNullOrEmpty(wxValidate))
{
host.WXValidate = wxValidate;
}
CurrentRepository.Update(host);
#region
if (roomStatus.ID == 2 || roomStatus.ID == 8)//开房和退房时重置
{
if (!string.IsNullOrEmpty(host.XiaoDuCUID))
{
string accessToken = SysOauth2Repository.GetXiaoDuToken();
if (!string.IsNullOrEmpty(accessToken) && host.SysHotel.IsPowerOffResetXiaoDu)
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
foreach (string cuid in host.XiaoDuCUID.Split(','))//多个小度英文逗号隔开
{
XiaoDuOperation.PostWebRequestToXiaoDu(accessToken, cuid, new XiaoDuParamJson() { method = "reset" }, host.SysHotel.Code, host.RoomNumber);//重置小度
}
});
}
}
if (!string.IsNullOrEmpty(host.TianMaoCUID))
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
foreach (string cuid in host.XiaoDuCUID.Split(','))//多个小度英文逗号隔开
foreach (string cuid in host.TianMaoCUID.Split(','))//多个英文逗号隔开
{
XiaoDuOperation.PostWebRequestToXiaoDu(accessToken, cuid, new XiaoDuParamJson() { method = "reset" }, host.SysHotel.Code, host.RoomNumber);//重置小度
TianMaoOperation.PostWebRequestToTianMao("CheckoutWithAK",
Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1] }), host.SysHotel.Code, host.RoomNumber);//重置天猫精灵
}
});
}
}
if (!string.IsNullOrEmpty(host.TianMaoCUID))
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
foreach (string cuid in host.TianMaoCUID.Split(','))//多个英文逗号隔开
{
TianMaoOperation.PostWebRequestToTianMao("CheckoutWithAK",
Newtonsoft.Json.JsonConvert.SerializeObject(new { HotelId = cuid.Split('&')[0], RoomNo = cuid.Split('&')[1] }), host.SysHotel.Code, host.RoomNumber);//重置天猫精灵
}
});
}
}
#endregion
if (roomStatus.ID == 8)
{
#region 退
HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录
if (hotelSeason != null)
{
//条件1出租后2取电后3断电后
List<HotelAirControl> list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 4, true);
List<HostModal> hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路
if (list.Count > 0 && hostModals.Count > 0)
{
System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性
foreach (HotelAirControl item in list)
{
foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性
{
if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节则发送命令给rcu设置空调
{
#region
//var TTT = new Tuple<Host, HotelAirControl, List<HostModal>>(host, item, hostModals);
//Task.Factory.StartNew((state) =>
// {
// System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行
// Tuple<Host, HotelAirControl, List<HostModal>> NNN = state as Tuple<Host, HotelAirControl, List<HostModal>>;
// var QQ0 = NNN.Item1;
// var QQ1 = NNN.Item2;
// var QQ2 = NNN.Item3;
// foreach (HostModal hostModal in QQ2)
// {
// HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变
// }
// }, TTT);
#endregion
try
{
//这段代码在生产环境中不管用,很奇怪
string KeyMission = System.Guid.NewGuid().ToString("N");
MissonData m = new MissonData()
{
hostnumber = host.HostNumber,
mac = host.MAC,
};
m.HostModalList = new List<Tuple<string, DeviceType>>();
foreach (HostModal hostModal in hostModals)
{
var t = new Tuple<string, DeviceType>(hostModal.Modal.ModalAddress, hostModal.Modal.Type);
m.HostModalList.Add(t);
}
m.Status = item.Status;
m.SettingTemp = item.SettingTemp;
m.FanSpeed = item.FanSpeed;
m.Mode = item.Mode;
string MKey = "TuiFang_" + KeyMission;
CSRedisCacheHelper.Set_Partition<MissonData>(MKey, m, 1);
DelayExe_Task(host, item.DelayTime, MKey);
break;
}
catch (Exception)
{
}
}
}
}
}
}
#endregion
}
if (roomStatus.ID == 2)
{
#region
//阿宝
//空调 在10分钟无人入住的情况之下就关闭
//启动 一个任务
#region
int currenthotelid = host.SysHotel.ID;
RoomNobodyHowTo nnn = RoomNoBodyMananger.LoadAll().FirstOrDefault(A => A.CurrentHotelID == currenthotelid);
if (nnn != null)
{
if (!nnn.How.Equals("without"))
{
string Code = host.SysHotel.Code;
string RoomNo = host.RoomNumber;
DateTime CreateDate = host.SysHotel.CreatedDate;
string CD = CreateDate.ToString("yyyy-MM-dd");
int hotel_id = host.SysHotel.ID;
int host_id = host.ID;
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
int delaytime = nnn.DelayTime;
int sustain = 20;
string MissionKey = System.Guid.NewGuid().ToString("N");
DateTime starttime = DateTime.Now.AddMinutes(delaytime);
DateTime endtime = starttime.AddMinutes(sustain);
//创建一条任务 插 入数据库
KongTiaoTimer k = new KongTiaoTimer();
k.HotelID = hotel_id;
k.HostID = host_id;
k.HotelCode = Code;
k.RoomNo = RoomNo;
k.MissonKey = MissionKey;
k.IsCancel = 0;
k.CreateTime = ti;
k.StartTime = starttime.ToString("yyyy-MM-dd HH:mm:ss");
k.EndTime = endtime.ToString("yyyy-MM-dd HH:mm:ss");
k.CreateDate = CD;
//string HotelCode, string RoomNo, int host_id,int hotel_id
MissionRequestData mm = new MissionRequestData();
mm.DelayTimer = delaytime;
mm.KT = k;
//mm.HotelCode = Code;
//mm.RoomNo = RoomNo;
//mm.HotelID = hotel_id;
//mm.HostID = host_id;
//mm.CreateDate = CD;
string jsstr = Newtonsoft.Json.JsonConvert.SerializeObject(mm);
//k.JsonData = jsstr;
k.MissonKey = MissionKey;
KongTiaoManager.Save(k);
//给 任务管理系统 发送消息
var client1 = new RestClient(Missionsys_Address);
var request1 = new RestRequest("api/index", Method.POST);
logger.Error("任务管理系统发送了数据:" + Missionsys_Address + "API/Index");
//GetRequest ggg = new GetRequest() { creatDate = DateTime.Now.ToString("yyyy-mm-dd"), roomNumber = RoomNo, code = Code };
request1.AddParameter("jsonData", jsstr);
client1.ExecuteAsync(request1, (response) => { });
}
}
#endregion
HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录
if (hotelSeason != null)
if (roomStatus.ID == 8)
{
List<HotelAirControl> list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 1, true);
List<HostModal> hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路
if (list.Count > 0 && hostModals.Count > 0)
#region 退
HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录
if (hotelSeason != null)
{
System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性
foreach (HotelAirControl item in list)
//条件1出租后2取电后3断电后
List<HotelAirControl> list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 4, true);
List<HostModal> hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路
if (list.Count > 0 && hostModals.Count > 0)
{
foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性
System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性
foreach (HotelAirControl item in list)
{
if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节则发送命令给rcu设置空调
foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性
{
var TTT = new Tuple<Host, HotelAirControl, List<HostModal>>(host, item, hostModals);
Task.Factory.StartNew((state) =>
if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节则发送命令给rcu设置空调
{
#region
//var TTT = new Tuple<Host, HotelAirControl, List<HostModal>>(host, item, hostModals);
//Task.Factory.StartNew((state) =>
// {
// System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行
// Tuple<Host, HotelAirControl, List<HostModal>> NNN = state as Tuple<Host, HotelAirControl, List<HostModal>>;
// var QQ0 = NNN.Item1;
// var QQ1 = NNN.Item2;
// var QQ2 = NNN.Item3;
// foreach (HostModal hostModal in QQ2)
// {
// HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变
// }
// }, TTT);
#endregion
try
{
System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行
Tuple<Host, HotelAirControl, List<HostModal>> NNN = state as Tuple<Host, HotelAirControl, List<HostModal>>;
var QQ0 = NNN.Item1;
var QQ1 = NNN.Item2;
var QQ2 = NNN.Item3;
foreach (HostModal hostModal in QQ2)
//这段代码在生产环境中不管用,很奇怪
string KeyMission = System.Guid.NewGuid().ToString("N");
MissonData m = new MissonData()
{
//host 只需要hostnumber和mac
//hostmodal只需要 address //和type
//device.Address = hostModal.Modal.ModalAddress;
//device.Type = hostModal.Modal.Type;
HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变
hostnumber = host.HostNumber,
mac = host.MAC,
};
m.HostModalList = new List<Tuple<string, DeviceType>>();
foreach (HostModal hostModal in hostModals)
{
var t = new Tuple<string, DeviceType>(hostModal.Modal.ModalAddress, hostModal.Modal.Type);
m.HostModalList.Add(t);
}
}, TTT);
try
{
//这段代码在生产环境中不管用,很奇怪
//string KeyMission = System.Guid.NewGuid().ToString("N");
m.Status = item.Status;
m.SettingTemp = item.SettingTemp;
m.FanSpeed = item.FanSpeed;
m.Mode = item.Mode;
string MKey = "TuiFang_" + KeyMission;
CSRedisCacheHelper.Set_Partition<MissonData>(MKey, m, 1);
//MissonData m = new MissonData()
//{
// hostnumber = host.HostNumber,
// mac = host.MAC,
//};
//m.HostModalList = new List<Tuple<string, DeviceType>>();
//foreach (HostModal hostModal in hostModals)
//{
// var t = new Tuple<string, DeviceType>(hostModal.Modal.ModalAddress, hostModal.Modal.Type);
// m.HostModalList.Add(t);
//}
//m.Status = item.Status;
//m.SettingTemp = item.SettingTemp;
//m.FanSpeed = item.FanSpeed;
//m.Mode = item.Mode;
//string MKey = "Mission_" + KeyMission;
//CSRedisCacheHelper.Set_Partition<MissonData>(MKey, m, 1);
//DelayExe_Task(host, item.DelayTime, KeyMission);
break;
}
catch (Exception)
{
DelayExe_Task(host, item.DelayTime, MKey);
break;
}
catch (Exception)
{
}
}
}
}
}
}
#endregion
}
#endregion
if (roomStatus.ID == 2)
{
#region
//阿宝
//空调 在10分钟无人入住的情况之下就关闭
//启动 一个任务
#region
int currenthotelid = host.SysHotel.ID;
RoomNobodyHowTo nnn = RoomNoBodyMananger.LoadAll().FirstOrDefault(A => A.CurrentHotelID == currenthotelid);
if (nnn != null)
{
if (!nnn.How.Equals("without"))
{
string Code = host.SysHotel.Code;
string RoomNo = host.RoomNumber;
DateTime CreateDate = host.SysHotel.CreatedDate;
string CD = CreateDate.ToString("yyyy-MM-dd");
int hotel_id = host.SysHotel.ID;
int host_id = host.ID;
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
int delaytime = nnn.DelayTime;
int sustain = 20;
string MissionKey = System.Guid.NewGuid().ToString("N");
DateTime starttime = DateTime.Now.AddMinutes(delaytime);
DateTime endtime = starttime.AddMinutes(sustain);
//创建一条任务 插 入数据库
KongTiaoTimer k = new KongTiaoTimer();
k.HotelID = hotel_id;
k.HostID = host_id;
k.HotelCode = Code;
k.RoomNo = RoomNo;
k.MissonKey = MissionKey;
k.IsCancel = 0;
k.CreateTime = ti;
k.StartTime = starttime.ToString("yyyy-MM-dd HH:mm:ss");
k.EndTime = endtime.ToString("yyyy-MM-dd HH:mm:ss");
k.CreateDate = CD;
//string HotelCode, string RoomNo, int host_id,int hotel_id
MissionRequestData mm = new MissionRequestData();
mm.DelayTimer = delaytime;
mm.KT = k;
//mm.HotelCode = Code;
//mm.RoomNo = RoomNo;
//mm.HotelID = hotel_id;
//mm.HostID = host_id;
//mm.CreateDate = CD;
string jsstr = Newtonsoft.Json.JsonConvert.SerializeObject(mm);
//k.JsonData = jsstr;
k.MissonKey = MissionKey;
KongTiaoManager.Save(k);
//给 任务管理系统 发送消息
var client1 = new RestClient(Missionsys_Address);
var request1 = new RestRequest("api/index", Method.POST);
logger.Error("任务管理系统发送了数据:" + Missionsys_Address + "API/Index");
//GetRequest ggg = new GetRequest() { creatDate = DateTime.Now.ToString("yyyy-mm-dd"), roomNumber = RoomNo, code = Code };
request1.AddParameter("jsonData", jsstr);
client1.ExecuteAsync(request1, (response) => { });
}
}
#endregion
HotelSeason hotelSeason = HotelSeasonRepository.LoadByHotelID(host.SysHotel.ID);//获取该酒店下季节设置记录
if (hotelSeason != null)
{
List<HotelAirControl> list = HotelAirControlRepository.LoadAll(host.SysHotel.ID, 1, true);
List<HostModal> hostModals = HostModalRepository.LoadByHostID(host.ID).Where(r => r.Modal.Type == DeviceType.AirConditioner && r.Modal.ActiveIndicator).ToList();//获取启用的空调回路
if (list.Count > 0 && hostModals.Count > 0)
{
System.Reflection.PropertyInfo[] properties = typeof(HotelSeason).GetProperties();//获取所有属性
foreach (HotelAirControl item in list)
{
foreach (System.Reflection.PropertyInfo prop in properties)//遍历属性
{
if (prop.Name == "Month" + DateTime.Now.Month.ToString() && Convert.ToInt16(prop.GetValue(hotelSeason, null)) == item.Season)//当前月份所属该季节则发送命令给rcu设置空调
{
var TTT = new Tuple<Host, HotelAirControl, List<HostModal>>(host, item, hostModals);
Task.Factory.StartNew((state) =>
{
System.Threading.Thread.Sleep(item.DelayTime * 1000);//延迟执行
Tuple<Host, HotelAirControl, List<HostModal>> NNN = state as Tuple<Host, HotelAirControl, List<HostModal>>;
var QQ0 = NNN.Item1;
var QQ1 = NNN.Item2;
var QQ2 = NNN.Item3;
foreach (HostModal hostModal in QQ2)
{
//host 只需要hostnumber和mac
//hostmodal只需要 address //和type
//device.Address = hostModal.Modal.ModalAddress;
//device.Type = hostModal.Modal.Type;
HostModalManager.SetDevice(QQ0, hostModal, QQ1.Status, 0, QQ1.SettingTemp, QQ1.FanSpeed, QQ1.Mode, 0);//0表示不变
}
}, TTT);
try
{
//这段代码在生产环境中不管用,很奇怪
//string KeyMission = System.Guid.NewGuid().ToString("N");
//MissonData m = new MissonData()
//{
// hostnumber = host.HostNumber,
// mac = host.MAC,
//};
//m.HostModalList = new List<Tuple<string, DeviceType>>();
//foreach (HostModal hostModal in hostModals)
//{
// var t = new Tuple<string, DeviceType>(hostModal.Modal.ModalAddress, hostModal.Modal.Type);
// m.HostModalList.Add(t);
//}
//m.Status = item.Status;
//m.SettingTemp = item.SettingTemp;
//m.FanSpeed = item.FanSpeed;
//m.Mode = item.Mode;
//string MKey = "Mission_" + KeyMission;
//CSRedisCacheHelper.Set_Partition<MissonData>(MKey, m, 1);
//DelayExe_Task(host, item.DelayTime, KeyMission);
break;
}
catch (Exception)
{
}
}
}
}
}
}
#endregion
}
}
catch (Exception ex)
{
logger.Error(ex.Message);
logger.Error(ex.StackTrace);
}
}
public class MissonData
@@ -1116,7 +1124,7 @@ namespace Service.Implement
public static readonly string Missionsys_Address = ConfigurationManager.AppSettings["missionsys_address"];
public static readonly string Currentsys_address = ConfigurationManager.AppSettings["currentsys_address"];
public void TimerECO(string hotelcode,int sheng_jiang_value)
public void TimerECO(string hotelcode, int sheng_jiang_value)
{
try
{