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 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 chaList = new List(); 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; } /// /// 生成主机标识号 /// /// /// [HttpPost()] public async Task 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; } /// /// /// /// /// [HttpPost()] public async Task SendGetRCUInfoData(string HotelID) { ReturnInfo r = new ReturnInfo(); try { } catch (Exception) { throw; } return r; } [HttpPost()] public async Task 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 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 chaList = new List(); 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 tl = new List(); 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; } /// /// /// /// [{"hotelcode":"","hostnumber":"","mac":""}] /// [HttpPost()] public async Task TFTPReadSet([FromBody] List> 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 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 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; } /// /// 上传 几个小时的日志 /// 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 { 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 } }