Files
Web_HotelServices_Prod/WebUI/Controllers/ApiController.cs
2025-11-26 11:18:26 +08:00

566 lines
19 KiB
C#

using COMMON;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Models;
using Models.Models.DEBUGGER_DB;
using Models.Models.LOGDB;
using Newtonsoft.Json;
using Quartz;
using SERVER;
using SERVER.DataServer;
using SERVER.LIB;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using TcpServer;
using WebUI.LIB;
using static Models.TCPDATA;
namespace WebUI.Controllers
{
/// <summary>
/// api控制器
/// </summary>
public class ApiController : BaseController
{
private IScheduler _scheduler;
private readonly LOG_DBContext _logdb;
private readonly HotelServiceContext _db;
private readonly DEBUGGER_DB _DEBUGGER_DB;
private readonly ISchedulerFactory _schedulerFactory;
/// <summary>
/// 注入定时器等服务
/// </summary>
/// <param name="logdb"></param>
/// <param name="schedulerFactory"></param>
/// <param name="_DB"></param>
/// <param name="db"></param>
public ApiController(HotelServiceContext db, LOG_DBContext logdb, ISchedulerFactory schedulerFactory, DEBUGGER_DB _DB)
{
_db = db;
_schedulerFactory = schedulerFactory;
_logdb = logdb;
_DEBUGGER_DB = _DB;
}
/// <summary>
/// 下发固件、配置
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult SendCmd(int type = 1,params string[] mac)
{
try
{
foreach (var item in mac)
{
XC_Redis.Redis.Remove(item);
}
return Json(Send_Cmd.Send_File(type,mac));
}
catch (Exception EX)
{
LogHelp.Error(EX.ToString());
return null;
}
}
/// <summary>
/// 下发 固件、配置 进度条
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult Send_Schedule(int type = 1, params string[] mac)
{
try
{
Dictionary<string,string> macData = new Dictionary<string,string>();
foreach (var item in mac)
{
var rd = XC_Redis.Redis.GetKey<double>(item);
macData.Add(item, rd+"%");
}
return Json(macData);
}
catch (Exception EX)
{
LogHelp.Error(EX.ToString());
return Content(EX.Message); ;
}
}
/// <summary>
/// 酒店信息
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult HOTELINFO()
{
try
{
IList<HotelDataItem> RESHotels = new List<HotelDataItem>();
foreach (var item in CacheData.TBL_HOTEL_BASIC_INFO.GroupBy(X=>X.HOTEL_OLD_GROUP))
{
var GROUP = CacheData.TBL_HOTEL_GROUP_INFO.FirstOrDefault(X=>X.HOTEL_GROUP_OLD_ID == item.First().HOTEL_OLD_GROUP);
if (GROUP == null)
{
LogHelp.Error(item.First().HOTEL_OLD_GROUP + "酒店组信息为null~");
continue;
}
RESHotels.Add(new HotelDataItem() {HotelGroupsName = GROUP.HOTEL_GROUP_NAME,HotelGroupsId = GROUP.HOTEL_GROUP_OLD_ID,Hotels = item.Select(X => new HotelsItem() { Auth = null, Code = X.PROJECT_NUMBER, HotelId = X.IDOLD, HotelName = X.HOTEL_NAME_CN }).ToList() });
RESHotels.Add(new HotelDataItem() {HotelGroupsName = GROUP.HOTEL_GROUP_NAME,HotelGroupsId = GROUP.HOTEL_GROUP_OLD_ID,Hotels = item.Select(X => new HotelsItem() { Auth = null, Code = X.PROJECT_NUMBER, HotelId = X.IDOLD, HotelName = X.HOTEL_NAME_CN }).ToList() });
}
// var RES = Hotels.ToArray();
//for(int i = 0; i < RES.Count();i++)
//{
// for (int J = 0; J < RES[i].Hotels.Count; J++)
// {
// RES[i].Hotels[J].Auth = null;
// }
//}
return Json(RESHotels);
}
catch (Exception EX)
{
LogHelp.Error(EX.ToString());
return null;
}
}
/// <summary>
/// 房间信息
/// </summary>
/// <param name="HotelId">酒店id</param>
/// <param name="GroupId">酒店组id</param>
/// <returns></returns>
[HttpPost]
public IActionResult ROOMINFO(int HotelId = 0,int GroupId = 0)
{
try
{
// 这里是进行了权限判断 以及数据的简单校验
//if ((HotelId <= 0 && GroupId<=0) || (HotelId > 0 && Hoteldata.FirstOrDefault(X=>X.HotelId == HotelId)==null ))
// return Json(null);
List<int> HotelDATA = HotelDATA = _db.TBL_HOTEL_BASIC_INFOS.Where(X => (GroupId ==0 || X.HOTEL_OLD_GROUP == GroupId) && (HotelId==0 || X.IDOLD == HotelId)).Select(X=>X.IDOLD).ToList();
return Json(_db.TBL_ROOM_BASIC_INFOS.Where(x => HotelDATA.Contains(x.HOTEL_OLD_ID)).Select(x => new { text = x.ROOM_NUMBER, val = x.ROOM_OLD_ID,mac=x.MAC }));
}
catch (Exception EX)
{
LogHelp.Error(EX.ToString());
return Json(null);
}
}
/// <summary>
/// 获取文件数据列表
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult SelModelFile(int start = 0, int length = 15, int draw = 0, string type = "")
{
try
{
int count = 0;
int count_ = 0;
var data = ModelFile.GetFtp(out count, out count_, start, length, type);
return Json(new
{
draw,
recordsTotal = count,
recordsFiltered = count_,
data = data
});
}
catch (Exception ex)
{
LogHelp.Error(ex.ToString());
return null;
}
}
/// <summary>
/// 添加文件数据
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult AddModelFile(List<IFormFile> files, int type = -1)
{
try
{
return Json(ModelFile.AddModelFile(type, files, TOken, _db).Result);
}
catch (Exception ex)
{
LogHelp.Error(ex.ToString());
return Json(false);
}
}
/// <summary>
/// 删除文件数据
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult DelModelFile(int id)
{
try
{
return Json(ModelFile.DelModelFile(id, _db));
}
catch (Exception ex)
{
LogHelp.Error(ex.ToString());
return Json(false);
}
}
/// <summary>
/// 刷新token 同时也返回服务器服务状态
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult Token()
{
try
{
Get();
BaseController.SXTOKEN(this, HttpContext);
return Json(new ReturnData<int[]> { IsSuccess = true, Result = new int[] { XC_Redis.Redis.GetKey<int>("udpserver"), TestingServices.ISok("BLV RUCS") } });
}
catch (Exception ex)
{
LogHelp.Error(ex.ToString());
return Json(new ReturnData<String> { IsSuccess = false, Result = ex.Message });
}
}
/// <summary>
/// 刷新udp log 数
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult Getudplogcount()
{
try
{
return Json(new
{
udp = CacheData.UDPcount,
// ruc 是没有直接跟房间绑定的 只能酒店房间 反推 ruc rcu数量 等于房间绑定的rcu 数量
rcu = SelHotel == null ? 0 : _db.TBL_ROOM_BASIC_INFOS.Where(x => x.HOTEL_OLD_ID == SelHotel.HotelId && x.MAC.Length > 0).Count()
});
}
catch (Exception ex)
{
LogHelp.Error(ex.ToString());
return Json(new
{
udp = 0,
// ruc 是没有直接跟房间绑定的 只能酒店房间 反推 ruc
rcu = 0
});
}
}
/// <summary>
/// 获取rcu列表 分页
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult GetRCU(int start,int draw, int length, int room_online_satatus, string roomnumber,int room_type)
{
try
{
if (SelHotel != null)
{
int COUNT, COUNT_ = 0;
var macdata = RcuServer.SetRucServer(out COUNT, out COUNT_,SelHotel.HotelId, start, length,room_online_satatus, roomnumber, room_type, _db);
return Json(new
{
draw,
recordsTotal = COUNT,
recordsFiltered = COUNT_,
data = macdata
});
}
else
return null;
}
catch (Exception EX)
{
LogHelp.Error(EX.ToString());
return null;
}
}
/// <summary>
/// 切换酒店
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult Sel(int id)
{
HotelsItem hotels = Hoteldata.FirstOrDefault(x => x.HotelId == id);
if (hotels != null)
{
Response.Cookies.Append("old_host_" + TOken, id.ToString());
COMMON.XC_Redis.Redis.SetKey(TOken_rom + "_sel", hotels);
}
return Json(new ReturnData<string> { IsSuccess = hotels != null, Result = null });
}
/// <summary>
/// 退出登录
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult signout()
{
Response.Cookies.Delete("CurrentUser");
// 删除会话用户标识
XC_Redis.Redis.Remove(TOken + Cookie.Substring(Cookie.Length - 8) + "_rom");
// 删除会话用户选择的 酒店
XC_Redis.Redis.Remove(TOken_rom + "_sel");
// 删除 随机截取的token 下标数组
XC_Redis.Redis.Remove(TOken_rom);
if (ConfigEntity.Instance.IsMore == false)
{
XC_Redis.Redis.Remove(TOken);
XC_Redis.Redis.Remove(TOken + "__hoteldata");
}
return RedirectToAction("Index", "Login");
}
/// <summary>
/// RUCS_CMD
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult RUCS_CMD()
{
return Json(new { Send_RUCS_RCU_LIST = SendHelp.Send_RUCS_RCU_LIST().ToString() });
}
/// <summary>
/// 获取酒店组视图
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult GetGroup(int group = 0, string search = "")
{
for (int i = 0; i < Hotels.Count; i++)
{
if (Hotels[i].HotelGroupsId == group)
{
ViewData["HotelGroup"] = Hotels[i];
}
}
ViewData["Hotel"] = SelHotel.HotelId;
ViewData["search"] = string.IsNullOrEmpty(search) ? "" : search;
return View(Hotels);
}
/// <summary>
/// 获取酒店视图 未用到
/// </summary>
/// <returns> 未用到 </returns>
[HttpPost]
public IActionResult GetHotels(int GroupId)
{
return View();
}
/// <summary>
/// 获取UDPINFO 通讯包数统计
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult GetCHARTS(int[] TX, int[] RX, string startDate, string endDate)
{
ECHARTS res = CHARTSSERVER.GetCHARTS(_logdb, TX, RX, startDate, endDate);
return Json(res);
}
/// <summary>
/// 获取UDPINFO 统计 通讯字节流量统计
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult GetErrorSucess(int[] TX, int[] RX, string startDate, string endDate)
{
ECHARTS res = CHARTSSERVER.GetErrorSucess(_logdb, startDate, endDate);
return Json(res);
}
/// <summary>
/// 获取UDPINFO 端口数据使用情况
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult GetProt(string startDate, string endDate)
{
ECHARTS res = CHARTSSERVER.GetProt(_logdb, startDate, endDate);
return Json(res);
}
/// <summary>
/// 获取UDPINFO 处理耗时
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult GetPROCESSINGTIME(string startDate, string endDate)
{
ECHARTS res = CHARTSSERVER.GetPROCESSINGTIME(_logdb, startDate, endDate);
return Json(res);
}
/// <summary>
/// 获取UDPINFO 处理耗时
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult GetRevDelayDateTime(string startDate, string endDate)
{
ECHARTS res = CHARTSSERVER.GetRevDelayDateTime(_logdb, startDate, endDate);
return Json(res);
}
/// <summary>
/// 获取UDPINFO 命令饼图 tx rx
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult GetCMDpie(string startDate, string endDate, string type = "TX")
{
ECHARTS res = CHARTSSERVER.GetCMDpie_(_logdb, startDate, endDate, type);
return Json(res);
}
/// <summary>
/// 获取UDPINFO 重发饼图 tx rx
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult GetRETRY_COUNT(string startDate, string endDate, string type = "TX")
{
ECHARTS res = CHARTSSERVER.GetRETRY_COUNT(_logdb, startDate, endDate, type);
return Json(res);
}
/// <summary>
/// 更改服务状态
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult Changerserver(int type)
{
return Json(TestingServices.ISok("BLV RUCS", type));
}
/// <summary>
/// 同步数据
/// </summary>
public void Get()
{
if (Client.dateTime == string.Empty) { return; }
lock (Client.dateTimelocks)
{
if (Client.dateTime == null)
{
Client.dateTime = "000000000";
Thread thread = new Thread(async () =>
{
//1、通过调度工厂获得调度器
_scheduler = await _schedulerFactory.GetScheduler();
//2、开启调度器
await _scheduler.Start();
//3、创建一个触发器
var trigger = TriggerBuilder.Create()
.WithCronSchedule("0/3 * * * * ?")//间隔3秒 检测 tcp 是否在运行
.Build();
//3、创建一个触发器
var trigger1 = TriggerBuilder.Create()
.WithCronSchedule("0 00 00 * * ? *")// 每日 0 点触发 同步数据
.Build();
//3、创建一个触发器
var trigger2 = TriggerBuilder.Create()
.WithCronSchedule("4 20 * * * ?")//每个小时 10min 统计字节流量等
.Build();
//4、创建任务
// 检测tcp 是否在运行
var jobDetail = JobBuilder.Create<Jobs>()
.Build();
//4、创建任务
// 同步数据
var jobDetail1 = JobBuilder.Create<JobsOne>()
.Build();
//4、创建任务
// 统计字数数量等
var jobDetai2 = JobBuilder.Create<JobsTwo>()
.Build();
//5、将触发器和任务器绑定到调度器中
await _scheduler.ScheduleJob(jobDetail, trigger);
await _scheduler.ScheduleJob(jobDetail1, trigger1);
await _scheduler.ScheduleJob(jobDetai2, trigger2);
});
thread.Start();
}
}
}
#region BLV_UdpDebug
/// <summary>
/// 数据统计图
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public IActionResult GetBLV_UdpDebugImg(string startDate, string endDate)
{
ECHARTS res = CHARTSSERVER.GetBLV_UdpDebugImg(_DEBUGGER_DB, startDate, endDate);
return Json(res);
}
#endregion
#region BLV_UdpDebug
/// <summary>
/// 数据统计饼图 通讯命令 数据统计接收耗时条形统计图
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public IActionResult GetBLV_UdpDebugImg_PIE(string startDate, string endDate)
{
ECHARTS res = CHARTSSERVER.GetBLV_UdpDebugImg_RevDelayDateTime(_DEBUGGER_DB, startDate, endDate);
return Json(res);
}
#endregion
}
}