2025-03-28 09:49:56 +08:00

1240 lines
50 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.DirectoryServices;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.ComponentModel;
namespace WebService.SDK
{
public class CommonHelper
{
#region ->
public enum ResCode
{
= 100,
= 101,
= 102,
= 103,
= 104,
= 105,
= 106,
= 201,
= 202,
= 203,
, = 204,
= 205,
= 206,
= 300,
退 = 301,
= 302,
= 303,
= 304,
= 305,
= 999
}
public enum ResCode_Check
{
= 100,
= 101,
= 201,
退 = 300,
= 301,
= 302,
= 303,
= 304,
= 999
}
/// <summary>
/// 移动支付提供商
/// </summary>
public enum MobilePayOperators
{
/// <summary>
/// 测试渠道
/// </summary>
[Description("测试渠道")]
ceshi = 1000,
/// <summary>
/// 富友
/// </summary>
[Description("富友")]
fuiou = 1001,
/// <summary>
/// 众码付
/// </summary>
[Description("众码付")]
zhongmapay = 1002,
/// <summary>
/// 威付通
/// </summary>
[Description("威付通")]
swiftpass = 1003,
/// <summary>
/// 付付
/// </summary>
[Description("付付")]
ffdzpay = 1004,
/// <summary>
/// 客无忧
/// </summary>
[Description("客无忧")]
kwypay = 1005,
/// <summary>
/// 通联支付
/// </summary>
[Description("通联支付")]
allinpay = 1006,
/// <summary>
/// 银联支付
/// </summary>
[Description("银联支付")]
unionpay = 1007,
/// <summary>
/// 联动优势
/// </summary>
[Description("联动优势")]
irichpay = 1008,
/// <summary>
/// 建设银行
/// </summary>
[Description("建设银行")]
ccbpay = 1009,
/// <summary>
/// 贵州农信
/// </summary>
[Description("贵州农信")]
gznxpay = 1010,
/// <summary>
/// 工商银行
/// </summary>
[Description("工商银行")]
icbcpay = 1011,
/// <summary>
/// 重庆嗨客
/// </summary>
[Description("重庆嗨客")]
uphicoo = 1012
}
/// <summary>
/// 合作商户
/// </summary>
public enum Coop_Merchant
{
/// <summary>
/// 海鼎
/// </summary>
[Description("海鼎")]
heading = 1001
}
#endregion
#region ->
public static string GetResult_Code(string trade_state)
{
switch (trade_state)
{
case "SUCCESS":
return "100";
case "REFUND":
return "100";
case "USERPAYING":
return "101";
case "NOTPAY":
return "302";
case "CLOSED":
return "303";
case "REVOKED":
return "304";
case "PAYERROR":
return "305";
default:
return "参数错误";
}
}
public static string get_reqmsg(string resstring)
{
switch (resstring)
{
case "0":
return "未支付";
case "1":
return "SUCCESS";
case "2":
return "支付失败";
case "3":
return "已退款";
default:
return "参数错误";
}
}
public static string get_refundreqmsg(string resstring)
{
switch (resstring)
{
case "1":
return "创建订单";
case "2":
return "下单成功";
case "3":
return "下单失败";
case "4":
return "支付成功";
case "5":
return "支付失败";
case "6":
return "退款";
default:
return "参数错误";
}
}
public static string GetPayType(string PayType)
{
switch (PayType.ToUpper())
{
case "ALIPAY":
return "支付宝";
case "WECHAT":
return "微信";
case "JDPAY":
return "京东";
case "QQPAY":
return "QQ钱包";
case "UNIONPAY":
return "银联";
case "BESTPAY":
return "翼支付";
default:
return "";
}
}
#endregion
#region -> IP地址格式
/// <summary>
/// 检查IP地址格式
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static bool IsIP(string ip)
{
return System.Text.RegularExpressions.Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
}
#endregion
#region -> DataTable相关
/// <summary>
/// 获取列名
/// </summary>
/// <param name="Table"></param>
/// <returns></returns>
public static string SqlColumns(DataTable Table)
{
string _Columnsstr = "";
foreach (DataColumn col in Table.Columns)
{
_Columnsstr += (_Columnsstr == "" ? col.ColumnName : "," + col.ColumnName);
}
return _Columnsstr;
}
/// <summary>
/// 获取行值
/// </summary>
/// <param name="Table"></param>
/// <param name="Row"></param>
/// <returns></returns>
public static string SqlValues(DataTable Table, DataRow Row)
{
string _valuesstr = "";
for (int i = 0; i < Table.Columns.Count; i++)
{
if (Table.Columns[i].DataType.ToString() == "System.Decimal")
{
_valuesstr += _valuesstr == "" ? (Row[Table.Columns[i]].ToString() == "" ? "NULL" : Row[Table.Columns[i]].ToString()) : "," +
(Row[Table.Columns[i]].ToString() == "" ? "NULL" : Row[Table.Columns[i]].ToString());
}
else if (Table.Columns[i].DataType.ToString() == "System.DateTime")
{
_valuesstr += _valuesstr == "" ? (Row[Table.Columns[i]].ToString() == "" ? "NULL" : "TO_DATE('" + Row[Table.Columns[i]].ToString() +
"','YYYY/MM/DD HH24:MI:SS')") : "," + (Row[Table.Columns[i]].ToString() == "" ? "NULL" : "TO_DATE('" +
Row[Table.Columns[i]].ToString() + "','YYYY/MM/DD HH24:MI:SS')");
}
else
{
try
{
DateTime.Parse(Row[Table.Columns[i]].ToString());
_valuesstr += _valuesstr == "" ? (Row[Table.Columns[i]].ToString() == "" ? "NULL" : "TO_DATE('" + Row[Table.Columns[i]].ToString() +
"','YYYY/MM/DD HH24:MI:SS')") : "," + (Row[Table.Columns[i]].ToString() == "" ? "NULL" : "TO_DATE('" +
Row[Table.Columns[i]].ToString() + "','YYYY/MM/DD HH24:MI:SS')");
}
catch
{
_valuesstr += _valuesstr == "" ? (Row[Table.Columns[i]].ToString() == "" ? "NULL" : "'" + Row[Table.Columns[i]].ToString()) + "'" :
"," + (Row[Table.Columns[i]].ToString() == "" ? "NULL" : "'" + Row[Table.Columns[i]].ToString() + "'");
}
}
}
return _valuesstr;
}
/// <summary>
/// 转换DataTable字段类型
/// </summary>
/// <param name="table"></param>
/// <returns></returns>
public static DataTable ConvertOraclTableToDoNetTable(DataTable table)
{
DataTable dt = new DataTable();
foreach (DataColumn dc in table.Columns)
{
DataColumn column = new DataColumn();
column.DataType = GetDataType(dc.DataType);
column.ColumnName = dc.ColumnName;
column.Caption = dc.Caption;
dt.Columns.Add(column);
}
dt.TableName = table.TableName;
dt.Merge(table, false, MissingSchemaAction.Ignore);
return dt;
}
/// <summary>
/// 字段类型
/// </summary>
/// <param name="dataType"></param>
/// <returns></returns>
public static Type GetDataType(Type dataType)
{
switch (dataType.ToString())
{
case "System.Double":
return System.Type.GetType("System.Decimal");
case "System.Int32":
return System.Type.GetType("System.Decimal");
case "System.Int16":
return System.Type.GetType("System.Decimal");
case "System.Int64":
return System.Type.GetType("System.Decimal");
default:
return dataType;
}
}
#endregion
#region ->
public static void StartToSend(string AppID, string AppSecret, string SendType, string access_token,
DataTable RTWECHATPUSHList, string PUSHMODULE, DataTable _DataTable = null, string Order_Type = "")
{
string result = "", postDataStr = "", ErrorString = "", url = "", NowTime = DateTime.Now.ToString();
try
{
if (_DataTable.Rows.Count > 0)
{
foreach (DataRow _RTWECHATPUSH in RTWECHATPUSHList.Rows)
{
switch (SendType)
{
case "Checkout_Success":
postDataStr = GetJsonString(SendType, _RTWECHATPUSH["WECHAT_OPENID"].ToString(),
"http://cloud.eshangtech.com:8000/chengKe/index.html?TICKET_CODE=" +
_DataTable.Rows[0]["TICKET_CODE"].ToString(),
_RTWECHATPUSH, PUSHMODULE, _DataTable, _DataTable.Rows[0], Order_Type);
break;
case "NewOrder":
postDataStr = GetJsonString(SendType, _RTWECHATPUSH["WECHAT_OPENID"].ToString(),
"http://cloud.eshangtech.com:8000/chengKe_vip/index.html?TICKET_CODE=" +
_DataTable.Rows[0]["PURCHASE_DESC"].ToString(),
_RTWECHATPUSH, PUSHMODULE, _DataTable, _DataTable.Rows[0], Order_Type);
break;
}
try
{
url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
result = HttpPost(url, postDataStr);
}
catch (Exception ex)
{
LogHelper.WriteReceiveLog(ex.Message);
}
JObject _JObject = (JObject)JsonConvert.DeserializeObject(result);
if (_JObject["errcode"].ToString() != "0")
{
string _Message = "";
_Message = "错误代码:" + _JObject["errcode"].ToString() +
",错误原因:" + _JObject["errmsg"].ToString();
LogHelper.WriteSendLog(_Message);
if (_JObject["errcode"].ToString() == "40001")
{
GetAccess(AppID, AppSecret);
try
{
url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
result = HttpPost(url, postDataStr);
}
catch (Exception ex)
{
LogHelper.WriteReceiveLog(ex.Message);
}
_JObject = (JObject)JsonConvert.DeserializeObject(result);
if (_JObject["errcode"].ToString() != "0")
{
ErrorString += (ErrorString == "" ? "" : ",") + _RTWECHATPUSH["USER_NAME"].ToString();
_Message = "错误代码:" + _JObject["errcode"].ToString() +
",错误原因:" + _JObject["errmsg"].ToString();
LogHelper.WriteReceiveLog(_Message);
}
else
{
break;
}
}
else
{
ErrorString += (ErrorString == "" ? "" : ",") + _RTWECHATPUSH["USER_NAME"].ToString();
}
}
}
switch (SendType)
{
case "Checkout_Success":
if (ErrorString == "" && _DataTable.Rows.Count > 0)
{
LogHelper.WriteSendLog("订单付款成功通知发送成功!");
LogHelper.DeleteFiles("日志_Send*.log");
}
else if (ErrorString != "")
{
LogHelper.WriteSendLog("以下用户:" + ErrorString + "订单付款成功通知发送失败!");
}
break;
case "NewOrder":
if (ErrorString == "" && _DataTable.Rows.Count > 0)
{
LogHelper.WriteSendLog("新订单通知发送成功!");
LogHelper.DeleteFiles("日志_Send*.log");
}
else if (ErrorString != "")
{
LogHelper.WriteSendLog("以下用户:" + ErrorString + "新订单通知发送失败!");
}
break;
}
}
}
catch (Exception ex)
{
LogHelper.WriteSendLog(ex.Message);
}
}
#endregion
#region -> Get方式获取参数
public static string HttpPost(string Url, string postDataStr)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(postDataStr);
writer.Flush();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string encoding = response.ContentEncoding;
if (encoding == null || encoding.Length < 1)
{
encoding = "UTF-8"; //默认编码
}
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
string retString = reader.ReadToEnd();
return retString;
}
#endregion
#region ->
public static string GetAccess(string AppID, string AppSecret)
{
string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" +
AppID + "&secret=" + AppSecret;
//根据url创建HttpWebRequest对象
HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
objRequest.Method = "get";
//读取服务器返回信息
HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
//using作为语句用于定义一个范围在此范围的末尾将释放对象
using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
{
//ReadToEnd适用于小文件的读取一次性的返回整个文件
JObject _JObject = (JObject)JsonConvert.DeserializeObject(sr.ReadToEnd());
try
{
string access_token = _JObject["access_token"].ToString(),
LastTime = _JObject["expires_in"].ToString();
return access_token;
}
catch (Exception ex)
{
LogHelper.WriteReceiveLog(ex.Message);
string Message = "错误代码:" + _JObject["errcode"].ToString() + ",错误原因:" + _JObject["errmsg"].ToString();
LogHelper.WriteReceiveLog(Message);
return "";
}
finally
{
sr.Close();
}
}
}
#endregion
#region -> json数据
public static string GetJsonString(string SendType, string openid, string url,
DataRow RTWECHATPUSH, string PUSHMODULE, DataTable _DataTable, DataRow _DataRow, string Order_Type = "")
{
string result = "", data = "", dataString = "";
switch (SendType)
{
#region
case "Checkout_Success":
//首行内容
data += "\"first\": {\"value\":\"" + (string.IsNullOrEmpty(RTWECHATPUSH["PUSH_TITLE"].ToString()) ?
(RTWECHATPUSH["USER_NAME"].ToString() == "" ? "" : RTWECHATPUSH["USER_NAME"].ToString() + ",您已下单成功!\\n") :
RTWECHATPUSH["PUSH_TITLE"].ToString() + "\\n") + "\",\"color\":\"#fc6e4b\"},";
//固定内容
data += "\"keyword1\": {\"value\":\"" + _DataRow["TICKET_CODE"].ToString() + "\",\"color\":\"#173177\"},";
data += "\"keyword2\": {\"value\":\"" + _DataRow["CONSUMPTIONRECORD_DATE"].ToString() + "\",\"color\":\"#173177\"},";
data += "\"keyword3\": {\"value\":\"" + _DataRow["CONSUME_PRICE"].ToString() + "\",\"color\":\"#173177\"},";
data += "\"keyword4\": {\"value\":\"" + Order_Type + "\",\"color\":\"#173177\"},";
if (string.IsNullOrEmpty(RTWECHATPUSH["PUSH_LASTCONTENT"].ToString()))
{
dataString = "\\n您的商品正在为你火速配货并马不停蹄地向你赶来请耐心等待...";
}
else
{
dataString = "\\n" + RTWECHATPUSH["PUSH_LASTCONTENT"].ToString();
}
data += "\"remark\": {\"value\":\"" + dataString + "\",\"color\":\"#fc6e4b\"}";
result += "{\"touser\":\"" + openid + "\",\"template_id\":\"" + PUSHMODULE +
"\",\"url\":\"" + url + "\",\"data\":{";
break;
#endregion
#region
case "NewOrder":
//首行内容
data += "\"first\": {\"value\":\"" + (string.IsNullOrEmpty(RTWECHATPUSH["PUSH_TITLE"].ToString()) ?
(RTWECHATPUSH["USER_NAME"].ToString() == "" ? "" : RTWECHATPUSH["USER_NAME"].ToString() +
",您的店铺有新订单产生!\\n") : RTWECHATPUSH["PUSH_TITLE"].ToString() + "\\n") + "\",\"color\":\"#fc6e4b\"},";
//固定内容
data += "\"keyword1\": {\"value\":\"" + _DataRow["SERVERPARTSHOP_NAME"].ToString() + "\",\"color\":\"#173177\"},";
data += "\"keyword2\": {\"value\":\"" + (_DataTable.Rows.Count == 1 ? _DataRow["COMMODITY_NAME"].ToString() :
_DataRow["COMMODITY_NAME"].ToString() + "等共" + _DataRow["RECORD_COUNT"].ToString() + "种商品") +
"\",\"color\":\"#173177\"},";
data += "\"keyword3\": {\"value\":\"" + _DataRow["RESERVE_DATE"].ToString() + "\",\"color\":\"#173177\"},";
data += "\"keyword4\": {\"value\":\"" + _DataRow["PURCHASE_TOTALPRICE"].ToString() + "\",\"color\":\"#173177\"},";
data += "\"keyword5\": {\"value\":\"已付款\",\"color\":\"#173177\"},";
if (string.IsNullOrEmpty(RTWECHATPUSH["PUSH_LASTCONTENT"].ToString()))
{
dataString = "\\n呼叫~呼叫~有新的订单到~需要尽快配送...";
}
else
{
dataString = "\\n" + RTWECHATPUSH["PUSH_LASTCONTENT"].ToString();
}
data += "\"remark\": {\"value\":\"" + dataString + "\",\"color\":\"#fc6e4b\"}";
result += "{\"touser\":\"" + openid + "\",\"template_id\":\"" + PUSHMODULE +
"\",\"url\":\"" + url + "\",\"data\":{";
break;
#endregion
}
return result + data + "}}";
}
#endregion
#region ->
/// <summary>
/// 通用对象
/// </summary>
/// <param name="ResultCode">返回结果</param>
/// <param name="FirstParameter">参数1</param>
/// <param name="SecondParameter">参数2</param>
/// <param name="ThirdParameter">参数3</param>
/// <param name="FourthParameter">参数4</param>
/// <param name="FifthParameter">参数5</param>
/// <param name="ResultDesc">备注信息</param>
public class ResultObject
{
public string ResultCode
{
get;
set;
}
public string FirstParameter
{
get;
set;
}
public string SecondParameter
{
get;
set;
}
public string ThirdParameter
{
get;
set;
}
public string FourthParameter
{
get;
set;
}
public string FifthParameter
{
get;
set;
}
public string ResultDesc
{
get;
set;
}
}
#endregion
#region ->
public static void SaveTextFile(string LogName, string LogData, int Type = 0)
{
//LogData = DateTime.Now.ToLongTimeString() + ":" + LogData;
if (string.IsNullOrEmpty(LogName))
{
LogName = "日志_Send" + System.DateTime.Now.Year.ToString() + "-" + System.DateTime.Now.Month.ToString() +
"-" + System.DateTime.Now.Day.ToString() + ".log";
}
string filename = Type == 1 ? LogName : System.AppDomain.CurrentDomain.BaseDirectory + "\\" + LogName;
FileStream fs = new FileStream(filename, FileMode.OpenOrCreate);
fs.Seek(0, SeekOrigin.End);
if (!string.IsNullOrEmpty(LogData))
{
byte[] _data = new UTF8Encoding().GetBytes(LogData + "\r\n");
fs.Write(_data, 0, _data.Length);
}
fs.Flush();
fs.Close();
}
#endregion
#region ->
/// <summary>
/// 获取指定端口的站点名称及物理路径
/// </summary>
/// <param name="PortNum">站点端口</param>
/// <returns></returns>
public static Hashtable GetWebPathAndWebName(string PortNum)
{
Hashtable ht = new Hashtable();
Regex regex = new Regex(PortNum);
string tmpStr;
DirectoryEntry rootIISEntry = new DirectoryEntry("IIS://localhost/w3svc");
foreach (DirectoryEntry entry in rootIISEntry.Children)
{
if (entry.SchemaClassName == "IIsWebServer")
{
if (entry.Properties["ServerBindings"].Value != null)
{
tmpStr = entry.Properties["ServerBindings"].Value.ToString();
if (regex.Match(tmpStr).Success)
{
ht.Add("name", entry.Properties["ServerComment"].Value.ToString());
ht.Add("path", GetWebsitePhysicalPath(entry));
break;
}
}
}
}
return ht;
}
#endregion
#region ->
/// <summary>
/// 得到网站的物理路径
/// </summary>
/// <param name="rootEntry">网站节点</param>
/// <returns></returns>
public static string GetWebsitePhysicalPath(DirectoryEntry rootEntry)
{
string physicalPath = "";
foreach (DirectoryEntry childEntry in rootEntry.Children)
{
if ((childEntry.SchemaClassName == "IIsWebVirtualDir") && (childEntry.Name.ToLower() == "root"))
{
if (childEntry.Properties["Path"].Value != null)
{
physicalPath = childEntry.Properties["Path"].Value.ToString();
}
else
{
physicalPath = "";
}
}
}
return physicalPath;
}
#endregion
#region -> HttpUrlPost
/// <summary>
/// 通过POST方式进行HTTP请求
/// </summary>
/// <param name="str">发送的数据</param>
/// <param name="RequestUrl">请求地址</param>
/// <returns></returns>
public static string HttpUrlPost(string str, string RequestUrl)
{
string res = HttpUrlPost(str, RequestUrl, "application/x-www-form-urlencoded");
return res;
}
/// <summary>
/// 通过POST方式进行HTTP请求
/// </summary>
/// <param name="str">发送的数据</param>
/// <param name="RequestUrl">请求地址</param>
/// <param name="ContentType">HTTP标头类型</param>
/// <returns></returns>
public static string HttpUrlPost(string str, string RequestUrl, string ContentType)
{
string res = HttpUrlPost(str, RequestUrl, ContentType, 0);
return res;
}
/// <summary>
/// 通过POST方式进行HTTP请求
/// </summary>
/// <param name="str">发送的数据</param>
/// <param name="RequestUrl">请求地址</param>
/// <param name="ContentType">HTTP标头类型</param>
/// <param name="timeout">超时时间</param>
/// <returns></returns>
public static string HttpUrlPost(string str, string RequestUrl, string ContentType, int timeout)
{
string res = HttpUrlPost(str, RequestUrl, ContentType, timeout, Encoding.UTF8);
return res;
}
/// <summary>
/// 通过POST方式进行HTTP请求
/// </summary>
/// <param name="str">发送的数据</param>
/// <param name="RequestUrl">请求地址</param>
/// <param name="ContentType">HTTP标头类型</param>
/// <param name="timeout">超时时间</param>
/// <param name="encoding">字符编码类型</param>
/// <returns></returns>
public static string HttpUrlPost(string str, string RequestUrl, string ContentType, int timeout, Encoding encoding)
{
string res = HttpUrlPost(str, RequestUrl, ContentType, timeout, encoding, true);
return res;
}
/// <summary>
/// 通过POST方式进行HTTP请求
/// </summary>
/// <param name="str">发送的数据</param>
/// <param name="RequestUrl">请求地址</param>
/// <param name="ContentType">HTTP标头类型</param>
/// <param name="timeout">超时时间</param>
/// <param name="encoding">字符编码类型</param>
/// <param name="expect100Continue">是否使用Expect:100-Continue
/// 调用Java服务接口报500错误时请传false</param>
/// <returns></returns>
public static string HttpUrlPost(string str, string RequestUrl, string ContentType, int timeout, Encoding encoding, bool expect100Continue)
{
try
{
System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
byte[] postBytes = encoding.GetBytes(str);
// 设置提交的相关参数
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
| SecurityProtocolType.Tls
| (SecurityProtocolType)0x300 //Tls11
| (SecurityProtocolType)0xC00; //Tls12
System.Net.HttpWebRequest request = System.Net.WebRequest.Create(RequestUrl) as System.Net.HttpWebRequest;
if (timeout > 0)
{
request.Timeout = timeout * 1000;
}
request.ServicePoint.Expect100Continue = expect100Continue;
request.Method = "POST";
request.KeepAlive = false;
request.ContentType = ContentType;
request.CookieContainer = cookieContainer;
request.ContentLength = postBytes.Length;
using (System.IO.Stream reqStream = request.GetRequestStream())
{
//LogHelper.WriteSendLog("==开始写数据==");
reqStream.Write(postBytes, 0, postBytes.Length);
//LogHelper.WriteSendLog("==写入完成==");
}
using (System.Net.HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse)
{
//在这里对接收到的页面内容进行处理
//直到request.GetResponse()程序才开始向目标网页发送post请求
System.IO.Stream responseStream = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, encoding);
string val = reader.ReadToEnd();
return val;
}
}
catch (WebException ex)
{
//var pageContent = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
//LogHelper.WriteSendLog($"交易请求失败:[{RequestUrl}]{ex.Message}");
return ex.Message;
}
}
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}
#endregion
#region ->
public static string GetMD5(string s)
{
MD5 _MD5 = new MD5CryptoServiceProvider();
byte[] t = _MD5.ComputeHash(Encoding.GetEncoding("utf-8").GetBytes(s));
StringBuilder sb = new StringBuilder(32);
for (int i = 0; i < t.Length; i++)
{
sb.Append(t[i].ToString("x").PadLeft(2, '0'));
}
return sb.ToString();
}
/// <summary>
/// 参数签名
/// </summary>
/// <param name="signParm">待签名参数集</param>
/// <param name="MD5Key">签名密钥</param>
/// <returns></returns>
public static string ParamSign(Dictionary<string, string> signParm, string MD5code, string MD5Key)
{
var list = signParm.OrderBy(s => s.Key);
string str = "";
foreach (var ss in list)
{
if (!string.IsNullOrEmpty(ss.Value))
{
str += ss.Key + "=" + ss.Value + "&";
}
}
str = str.Trim('&');
if (!string.IsNullOrEmpty(MD5code))
{
str += "&code=" + MD5code;
}
if (!string.IsNullOrEmpty(MD5Key))
{
str += "&key=" + MD5Key;
}
str = BitConverter.ToString(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(str))).Replace("-", "").ToUpper();
return str;
}
public static string paramsToString(Dictionary<string, string> dic)
{
string str = String.Empty;
foreach (var e in dic)
{
str += e.Key + "=" + e.Value + "&";
}
str = str.TrimEnd('&');
return str;
}
/// <summary>
/// 将DateTime类型转换为long类型
/// </summary>
/// <param name="dt">时间</param>
/// <returns></returns>
public static long ConvertDataTimeLong(DateTime dt)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
TimeSpan toNow = dt.Subtract(dtStart);
long timeStamp = toNow.Ticks;
timeStamp = long.Parse(timeStamp.ToString().Substring(0, timeStamp.ToString().Length - 7));
return timeStamp;
}
/// <summary>
/// 将Long类型转换为DateTime类型
/// </summary>
/// <param name="d">long</param>
/// <returns></returns>s
public static DateTime ConvertLongDateTime(long d)
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
long lTime = long.Parse(d + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
DateTime dtResult = dtStart.Add(toNow);
return dtResult;
}
#endregion
#region -> 线
public static string GetSaleBill(OracleHelper OracleHelper, string ServerpartCode, string ShopCode, string SaleBillID, string ProvinceCode)
{
DataTable SaleBill_List = null, SaleDetail_List = null;
DataSet _DataSet = new DataSet();
try
{
if (!string.IsNullOrEmpty(ServerpartCode) && !string.IsNullOrEmpty(ShopCode))
{
string _SqlString = @"SELECT SALEBILL_ID,SALEBILL_CODE,MEMBERSHIP_ID,SALEBILL_TYPE,
TABLE_NUMBER,TAKE_TYPE,PROVINCE_CODE,SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,
SERVERPARTSHOP_ID,SHOPCODE,SHOPNAME,ORDER_PERSON,ORDER_PERSONTEL,ORDER_DATE,
RESERVATION_DATE,RECORD_COUNT,TOTAL_COUNT,ORDER_AMOUNT,SALEBILL_STATE,SALEBILL_DESC
FROM MOBILESERVICE_PLATFORM.T_SALEBILL WHERE PROVINCE_CODE = " + ProvinceCode +
" AND SERVERPART_CODE = '" + ServerpartCode + "' AND SHOPCODE = '" + ShopCode +
"' AND SALEBILL_STATE = 1010" + (SaleBillID == "0" ? "" : " AND SALEBILL_ID > " + SaleBillID);
SaleBill_List = OracleHelper.ExcuteSqlGetDataSet(_SqlString, "T_SALEBILL").Tables[0];
_DataSet.Tables.Add(SaleBill_List.Copy());
string sqlwhere = "SELECT SALEBILL_ID FROM MOBILESERVICE_PLATFORM.T_SALEBILL WHERE PROVINCE_CODE = " +
ProvinceCode + " AND SERVERPART_CODE = '" + ServerpartCode + "' AND SHOPCODE = '" + ShopCode +
"' AND SALEBILL_STATE = 1010" + (SaleBillID == "0" ? "" : " AND SALEBILL_ID > " + SaleBillID);
string _SqlStr = string.Format("SELECT * FROM MOBILESERVICE_PLATFORM.T_SALEDETAIL WHERE SALEBILL_ID IN ({0})", sqlwhere);
SaleDetail_List = OracleHelper.ExcuteSqlGetDataSet(_SqlStr, "T_SALEDETAIL").Tables[0];
_DataSet.Tables.Add(SaleDetail_List.Copy());
}
}
catch (Exception ex)
{
LogHelper.WriteSendLog(ex.ToString());
}
return JSonHelper.DataSetToJsons(_DataSet);
}
#endregion
#region ->
public static string GetSaleBillInfo(OracleHelper OracleHelper, string ServerpartCode, string ShopCode,
string SaleBillID, string ProvinceCode)
{
DataTable SaleBill_List = null;
try
{
string _SqlString = @"SELECT SALEBILL_ID,SALEBILL_CODE,MEMBERSHIP_ID,SALEBILL_TYPE,
TABLE_NUMBER,TAKE_TYPE,PROVINCE_CODE,SERVERPART_ID,SERVERPART_CODE,SERVERPART_NAME,
SERVERPARTSHOP_ID,SHOPCODE,SHOPNAME,ORDER_PERSON,ORDER_PERSONTEL,ORDER_DATE,
RECORD_COUNT,TOTAL_COUNT,ORDER_AMOUNT,SALEBILL_STATE,SALEBILL_DESC
FROM MOBILESERVICE_PLATFORM.T_SALEBILL WHERE PROVINCE_CODE = " + ProvinceCode +
" AND SERVERPART_CODE = '" + ServerpartCode + "' AND SHOPCODE = '" + ShopCode +
"' AND SALEBILL_ID IN (" + SaleBillID + ")";
SaleBill_List = OracleHelper.ExcuteSqlGetDataSet(_SqlString, "T_SALEBILL").Tables[0];
}
catch (Exception ex)
{
LogHelper.WriteSendLog(ex.ToString());
}
return JSonHelper.DataTableToJson(SaleBill_List);
}
#endregion
#region -> 线
public static string UpdateSaleBill(OracleHelper OracleHelper, string SaleBillId, string SaleBillState)
{
string _Result = "", _updatesql = "";
List<string> _ListSQL = new List<string>();
if (!string.IsNullOrEmpty(SaleBillId) && !string.IsNullOrEmpty(SaleBillState))
{
_updatesql = "UPDATE MOBILESERVICE_PLATFORM.T_SALEBILL SET SALEBILL_STATE = " + SaleBillState +
" WHERE SALEBILL_ID IN (" + SaleBillId + ")";
_ListSQL.Add(_updatesql);
try
{
OracleHelper.ExecuteSqlTran(_ListSQL);
_Result = "9";
}
catch (Exception ex)
{
_Result = "订单更新失败";
LogHelper.WriteSendLog(ex.Message);
}
}
else
{
_Result = "0";
}
return _Result;
}
#endregion
#region -> 线
public static string UpdateSaleDetail(OracleHelper OracleHelper, string SaleDetailId, string SaleBillState)
{
string _Result = "", _updatesql = "";
List<string> _ListSQL = new List<string>();
if (!string.IsNullOrEmpty(SaleDetailId) && !string.IsNullOrEmpty(SaleBillState))
{
_updatesql = "UPDATE MOBILESERVICE_PLATFORM.T_SALEDETAIL SET SALEBILL_STATE = " + SaleBillState +
" WHERE SALEDETAIL_ID IN (" + SaleDetailId + ")";
_ListSQL.Add(_updatesql);
try
{
OracleHelper.ExecuteSqlTran(_ListSQL);
_Result = "9";
}
catch (Exception ex)
{
_Result = "订单更新失败";
LogHelper.WriteSendLog(ex.Message);
}
}
else
{
_Result = "0";
}
return _Result;
}
#endregion
#region ->
public static void TableExists(OracleHelper _OracleHelper, string UserName, string TableName, string CreateTableSql)
{
//是否存在表
DataTable _DataTable = _OracleHelper.ExcuteSqlGetDataSet("SELECT 1 FROM DBA_TABLES WHERE OWNER = '" +
UserName + "' AND TABLE_NAME = '" + TableName + "'").Tables[0];
if (_DataTable.Rows.Count == 0)
{
_OracleHelper.ExcuteSql(CreateTableSql);
}
}
public static void SequenceExists(OracleHelper _OracleHelper, string UserName, string SequenceName)
{
//是否存在序列
DataTable _DataTable = _OracleHelper.ExcuteSqlGetDataSet("SELECT 1 FROM ALL_SEQUENCES WHERE SEQUENCE_OWNER = '" +
UserName + "' AND SEQUENCE_NAME = '" + SequenceName + "'").Tables[0];
if (_DataTable.Rows.Count == 0)
{
_OracleHelper.ExcuteSql("CREATE SEQUENCE " + UserName + "." + SequenceName +
" INCREMENT BY 1 START WITH 1 NOMAXVALUE NOMINVALUE NOCYCLE CACHE 2 NOORDER");
}
}
#endregion
#region ->
/// <summary>
/// 获取抽奖结果
/// </summary>
/// <param name="prob">各等级中奖概率组</param>
/// <param name="defaultLevel">默认中奖等级</param>
/// <returns>返回中奖等级</returns>
public static int GetLevel(float[] prob, int defaultLevel = 0)
{
int result = defaultLevel;
int n = (int)(prob.Sum() * 1000); //计算概率总和放大1000倍
Random _Random = new Random(Guid.NewGuid().GetHashCode());
float x = (float)_Random.Next(0, n) / 1000; //随机生成0~概率总和的数字
for (int i = 0; i < prob.Count(); i++)
{
float pre = prob.Take(i).Sum(); //区间下界
float next = prob.Take(i + 1).Sum(); //区间上界
if (x >= pre && x < next) //如果在该区间范围内,就返回结果退出循环
{
result = i;
break;
}
}
return result;
}
/// <summary>
/// 获取中奖金额[单位:分]
/// </summary>
/// <param name="bonusInterval">奖金金额区间组[单位:分]
/// 例int[4]{ 1, 50, 200, 800 }</param>
/// <param name="prob">各等级中奖概率组
/// 例float[3] { 0.330f, 0.660f, 0.010f }</param>
/// <param name="defaultLevel">默认中奖等级</param>
/// <returns></returns>
public static int GetBonusAmount(int[] bonusInterval, float[] prob, int defaultLevel = 0)
{
Random _Random = new Random(Guid.NewGuid().GetHashCode());
int _BonusLevel = GetLevel(prob, defaultLevel); //获取中奖等级
int target = (bonusInterval[_BonusLevel + 1] - bonusInterval[_BonusLevel] + 1) * 10; //获取中奖等级区间金额
return _Random.Next(target) / 10 + bonusInterval[_BonusLevel]; //返回实际中奖金额
}
/// <summary>
/// 获取随机数组
/// </summary>
/// <param name="num"></param>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <returns></returns>
public static int[] getRandomNum(int num, int minValue, int maxValue)
{
Random ra = new Random(Guid.NewGuid().GetHashCode());
int[] arrNum = new int[num];
int tmp = 0;
for (int i = 0; i <= num - 1; i++)
{
tmp = ra.Next(minValue, maxValue); //随机取数
arrNum[i] = getNum(arrNum, tmp, minValue, maxValue, ra); //取出值赋到数组中
}
return arrNum;
}
public static int getNum(int[] arrNum, int tmp, int minValue, int maxValue, Random ra)
{
int n = 0;
while (n <= arrNum.Length - 1)
{
if (arrNum[n] == tmp) //利用循环判断是否有重复
{
tmp = ra.Next(minValue, maxValue); //重新随机获取。
getNum(arrNum, tmp, minValue, maxValue, ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。
}
n++;
}
return tmp;
}
#endregion
#region ->
/// <summary>
/// 电子码校验
/// </summary>
/// <param name="memberECode">待校验数字电子码</param>
/// <param name="minLength">最小长度 </param>
/// <returns></returns>
public static bool ECodeCheck(string memberECode, int minLength = 20)
{
try
{
decimal.Parse(memberECode);
}
catch
{
return false;
}
//判断扫入的电子码
if (memberECode.Length >= minLength)
{
decimal num1 = 0;
decimal num2 = 0;
for (int i = 0; i < memberECode.Length; i++)
{
if (((memberECode.Length - (i + 1)) % 2) == 0)
{
num1 = num1 + decimal.Parse(memberECode.Substring(memberECode.Length - (i + 1), 1));
}
else
{
num2 = num2 + (decimal.Parse(memberECode.Substring(memberECode.Length - (i + 1), 1)) * 2);
if (decimal.Parse(memberECode.Substring(memberECode.Length - (i + 1), 1)) >= 5)
{
num2 = num2 - 9;
}
}
}
if (((num1 + num2) % 10) == 0) { return true; }
}
return CicoECode(memberECode, minLength);
}
/// <summary>
/// 实业饭卡电子码
/// </summary>
/// <param name="memberECode">待校验数字电子码</param>
/// <param name="minLength">最小长度</param>
/// <returns></returns>
public static bool CicoECode(string memberECode, int minLength = 20)
{
try
{
decimal.Parse(memberECode);
}
catch
{
return false;
}
//判断扫入的电子码
if (memberECode.Length >= minLength)
{
decimal num1 = 0;
decimal num2 = 0;
for (int i = 0; i < memberECode.Length; i++)
{
if (((memberECode.Length - i) % 2) == 0)
{
num1 = num1 + decimal.Parse(memberECode.Substring((memberECode.Length - (i + 1)), 1));
}
else
{
num2 = num2 + (decimal.Parse(memberECode.Substring(memberECode.Length - (i + 1), 1)) * 2);
if (decimal.Parse(memberECode.Substring(memberECode.Length - (i + 1), 1)) >= 5)
{
num2 = num2 - 9;
}
}
}
if (((num1 + num2) % 10) == 0) { return true; }
}
return false;
}
#endregion
}
}