123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498 |
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using PMS.BusinessModels;
- using PMS.BusinessModels.Account;
- using PMS.Interface;
- using PMS.Interface.SysManager;
- using QWPlatform.SystemLibrary.LogManager;
- using QWPlatform.SystemLibrary.Security;
- using QWPlatform.SystemLibrary.Utils;
- using QWPlatform.SystemLibrary.Web;
- using PMS.BusinessModels.MobileProblem;
- using PMS.BusinessModels.SysManager;
- using System.Web.Http;
- using System.Net.Http;
- using System.Text;
- using Newtonsoft.Json.Linq;
- using PMS.BusinessModels.SMS;
- using System.Web.Script.Serialization;
- using PMS.Interface.Product;
- namespace PMS.WebUI
- {
- public class SysCom
- {
- ICPWTJLModel CPWTJL_obj = InterfaceFactory.CreateBusinessInstance<ICPWTJLModel>();
- //存储每个url 对应的授权码
- private ConcurrentDictionary<string, string> _dictAuthkeys = new ConcurrentDictionary<string, string>();
- //存放token
- private ConcurrentDictionary<string, string> token_cache = new ConcurrentDictionary<string, string>();
- /// <summary>
- /// 创 建 人:王海洋
- /// 创建日期:2018-12-19
- /// 功能描述:系统公共接口
- /// </summary>
- IAccount account_obj = InterfaceFactory.CreateBusinessInstance<IAccount>();
- //配置服务
- ISysConfig sys_config = InterfaceFactory.CreateBusinessInstance<ISysConfig>();
- //附件服务器地址
- private string ftpServerAddress = string.Empty;
-
- //短信服务器地址
- private string SMSServerAddress = string.Empty;
- /// <summary>
- /// 文件地址IP
- /// </summary>
- private string GetFileUrl = string.Empty;
-
- //单例模式
- private static SysCom _obj;
- /// <summary>
- /// 当前实例对象
- /// </summary>
- public static SysCom Instance
- {
- get
- {
- if (_obj == null)
- _obj = new SysCom();
- return _obj;
- }
- }
- /// <summary>
- /// 获取到当前账户的登录信息
- /// </summary>
- /// <returns></returns>
- public UserInfo GetCurrentAccount()
- {
- //判断是否登录或是否用权限,如果有那么就进行相应的操作,否则跳转到登录页或者授权页面
- var userkey = CookiesHelper.GetCookieValue("UserID");
- string s_accountId = "";
- if (!string.IsNullOrEmpty(userkey.Trim()))
- {//获取解密后的用户ID
- s_accountId = DESEncrypt.DesDecrypt(userkey);
- }
- int accountid = 0;
- if (int.TryParse(s_accountId, out accountid))
- {//从业务层读取用户信息
- //var account_objs = new PMS.BusinessService.SysManager.AccountBLLService();
- //return account_objs.GetAccountInfo(accountid);
- return account_obj.GetAccountInfo(accountid);
- }
- return null;
- }
- /// <summary>
- /// 退出登录时清空用户缓存
- /// </summary>
- /// <param name="id">账户ID</param>
- public void ClearAccountCache(int id)
- {
- account_obj.RemoveCacheUser(id);
- }
- #region 文件上传下载(FTP)
- /// <summary>
- /// 上传附件到FTP服务器
- /// </summary>
- /// <param name="filedata">文件内容字节</param>
- /// <param name="fileName">文件名称(不带扩展名)</param>
- /// <param name="filetype"></param>
- /// <returns></returns>
- public FtpUploadResult UploadFileToFtp(byte[] filedata, string fileName, string filetype)
- {
- try
- {
- if (string.IsNullOrEmpty(ftpServerAddress))
- {//如果ftpserv没有获取值,则获取
- ftpServerAddress = System.Configuration.ConfigurationManager.AppSettings["ftpServer"];
- }
- var objs = new List<object>();
- objs.Add(filedata);
- objs.Add(fileName);
- objs.Add(filetype);
- var r = QWPlatform.SystemLibrary.Service.DynamicCallWebService.InvokeWebService(ftpServerAddress, "", "upload", objs.ToArray());
- //判断上传是否成功
- var rstr = r.ToString();
- return Strings.JsonToModel<FtpUploadResult>(rstr);
- }
- catch (Exception ex)
- {
- Logger.Instance.Error("文件上传到FTP服务异常,fileName:" + fileName, ex);
- return null;
- }
- }
- /// <summary>
- /// 获取FTP文件的url
- /// </summary>
- /// <param name="fileId">多个文件逗号隔开</param>
- /// <param name="filetype"></param>
- /// <returns></returns>
- public FtpUrlResult GetFtpUrl( string fileId, string filetype)
- {
- try
- {
- if (string.IsNullOrEmpty(ftpServerAddress))
- {//如果ftpserv没有获取值,则获取
- ftpServerAddress = System.Configuration.ConfigurationManager.AppSettings["ftpServer"];
-
- }
- var objs = new List<object>();
- objs.Add(fileId);
- objs.Add(filetype);
- var r = QWPlatform.SystemLibrary.Service.DynamicCallWebService.InvokeWebService(ftpServerAddress, "", "GetFileUrl", objs.ToArray());
- //判断上传是否成功
- var rstr = r.ToString();
- return Strings.JsonToModel<FtpUrlResult>(rstr);
- }
- catch (Exception ex)
- {
- Logger.Instance.Error("获取文件地址,FTP服务异常,fileName:" + fileId, ex);
- return null;
- }
- }
- /// <summary>
- /// 返回文件字节内容
- /// </summary>
- /// <param name="fileId">文件ID</param>
- /// <param name="imageType">o原图,s缩略图,m大图</param>
- /// <returns>文件的具体内容</returns>
- public byte[] DownloadFileBytesFromFtp(string fileId, string imageType)
- {
- try
- {
- if (string.IsNullOrEmpty(ftpServerAddress))
- {//如果ftpserv没有获取值,则获取
- ftpServerAddress = System.Configuration.ConfigurationManager.AppSettings["ftpServer"];
- }
- string[] arr = { fileId, imageType };
- var r = QWPlatform.SystemLibrary.Service.DynamicCallWebService.InvokeWebService(ftpServerAddress, "", "getNewFileData", arr);
- if (r != null)
- {
- return r as byte[];
- }
- return null;
- }
- catch (Exception ex)
- {
- Logger.Instance.Error("从FTP服务获取文件内容异常,文件ID:" + fileId, ex);
- return null;
- }
- }
- /// <summary>
- /// 下载文件,返回对象
- /// </summary>
- /// <param name="fileId">文件ID</param>
- /// <param name="imageType">o原图,s缩略图,m大图</param>
- /// <returns>返回一个对象结果</returns>
- public FtpDownloadResult DownloadFileBase64FromFtp(string fileId, string imageType)
- {
- try
- {
- if (string.IsNullOrEmpty(ftpServerAddress))
- {//如果ftpserv没有获取值,则获取
- GetFileUrl = System.Configuration.ConfigurationManager.AppSettings["GetFileUrl"];
- }
- string[] arr = { fileId, imageType };
- var r = QWPlatform.SystemLibrary.Service.DynamicCallWebService.InvokeWebService(ftpServerAddress, "", "getNewBase64File", arr);
- if (r != null)
- {
-
- return Strings.JsonToModel<FtpDownloadResult>(r.ToString());
- }
- return null;
- }
- catch (Exception ex)
- {
- Logger.Instance.Error("从FTP服务获取文件内容异常,文件ID:" + fileId, ex);
- return null;
- }
- }
- #endregion
- //调用家医必须使用的授权码
- public string ZlsoftAppServiceAuthkey(string url)
- {
- var authkey = "";
- if (!string.IsNullOrEmpty(url))
- {
- if (_dictAuthkeys.ContainsKey(url))
- { //缓存获取
- _dictAuthkeys.TryGetValue(url, out authkey);
- }
- else
- {//重新生成一个新的key
- if (url.IndexOf("://") >= 0)
- {
- var beginIndex = url.IndexOf("://") + 3;
- url = url.Substring(beginIndex, url.Length - beginIndex);
- }
- if (url.IndexOf("/Services") >= 0)
- url = url.Substring(0, url.IndexOf("/Services"));
- authkey = "zlsoft_" + DESEncrypt.DesEncrypt(url + "?source=062");
- //添加到缓存中
- _dictAuthkeys.TryAdd(url, authkey);
- }
- }
- return authkey;
- }
- #region 短信验证码
- /// <summary>
- ///短信验证【阿里云短信】
- /// </summary>
- /// <param name="requestJObject"></param>
- /// <returns></returns>
- [HttpPost]
- public string ZlsoftAppSms(string phone)
- {
- try
- {
- var token = "";
- var client = new HttpClient();
- client.DefaultRequestHeaders.Add("AccessKeyId", "6BCF42181F4F3818571D72D0C93F515E");
- client.DefaultRequestHeaders.Add("AccessKeySecret", "960F4DB5EBD5C8445E6A8CE5FB6423DF");
- var url = string.Format("https://www.fdisp.cn:4433/api/WebApi/SystemAPI/GetAccessToken?siteid={0}&sms_account={1}&sms_password={2}", "11", "0dbc7eadde335d4b22d8799d5cb91b475aa01", "0F4D624DD8058583CCA2F635D4BB0EB9");
- var content = new StringContent("", Encoding.UTF8, "text/json");
- //判断缓存中是否有值
- if (token_cache.ContainsKey("vcode"))
- {
- //缓存获取
- token_cache.TryGetValue("vcode", out token);
- string[] tokentime = token.Split('|');
- var time1 = Convert.ToDateTime(tokentime[1]);
- var time2 = Convert.ToDateTime(CPWTJL_obj.GetDatabaseTime().ToString());
- TimeSpan ts = time2 - time1;
- if (ts.TotalHours < 2)
- {
- token = tokentime[0];
- }
- else
- {
- //重新生成一个新的token
- var result = client.PostAsync(url, content).Result.Content.ReadAsStringAsync().Result;
- JObject jObject = JObject.Parse(result);
- if (jObject["code"].ToString() == "100")
- {
- token = jObject["data"].ToString();
- }
- else
- {
- return null;
- }
- //添加到缓存中
- string time = CPWTJL_obj.GetDatabaseTime().ToString();
- token_cache.TryAdd("vcode", token + "|" + time);
- }
- }
- else
- {
- //重新生成一个新的token
- var result = client.PostAsync(url, content).Result.Content.ReadAsStringAsync().Result;
- JObject jObject = JObject.Parse(result);
- if (jObject["code"].ToString() == "100")
- {
- token = jObject["data"].ToString();
- }
- else
- {
- return null;
- }
- //添加到缓存中
- string time = CPWTJL_obj.GetDatabaseTime().ToString();
- token_cache.TryAdd("vcode", token + "|" + time);
- }
- var smsurl = string.Format("https://www.fdisp.cn:4433/api/WebApi/SystemAPI/SendingSMS");
- client.DefaultRequestHeaders.Add("token", token);
- //签名参数字符串
- SMSBusinessModel sms = new SMSBusinessModel();
- smstemplate smstemp = new smstemplate();
- smstemp.code = Str();
- sms.noncestr = Guid.NewGuid().ToString();
- sms.timestamp = GetUnixTime(CPWTJL_obj.GetDatabaseTime()).ToString();
- sms.phone_numbers = phone;
- sms.template_code = "SMS_134210153";
- sms.paramates = smstemp;//验证码
- sms.sign_name = "筷子家医";
- sms.org_id = "9630";//机构id
- sms.sms_account = "0dbc7eadde335d4b22d8799d5cb91b475aa01";//账号
- sms.sms_password = "0F4D624DD8058583CCA2F635D4BB0EB9";//密码
- SmsBaseBuinessModel baseSMS = new SmsBaseBuinessModel();
- baseSMS.send_type = 1;
- baseSMS.source_mode = 4;
- baseSMS.siteid = "11";
- baseSMS.sign_parm_string = sms.ToJson();//数字签名字符串
- baseSMS.sign_string = GetSHA1(Transform(baseSMS.sign_parm_string));//签名参数字符串
- var incontent = baseSMS.ToJson().Replace("\\\\\\", "\\").Replace("\\\\", "\\").Replace("\\r\\n", "").Replace(" ", "");
- incontent = incontent.Replace("\\r\\n", "");
- content = new StringContent(incontent, Encoding.UTF8, "text/json");
- var state = client.PostAsync(smsurl, content).Result.Content.ReadAsStringAsync().Result;
- SmsErrorBuinessModel errorModel = Strings.JsonToModel<SmsErrorBuinessModel>(state);
- if (errorModel.code == 100)
- {
- return smstemp.code;
- }
- else
- {
- Logger.Instance.Error(errorModel.errormessage);
- }
- return null;
- }
- catch (Exception ex)
- {
- Logger.Instance.Error("调用ZlsoftAppSms时发生异常错误", ex);
- return null;
- }
- }
- private string Transform(string sign)
- {
- JavaScriptSerializer serializer = new JavaScriptSerializer();
- Dictionary<string, object> obj = (Dictionary<string, object>)serializer.DeserializeObject(sign);
- var parameters = obj.ToString();
- return parameters;
- }
- public bool CheckSign(string sign_parm_string, string signign_string, ref string msg)
- {
- JavaScriptSerializer serializer = new JavaScriptSerializer();
- Dictionary<string, object> obj = (Dictionary<string, object>)serializer.DeserializeObject(sign_parm_string);
- var parameters = obj;
- //var parameters = Tools.JsonToDictionary(sign_parm_string);
- var Sha1String = parameters.ToString();
- if (GetSHA1(Sha1String) == signign_string)
- {
- return true;
- }
- else
- {
- msg = "签名错误!";
- return false;
- }
- }
- //签名字符串
- public static string GetSHA1(string strSource)
- {
- string strResult = "";
- //Create
- System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create();
- byte[] bytResult = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource));
- for (int i = 0; i < bytResult.Length; i++)
- {
- strResult = strResult + bytResult[i].ToString("X2");
- }
- return strResult;
- }
- /// <summary>
- /// 获取时间戳
- /// </summary>
- /// <param name="nowTime">当前时间</param>
- /// <returns>时间戳(type:long)</returns>
- static long GetUnixTime(DateTime nowTime)
- {
- DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0, 0));
- return (long)Math.Round((nowTime - startTime).TotalSeconds, MidpointRounding.AwayFromZero);
- }
- /// <summary>
- /// 生成随机字母与数字
- /// </summary>
- /// <param name="Length">生成长度</param>
- /// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
- public static string Str()
- {
- System.Threading.Thread.Sleep(3);
- char[] Pattern = new char[]
- {
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
- 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
- };
- string result = "";
- int n = Pattern.Length;
- System.Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
- for (int i = 0; i < 4; i++)
- {
- int rnd = random.Next(0, n);
- result += Pattern[rnd];
- }
- return result;
- }
- #endregion
- /// <summary>
- /// 短信发送接口
- /// </summary>
- /// <param name="telephone"></param>
- /// <param name="code"></param>
- /// <returns></returns>
- public bool ZLsoftSMSCodeSend(string telephone,string code)
- {
- try
- {
- if (string.IsNullOrEmpty(SMSServerAddress))
- {//如果SMSServerAddress没有获取值,则获取
- SMSServerAddress = System.Configuration.ConfigurationManager.AppSettings["SMSServer"];
- }
- TelephoneMessegeModel MessegeModel = new TelephoneMessegeModel();
- MessegeModel.PhoneNumbers = telephone;
- Dictionary<string, string> param = new Dictionary<string, string>();
- param.Add("code", code);
- MessegeModel.Paramates = param;
- MessegeModel.TemplateCode = "SMS_134210153";
- MessegeModel.SignName = "";
- var objs = new List<object>();
- objs.Add("zlsoft");
- objs.Add("zlsoft2018");
- objs.Add(Strings.ObjectToJson(MessegeModel));
- objs.Add("2017");
- var r = QWPlatform.SystemLibrary.Service.DynamicCallWebService.InvokeWebService(SMSServerAddress, "", "SendAliSMS", objs.ToArray(), ZlsoftAppServiceAuthkey(SMSServerAddress));
- return Convert.ToBoolean(r);
- }
- catch (Exception ex)
- {
- Logger.Instance.Error("短信发送接口错误", ex);
- return false;
- }
- }
- /// <summary>
- /// 获取邮件服务器的配置
- /// </summary>
- /// <returns>返回配置信息</returns>
- public emailConfig GetSysEmailConfig()
- {
- return sys_config.GetEmailConfig();
- }
- }
- }
|