1240 lines
50 KiB
C#
1240 lines
50 KiB
C#
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
|
||
}
|
||
}
|