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(result); return j2.access_token; } catch (Exception e) { } return ""; } /// /// 添加设备组(一个项目一个) /// /// /// /// /// 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(result); if (j2.code == "200") return j2.message; else { return ""; } } /// /// 删除设备分组 /// /// /// /// /// 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(result); if (j2.code == "200") return j2.message; else { return ""; } } /// /// 添加设备 /// /// /// /// /// /// 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(result); if (j2.code == "200") { res = j2.message; return j2.data.groupId; } else { res = j2.message; return ""; } } /// /// 修改设备名称(按设备序列号) /// /// /// /// /// 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(result); if (j2.code == "200") return j2.message; else { return ""; } } /// /// 删除设备 /// /// /// /// 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(result); if (j2.code == "200") return j2.message; else { return ""; } } /// /// 添加权限组,建议一个项目一个 /// /// /// /// 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(result); if (j2.code == "200") return j2.data.groupId; else { return ""; } } /// /// 根据权限组下发权限 /// /// /// /// 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(result); if (j2.code == "200") return j2.code; else { return ""; } } /// /// 删除权限组(会同时移除权限组下人员和设备下发记录以及已下发到设备的权限) /// /// /// /// 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(result); if (j2.code == "200") { return j2.data.groupId; } else { return ""; } } /// /// 填加员工到权限组 /// /// /// /// /// 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(result); if (j2.code == "200") return j2.data.statisticsId; else { return ""; } } /// /// 从权限组移除员工 /// /// /// /// /// 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(result); if (j2.code == "200") return j2.data.statisticsId; else { return ""; } } /// /// 添加设备到权限组 /// /// /// /// /// 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(result); if (j2.code == "200") return j2.code; else { return ""; } } /// /// 从权限组移除设备 /// /// /// /// /// 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(result); if (j2.code == "200") return j2.message; else { return ""; } } /// /// 添加人员 /// /// /// /// /// /// /// 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(result); return j2.code; } /// /// 根据employeeNo更新人员信息 /// /// /// /// /// /// /// 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(result); return j2.code; } /// /// 获取人员 /// /// /// /// 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; } /// /// 设备布防 /// /// /// /// /// 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(result); if (j2.code == "200") return j2.message; else { return ""; } } /// /// 添加消息通道 /// /// /// 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(result); if (j2.code == "200") return j2.data.consumerId; } catch (Exception e) { } return ""; } /// /// 提交偏移量 /// /// /// /// 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; } /// /// 消费消息 /// /// /// /// 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 ""; } /// /// POST请求 /// /// /// /// /// /// 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 ""; } } /// /// GET请求 /// /// /// /// /// 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; } } } }