using Common; using Models; using Models.ModelItems; using Models.View; using Newtonsoft.Json; using Org.BouncyCastle.Utilities.Encoders; using Services.Api; using Services.Cache; using Services.Extensions; using Services.Manager; using Services.Tool; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Data.SqlClient; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Caching; using System.Web.Hosting; using System.Web.Mvc; using System.Xml.Linq; using static Services.Tool.HttpRequestHelp; namespace UI.Controllers { /// /// 微信小程序专用api /// 创建时间:2021年11月25日14:26:22 /// 更新记录 /// 更新时间:2021年11月30日15:31:28 /// 更新内容:获取指定酒店房间信息 /// 涉及函数:HostsInfo HostsServer.GetHostsInfo /// public class WxController : Controller { // GET public JsonResult Update() { try { string TimePath = HostingEnvironment.MapPath("~/Upload/Image/");//保存路径 TimePath += DateTime.Now.ToString("yyyy-MM-dd"); TimePath += "\\"; var oFile = Request.Files[0];//获得上传的文件 //获取后缀名 string ext = Path.GetExtension(Request.Files[0].FileName); //string fullPath = Guid.NewGuid().ToString() + ext; string fullPath = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss fff") + ext; if (!Directory.Exists(TimePath))//判断文件夹是否存在 { Directory.CreateDirectory(TimePath);//不存在则创建文件夹 } oFile.SaveAs(TimePath + fullPath); //int c = oFile.ContentLength;//字节长度 FileInfo file = new FileInfo(TimePath + fullPath); string imgUrl = TimePath + fullPath; string UPUrl = HostingEnvironment.MapPath("~/Upload/Imgs/");//压缩后保存路径 string littleUrl = HostingEnvironment.MapPath("~/Upload/Img/");//压缩后保存路径 if (!Directory.Exists(UPUrl))//判断文件夹是否存在 { Directory.CreateDirectory(UPUrl);//不存在则创建文件夹 } string ur;//传递URL给前端 //long size; //缩略图 Task taskOne = MakeThumbnail(imgUrl, littleUrl, 85, 85, "Cut"); //using (FileStream fs = new FileStream(file.ToString(), FileMode.OpenOrCreate, FileAccess.Read)) //{ // Image objImage = Image.FromStream(fs); // ImageFormat imFormat = objImage.RawFormat; // MemoryStream memoryStream = Zip(objImage, imFormat, 250, fs.Length); // Image img = Image.FromStream(memoryStream); // img.Save(UPUrl + file.Name); // size = memoryStream.Length; // //异步压缩图 // string ftpURL = "auth.blv-oa.com:50/uts_Manager/oyl_FTP/Image"; // Task task = FtpUpload(UPUrl + fullPath, ftpURL); // task.Start(); // ur = task.Result; //} Task tasktwo = MakeThumbnail(imgUrl, UPUrl, 500, 500, ""); tasktwo.Start(); // //异步压缩图 string ftpURL = "auth.blv-oa.com:50/uts_Manager/oyl_FTP/Image"; Task task = FtpUpload(tasktwo.Result, ftpURL); task.Start(); ur = task.Result; taskOne.Start(); string urltwo = taskOne.Result; string ftpURLTwo = "auth.blv-oa.com:50/uts_Manager/oyl_FTP/Img"; Task taskTwo = FtpUpload(urltwo, ftpURLTwo); taskTwo.Start(); ur = taskTwo.Result; var data1 = new { src = ur //,sizes = size }; var Person = new { code = 0,//0表示成功 msg = "",// data = data1 }; return Json(Person);// } catch (Exception e) { LogHelp.WriteExceptionLog(e, this.GetType().Name); return null; } } [HttpPost] [Route("ApiWx/Login")] //Wx账号密码登录的接口 public ActionResult Wxlog(string Uid = "", int appid = 0, string Pwd = "", bool islong = false) { Logs.WriteTimingPlanLog("用户名:" + Uid + "密码:" + Pwd); var result = new ReturnResult(); try { result = OTApi.Wxlog(Uid, Pwd, appid, null, islong); var Ip = IPHelper.GetIP(); DbLog log = new DbLog() { Uid = Uid, Ip = Ip, Client = HttpContext.Request.UserAgent }; var Message = result.Message; Task.Run(() => { Data loc = HttpRequestHelp.GetIp($@"https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query={log.Ip}&co=&resource_id=6006&oe=utf8"); if (loc != null && loc.status == 0) { if (loc.data.Count > 0) { log.location = loc.data[0].location; } } DbLogServer.WriteDbLog($"{Uid}请求应用 {Message[3]}({appid}) 授权" + (result.Status == 200 ? "请求成功~" : "请求失败~"), 0, log); if (result.Status == 200) DBlog.WirtDB(Message[2], Message[0], appid); }); if (result.Status == 200) { result.Message = "请求成功~"; } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); result.Status = 500; result.Message = "服务器错误"; result.Data = null; } return Json(result); } [HttpPost] //token登录的接口 [Route("ApiWx/LoginToken")] public ActionResult Wxlog(string token, int appid = 5) { var info = new ReturnResult(); try { info = OTApi.WxlogToken(token, appid, HttpContext.Request.UserAgent); } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); info.Status = 500; info.Message = "服务器错误"; info.Data = null; } return Json(info); } /// /// 获取指定酒店房间信息 /// /// 酒店id /// [HttpPost] [Route("ApiWx/HostsInfo")] public ActionResult HostsInfo(int HotelID = 0, string token = "") { var res = new ReturnResult>(); try { if (false)//TokenHelper.CheckToken(token) == null) { res.Status = 1024; res.Message = "token过期~"; } else { res.Data = HostsServer.GetHostsInfo(HotelID); var rstime = ""; using (var client = new HttpClient()) { FormDataValue bb = new FormDataValue() { key = "blw_ws@2015", id = HotelID.ToString() }; // 创建参数字典 var parameters = new FormUrlEncodedContent(new[] { new KeyValuePair("jsonData", JsonConvert.SerializeObject(bb)) }); var response = client.PostAsync("https://www.boonlive-rcu.com/api/GetHotelListByCode?jsonData=" , parameters).Result; var aa = response.Content.ReadAsStringAsync().Result; rstime = JsonConvert.DeserializeObject(aa).Result; } res.Data[0].CreateTime = DateTime.Parse(rstime); res.Status = 200; } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Message = "服务器错误"; res.Data = null; } return Json(res); } public class Rsit { public bool IsSuccess { get; set; } public string Result { get; set; } } public class FormDataValue { public string key { get; set; } public string id { get; set; } } /// /// 绑定MAC地址 解绑传入 NoCheck false /// /// MAC地址 /// token ///已经绑定 100 异常 500 成功 200 /// [HttpPost] [Route("ApiWx/GetMAC")] public ActionResult GetMAC(string MAC = "", string token = "", string roomID = "", string roomNumber = "", int HotelID = 0, bool NoCheck = true, string loc = null) { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { var userinfo = JsonConvert.DeserializeObject(isok); //实际环境 16 测试环境 15 if (CacheHelp.cacheSysUserAutho.First(x => x.UserId == userinfo.Id && x.AuthorityId == 16 && x.AuthotypeId == 3 && x.HotelId == HotelID) == null) { res.Status = 1000; res.Message = "无权限~"; } else { if (NoCheck) { var isMAC = HostsServer.CheckMAC(MAC); if (isMAC != null) { //已经绑定 100 res.Status = 100; res.Data = new { Hosts = isMAC, }; return Json(res); } } var MACOK = HostsServer.GetMAC(MAC, HotelID, roomID, roomNumber, userinfo, loc); if (MACOK) res.Status = 200;//绑定成功 else res.Status = 150;//绑定失败 } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = null; res.Message = "服务器错误"; } finally { if (res.Status == 200) { CacheHelp.Removesys(CacheHelp.syskey.sysMACLogs); } } return Json(res); } [HttpPost] [Route("ApiWx/Logsinfo")] //Wx 日志 public ActionResult GetLogs(string token, int page = 1, int length = 10, int AppType = -1, Dictionary search = null) { var res = new ReturnResult(); try { //2021注定又是充满期望和挑战的一年,有什么理由不尽情try一下呢,纵使遭遇异常,catch住,调整参数再次retry,finally还是要抵达远方。 string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { var userinfo = JsonConvert.DeserializeObject(isok); //有权限的酒店 var hotels = CacheHelp.cacheSysUserAutho.Where(x => x.UserId == userinfo.Id && x.AuthotypeId != 1).Select(x => x.HotelId).Distinct().ToList(); int begin = (page - 1) * length; var resdata = SqlSugarBase.Db.Queryable().Where(x => hotels.Contains(x.Hotelsid)).Count(); //.AddDays(1) 添加一天是因为 传入的 参数为 20012-10-1 转型后为 2012-10-1 00:00:00 对 2012-10-1 1:00:00的数据不能赛选 string sql = $@" where ( '{AppType}' = '-1' or AppType = '{AppType}' )"; if (hotels.Count != 0) { sql += "and ( "; for (int i = 0; i < hotels.Count; i++) { sql += " HotelID=" + hotels[i] + " or"; } sql = sql.Substring(0, sql.Length - 2); sql += ")"; } if (search != null) { string createtime = string.Empty; string endtime = string.Empty; string name = string.Empty; string hotelsid = string.Empty; if (!string.IsNullOrEmpty(search["starttime"])) { sql += "and ( '@createtime' = '' or createtime > '@createtime' )"; createtime = DateTime.Parse(search["starttime"]).ToString("yyyy-MM-dd HH:mm:ss"); } if (!string.IsNullOrEmpty(search["endtime"])) { sql += " AND ( '@endtime' = '' or createtime < '@endtime')"; endtime = DateTime.Parse(search["endtime"]).AddDays(1).ToString("yyyy-MM-dd HH:mm:ss"); } if (!string.IsNullOrEmpty(search["name"])) { sql += " and uid like '@name' "; name = search["name"]; } if (!string.IsNullOrEmpty(search["hotelsid"])) { sql += "and ('@hotelsid'='' or Hotelsid = '@hotelsid')"; hotelsid = search["hotelsid"]; } sql = sql.Replace("@name", "%" + (string.IsNullOrEmpty(name) ? "" : name) + "%").Replace("@endtime", string.IsNullOrEmpty(endtime) ? "" : endtime).Replace("@createtime", createtime).Replace("@hotelsid", (string.IsNullOrEmpty(hotelsid) ? "" : hotelsid)); } else sql = string.Empty; sql += $" order by CreateTime desc LIMIT 1,{length}"; //var data = SqlSugarBase.Db.a.View_MAClogs.SqlQuery($"select TOP {length} * from View_MAClog " + sql).ToList(); var data = SqlSugarBase.Db.Ado.SqlQuery($"select * from View_MAClog " + sql).ToList(); Logs.WriteLog("sql" + sql); //var filtcount = db.View_MAClogs.SqlQuery("select * from View_MAClog " + sql).Count(); var filtcount = SqlSugarBase.Db.Ado.SqlQuery("select * from View_MAClog " + sql).Count(); res.Data = new { filtcount = filtcount, sum = resdata, data = data }; res.Status = 200; } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = null; res.Message = "服务器错误"; } return Json(res); } [HttpPost] [Route("ApiWx/ErrorInfo")] //Wx rcu 反馈错误 public ActionResult ErrorInfo(string token, string MAC, int HotelID, int type, string roomNumber) { var res = new ReturnResult(); try { //2021注定又是充满期望和挑战的一年,有什么理由不尽情try一下呢,纵使遭遇异常,catch住,调整参数再次retry,finally还是要抵达远方。 string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { var userinfo = JsonConvert.DeserializeObject(isok); if (HostsServer.AddErrorInfo(userinfo.Id, MAC, HotelID, type, roomNumber)) { res.Status = 200; } else { res.Status = 100; } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = null; res.Message = "服务器错误"; } finally { CacheHelp.Removesys(CacheHelp.syskey.sysErrorInfoListKey); } return Json(res); } /// /// 获取酒店房间类型 /// /// /// 酒店编号 /// [HttpPost] [Route("ApiWx/GetRoomTypeAndModalsList")] public ActionResult GetRoomTypeAndModalsList(string token, int HotelID) { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { List roomList = SqlSugarBase.RcuDb.Queryable().Where(it => it.HOTEL_OLD_ID == HotelID && it.IsDel != 1).ToList(); res.Status = 200; res.Data = roomList; res.Message = "查询成功"; } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = null; res.Message = "服务器错误"; } return Json(res); } [HttpPost] [Route("ApiWx/CheckFaceSN")] // 人脸机 检查是否绑定 public ActionResult CheckFaceSN(string token, string faceSN) { var res = new ReturnResult>(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { res.Data = FaceServer.CheckfaceSNHosts(faceSN); res.Status = 200; } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = null; res.Message = "服务器错误"; } return Json(res); } [HttpPost] [Route("ApiWx/GetFaceSN")] public ActionResult GetFaceSN(string faceSN = "", string token = "", string roomNumber = "", int HotelID = 0, string faceAddress = "", string roomID = "", bool isjb = false) { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); var userinfo = JsonConvert.DeserializeObject(isok); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { if (HotelID != 0 && CacheHelp.cacheSysUserAutho.First(x => x.HotelId == HotelID && x.AuthorityId == 21 && x.AuthotypeId == 3) == null) { res.Data = -1; res.Message = "权限不足~"; res.Status = 1000; } else { res.Data = FaceServer.GetfaceSN(userinfo, faceSN, roomNumber, HotelID, faceAddress, roomID, isjb); res.Status = 200; } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = -1; res.Message = "服务器错误"; } finally { if (res.Status == 200 && res.Data == 0) { CacheHelp.Removesys(CacheHelp.syskey.sysMACLogs); } } return Json(res); } [HttpPost] [Route("ApiWx/OpenDoorTest")] public ActionResult OpenDoorTest(string faceSN = "", string token = "") { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { //访问人脸机管理后台方法本地路径http://localhost:55151/App/WxTest/ActionOpenDoorToDevice if (string.IsNullOrEmpty(faceSN)) { res.Status = 500; res.Message = "人脸编号不能为空"; } else { returnInfo info = FacemachineTest.opendoor(faceSN); if (info.Status == 200) { res.Status = 200; res.Message = "开门信息下发成功"; } else { res.Status = 500; res.Message = "开门信息下发失败"; } } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = -1; res.Message = "服务器错误"; } return Json(res); } [HttpPost] [Route("ApiWx/RestartTheDevice")] public ActionResult RestartTheDevice(string faceSN = "", string token = "") { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { //访问人脸机管理后台方法本地路径http://localhost:55151/App/WxTest/ActionOpenDoorToDevice if (string.IsNullOrEmpty(faceSN)) { res.Status = 500; res.Message = "人脸编号不能为空"; } else { returnInfo info = FacemachineTest.RestartDevice(faceSN); if (info.Status == 200) { res.Status = 200; res.Message = "重启信息下发成功"; } else { res.Status = 500; res.Message = "重启信息下发失败"; } } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = -1; res.Message = "服务器错误"; } return Json(res); } [HttpPost] [Route("ApiWx/GeteDeviceInfomation")] public ActionResult GeteDeviceInfomation(string faceSN = "", string hotelCode = "", string token = "") { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { //访问人脸机管理后台方法本地路径http://localhost:55151/App/WxTest/ActionOpenDoorToDevice if (string.IsNullOrEmpty(faceSN)) { res.Status = 500; res.Message = "人脸编号不能为空"; } else { returnInfo info = FacemachineTest.GeteDeviceInfo(faceSN, hotelCode); if (info.Status == 200) { res.Status = 200; res.Message = "获取设备信息下发成功,版本号码是:" + info.APKVersion; } else { res.Status = 500; res.Message = "获取设备信息下发失败"; } } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = -1; res.Message = "服务器错误"; } return Json(res); } [HttpPost] [Route("ApiWx/DeletePeopleFromDeviceByGroup")] public ActionResult DeletePeopleFromDeviceByGroup(string faceSN = "", string hotelCode = "", string token = "") { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { //访问人脸机管理后台方法本地路径http://localhost:55151/App/WxTest/ActionOpenDoorToDevice if (string.IsNullOrEmpty(faceSN)) { res.Status = 500; res.Message = "人脸编号不能为空"; } else { returnInfo info = FacemachineTest.delPeopleFromDeviceByGroup(faceSN, hotelCode); if (info.Status == 200) { res.Status = 200; res.Message = "删除所有住户人员下发成功"; } else { res.Status = 500; res.Message = "删除所有住户人员下发失败"; } } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = -1; res.Message = "服务器错误"; } return Json(res); } [HttpPost] [Route("ApiWx/GetThePeopleListOfDevice")] public ActionResult GetThePeopleListOfDevice(string faceSN = "", string hotelCode = "", string token = "") { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { //访问人脸机管理后台方法本地路径http://localhost:55151/App/WxTest/ActionOpenDoorToDevice if (string.IsNullOrEmpty(faceSN)) { res.Status = 500; res.Message = "人脸编号不能为空"; } else { returnInfo info = FacemachineTest.GetsThePeopleListOfDevice(faceSN, hotelCode); if (info.Status == 200) { res.Status = 200; res.Message = "获取入住人员数量下发成功,人数是:" + info.puinfo; } else { res.Status = 500; res.Message = "获取入住人员数量下发失败"; } } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = -1; res.Message = "服务器错误"; } return Json(res); } /// /// pms开房测试 /// /// 证件号码 /// 入住人员姓名 /// 入住人员姓别 /// 入住人员照片路径 /// 入住人员电话号码 /// /// 酒店编号 /// /// [HttpPost] [Route("ApiWx/openRommCheckin")] public ActionResult openRommCheckin(string idNumber, string name, int sex, string picture, string phone, string faceSN = "", string hotelCode = "", string room = "", string token = "") { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { //访问人脸机管理后台方法本地路径http://localhost:55151/App/WxTest/ActionOpenDoorToDevice if (string.IsNullOrEmpty(faceSN)) { res.Status = 500; res.Message = "人脸编号不能为空"; } else { returnInfo info = FacemachineTest.openRoomCheckin(idNumber, name, sex, picture, phone, faceSN, hotelCode, room); if (info.Status == 200) { res.Status = 200; res.Message = "下发人脸成功"; } else { res.Status = 500; res.Message = "下发人脸失败"; } } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = -1; res.Message = "服务器错误"; } return Json(res); } [HttpPost] [Route("ApiWx/roomCheckOut")] public ActionResult roomCheckOut(string faceSN = "", string hotelCode = "", string room = "", string token = "") { var res = new ReturnResult(); try { string isok = TokenHelper.CheckToken(token); if (isok == null) { res.Status = 1024; res.Message = "token过期~"; } else { //访问人脸机管理后台方法本地路径http://localhost:55151/App/WxTest/ActionOpenDoorToDevice if (string.IsNullOrEmpty(faceSN)) { res.Status = 500; res.Message = "人脸编号不能为空"; } else { returnInfo info = FacemachineTest.roomtoCheckOut(faceSN, hotelCode, room); if (info.Status == 200) { res.Status = 200; res.Message = "退房成功"; } else { res.Status = 500; res.Message = "退房失败"; } } } } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); res.Status = 500; res.Data = -1; res.Message = "服务器错误"; } return Json(res); } #region 缩略图 /// /// 生成缩略图 /// /// 源图路径(物理路径) /// 缩略图路径(物理路径) /// 缩略图宽度 /// 缩略图高度 /// 生成缩略图的方式 public Task MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode) { ReturnResult result = new ReturnResult(); FileInfo info = new FileInfo(originalImagePath); Image originalImage = Image.FromFile(originalImagePath); int towidth = width; int toheight = height; int x = 0; int y = 0; int ow = originalImage.Width; int oh = originalImage.Height; if (mode == "") { if (ow > oh) { mode = "W"; } else { mode = "H"; } } switch (mode) { case "HW"://指定高宽缩放(可能变形) break; case "W"://指定宽,高按比例 toheight = originalImage.Height * width / originalImage.Width; break; case "H"://指定高,宽按比例 towidth = originalImage.Width * height / originalImage.Height; break; case "Cut"://指定高宽裁减(不变形) if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight) { oh = originalImage.Height; ow = originalImage.Height * towidth / toheight; y = 0; x = (originalImage.Width - ow) / 2; } else { ow = originalImage.Width; oh = originalImage.Width * height / towidth; x = 0; y = (originalImage.Height - oh) / 2; } break; default: break; } //新建一个bmp图片 Image bitmap = new System.Drawing.Bitmap(towidth, toheight); //新建一个画板 Graphics g = System.Drawing.Graphics.FromImage(bitmap); //设置高质量插值法 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //设置高质量,低速度呈现平滑程度 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //清空画布并以透明背景色填充 g.Clear(Color.Transparent); //在指定位置并且按指定大小绘制原图片的指定部分 g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight), new Rectangle(x, y, ow, oh), GraphicsUnit.Pixel); try { if (!Directory.Exists(thumbnailPath)) { Directory.CreateDirectory(thumbnailPath); } //以jpg格式保存缩略图 bitmap.Save(thumbnailPath + "1" + info.Name); CompressImage(thumbnailPath + "1" + info.Name, thumbnailPath + info.Name); return new Task(() => thumbnailPath + info.Name); //return thumbnailPath + info.Name; } catch (System.Exception e) { LogHelp.WriteExceptionLog(e, this.GetType().Name); return null; } finally { originalImage.Dispose(); bitmap.Dispose(); g.Dispose(); } } #endregion /// /// 图片上传到ftp(异步) /// /// 源文件路径 public Task FtpUpload(string filename, string ftpServerIP) { string ftpUserID = "uts_manager";//ftp账号 string ftpPassword = "uts_Inhaos@all";//ftp密码 FileInfo fileInf = new FileInfo(filename); FtpWebRequest reqFTP; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); try { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name)); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = true; //如果要连接的 FTP 服务器要求凭据并支持安全套接字层 (SSL),则应将 EnableSsl 设置为 true。如果不写会报出421错误(服务不可用) reqFTP.EnableSsl = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 指定数据传输类型 reqFTP.UseBinary = true; // 上传文件时通知服务器文件的大小 reqFTP.ContentLength = fileInf.Length; // 缓冲大小设置为 10kb int buffLength = 10480; byte[] buff = new byte[buffLength]; int contentLen; // 打开一个文件流 (System.IO.FileStream) 去读上传的文件 FileStream fs = fileInf.OpenRead(); try { // 把上传的文件写入流 Stream strm = reqFTP.GetRequestStream(); // 每次读文件流的buffLength kb contentLen = fs.Read(buff, 0, buffLength); // 流内容没有结束 while (contentLen != 0) { // 把内容从file stream 写入 upload stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // 关闭两个流 strm.Close(); fs.Close(); return new Task(() => fileInf.Name); } catch (Exception ex) { Response.Write("Upload Error:" + ex.Message); } } catch (Exception e) { Response.Write("Upload Error:" + e.Message); } return null; } /// /// 无损压缩图片 /// /// 原图片地址 /// 压缩后保存图片地址 /// 压缩质量(数字越小压缩率越高)1-100 /// 压缩后图片的最大大小 /// 是否是第一次调用 /// public static bool CompressImage(string originalFileFullName, string afterConversionFileFullName, int flag = 90, int size = 100, bool isFirst = true) { Image iSource = Image.FromFile(originalFileFullName); ImageFormat tFormat = iSource.RawFormat; //如果是第一次调用,原始图像的大小小于要压缩的大小,则直接复制文件,并且返回true FileInfo firstFileInfo = new FileInfo(originalFileFullName); if (firstFileInfo.Length < size * 1024) { firstFileInfo.CopyTo(afterConversionFileFullName); return true; } int dHeight = iSource.Height;// / 2; int dWidth = iSource.Width;/// 2; int sW = dWidth, sH = dHeight; //按比例缩放 Size tem_size = new Size(iSource.Width, iSource.Height); //if (tem_size.Width > dHeight || tem_size.Width > dWidth) //{ // if ((tem_size.Width * dHeight) > (tem_size.Width * dWidth)) // { // sW = dWidth; // sH = (dWidth * tem_size.Height) / tem_size.Width; // } // else // { // sH = dHeight; // sW = (tem_size.Width * dHeight) / tem_size.Height; // } //} //else //{ // sW = tem_size.Width; // sH = tem_size.Height; //} Bitmap ob = new Bitmap(dWidth, dHeight); Graphics g = Graphics.FromImage(ob); g.Clear(Color.WhiteSmoke); g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.DrawImage(iSource, new Rectangle(0, 0, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel); g.Dispose(); //以下代码为保存图片时,设置压缩质量 EncoderParameters ep = new EncoderParameters(); long[] qy = new long[1]; qy[0] = flag;//设置压缩的比例1-100 EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy); ep.Param[0] = eParam; try { ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo jpegICIinfo = null; for (int x = 0; x < arrayICI.Length; x++) { if (arrayICI[x].FormatDescription.Equals("JPEG")) { jpegICIinfo = arrayICI[x]; break; } } if (jpegICIinfo != null) { ob.Save(afterConversionFileFullName, jpegICIinfo, ep); FileInfo fi = new FileInfo(afterConversionFileFullName); if (fi.Length > 1024 * size) { var str = afterConversionFileFullName.Split('.').ToList(); var path = str.LastOrDefault(); path = HostingEnvironment.MapPath($"~/Upload/Image/{new Random().Next()}{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.{path}"); ob.Save(path, jpegICIinfo, ep); //flag = flag - 10; return CompressImage(path, afterConversionFileFullName, flag, size, false); } //else //{ // ob.Save(afterConversionFileFullName, jpegICIinfo, ep); //} } else { ob.Save(afterConversionFileFullName, tFormat); } return true; } catch (Exception ex) { LogHelp.WriteExceptionLog(ex); return false; } finally { iSource.Dispose(); ob.Dispose(); //不是第一次就删除源文件 if (!isFirst) { System.IO.File.Delete(originalFileFullName); } } } /// /// 无证书时跳过不报错 /// /// /// /// /// /// public static bool ValidateServerCertificate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } } public static class FacemachineTest { //开门命令 public static returnInfo opendoor(string sn) { returnInfo ri = new returnInfo(); //请求路径 //string url = "http://localhost:55151/App/WxTest/ActionOpenDoorToDevice"; string url = "http://face.blv-oa.com/App/WxTest/ActionOpenDoorToDevice"; //定义request并设置request的路径 WebRequest request = WebRequest.Create(url); request.Method = "post"; Face past = new Face(); past.Serial = sn; //初始化request参数 //string postData = "{Pwd:\"\",OutBoxCode:\"OutBoxCode\",ShippingCode:\"ShippingCode\",MO:\"zzz\",istest:1}"; //"{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }"; //设置参数的编码格式,解决中文乱码 string postData = Newtonsoft.Json.JsonConvert.SerializeObject(past); byte[] byteArray = Encoding.UTF8.GetBytes(postData); //设置request的MIME类型及内容长度 request.ContentType = "application/json"; request.ContentLength = byteArray.Length; //打开request字符流 Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); //定义response为前面的request响应 WebResponse response = request.GetResponse(); //获取相应的状态代码 Console.WriteLine(((HttpWebResponse)response).StatusDescription); //定义response字符流 dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd();//读取所有 ri = JsonConvert.DeserializeObject(responseFromServer); Console.WriteLine(responseFromServer); return ri; } //重启命令 public static returnInfo RestartDevice(string sn) { returnInfo ri = new returnInfo(); //请求路径 //string url = "http://localhost:55151/App/WxTest/ActionResetToDevice"; string url = "http://face.blv-oa.com/App/WxTest/ActionResetToDevice"; //定义request并设置request的路径 WebRequest request = WebRequest.Create(url); request.Method = "post"; Face past = new Face(); past.Serial = sn; //初始化request参数 //string postData = "{Pwd:\"\",OutBoxCode:\"OutBoxCode\",ShippingCode:\"ShippingCode\",MO:\"zzz\",istest:1}"; //"{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }"; //设置参数的编码格式,解决中文乱码 string postData = Newtonsoft.Json.JsonConvert.SerializeObject(past); byte[] byteArray = Encoding.UTF8.GetBytes(postData); //设置request的MIME类型及内容长度 request.ContentType = "application/json"; request.ContentLength = byteArray.Length; //打开request字符流 Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); //定义response为前面的request响应 WebResponse response = request.GetResponse(); //获取相应的状态代码 Console.WriteLine(((HttpWebResponse)response).StatusDescription); //定义response字符流 dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd();//读取所有 ri = JsonConvert.DeserializeObject(responseFromServer); Console.WriteLine(responseFromServer); return ri; } // 获取设备信息 public static returnInfo GeteDeviceInfo(string sn, string hotelCode) { returnInfo ri = new returnInfo(); //请求路径 //string url = "http://localhost:55151/App/WxTest/GetDeviceInfo"; string url = "http://face.blv-oa.com/App/WxTest/GetDeviceInfo"; //定义request并设置request的路径 WebRequest request = WebRequest.Create(url); request.Method = "post"; Faceinfo past = new Faceinfo(); past.Serial = sn; past.hotelCode = hotelCode; //初始化request参数 //string postData = "{Pwd:\"\",OutBoxCode:\"OutBoxCode\",ShippingCode:\"ShippingCode\",MO:\"zzz\",istest:1}"; //"{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }"; //设置参数的编码格式,解决中文乱码 string postData = Newtonsoft.Json.JsonConvert.SerializeObject(past); byte[] byteArray = Encoding.UTF8.GetBytes(postData); //设置request的MIME类型及内容长度 request.ContentType = "application/json"; request.ContentLength = byteArray.Length; //打开request字符流 Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); //定义response为前面的request响应 WebResponse response = request.GetResponse(); //获取相应的状态代码 Console.WriteLine(((HttpWebResponse)response).StatusDescription); //定义response字符流 dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd();//读取所有 ri = JsonConvert.DeserializeObject(responseFromServer); Console.WriteLine(responseFromServer); return ri; } //删除用户组信息 public static returnInfo delPeopleFromDeviceByGroup(string sn, string hotelCode) { returnInfo ri = new returnInfo(); //请求路径 //string url = "http://localhost:55151/App/WxTest/DeletePeopleFromDeviceByGroup"; string url = "http://face.blv-oa.com/App/WxTest/DeletePeopleFromDeviceByGroup"; //定义request并设置request的路径 WebRequest request = WebRequest.Create(url); request.Method = "post"; Faceinfo past = new Faceinfo(); past.Serial = sn; past.hotelCode = hotelCode; //初始化request参数 //string postData = "{Pwd:\"\",OutBoxCode:\"OutBoxCode\",ShippingCode:\"ShippingCode\",MO:\"zzz\",istest:1}"; //"{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }"; //设置参数的编码格式,解决中文乱码 string postData = Newtonsoft.Json.JsonConvert.SerializeObject(past); byte[] byteArray = Encoding.UTF8.GetBytes(postData); //设置request的MIME类型及内容长度 request.ContentType = "application/json"; request.ContentLength = byteArray.Length; //打开request字符流 Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); //定义response为前面的request响应 WebResponse response = request.GetResponse(); //获取相应的状态代码 Console.WriteLine(((HttpWebResponse)response).StatusDescription); //定义response字符流 dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd();//读取所有 ri = JsonConvert.DeserializeObject(responseFromServer); Console.WriteLine(responseFromServer); return ri; } //获取入住人员数量 public static returnInfo GetsThePeopleListOfDevice(string sn, string hotelCode) { returnInfo ri = new returnInfo(); //请求路径 //string url = "http://localhost:55151/App/WxTest/GetThePeopleListOfDevice"; string url = "http://face.blv-oa.com/App/WxTest/GetThePeopleListOfDevice"; //定义request并设置request的路径 WebRequest request = WebRequest.Create(url); request.Method = "post"; Faceinfo past = new Faceinfo(); past.Serial = sn; past.hotelCode = hotelCode; //初始化request参数 //string postData = "{Pwd:\"\",OutBoxCode:\"OutBoxCode\",ShippingCode:\"ShippingCode\",MO:\"zzz\",istest:1}"; //"{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }"; //设置参数的编码格式,解决中文乱码 string postData = Newtonsoft.Json.JsonConvert.SerializeObject(past); byte[] byteArray = Encoding.UTF8.GetBytes(postData); //设置request的MIME类型及内容长度 request.ContentType = "application/json"; request.ContentLength = byteArray.Length; //打开request字符流 Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); //定义response为前面的request响应 WebResponse response = request.GetResponse(); //获取相应的状态代码 Console.WriteLine(((HttpWebResponse)response).StatusDescription); //定义response字符流 dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd();//读取所有 ri = JsonConvert.DeserializeObject(responseFromServer); Console.WriteLine(responseFromServer); return ri; } //下发人脸 public static returnInfo openRoomCheckin(string idNumber, string name, int sex, string picture, string phone, string faceSN, string hotelCode, string room) { returnInfo ri = new returnInfo(); //请求路径 //string url = "http://localhost:55151/App/WxTest/visitinfo"; string url = "http://face.blv-oa.com/App/WxTest/visitinfo"; //定义request并设置request的路径 WebRequest request = WebRequest.Create(url); request.Method = "post"; openroomchin past = new openroomchin(); past.idNumber = idNumber; past.name = name; past.sex = sex; past.picture = picture; past.phone = phone; past.hotel = hotelCode; past.room = room; past.faceSN = faceSN; //初始化request参数 //string postData = "{Pwd:\"\",OutBoxCode:\"OutBoxCode\",ShippingCode:\"ShippingCode\",MO:\"zzz\",istest:1}"; //"{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }"; //设置参数的编码格式,解决中文乱码 string postData = Newtonsoft.Json.JsonConvert.SerializeObject(past); byte[] byteArray = Encoding.UTF8.GetBytes(postData); //设置request的MIME类型及内容长度 request.ContentType = "application/json"; request.ContentLength = byteArray.Length; //打开request字符流 Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); //定义response为前面的request响应 WebResponse response = request.GetResponse(); //获取相应的状态代码 Console.WriteLine(((HttpWebResponse)response).StatusDescription); //定义response字符流 dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd();//读取所有 if (responseFromServer == "true") { ri.Status = 200; } else { ri.Status = 500; } //ri = JsonConvert.DeserializeObject(responseFromServer); Console.WriteLine(responseFromServer); return ri; } //删除人脸 public static returnInfo roomtoCheckOut(string faceSN, string hotelCode, string room) { returnInfo ri = new returnInfo(); //请求路径 //string url = "http://localhost:55151/App/WxTest/CheckOut"; string url = " http://face.blv-oa.com/App/WxTest/CheckOut"; //定义request并设置request的路径 WebRequest request = WebRequest.Create(url); request.Method = "post"; roomCheckOut past = new roomCheckOut(); past.key = "abc"; past.data.HotelCode = hotelCode; past.data.roomid = room; past.data.checkOutTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //初始化request参数 //string postData = "{\"data\":{\"HotelCode\":\"hotelCode,\"roomid\":\"102\",\"CheckTime\":\"2024-04-08T17:55:37.801093+08:00\"}}"; //"{ ID: \"1\", NAME: \"Jim\", CREATETIME: \"1988-09-11\" }"; //设置参数的编码格式,解决中文乱码 string postData = Newtonsoft.Json.JsonConvert.SerializeObject(past); byte[] byteArray = Encoding.UTF8.GetBytes(postData); //设置request的MIME类型及内容长度 request.ContentType = "application/json"; request.ContentLength = byteArray.Length; //打开request字符流 Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); //定义response为前面的request响应 WebResponse response = request.GetResponse(); //获取相应的状态代码 Console.WriteLine(((HttpWebResponse)response).StatusDescription); //定义response字符流 dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd();//读取所有 if (responseFromServer == "true") { ri.Status = 200; } else { ri.Status = 500; } //ri = JsonConvert.DeserializeObject(responseFromServer); Console.WriteLine(responseFromServer); return ri; } public void A() { string code = ""; string roonumber = ""; string a = $"WXFault_{code}_{roonumber}"; CSRedisCacheHelper.HMGetAll("'"); } } public class roomCheckOut { public string key { get; set; } public data data { get; set; } public roomCheckOut() { data = new data(); } } // { // "": "1287", // "": "102", // "CheckTime": "2012-12-1", //} public class data { //public string faceSN { get; set; } public string HotelCode { get; set; } public string roomid { get; set; } public string checkOutTime { get; set; } } public class openroomchin { public int sex { get; set; } public string name { get; set; } public string idNumber { get; set; } public string picture { get; set; } public string phone { get; set; } public string faceSN { get; set; } public string hotel { get; set; } public string room { get; set; } } public class Face { public string Serial { get; set; } } public class Faceinfo { public string Serial { get; set; } public string hotelCode { get; set; } } public class returnInfo { public int Status { get; set; } public string Message { get; set; } public string APKVersion { get; set; } public string puinfo { get; set; } } }