using DevicesService.Common; using DevicesService.Devices; using Device.ApiModel.DocumentServerModels; using Device.Caller; using Device.IICCardReader; using Functions.FileExt; using IDevice.Model.RFIDReader; using NAudio.Wave; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Printing; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Runtime.InteropServices; using System.Speech.Synthesis; using System.Text; using System.Threading.Tasks; using System.Threading; using static System.Net.Mime.MediaTypeNames; using System.Text.RegularExpressions; using DevicesService.Commen; using System.Numerics; using System.Web; using NAudio.Wave.SampleProviders; using System.Configuration; using System.Diagnostics; namespace DevicesService.Common { /// /// 网页调用C#方法 /// public class ScriptCallbackObject { public DeviceCaller deviceCaller = new DeviceCaller(); public HScamera hScamera = new HScamera(0, 0, 1); private static SpeechSynthesizer speech = new SpeechSynthesizer(); //读取身份证 public string IDCardRead(string paramsString, string callback) { Task.Run(() => GetCardInfo() ); @event.WaitOne(); string json = JsonConvert.SerializeObject(resultModel); if (resultModel.Code == "1") { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + json + "}"; } else { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + resultModel.Message + "\" } "; } } private ResultModel resultModel = null; private AutoResetEvent @event = new AutoResetEvent(false); private async void GetCardInfo() { ICCardReadControl iCCard = new ICCardReadControl(); resultModel = await iCCard.ReadIDCardData(); @event.Set(); } /// /// 打印排队票据 /// /// 排号 /// 等待人数 /// 二维码 /// 办理业务名称 /// public string SendByPrint(string ph, string ddrs, string qrcode, string ywmc, string callback) { try { Task resultModel = deviceCaller.SendByPrint(ph, ddrs, qrcode, ywmc); if (resultModel.Result.Code == "1") { string json = JsonConvert.SerializeObject(resultModel.Result); return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + json + "}"; } else { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + resultModel.Result.Message + "\"}"; } } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 文字语音播报 /// /// /// /// public string payleText(string text, bool ispaye, string callback) { try { if (text.Length > 65535) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":" + "文字太长" + "}"; } if (ispaye) { speech.SpeakAsyncCancelAll(); } else { try { //if (text.Contains("http:")) //{ // DateTime dateTime = DateTime.Now; // string time = DateTime.Now.ToString( // "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); // var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "TempFile"); // FileExt.MakeSureDirExist(dirpath); // var filepath = Path.Combine(dirpath, time); // string path = dirpath + "\\" + time + ".txt"; // WebRequest request = WebRequest.Create(text); // WebResponse response = request.GetResponse(); // using (Stream stream = response.GetResponseStream()) // { // using (FileStream fileStream = new FileStream(path, FileMode.Create)) // { // stream.CopyTo(fileStream); // } // } // response.Close(); // using (StreamReader sr = new StreamReader(path)) // { // text = string.Empty; // string line; // while ((line = sr.ReadLine()) != null) // { // // 处理每一行数据 // text = text + line; // } // } //} text = text.Replace("(", "").Replace(")", "、"); speech.SpeakAsync(text); } catch { } } return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + "" + "}"; } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 发送短信 /// /// /// /// public string SendSSM(string content, string phone, string callback) { try { Task resultModel = deviceCaller.SendSSM(content, phone); if (resultModel.Result.Code == "1") { string json = JsonConvert.SerializeObject(resultModel.Result); return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + json + "}"; } else { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":" + resultModel.Result.Message + "}"; } } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 打开高拍仪并且进行快速扫描文件 /// /// public string openCamera(string url, string callback) { try { string data = hScamera.openCamera2(); if (!string.IsNullOrEmpty(data)) { FileInfo fileInfo = new FileInfo(data); //压缩 string newdata = Util.CompressPictures(fileInfo); //转换 string base64 = Util.ImgToBase64String(newdata); return base64; } else { data = hScamera.openCamera2(); if (!string.IsNullOrEmpty(data)) { FileInfo fileInfo = new FileInfo(data); //压缩 string newdata = Util.CompressPictures(fileInfo); //转换 string base64 = Util.ImgToBase64String(newdata); return base64; } else { return Util.str2Base64("400"); } } } catch (Exception ex) { ////Log.Info("扫描仪异常:" + ex.Message); return Util.str2Base64("400"); } } /// /// 打开签字版数据 /// /// public string OpenSign(string paramsString, string callback) { try { string sourcepaht = Environment.CurrentDirectory + "\\fiveInch.png"; FileInfo fileInfo = new FileInfo(sourcepaht); if (!fileInfo.Exists) { int width = 800; int height = 394; using (Bitmap blankImage = new Bitmap(width, height)) { // 设置图片背景为完全透明 using (Graphics g = Graphics.FromImage(blankImage)) { // 使用白色背景填充图片 g.Clear(Color.Transparent); } // 保存图片到文件系统 blankImage.Save(sourcepaht); } } int ret = SignDll.OpenComDevice(); if (ret == 0) { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "开启签字版成功" + "\"}"; } else { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "开启签字版失败" + "\"}"; } } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 关闭签字版数据 /// /// public string CloseSign(string paramsString, string callback) { try { int ret = SignDll.CloseComDevice(); if (ret == 0) { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "关闭签字版成功" + "\"}"; } else { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "关闭签字版失败" + "\"}"; } } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 获取签字版数据 /// /// public string GetSignData(string url, string callback) { try { string sourcepaht = Environment.CurrentDirectory + "\\fiveInch.png"; FileInfo fileInfo = new FileInfo(sourcepaht); if (fileInfo.Exists) { double size = fileInfo.Length / 1024.0; if (size > 10) { FileStream fs1 = fileInfo.OpenRead(); fs1.Close(); string base64 = Util.ImgToBase64StringSign(sourcepaht); int width = 800; int height = 394; using (Bitmap blankImage = new Bitmap(width, height)) { // 设置图片背景为完全透明 using (Graphics g = Graphics.FromImage(blankImage)) { // 使用白色背景填充图片 g.Clear(Color.Transparent); } // 保存图片到文件系统 blankImage.Save(sourcepaht); } return base64; } else { return Util.str2Base64("400"); } } else { return Util.str2Base64("400"); } } catch (Exception ex) { ////Log.Info("获取签字版数据异常:" + ex.Message); return Util.str2Base64("400"); } } /// /// 根据文件地址在线打印 /// /// /// public string PrintFile(string url, string ext, string callback) { try { PrintDocument fPrintDocument = new PrintDocument(); if (string.IsNullOrEmpty(fPrintDocument.PrinterSettings.PrinterName)) { return "{\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "请求设置默认打印机!" + "\"}"; } Task.Run(async () => { //DateTime dateTime = DateTime.Now; //string time = DateTime.Now.ToString( // "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); //var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "PrintFile"); //FileExt.MakeSureDirExist(dirpath); //var filepath = Path.Combine(dirpath, time); //string path = dirpath + "\\" + time + "." + ext; //WebRequest request = WebRequest.Create(url); //WebResponse response = request.GetResponse(); //using (Stream stream = response.GetResponseStream()) //{ // using (FileStream fileStream = new FileStream(path, FileMode.Create)) // { // stream.CopyTo(fileStream); // } //} //response.Close(); Util.Print2(url, fPrintDocument.PrinterSettings.PrinterName); }); return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "打印成功" + "\"}"; } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 根据文件base64打印 /// /// /// /// public string PrintBase64(string base64, string ext, string callback) { try { PrintDocument fPrintDocument = new PrintDocument(); if (string.IsNullOrEmpty(fPrintDocument.PrinterSettings.PrinterName)) { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "请求设置默认打印机!" + "\"}"; } Task.Run(async () => { DateTime dateTime = DateTime.Now; string time = DateTime.Now.ToString( "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "PrintFile"); FileExt.MakeSureDirExist(dirpath); var filepath = Path.Combine(dirpath, time); string path = dirpath + "\\" + time + "." + ext; byte[] bytes = Convert.FromBase64String(base64); System.IO.FileStream stream = new System.IO.FileStream(path, System.IO.FileMode.CreateNew); System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream); writer.Write(bytes, 0, bytes.Length); writer.Close(); Util.Print2(path, fPrintDocument.PrinterSettings.PrinterName); }); return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "打印成功" + "\"}"; } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 发送com数据 /// /// public string SendMsg(string paramsString, string callback) { try { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "发送com数据" + "\"}"; } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 开始录音 /// /// public string SoundRecording(bool isopen, string url, string callback) { try { Task resultModel = SoundRecor(isopen); if (resultModel.Result.Code == "1") { //结束录音上传文件 if (!string.IsNullOrEmpty(url) && !isopen) { string filename = Path.GetFileName(srpath); string path = ConfigurationManager.AppSettings["rootPath"].ToString() + "Record/" + filename; ////Log.Info("结束录音上传文件" + path); return path; } else if (isopen)//开始录音 { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"wav\",\"data\":\"" + "开始录音" + "\"}"; } else //取消录音 { srpath = string.Empty; return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"suffix\":\"wav\",\"data\":\"" + "取消录音" + "\"}"; } } else { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + resultModel.Result.Message + "\"}"; } } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 获取指纹数据 /// /// public string ReadFingerData(string callback) { try { Task resultModel = deviceCaller.ReadFingerData(); if (resultModel.Result.Code == "1") { string json = JsonConvert.SerializeObject(resultModel.Result); return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":" + json + "}"; } else { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + resultModel.Result.Message + "\"}"; } } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 播放与暂停 /// /// public static NAudio.Wave.WaveOutEvent player = null; public static AudioFileReader audioFileReader = null; public static string WaveOutPath = string.Empty; public string Paly(string url, bool ispaly, string callback) { try { if (ispaly) { if (player == null) { NewMethod(url); if (player != null) { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "音频播放" + "\"}"; } else { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "未发现播放文件" + "\"}"; } } else { if (string.IsNullOrEmpty(url)) { player.Play(); ////Log.Info("恢复播放"); return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "恢复播放" + "\"}"; } else { if (player.PlaybackState == PlaybackState.Playing) { player.Stop(); // 释放资源 player.Dispose(); audioFileReader.Dispose(); } NewMethod(url); if (player != null) { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "音频播放" + "\"}"; } else { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "未发现播放文件" + "\"}"; } } } } else { if (player != null) { if (string.IsNullOrEmpty(url)) { player.Pause(); ////Log.Info("暂停播放"); return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "暂停播放" + "\"}"; } else { player.Stop(); // 释放资源 player.Dispose(); audioFileReader.Dispose(); player = null; File.Delete(WaveOutPath); ////Log.Info("停止播放"); return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "停止播放" + "\"}"; } } else { return "{\"callback\":\"" + callback + "\",\"message\":\"success\",\"code\":\"400\",\"status\":false,\"data\":\"" + "未发现播放文件" + "\"}"; } } } catch (Exception ex) { return "{\"callback\":\"" + callback + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; } } /// /// 播放音频公共方法 /// /// private void NewMethod(string url) { //Uri uri = new Uri(url); ////返回 123.xlsx //var filename = HttpUtility.UrlDecode(uri.Segments.Last()); ////获取文件后缀 //string ext = Path.GetExtension(filename); //DateTime dateTime = DateTime.Now; //string time = DateTime.Now.ToString( // "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); //var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "WaveOutFile"); //FileExt.MakeSureDirExist(dirpath); //var filepath = Path.Combine(dirpath, time); //WebRequest request = WebRequest.Create(url); //WebResponse response = request.GetResponse(); //using (Stream stream = response.GetResponseStream()) //{ // using (FileStream fileStream = new FileStream(WaveOutPath, FileMode.Create)) // { // stream.CopyTo(fileStream); // } //} //response.Close(); WaveOutPath = url; using (player = new WaveOutEvent()) { player.PlaybackStopped += waveOut_PlaybackStopped; using (audioFileReader = new AudioFileReader(WaveOutPath)) { // 创建一个增益效果器对象 var volumeProvider = new VolumeSampleProvider(audioFileReader.ToSampleProvider()); // 将音频文件添加到WaveOutEvent对象中 player.Init(volumeProvider); // 设置音量增益为2倍 volumeProvider.Volume = 2.0f; // 开始播放音频 player.Play(); while (player.PlaybackState == PlaybackState.Playing) { Thread.Sleep(1000); } } } ////Log.Info("开始播放"); } /// /// 播放完成 /// /// /// private void waveOut_PlaybackStopped(object sender, StoppedEventArgs e) { try { player.Stop(); // 释放资源 player.Dispose(); audioFileReader.Dispose(); player = null; File.Delete(WaveOutPath); ////Log.Info("播放完成"); } catch (Exception ex) { ////Log.Info("播放完成,清除本地文件异常" + ex.Message); } } //上传本地文件中转 private string urlP = string.Empty; private AutoResetEvent @event5 = new AutoResetEvent(false); private async void UploadInfoByFile(string url, string strpath) { var httpClient = new HttpClient(); var uploader = new ChunkedUpload(httpClient); urlP = await uploader.UploadFileAsync(url, strpath); File.Delete(strpath); @event5.Set(); } //上传录音 private string urlpath = string.Empty; private AutoResetEvent @event2 = new AutoResetEvent(false); private async void UploadInfo(string url) { var httpClient = new HttpClient(); var uploader = new ChunkedUpload(httpClient); urlpath = await uploader.UploadFileAsync(url, srpath); //File.Delete(srpath); srpath = string.Empty; @event2.Set(); } public static WaveFileWriter writer; public static StreamWriter mStreamWriter; public static WaveInEvent waveIn = null; private string srpath = string.Empty; private AutoResetEvent @event3 = new AutoResetEvent(false); private void StateSoundRecor(bool isopen) { // 录音对象 waveIn = new WaveInEvent(); int sampleRate = 48000; //采样率 int channels = 2; //录音通道数 int bitsPerSample = 16; //位深 WaveFormat waveFormat = new WaveFormat(sampleRate, bitsPerSample, channels); waveIn.WaveFormat = waveFormat; //设置录音格式 DateTime dateTime = DateTime.Now; string time = DateTime.Now.ToString( "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); var dirpath = System.IO.Path.Combine(Environment.CurrentDirectory, "wwwroot", "Record"); FileExt.MakeSureDirExist(dirpath); var filepath = System.IO.Path.Combine(dirpath, time); srpath = dirpath + "\\" + time + ".wav"; string pathfile = dirpath + "\\" + time + ".txt"; // 创建WaveFileWriter对象来保存录音数据 路径在bin文件下 writer = new WaveFileWriter(srpath, waveFormat); //编写器 //mStreamWriter = new StreamWriter(pathfile, false, new System.Text.UTF8Encoding(false)); // 设置录音回调函数 int bitIndex = bitsPerSample / 8; waveIn.DataAvailable += (sender, e) => { // 将录音数据写入文件 writer.Write(e.Buffer, 0, e.BytesRecorded); for (int i = 0; i < e.BytesRecorded / bitIndex; i++) { //24bit,导出的数据 //int sample = (int)((e.Buffer[i * bitIndex + 2] << 16) | (e.Buffer[i * bitIndex + 1] << 8) | e.Buffer[i * bitIndex]); //16bit 将两个byte数据组合成一个short数据 short sample = (short)((e.Buffer[i * bitIndex + 1] << 8) | e.Buffer[i * bitIndex]); //mStreamWriter.Write("{0},", sample); } }; try { //尝试打开录音设备,如果设备支持设置的WaveFormat,则能够成功打开 waveIn.StartRecording(); } catch (Exception ex) { srpath = ""; } //@event3.Set(); } private AutoResetEvent @event4 = new AutoResetEvent(false); private async void StopSoundRecor(bool isopen) { try { //停止录音 waveIn.StopRecording(); waveIn.Dispose(); writer.Close(); //mStreamWriter.Close(); waveIn = null; } catch (Exception ex) { srpath = ""; } //@event4.Set(); } public async Task SoundRecor(bool isopen) { if (isopen) { //如果开始录音上次未结束,直接结束上次录音,开始新的录音 if (waveIn != null) { StopSoundRecor(false); } if (waveIn == null) { Action a = StateSoundRecor; a.Invoke(isopen); //Task.Run(() => //{ // StateSoundRecor(); //}); //@event3.WaitOne(); if (!string.IsNullOrEmpty(srpath)) { return ResultModel.Success(srpath); } else { return ResultModel.Error("录音开启失败"); } } else { return ResultModel.Error("正在录音,请勿重复录音"); } } else { try { if (waveIn != null) { //Task.Run(() => //{ // StopSoundRecor(); //}); //@event4.WaitOne(); Action a = StopSoundRecor; a.Invoke(isopen); if (!string.IsNullOrEmpty(srpath)) { return ResultModel.Success(srpath); } else { return ResultModel.Error("录音停止失败"); } } else { return ResultModel.Error("未开始录音"); } } catch (Exception ex) { return ResultModel.Error(ex.Message); } } } } }