SGGL_JT/SUBQHSE/BLL/Common/YunMouHelper.cs

605 lines
25 KiB
C#
Raw 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 Newtonsoft.Json;
using System;
using System.Configuration;
using System.Drawing;
using System.IO;
using System.Net;
using System.Text;
namespace BLL.Common
{
public class YunMouHelper
{
public static string YunMouUrl = ConfigurationManager.AppSettings["YunMouUrl"];
public static string ClientSecret = ConfigurationManager.AppSettings["ClientSecret"];
public static string ClientId = ConfigurationManager.AppSettings["ClientId"];
public static string getToken()
{
try
{
string data = "client_id=" + ClientId + "&client_secret=" + ClientSecret + "&grant_type=client_credentials&scope=app";
string result = Post(YunMouUrl + "oauth/token", data, "application/x-www-form-urlencoded", "");
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
return j2.access_token;
}
catch (Exception e)
{
}
return "";
}
/// <summary>
/// 添加设备组(一个项目一个)
/// </summary>
/// <param name="groupName"></param>
/// <param name="groupNo"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string addDevicesGroups(string groupName, string groupNo, string access_token)
{
if (groupName.Length > 64)
{
groupName = groupName.Substring(0, 63);
}
string data = "{\"groupName\":\"" + groupName + "\",\"groupNo\":\"" + groupNo + "\"}";
string result = Post(YunMouUrl + "api/v1/open/basic/groups/create", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.message;
else
{
return "";
}
}
/// <summary>
/// 删除设备分组
/// </summary>
/// <param name="groupName"></param>
/// <param name="groupNo"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string deleteDevicesGroups(string groupNo, string access_token)
{
string result = Post(YunMouUrl + "api/v1/open/basic/groups/delete?groupNo=" + groupNo, "", "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.message;
else
{
return "";
}
}
/// <summary>
/// 添加设备
/// </summary>
/// <param name="deviceSerial"></param>
/// <param name="groupNo"></param>
/// <param name="validateCode"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string addDevices(string deviceSerial, string groupNo, string validateCode, string access_token, out string res)
{
string data = "{\"deviceSerial\":\"" + deviceSerial + "\",\"groupNo\":\"" + groupNo + "\",\"validateCode\":\"" + validateCode + "\"}";
string result = Post(YunMouUrl + "api/v1/open/basic/devices/create", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
{
res = j2.message;
return j2.data.groupId;
}
else
{
res = j2.message;
return "";
}
}
/// <summary>
/// 修改设备名称(按设备序列号)
/// </summary>
/// <param name="deviceSerial"></param>
/// <param name="deviceName"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string updateDevices(string deviceSerial, string deviceName, string access_token)
{
string data = "{\"deviceSerial\":\"" + deviceSerial + "\",\"deviceName\":\"" + deviceName + "\"}";
string result = Post(YunMouUrl + "api/v1/open/basic/devices/update", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.message;
else
{
return "";
}
}
/// <summary>
/// 删除设备
/// </summary>
/// <param name="deviceSerial"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string deleteDevices(string deviceSerial, string access_token)
{
string result = Post(YunMouUrl + "api/v1/open/basic/devices/delete?deviceSerial=" + deviceSerial, "", "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.message;
else
{
return "";
}
}
/// <summary>
/// 添加权限组,建议一个项目一个
/// </summary>
/// <param name="groupName"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string addPermissionGroups(string groupName, string access_token)
{
char[] TrimChar = { '、', ' ', '-', '\'', '\"', '\\', '.', '、', '-', '[', ']', '【', '】', '(', ')', '#', '@', '~', '<', '>' };
//groupname不能大于32位
if (groupName.Length > 32)
{
groupName = groupName.Substring(0, 31).Trim(TrimChar);
}
groupName = groupName.Replace("、", "").Replace("/", "").Replace(".", "").Replace("-", "").Replace("[", "").Replace("]", "").Replace("【", "").Replace("】", "").Replace("(", "")
.Replace(")", "").Replace("#", "").Replace("@", "").Replace("~", "").Replace("<", "").Replace(">", "")
.Replace("", "")
.Replace("", "");
string data = "{\"groupName\":\"" + groupName + "\"}";
string result = Post(YunMouUrl + "api/v1/open/accessControl/permissionGroups/create", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.data.groupId;
else
{
return "";
}
}
/// <summary>
/// 根据权限组下发权限
/// </summary>
/// <param name="groupName"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string issuedByGroup(string groupId, string access_token)
{
string data = "{\"groupId\":\"" + groupId + "\"}";
string result = Post(YunMouUrl + "api/v1/open/accessControl/allots/actions/issuedByGroup", data, "application/json;charset=UTF-8", access_token);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.code;
else
{
return "";
}
}
/// <summary>
/// 删除权限组(会同时移除权限组下人员和设备下发记录以及已下发到设备的权限)
/// </summary>
/// <param name="groupId"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string deletePermissionGroups(string groupId, string access_token)
{
string result = Post(YunMouUrl + "api/v1/open/accessControl/permissionGroups/delete?groupId=" + groupId, "", "application/json;charset=UTF-8", access_token);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
{
return j2.data.groupId;
}
else
{
return "";
}
}
/// <summary>
/// 填加员工到权限组
/// </summary>
/// <param name="groupId"></param>
/// <param name="employeeNos"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string addPersonsToGroups(string groupId, string[] employeeNos, string access_token)
{
//string permissions = "";
//if (employeeNos.Length == 1)
//{
// permissions = "\"permissions\":[{\"employeeNo\": \"" + employeeNos[0] + "\",\"validBeginTime\": \"2020-01-11\"," +
// "\"validEndTime\": \"2050-12-30\"}]";
//}
string data = "{\"groupId\":\"" + groupId + "\",\"employeeNos\":[\"" + string.Join("\", \"", employeeNos) + "\"],\"autoIssue\":\"true\"}";
string result = Post(YunMouUrl + "api/v1/open/accessControl/permissionGroups/actions/addPersons", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.data.statisticsId;
else
{
return "";
}
}
/// <summary>
/// 从权限组移除员工
/// </summary>
/// <param name="groupId"></param>
/// <param name="employeeNos"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string deletePersonsFromGroups(string groupId, string[] employeeNos, string access_token)
{
string data = "{\"groupId\":\"" + groupId + "\",\"employeeNos\":[\"" + string.Join("\", \"", employeeNos) + "\"]}";
string result = Post(YunMouUrl + "api/v1/open/accessControl/permissionGroups/actions/removePersons", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.data.statisticsId;
else
{
return "";
}
}
/// <summary>
/// 添加设备到权限组
/// </summary>
/// <param name="groupId"></param>
/// <param name="devices"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string addDevicesToGroups(string groupId, string[] devices, string access_token)
{
string data = "{\"groupId\":\"" + groupId + "\",\"deviceSerials\":[\"" + string.Join("\", \"", devices) + "\"],\"autoIssue\":true,\"checkCapability\":true}";
string result = Post(YunMouUrl + "api/v1/open/accessControl/permissionGroups/actions/addDevices", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.code;
else
{
return "";
}
}
/// <summary>
/// 从权限组移除设备
/// </summary>
/// <param name="groupId"></param>
/// <param name="devices"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string deleteDevicesFromGroups(string groupId, string[] devices, string access_token)
{
string data = "{\"groupId\":\"" + groupId + "\",\"deviceSerials\":[\"" + string.Join("\", \"", devices) + "\"],\"autoIssue\":true,\"checkCapability\":true}";
string result = Post(YunMouUrl + "api/v1/open/accessControl/permissionGroups/actions/removeDevices", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.message;
else
{
return "";
}
}
/// <summary>
/// 添加人员
/// </summary>
/// <param name="employeeNo"></param>
/// <param name="personName"></param>
/// <param name="personPhone"></param>
/// <param name="pic"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string addPerson(string employeeNo, string personName, string personPhone, string pic, string access_token)
{
string rootUrl = ConfigurationManager.AppSettings["localRoot"];
string filename = rootUrl + pic;
FileInfo fi1 = new FileInfo(filename);
if (fi1.Length > 200 * 1024)//base64编码的人脸图片图片大小需小于200kB数据需去除base64前缀
{
filename = filename.Replace(".jpg", "_new.jpg").Replace(".jpeg", "_new.jpeg");
CropImage(fi1.FullName, filename, 200);
}
string faceImageBase64 = ImageToByte64String(filename, System.Drawing.Imaging.ImageFormat.Jpeg); // 图片的base64编码
string data = "{\"employeeNo\":\"" + employeeNo + "\",\"personName\":\"" + personName + "\",\"faceImageBase64\":\"" + faceImageBase64 + "\",\"verifyImage\":true}";
string result = Post(YunMouUrl + "api/v1/open/basic/persons/create", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(personName + result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
return j2.code;
}
/// <summary>
/// 根据employeeNo更新人员信息
/// </summary>
/// <param name="employeeNo"></param>
/// <param name="personName"></param>
/// <param name="personPhone"></param>
/// <param name="pic"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string updatePerson(string employeeNo, string personName, string personPhone, string pic, string access_token)
{
string rootUrl = ConfigurationManager.AppSettings["localRoot"];
string filename = rootUrl + pic;
FileInfo fi1 = new FileInfo(filename);
if (fi1.Length > 200 * 1024)//base64编码的人脸图片图片大小需小于200kB数据需去除base64前缀
{
filename = filename.Replace(".jpg", "_new.jpg").Replace(".jpeg", "_new.jpeg");
CropImage(fi1.FullName, filename, 200);
}
string faceImageBase64 = ImageToByte64String(filename, System.Drawing.Imaging.ImageFormat.Jpeg); // 图片的base64编码
string data = "{\"employeeNo\":\"" + employeeNo + "\",\"personName\":\"" + personName + "\",\"faceImageBase64\":\"" + faceImageBase64 + "\",\"verifyImage\":true}";
string result = Post(YunMouUrl + "api/v1/open/basic/persons/update", data, "application/json;charset=UTF-8", access_token);
ErrLogInfo.WriteLog(personName + result);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
return j2.code;
}
/// <summary>
/// 获取人员
/// </summary>
/// <param name="employeeNo"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string getPerson(string employeeNo, string access_token)
{
string result = Get(YunMouUrl + "api/v1/open/basic/persons/get?employeeNo=" + employeeNo, "application/json;charset=UTF-8", access_token);
return result;
}
/// <summary>
/// 设备布防
/// </summary>
/// <param name="deviceSerial"></param>
/// <param name="isDefence"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string setDefence(string deviceSerial, string isDefence, string access_token)
{
string result = Post(YunMouUrl + "api/v1/ezviz/devices/actions/setDefence/deviceSerial?deviceSerial=" + deviceSerial + "&isDefence=" + isDefence, "", "application/json;charset=UTF-8", access_token);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.message;
else
{
return "";
}
}
/// <summary>
/// 添加消息通道
/// </summary>
/// <param name="access_token"></param>
/// <returns></returns>
public static string addConsumer(string access_token)
{
try
{
string result = Post(YunMouUrl + "api/v1/mq/consumer/group1", "", "application/json;charset=UTF-8", access_token);
var j2 = JsonConvert.DeserializeObject<dynamic>(result);
if (j2.code == "200")
return j2.data.consumerId;
}
catch (Exception e) { }
return "";
}
/// <summary>
/// 提交偏移量
/// </summary>
/// <param name="consumerId"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string offsets(string consumerId, string access_token)
{
string data = "consumerId=" + consumerId;
string result = Post(YunMouUrl + "api/v1/mq/consumer/offsets", data, "application/x-www-form-urlencoded", access_token);
return result;
}
/// <summary>
/// 消费消息
/// </summary>
/// <param name="consumerId"></param>
/// <param name="access_token"></param>
/// <returns></returns>
public static string consumerMessage(string consumerId, string access_token)
{
try
{
string data = "consumerId=" + consumerId + "&autoCommit=true";
string result = Post(YunMouUrl + "api/v1/mq/consumer/messages", data, "application/x-www-form-urlencoded", access_token);
return result;
}
catch (Exception e) { }
return "";
}
/// <summary>
/// POST请求
/// </summary>
/// <param name="url"></param>
/// <param name="data"></param>
/// <param name="ContentType"></param>
/// <param name="token"></param>
/// <returns></returns>
public static string Post(string url, string data, string ContentType, string token)
{
Encoding encoding = Encoding.Default;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;//设置这个安全协议必须在创建请求之前!
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;//创建请求对象
request.Method = "POST";//请求方式
request.ContentType = ContentType;//链接类型
if (!string.IsNullOrEmpty(token))
{
request.Headers.Add("Authorization", "Bearer " + token);
}
try
{
byte[] buffer = Encoding.UTF8.GetBytes(data);
//RequestStream.Write(bytes, 0, bytes.Length);
// byte[] buffer = encoding.GetBytes(data);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse webresponse = request.GetResponse() as HttpWebResponse;
using (Stream s = webresponse.GetResponseStream())
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(s, Encoding.UTF8);
string res = reader.ReadToEnd();
ErrLogInfo.WriteLog(res);
return res;
}
}
catch (Exception ex)
{
return "";
}
}
/// <summary>
/// GET请求
/// </summary>
/// <param name="url"></param>
/// <param name="ContentType"></param>
/// <param name="token"></param>
/// <returns></returns>
public static string Get(string url, string ContentType, string token)
{
Encoding encoding = Encoding.Default;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;//设置这个安全协议必须在创建请求之前!
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;//创建请求对象
request.Method = "GET";//请求方式
request.ContentType = ContentType;//链接类型
if (!string.IsNullOrEmpty(token))
{
request.Headers.Add("Authorization", "Bearer " + token);
}
try
{
HttpWebResponse webresponse = request.GetResponse() as HttpWebResponse;
using (Stream s = webresponse.GetResponseStream())
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (Exception ex)
{
return "";
}
}
public static string ImageToByte64String(string filePath, System.Drawing.Imaging.ImageFormat format)
{
Bitmap bitmap = new Bitmap(filePath);
MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, format);
byte[] array = new byte[memoryStream.Length];
memoryStream.Position = 0L;
memoryStream.Read(array, 0, (int)memoryStream.Length);
memoryStream.Close();
return Convert.ToBase64String(array);
}
public static void CropImage(string inputFilePath, string outputFilePath, int maxSizeInKB)
{
// 加载图片
using (Image image = Image.FromFile(inputFilePath))
{
// 计算最大字节大小
int maxSizeBytes = maxSizeInKB * 1024;
// 如果图片大小已经小于或等于最大限制,则不裁剪直接保存
if (GetImageSizeInBytes(image) <= maxSizeBytes)
{
image.Save(outputFilePath, image.RawFormat);
return;
}
// 裁剪图片
// 这里只是一个简单的示例,实际应用中可能需要根据需求来裁剪图片
using (Image croppedImage = CropImageToHalfSize(image))
{
// 保存裁剪后的图片
using (MemoryStream memoryStream = new MemoryStream())
{
croppedImage.Save(memoryStream, image.RawFormat);
// 如果裁剪后的图片大小仍然大于限制,则递归裁剪
if (memoryStream.Length > maxSizeBytes)
{
memoryStream.Position = 0;
string tempFile = outputFilePath.Replace(".jpg", "temp.jpg").Replace(".jpeg", "temp.jpg");
using (FileStream fileStream = new FileStream(tempFile, FileMode.Create))
{
memoryStream.CopyTo(fileStream);
}
CropImage(tempFile, outputFilePath, maxSizeInKB);
}
else
{
// 保存到文件
memoryStream.Position = 0;
using (FileStream fileStream = new FileStream(outputFilePath, FileMode.Create))
{
memoryStream.CopyTo(fileStream);
}
}
}
}
}
}
private static Image CropImageToHalfSize(Image image)
{
// 这里只是一个示例,实际情况可能需要根据需求来裁剪图片
int newWidth = image.Width / 2;
int newHeight = image.Height / 2;
return image.GetThumbnailImage(newWidth, newHeight, () => { return false; }, IntPtr.Zero);
}
private static long GetImageSizeInBytes(Image image)
{
using (MemoryStream memoryStream = new MemoryStream())
{
image.Save(memoryStream, image.RawFormat);
return memoryStream.Length;
}
}
}
}