using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Text.RegularExpressions;
using Library;
using System.IO;
using System.Web;
using Microsoft.IdentityModel.Tokens;
using System.Security.Claims;
using System.IdentityModel.Tokens.Jwt;
using System.Text;
using Aop.Api.Util;
namespace MySystem
{
public class PublicFunction
{
#region 中译英
public string TranslateZHToEn(string Source)
{
string result = function.GetWebRequest("http://fanyi.youdao.com/translate?&doctype=json&type=ZH_CN2EN&i=" + Source);
//{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":2,"translateResult":[[{"src":"大事件","tgt":"The big event"}]]}
Match match = Regex.Match(result, "\"tgt\":\".*?\"");
if (match.Success)
{
return match.Value.Replace("\"tgt\":", "").Trim('"');
}
return "";
}
#endregion
#region 解析编辑器里的视频代码
public string CheckMediaFromHtml(string content)
{
if (string.IsNullOrEmpty(content))
{
return "";
}
string result = content;
MatchCollection mc = Regex.Matches(content, "");
foreach (Match submc in mc)
{
string info = submc.Value;
Match match = Regex.Match(info, "src=\".*?\"");
if (match.Success)
{
string path = match.Value;
path = path.Replace("src=\"", "");
path = path.TrimEnd(new char[] { '"' });
string html = "";
string width = "600";
string height = "300";
Match width_match = Regex.Match(info, "width=\".*?\"");
if (width_match.Success)
{
width = width_match.Value.Replace("width=", "").Trim('"');
}
Match height_match = Regex.Match(info, "height=\".*?\"");
if (height_match.Success)
{
height = height_match.Value.Replace("height=", "").Trim('"');
}
if (path.EndsWith(".mp4"))
{
if (string.IsNullOrEmpty(html))
{
html = "";
}
}
else if (path.EndsWith(".mp3"))
{
html = "";
}
result = result.Replace(info, html);
}
}
return result;
}
#endregion
#region 对象转Json字符串
public static string ObjectToJsonString(object obj)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
}
#endregion
#region Json字符串转对象
public static T DeserializeJSON(string json)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject(json);
}
#endregion
#region 删除文件
public static bool DeleteFile(string VirtualPath)
{
string FilePath = function.getPath(VirtualPath);
if (System.IO.File.Exists(FilePath))
{
System.IO.File.Delete(FilePath);
return true;
}
return false;
}
#endregion
#region 两点距离
public static double GetDistanceNumber(string start, string end)
{
if (!string.IsNullOrEmpty(start) && !string.IsNullOrEmpty(end))
{
string[] startpos = start.Split(',');
string[] endpos = end.Split(',');
double lng1 = double.Parse(startpos[0]);
double lat1 = double.Parse(startpos[1]);
double lng2 = double.Parse(endpos[0]);
double lat2 = double.Parse(endpos[1]);
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s;
}
return 10000000;
}
private static double rad(double d)
{
return d * Math.PI / 180.0;
}
private static double EARTH_RADIUS = 6378.137;
#endregion
#region 获取OSS开关
public string GetOssStatus()
{
return "-oss";
}
#endregion
#region 通过表名、文本、值获得字典数据
public Dictionary GetDictionaryByTableName(string tableEnName, string Text, string Value)
{
Text = Text.Split('_')[0];
Value = Value.Split('_')[0];
Dictionary dic = new Dictionary();
DataTable dt = dbconn.dtable("select " + Text + "," + Value + " from " + tableEnName + " order by Sort desc,Id asc");
foreach (DataRow dr in dt.Rows)
{
dic.Add(dr[1].ToString(), dr[0].ToString());
}
return dic;
}
#endregion
#region 接口通用DES解密
public static string DesDecrypt(string content)
{
content = HttpUtility.UrlDecode(content);
return dbconn.DesDecrypt(content, "*ga34|^7");
}
#endregion
#region 获取jwt的token
public static string AppToken(string username)
{
string test = function.get_Random(10);
var securityKey = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(JwtConfig.JwtSecret)), SecurityAlgorithms.HmacSha256);
var claims = new Claim[] {
new Claim(JwtRegisteredClaimNames.Iss, JwtConfig.JwtIss),
new Claim(JwtRegisteredClaimNames.Aud, test),
new Claim("Guid", Guid.NewGuid().ToString("D")),
new Claim(ClaimTypes.Role, "system"),
new Claim(ClaimTypes.Role, "admin"),
};
SecurityToken securityToken = new JwtSecurityToken(
signingCredentials: securityKey,
expires: DateTime.Now.AddDays(10),//过期时间
claims: claims,
audience: test,
issuer: username
);
RedisDbconn.Instance.Set("utoken:" + username, test);
RedisDbconn.Instance.SetExpire("utoken:" + username, 3600 * 24 * 10);
//生成jwt令牌
return new JwtSecurityTokenHandler().WriteToken(securityToken);
}
#endregion
public static decimal NumberFormat(decimal number, int floatCount = 2)
{
string str = number.ToString();
if (str.Contains("."))
{
string[] list = str.Split('.');
if (list[1].Length > floatCount)
{
str = list[0] + "." + list[1].Substring(0, floatCount);
}
}
else
{
str += ".00";
}
return decimal.Parse(str);
}
#region 获取网络文件内容
public static string GetNetFileContent(string url)
{
string textContent = "";
using (var client = new System.Net.WebClient())
{
try
{
textContent = client.DownloadString(url); // 通过 DownloadString 方法获取网页内容
}
catch (Exception ex)
{
function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString() + "\n\n", "获取网络文件内容异常");
}
}
return textContent;
}
public static byte[] GetNetFileData(string url)
{
byte[] textContent = new byte[] { };
using (var client = new System.Net.WebClient())
{
try
{
textContent = client.DownloadData(url); // 通过 DownloadString 方法获取网页内容
}
catch (Exception ex)
{
function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString() + "\n\n", "获取网络文件流异常");
}
}
return textContent;
}
public static FileItem GetNetFileItem(string url)
{
string fileName = url;
if(fileName.Contains("/"))
{
fileName = fileName.Substring(fileName.LastIndexOf("/") + 1);
}
FileItem item = new FileItem(fileName, GetNetFileData(url));
return item;
}
#endregion
}
}