Files
2025-11-21 08:48:01 +08:00

365 lines
13 KiB
C#
Raw Permalink 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.Data;
using CliWrap;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OutputCaching;
using Microsoft.Data.SqlClient;
using NLog;
using RestSharp;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace UseSQLQueryData.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class ValuesController : ControllerBase
{
public static string SqlConnectionString = "server=WIN-061EVIHKD86\\BLW;database=CRICS;uid=sa;pwd=pass@123$%^;TrustServerCertificate=True;";
//public static string SqlConnectionString = "Data Source=DESKTOP-DUNS5K7;Initial Catalog=CRICS;User ID=sa;Password=123456;Trust Server Certificate=True";
public static Logger logger = LogManager.GetCurrentClassLogger();
[HttpGet()]
[OutputCache()]
public async Task<ReturnInfo> GetRoomCount()
{
ReturnInfo returnInfo = new ReturnInfo();
//return returnInfo;
try
{
using SqlConnection con = new SqlConnection(SqlConnectionString);
con.Open();
using SqlCommand sqlCommand = con.CreateCommand();
string sql = @"select A.HotelID,B.Code,Count(A.HotelID) as TotalCount from tb_Hosts A
left join tb_Sys_Hotels B
on A.HotelID=B.ID
where A.IsDeleted=0 and B.IsDeleted=0
group by HotelID,B.Code
ORDER BY HotelID;";
sqlCommand.CommandText = sql;
//SqlParameter ps1 = new SqlParameter("@HotelID", hotelid);
//sqlCommand.Parameters.Add(ps1);
SqlDataAdapter adapter = new SqlDataAdapter(sqlCommand);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
DataTable dt = dataSet.Tables[0];
List<ChaXun> chaList = new List<ChaXun>();
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow item in dt.Rows)
{
var id = item["HotelID"].ToString();
var totalcount = item["TotalCount"].ToString();
var code = item["Code"].ToString();
ChaXun cha = new ChaXun();
cha.HotelID = id;
cha.HotelCode = code;
cha.TotalCount = totalcount;
chaList.Add(cha);
}
}
returnInfo.isok = true;
returnInfo.response = chaList;
}
catch (Exception ex)
{
returnInfo.isok = false;
returnInfo.message = ex.Message;
}
return returnInfo;
}
/// <summary>
/// 生成主机标识号
/// </summary>
/// <param name="HotelID"></param>
/// <returns></returns>
[HttpPost()]
public async Task<ReturnInfo> GenericHOSTNUMBER([FromForm] string HotelID, [FromForm] string HotelCode)
{
//2147 --099008
ReturnInfo r = new ReturnInfo();
try
{
logger.Error("HotelID:" + HotelID + " HotelCode:" + HotelCode);
ushort a = ushort.Parse(HotelCode);
byte[] bbf = BitConverter.GetBytes(a);
byte b1 = bbf[0];
byte b2 = bbf[1];
string nn1 = b1.ToString("000");
string nn2 = b2.ToString("000");
string nn3 = nn1 + nn2;
using SqlConnection con = new SqlConnection("server=WIN-061EVIHKD86\\BLW;database=CRICS;uid=sa;pwd=pass@123$%^;TrustServerCertificate=True;");
con.Open();
SqlTransaction tran = con.BeginTransaction();
using SqlCommand sqlCommand = con.CreateCommand();
sqlCommand.Transaction = tran;
string sql = string.Format("select ID,MAC from tb_Hosts where HotelID={0} and IsDeleted=0 and MAC is not NULL and MAC!='';", HotelID);
sqlCommand.CommandText = sql;
SqlDataAdapter adapter = new SqlDataAdapter(sqlCommand);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
DataTable dt = dataSet.Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow item in dt.Rows)
{
var id = item["ID"].ToString();
var mymac = item["MAC"].ToString();
if (!string.IsNullOrEmpty(mymac))
{
string[] NNN = mymac.Split('-');
string n1 = NNN[4];
string n2 = NNN[5];
byte bbn1 = Convert.ToByte(n1, 16);
byte bbn2 = Convert.ToByte(n2, 16);
short MAC1 = Convert.ToInt16(bbn1);
short MAC2 = Convert.ToInt16(bbn2);
string HOSTNUMBER = nn3 + MAC1.ToString("000") + MAC2.ToString("000");
string sql111 = string.Format(@"update tb_Hosts set HostNumber='{0}' where ID={1} and (HostNumber is NULL or HostNumber='');", HOSTNUMBER, id);
sqlCommand.CommandText = sql111;
await sqlCommand.ExecuteNonQueryAsync();
}
}
}
tran.Commit();
r.isok = true;
r.response = "success";
}
catch (Exception ex)
{
logger.Error("出错了" + ex.Message);
r.isok = false;
r.message = ex.Message;
}
return r;
}
/// <summary>
///
/// </summary>
/// <param name="HotelID"></param>
/// <returns></returns>
[HttpPost()]
public async Task<ReturnInfo> SendGetRCUInfoData(string HotelID)
{
ReturnInfo r = new ReturnInfo();
try
{
}
catch (Exception)
{
throw;
}
return r;
}
[HttpPost()]
public async Task<string> HttpRecv()
{
using var reader = new StreamReader(Request.Body);
var body = await reader.ReadToEndAsync();
return body;
}
#region TFTP
public static string BaseUrl = "https://www.boonlive-rcu.com/";
[HttpPost()]
public async Task<ReturnInfo> GetTFTPInfo()
{
ReturnInfo r = new ReturnInfo();
try
{
using SqlConnection con = new SqlConnection(SqlConnectionString);
await con.OpenAsync();
using SqlCommand sqlCommand = con.CreateCommand();
string sql = @"select A.*,B.HostNumber,B.MAC from TFTP_set A left join tb_Hosts B on A.HostID=B.ID;";
sqlCommand.CommandText = sql;
SqlDataAdapter adapter = new SqlDataAdapter(sqlCommand);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
DataTable dt = dataSet.Tables[0];
List<TFTPSet> chaList = new List<TFTPSet>();
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow item in dt.Rows)
{
var id = item["ID"].ToString();
var HotelCode = item["HotelCode"].ToString();
var HotelID = item["HotelID"].ToString();
var RoomNumber = item["RoomNumber"].ToString();
var HostID = item["HostID"].ToString();
var HostNumber = item["HostNumber"].ToString();
var MAC = item["MAC"].ToString();
var TargetPort = item["TargetPort"].ToString();
var TargetDomain = item["TargetDomain"].ToString();
var LT = item["LastTime"].ToString();
var IT = item["IsTrigger"].ToString();
var CT = item["CreateTime"].ToString();
TFTPSet cha = new TFTPSet();
cha.hotelcode = HotelCode;
cha.hotelid = HotelID;
cha.hostnumber = HostNumber;
cha.roomnumber = RoomNumber;
cha.mac = MAC;
cha.hostid = HostID;
cha.domain = TargetDomain;
cha.port = TargetPort;
cha.lasttime = LT;
cha.isenable = IT;
cha.createtime = CT;
chaList.Add(cha);
}
}
var U = chaList.GroupBy(A => new { A.hotelid, A.hotelcode });
List<TFTP> tl = new List<TFTP>();
foreach (var item in U)
{
TFTP t = new TFTP();
t.hotelcode = item.Key.hotelcode;
t.hotelid = item.Key.hotelid;
t.TFTPRoomList = item.ToList();
tl.Add(t);
}
r.isok = true;
r.response = tl;
}
catch (Exception)
{
throw;
}
return r;
}
/// <summary>
///
/// </summary>
/// <param name="listdata">[{"hotelcode":"","hostnumber":"","mac":""}]</param>
/// <returns></returns>
[HttpPost()]
public async Task<ReturnInfo> TFTPReadSet([FromBody] List<Dictionary<string, string>> listdata)
{
ReturnInfo r = new ReturnInfo();
try
{
var options = new RestClientOptions(BaseUrl);
var client = new RestClient(options);
var request = new RestRequest("api/TFTPReadSet");
request.AddJsonBody(listdata);
RestResponse response = await client.PostAsync(request);
string? str1 = response.Content;
r.isok = true;
r.response = str1;
}
catch (Exception ex)
{
r.isok = false;
r.response = ex.Message;
}
return r;
}
[HttpPost()]
public async Task<ReturnInfo> TFTPSet_Execute([FromBody] FTP_JSON body)
{
ReturnInfo r = new ReturnInfo();
try
{
var options = new RestClientOptions(BaseUrl);
var client = new RestClient(options);
var request = new RestRequest("api/TFTPSet_Execute");
request.AddJsonBody(body);
RestResponse response = await client.PostAsync(request);
string? str1 = response.Content;
r.isok = true;
r.response = str1;
}
catch (Exception ex)
{
r.isok = false;
r.response = ex.Message;
}
return r;
}
#endregion
}
public class TFTP
{
public string hotelcode { get; set; }
public string hotelid { get; set; }
public List<TFTPSet> TFTPRoomList { get; set; }
}
public class TFTPSet
{
public string hotelcode { get; set; }
public string hotelid { get; set; }
public string hostid { get; set; }
public string roomnumber { get; set; }
public string hostnumber { get; set; }
public string mac { get; set; }
public string port { get; set; }
public string domain { get; set; }
/// <summary>
/// 上传 几个小时的日志
/// </summary>
public string lasttime { get; set; }
public string isenable { get; set; }
public string createtime { get; set; }
}
public class host_data
{
public string hostnumber { get; set; }
public string mac { get; set; }
}
public class FTP_JSON
{
public List<host_data> host_data { get; set; }
public bool isenable { get; set; }
public string domain { get; set; }
public UInt16 port { get; set; }
public UInt16 lasttime { get; set; }
}
public class ChaXun
{
public string HotelID { get; set; }
public string HotelCode { get; set; }
public string TotalCount { get; set; }
}
public class ReturnInfo
{
public bool isok { set; get; } // 是否成功true成功
public string message { set; get; } // 传递接口信息or报错信息
public int status { set; get; } // 服务器报错信息正确为200错误404/500等
public object response { set; get; } // 获取到的信息本体若报错则为null
}
}