Files

355 lines
16 KiB
C#
Raw Permalink Normal View History

2025-11-26 11:32:30 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Mvc;
using TencentCloud.Common.Profile;
using TencentCloud.Common;
using TencentCloud.Iotcloud.V20180614;
using TencentCloud.Iotcloud.V20180614.Models;
using Newtonsoft.Json;
using static MQTTServerSideAPI.SQLiteDBHelper;
using K4os.Compression.LZ4;
using MySqlX.XDevAPI;
using static Org.BouncyCastle.Math.EC.ECCurve;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using System.Data;
using static System.Data.Entity.Infrastructure.Design.Executor;
using System.Net.NetworkInformation;
namespace MQTTServerSideAPI.Controllers
{
public class apifanhinfo
{
public int TotalCount { get; set; }
public List<deviceinformation> Devices { get; set; }
public string RequestId { get; set; }
}
public class deviceinformation
{
//public int id { get; set; }
public string DeviceName { get; set; }
public int Online { get; set; }
public string LoginTime { get; set; }
public string Version { get; set; }
public string DeviceCert { get; set; }
public string DevicePsk { get; set; }
public int DeviceType { get; set; }
public string Imei { get; set; }
public string Isp { get; set; }
public string ConnIP { get; set; }
public string LastUpdateTime { get; set; }
public string LoraDevEui { get; set; }
public int LoraMoteType { get; set; }
public string FirstOnlineTime { get; set; }
public string LastOfflineTime { get; set; }
public string CreateTime { get; set; }
public int LogLevel { get; set; }
public int CertState { get; set; }
public int EnableState { get; set; }
public string ClientIP { get; set; }
public string FirmwareUpdateTime { get; set; }
public int CreateUserId { get; set; }
public string NBIoTDeviceID { get; set; }
}
public class LogsController : ApiController
{
// GET api/<controller>
public List<string> Get(string Name, int zhant)
{
return SQLiteDBHelper.GetAllCallinBYName(Name, zhant);
}
public List<string> Get(string productid, string devicename, string shijian, int cmdname)
{
return SQLiteDBHelper.jianzaogduo(productid, devicename, shijian, cmdname);
}
public void Get()
{
try
{
// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey此处还需注意密钥对的保密
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露并威胁账号下所有资源的安全性。以下代码示例仅供参考建议采用更安全的方式来使用密钥请参见https://cloud.tencent.com/document/product/1278/85305
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
Credential cred = new Credential
{
SecretId = "AKIDKhz84sbEqFPRK1Uo0zUnwwjNp4884vc4",
SecretKey = "JQ8qZGxgQAtbCfvxb7VqzxujOtFVb1KT"
};
// 实例化一个client选项可选的没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
// 实例化一个http选项可选的没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.Endpoint = ("iotcloud.tencentcloudapi.com");
clientProfile.HttpProfile = httpProfile;
// 实例化要请求产品的client对象,clientProfile是可选的
IotcloudClient client = new IotcloudClient(cred, "ap-guangzhou", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
DescribeDevicesRequest req = new DescribeDevicesRequest();
req.ProductId = "HICL5RNXAU";
req.Offset = 0;
req.Limit = 250;
// 返回的resp是一个DescribeDevicesResponse的实例与请求对象对应
DescribeDevicesResponse resp = client.DescribeDevicesSync(req);
// 输出json格式的字符串回包
var abs = AbstractModel.ToJsonString(resp);
apifanhinfo shujiu = JsonConvert.DeserializeObject<apifanhinfo>(abs);
DataSet ds = new DataSet();
string strSqlCmd = "SELECT DeviceName,Online FROM deviceinformation ";
using (MySqlConnection connection = new MySqlConnection(strSqliteConn))
{
using (MySqlCommand cmd = new MySqlCommand())
{
connection.Open();
cmd.Connection = connection;
MySqlDataAdapter command = new MySqlDataAdapter(strSqlCmd, connection);
command.Fill(ds);
}
}
List<string> devname = new List<string>();
List<int> devOnline = new List<int>();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
string namessdd = ds.Tables[0].Rows[i]["DeviceName"].ToString();
int on = int.Parse(ds.Tables[0].Rows[i]["Online"].ToString());
devOnline.Add(on);
devname.Add(namessdd);
}
string sql = "";
List<deviceinformation> list = shujiu.Devices.Where(x => devname.Contains(x.DeviceName)).ToList();
List<deviceinformation> lists = shujiu.Devices.Where(x => !devname.Contains(x.DeviceName)).ToList();
//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();
// }
// }
// }
//}
if (list.Count() > 0)
{ //sql案例
//UPDATE deviceinformation set Online = 1 where DeviceName = 'F305-00178'
for (int i = 0; i < list.Count(); i++)
{
sql = "UPDATE deviceinformation set Online = ";
sql += list[i].Online;
sql += " where DeviceName = ";
sql += "'" + list[i].DeviceName + "'";
using (MySqlConnection connection = new MySqlConnection(strSqliteConn))
{
using (MySqlCommand cmd = new MySqlCommand())
{
connection.Open();
cmd.Connection = connection;
var strSql = sql;
cmd.CommandText = strSql;
int retRecAffected = cmd.ExecuteNonQuery();
}
}
//sql = "insert into programeventlog(eventname,modifycontent,Online,ip,ctime) value(";
//sql += "'访问腾讯云所以设备列表,修改本地设备状态',";
//sql += "'" + list[i].DeviceName + "',";
//sql += list[i].Online + ",";
//sql += "'" + ip + "',";
//sql += "'" + DateTime.Now + "')";
//using (MySqlConnection connection = new MySqlConnection(strSqliteConn))
//{
// using (MySqlCommand cmd = new MySqlCommand())
// {
// connection.Open();
// cmd.Connection = connection;
// cmd.CommandText = sql;
// int retRecAffected = cmd.ExecuteNonQuery();
// }
//}
if (list[i].Online == 0 || list[i].Online == 3)
{
sql = "UPDATE deviceinformation set districtinfo = ";
sql += "' '";
sql += " where DeviceName = ";
sql += "'" + list[i].DeviceName + "'";
using (MySqlConnection connection = new MySqlConnection(strSqliteConn))
{
using (MySqlCommand cmd = new MySqlCommand())
{
connection.Open();
cmd.Connection = connection;
var strSql = sql;
cmd.CommandText = strSql;
int retRecAffected = cmd.ExecuteNonQuery();
}
}
////日志记录
//sql = "insert into programeventlog(eventname,modifycontent,ip,ctime) value(";
//sql += "'访问腾讯云所以设备列表,修改本地设备地址消息为空',";
//sql += "'设备名称:" + list[i].DeviceName + "',";
//sql += "'" + ip + "',";
//sql += "'" + DateTime.Now + "')";
//using (MySqlConnection connection = new MySqlConnection(strSqliteConn))
//{
// using (MySqlCommand cmd = new MySqlCommand())
// {
// connection.Open();
// cmd.Connection = connection;
// cmd.CommandText = sql;
// int retRecAffected = cmd.ExecuteNonQuery();
// }
//}
}
}
}
//日志记录
//List<deviceinformation> listdsd = new List<deviceinformation>();
//for (int j = 0; j < list.Count(); j++)
//{
// deviceinformation listdsds = shujiu.Devices.Where(x => x.Online != devOnline[j]).FirstOrDefault();
// if (listdsds != null)
// {
// listdsd.Add(listdsds);
// }
//}
//for (int p = 0; p < list.Count(); p++)
//{
if (lists.Count() > 0)
{
//sql案例
// insert into deviceinformation(DeviceName, Online, LoginTime, Version,
//DeviceCert, DevicePsk, DeviceType, Imei, Isp, ConnIP, LastUpdateTime, LoraDevEui,LoraMoteType, FirstOnlineTime, LastOfflineTime, CreateTime, LogLevel, CertState, EnableState,
//ClientIP, FirmwareUpdateTime, CreateUserId, NBIoTDeviceID)value(
//'1', 1, '1211321', '12331424', '123424242253', 'bdsnnskj', 2, 'daghj', 'safdag', 'vsghs','11', '1213', 1, 'wqewe', 'ahdauf', 'adawd', 12, 2, 3, 'dwda', 'dada', 12, '1221212')
for (int i = 0; i < lists.Count(); i++)
{
sql = "insert into deviceinformation(DeviceName, Online, LoginTime, Version,DeviceCert, DevicePsk, DeviceType, Imei, Isp, ConnIP, LastUpdateTime, LoraDevEui,LoraMoteType, FirstOnlineTime, LastOfflineTime, CreateTime, LogLevel, CertState, EnableState,ClientIP, FirmwareUpdateTime, CreateUserId, NBIoTDeviceID) value(";
sql += "'" + lists[i].DeviceName + "',";
sql += lists[i].Online + ",";
sql += "'" + lists[i].LoginTime + "',";
sql += "'" + lists[i].Version + "',";
sql += "'" + lists[i].DeviceCert + "',";
sql += "'" + lists[i].DevicePsk + "',";
sql += lists[i].DeviceType + ",";
sql += "'" + lists[i].Imei + "',";
sql += "'" + lists[i].Isp + "',";
sql += "'" + lists[i].ConnIP + "',";
sql += "'" + lists[i].LastUpdateTime + "',";
sql += "'" + lists[i].LoraDevEui + "',";
sql += lists[i].LoraMoteType + ",";
sql += "'" + lists[i].FirstOnlineTime + "',";
sql += "'" + lists[i].LastOfflineTime + "',";
sql += "'" + lists[i].CreateTime + "',";
sql += lists[i].LogLevel + ",";
sql += lists[i].CertState + ",";
sql += lists[i].EnableState + ",";
sql += "'" + lists[i].ClientIP + "',";
sql += "'" + lists[i].FirmwareUpdateTime + "',";
sql += lists[i].CreateUserId + ",";
sql += "'" + lists[i].NBIoTDeviceID + "')";
using (MySqlConnection connection = new MySqlConnection(strSqliteConn))
{
using (MySqlCommand cmd = new MySqlCommand())
{
connection.Open();
cmd.Connection = connection;
var strSql = sql;
cmd.CommandText = strSql;
int retRecAffected = cmd.ExecuteNonQuery();
}
}
////日志记录
//sql = "insert into programeventlog(eventname,modifycontent,Onlineip,ctime) value(";
//sql += "'访问腾讯云所以设备列表,添加设备消息',";
//sql += "'" + list[i].DeviceName + "',";
//sql += list[i].Online + ",";
//sql += "'" + ip + "',";
//sql += "'" + DateTime.Now + "')";
//using (MySqlConnection connection = new MySqlConnection(strSqliteConn))
//{
// using (MySqlCommand cmd = new MySqlCommand())
// {
// connection.Open();
// cmd.Connection = connection;
// cmd.CommandText = sql;
// int retRecAffected = cmd.ExecuteNonQuery();
// }
//}
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public List<string> Get(string productid, string devicename, string stime, string etime,int cmdname)
{
List<string> t = new List<string>();
t = SQLiteDBHelper.GetLOGCallin(productid, devicename, stime, etime, cmdname);
return t;
}
// POST api/<controller>
public void Post([FromBody] string value)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
}
}