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);
}
}
}
}
}