using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using System.Web.Services;
using SuperMap.RealEstate.ServiceModel;
using ServerPartTransmission.Common;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using HZQR.Common.Common;
namespace ServerPartTransmission
{
///
/// Service 的摘要说明
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
[System.Web.Script.Services.ScriptService]
public class Service : WebService
{
///
/// 交互数据库连接字符串
///
protected static string _OracleConnStr = ConfigurationManager.AppSettings["OracleConnStr"];
///
/// 正式库连接字符串
///
protected static string _OracleHelperString = ConfigurationManager.AppSettings["OracleHelperString"];
///
/// 合作商户数据库连接字符串
///
private static string _OracleConn_Merchants = ConfigurationManager.AppSettings["OracleConn_Merchants"];
#region 方法 -> 上报工具运行状态
///
/// 上报工具运行状态
///
/// 省份编码
/// 省份名称
/// 服务区编码
/// 服务区名称
/// 工具名称
/// 工具当前版本
///
[WebMethod]
public string UploadTransClientState(string provinceCode, string provinceName,
string serverPartCode, string serverPartName, string appName, string appVersion)
{
provinceCode = provinceCode.Replace("'", "");
provinceName = provinceName.Replace("'", "");
serverPartCode = serverPartCode.Replace("'", "");
serverPartName = serverPartName.Replace("'", "");
appName = appName.Replace("'", "");
if (string.IsNullOrWhiteSpace(provinceCode) || string.IsNullOrWhiteSpace(serverPartCode))
{
return "{\"error\": -1 ,\"msg\": \"缺少省份或服务区信息!\"}";
}
try
{
OracleHelper _OracleHelper = new OracleHelper(_OracleConnStr.Split(',')[0],
_OracleConnStr.Split(',')[1], _OracleConnStr.Split(',')[2], _OracleConnStr.Split(',')[3]);
string SQLString = string.Format(@"SELECT 1 FROM HIGHWAY_EXCHANGE.T_STATEFEEDBACK
WHERE SERVERPARTCODE = '{0}' AND SHOPCODE = '000000'", serverPartCode);
if (_OracleHelper.ExcuteSqlGetDataSet(SQLString).Tables[0].Rows.Count > 0)
{
SQLString = string.Format(@"UPDATE HIGHWAY_EXCHANGE.T_STATEFEEDBACK
SET CONNECT_DATE = SYSDATE,VERSION_NUM = '{0}',MACHINENAME = '{1}'
WHERE SERVERPARTCODE = '{2}' AND SHOPCODE = '000000'",
appVersion, appName, serverPartCode);
_OracleHelper.ExcuteSql(SQLString);
}
else
{
SQLString = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_STATEFEEDBACK (
STATEFEEDBACK_ID,CONNECT_DATE,SERVERPARTCODE,
SHOPCODE,MACHINECODE,MACHINENAME,VERSION_NUM)
VALUES (1,SYSDATE,'{0}','000000','0000','{1}','{2}')",
serverPartCode, appName, appVersion);
_OracleHelper.ExcuteSql(SQLString);
}
return "{\"error\": 1 ,\"msg\": \"运行状态记录成功.\"}";
}
catch (Exception ex)
{
LogHelper.WriteReceiveLog(ex.Message, DateTime.Now.ToString("yyyyMMdd") + "_UploadServerState");
return $"{{\"error\": -1 ,\"msg\": \"系统异常:{ex.Message}\"}}";
}
}
#endregion
#region 方法 -> 数据上传
///
/// 数据上传
///
///
///
///
///
///
[WebMethod]
public string UploadTableData(string code, string tableName, string jsonString, string orderString = "")
{
OracleHelper _OracleHelper = new OracleHelper(_OracleConnStr.Split(',')[0], _OracleConnStr.Split(',')[1],
_OracleConnStr.Split(',')[2], _OracleConnStr.Split(',')[3]);
if (!string.IsNullOrEmpty(orderString))
{
Transaction _Transaction = new Transaction();
try
{
//将传输报文转换成has格式
Hashtable hashtable = new Hashtable
{
["code"] = code,
["tableName"] = tableName,
["jsonString"] = jsonString,
["orderString"] = orderString
};
JObject _OrderString = JObject.Parse(orderString);
string _SERVERPARTCODE = _OrderString.Property("SERVERPARTCODE").Value.ToString(); //服务区编码
string _SHOPCODE = _OrderString.Property("SHOPCODE").Value.ToString(); //门店编码
string _SERVERPARTSHOP_ID = _OrderString.Property("SERVERPARTSHOP_ID").Value.ToString(); //门店ID
string _MACHINECODE = _OrderString.Property("MACHINECODE").Value.ToString(); //收银机编码
string _MACADDRESS = _OrderString.Property("MACADDRESS").Value.ToString(); //Mac地址
string _ENDDATE = _OrderString.Property("ENDDATE").Value.ToString(); //最早时间
_ENDDATE = string.IsNullOrWhiteSpace(_ENDDATE) ? DateTime.Today.AddDays(-7).ToString() : _ENDDATE; //设置最小默认时间
string[] codes = null;
if (tableName != "HIGHWAY_EXCHANGE.T_TRANSMISSIONERROR" && tableName != "HIGHWAY_EXCHANGE.T_UPLOADSTATISTICS")
{
if (string.IsNullOrWhiteSpace(_SERVERPARTCODE) || string.IsNullOrWhiteSpace(_ENDDATE))
{
return "{\"error\": -1 ,\"msg\": \"获取数据上传失败:JSON缺少必要参数:" +
"SERVERPARTCODE、SERVERPARTSHOP_ID、MACHINECODE、本地数据最早时间 \",\"rows\":[]}";
}
}
codes = new string[6];
codes[0] = _SERVERPARTCODE;
codes[1] = _SHOPCODE;
codes[2] = _SERVERPARTSHOP_ID;
codes[3] = _MACHINECODE;
codes[4] = _ENDDATE;
codes[5] = _MACADDRESS;
//暂停大数据客群分析统计数据上传
switch (tableName)
{
case "HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW":
case "HIGHWAY_EXCHANGE.T_ENDACCOUNT":
case "HIGHWAY_EXCHANGE.T_PERSONSELL_NEW":
case "HIGHWAY_EXCHANGE.T_PERSONSELL":
break;
default:
return "{\"error\": 1 ,\"msg\": \"添加成功!\",\"rows\":[]}";
}
string TransmitUrl = ConfigurationManager.AppSettings["TransmitUrl"],
TransmitCode = ConfigurationManager.AppSettings["TransmitCode"];
if (hashtable["jsonString"].ToString() != "")
{
JArray _JsonArray = JArray.Parse(hashtable["jsonString"].ToString());
JObject _Json = JObject.Parse(_JsonArray[0].ToString());
_SERVERPARTCODE = _Json["SERVERPARTCODE"].ToString();
}
//HZQR.Common.LogUtil.WriteLog(null, "SERVERPARTCODE:" + _SERVERPARTCODE,
// DateTime.Now.ToString("yyyyMMdd") + "_UploadTableData");
switch (tableName)
{
case "HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW":
case "HIGHWAY_EXCHANGE.T_ENDACCOUNT":
case "HIGHWAY_EXCHANGE.T_PERSONSELL_NEW":
case "HIGHWAY_EXCHANGE.T_PERSONSELL":
if (!string.IsNullOrWhiteSpace(TransmitUrl))
{
Task task = Task.Factory.StartNew(() =>
{
try
{
HZQR.Common.LogUtil.WriteLog(null, "数据转发地址:" + TransmitUrl +
";发送报文:数据表名【" + tableName + "】,服务区编码【" + _SERVERPARTCODE + "】",
DateTime.Now.ToString("yyyyMMdd") + "_UploadTableData");
//传输结果
string transmitRes = SoapWSHelper.QuerySoapWebServiceString(
TransmitUrl, "UploadTableData", hashtable);
HZQR.Common.LogUtil.WriteLog(null, "数据转发结果:" + transmitRes,
DateTime.Now.ToString("yyyyMMdd") + "_UploadTableData");
}
catch (Exception ex)
{
HZQR.Common.LogUtil.WriteLog(ex, "", DateTime.Now.ToString("yyyyMMdd") + "_UploadTableDataError");
}
});
}
break;
}
return Method.UploadMethod.DataUploading(_OracleHelper,
tableName, jsonString, codes, orderString, 4, _Transaction);
}
catch (Exception ex)
{
_Transaction.Rollback();
LogHelper.WriteReceiveLog(tableName + "获取数据上传失败:发生异常!传输内容:jsonString【" + jsonString +
"】,orderString【" + orderString + "】。异常原因:" + ex.Message, "日志_Receive" + DateTime.Now.ToString("yyyyMMdd"));
}
finally
{
//释放资源
_Transaction.Release();
_Transaction.Dispose();
}
}
else
{
return "{\"error\": -1 ,\"msg\": \"获取数据上传失败:JSON参数解析异常!\",\"rows\":[]}";
}
return "{\"error\": -1 ,\"msg\": \"获取数据上传失败:发生异常!\",\"rows\":[]}";
}
#endregion
#region 方法 -> 数据下发
///
/// 数据下发
///
///
///
///
///
///
[WebMethod]
public string DownloadTableData(string code, string tableName, string jsonString, string orderString = "")
{
OracleHelper _OracleHelper = new OracleHelper(_OracleConnStr.Split(',')[0], _OracleConnStr.Split(',')[1],
_OracleConnStr.Split(',')[2], _OracleConnStr.Split(',')[3]);
if (!string.IsNullOrWhiteSpace(jsonString))
{
Transaction _Transaction = new Transaction();
try
{
JObject _JsonString = JObject.Parse(jsonString);
if (_JsonString.Property("SERVERPARTCODE") == null || _JsonString.Property("SERVERPARTSHOP_ID") == null ||
_JsonString.Property("SHOPCODE") == null || _JsonString.Property("MACHINECODE") == null)
{
return "{\"error\": -1 ,\"msg\": \"获取数据分发失败:JSON参数解析异常!\",\"rows\":[]}";
}
string _SERVERPARTCODE = _JsonString.Property("SERVERPARTCODE").Value.ToString(); //服务区编码
string _SHOPCODE = _JsonString.Property("SHOPCODE").Value.ToString(); //门店编码
string _SERVERPARTSHOP_ID = _JsonString.Property("SERVERPARTSHOP_ID").Value.ToString(); //门店ID
string _MACADDRESS = _JsonString.Property("MACADDRESS").Value.ToString(); //Mac地址
string _MACHINECODE = _JsonString.Property("MACHINECODE").Value.ToString(); //收银机编码
if (tableName != "HIGHWAY_EXCHANGE.T_CONFIGURATION" && tableName != "HIGHWAY_EXCHANGE.T_ADVERTISING")
{
if (string.IsNullOrWhiteSpace(_SERVERPARTCODE))
{
return "{\"error\": -1 ,\"msg\": \"获取数据分发失败:JSON缺少必要参数:" +
"SERVERPARTCODE \",\"rows\":[]}";
}
}
string[] codes = null;
codes = new string[7];
codes[0] = _SERVERPARTCODE;
codes[1] = _SHOPCODE;
codes[2] = _SERVERPARTSHOP_ID;
codes[3] = _MACHINECODE;
codes[4] = _MACADDRESS;
//上次更新时间
string lastTime = "";
if (!string.IsNullOrWhiteSpace(orderString))
{
JObject _OrderString = JObject.Parse(orderString);
//获取上次更新时间
if (_OrderString.Property("LASTTIME") != null)
{
lastTime = _OrderString.Property("LASTTIME").Value.ToString();
}
//判断是否为获取总更新条数
if (_OrderString.Property("TOTALNUMBER") != null && _OrderString.Property("TOTALNUMBER").Value.ToString() == "true")
{
//获取下发总数
return Method.DownloadMethod.TotalCount(_OracleHelper, tableName, lastTime, codes, 10, _Transaction);
}
else
{
try
{
if (_OrderString.Property("PAGE") != null)
{
//第几页
codes[5] = _OrderString.Property("PAGE").Value.ToString();
if (int.Parse(codes[5]) <= 0)
{
codes[5] = null;
}
}
}
catch { codes[5] = null; }
try
{
if (_OrderString.Property("TABLENAME") != null)
{
//预下发表名
codes[6] = _OrderString.Property("TABLENAME").Value.ToString();
}
}
catch { codes[6] = null; }
}
}
//获取下发数据
return Method.DownloadMethod.DataGeneration(_OracleHelper, tableName, lastTime, codes, 10, _Transaction);
}
catch (Exception ex)
{
LogHelper.WriteReceiveLog(tableName + "表获取数据下发失败:发生异常!传输内容:jsonString【" + jsonString +
"】,orderString【" + orderString + "】。异常原因:" + ex.Message, "日志_Receive" + DateTime.Now.ToString("yyyyMMdd"));
}
finally
{
//释放资源
_Transaction.Release();
_Transaction.Dispose();
}
}
else
{
return "{\"error\": -1 ,\"msg\": \"获取数据分发失败:JSON参数解析异常!\",\"rows\":[]}";
}
return "{\"error\": -1 ,\"msg\": \"获取数据下发失败:发生异常!\",\"rows\":[]}";
}
#endregion
#region 方法 -> 商品去重查询
///
/// 商品去重查询
///
/// 门店ID
///
[WebMethod]
public string CommodityDeduplication(string serverPartShop_id)
{
OracleHelper _OracleHelper = new OracleHelper(_OracleConnStr.Split(',')[0],
_OracleConnStr.Split(',')[1], _OracleConnStr.Split(',')[2], _OracleConnStr.Split(',')[3]);
string _strSelect = string.Format("SELECT COMMODITYEX_ID FROM HIGHWAY_EXCHANGE.T_COMMODITYEX_NEW A " +
"WHERE NOT EXISTS(SELECT 1 FROM HIGHWAY_EXCHANGE.T_COMMODITYEX B " +
"WHERE A.COMMODITYEX_ID = B.COMMODITYEX_ID) AND A.SERVERPARTSHOP_ID = {0}", serverPartShop_id);
try
{
DataTable _CommodityTable = _OracleHelper.ExcuteSqlGetDataSet(_strSelect).Tables[0];
return JsonHelper.DataTableToJson(_CommodityTable);
}
catch
{
DataTable _DataTable = new DataTable();
_DataTable.Columns.Add("COMMODITYEX_ID", typeof(int));
return JsonHelper.DataTableToJson(_DataTable);
}
}
#endregion
#region 多链路数据传输配置项下发接口
///
/// 根据传入的服务区编码返回该服务区的链路配置项数据
///
/// 服务区编码,格式:000000,111111,222222(部分服务区或存在一个服务区托管多个服务区信息的现象
/// 所以使用多服务区编码字符串拼接英文逗号隔开的形式)
/// 返回该服务区的链路配置信息
[WebMethod]
public string GetMulLinkTransConfig(string serverpartCodes)
{
MessageModel mm_linkDataConfigs = new MessageModel();
mm_linkDataConfigs.IsSuccess = 0;
mm_linkDataConfigs.Msg = "操作异常!";
mm_linkDataConfigs.StatusCode = "0";//0、操作失败;1、非法参数
if (string.IsNullOrWhiteSpace(_OracleConn_Merchants))
{
mm_linkDataConfigs.Msg = "配置错误!";
mm_linkDataConfigs.StatusCode = "1";
return JsonConvert.SerializeObject(mm_linkDataConfigs);
}
string[] arr_serverpartCodes = serverpartCodes.Trim().Trim(',').Split(',');
string _serverpartCodes = "";
foreach (string svrCode in arr_serverpartCodes)
{
if (string.IsNullOrWhiteSpace(svrCode))
{
continue;
}
_serverpartCodes += "," + svrCode.Trim().Trim(',');
}
if (string.IsNullOrWhiteSpace(_serverpartCodes.Trim().Trim(',')))
{
mm_linkDataConfigs.Msg = "非法参数!";
mm_linkDataConfigs.StatusCode = "1";
return JsonConvert.SerializeObject(mm_linkDataConfigs);
}
//初始化数据库操作类
OracleHelper _OracleHelper = new OracleHelper(_OracleConn_Merchants.Split(',')[0], _OracleConn_Merchants.Split(',')[1],
_OracleConn_Merchants.Split(',')[2], _OracleConn_Merchants.Split(',')[3]);
string _strSelect = string.Format(@"SELECT A.INTERFACEADDRESS_ID AS MULLINKCONFIG_ID,
A.SERVERPARTCODE,A.INTERFACEADDRESS,B.TABLENAME,B.TRANSFREQUENCE,
B.HISTORYCALLBACKDAYS,B.HISTORYCALLBACKDATE,B.STARTTIME,B.ENDTIME
FROM HIGHWAY_EXCHANGE.T_MULLINKCONFIG A,
HIGHWAY_EXCHANGE.T_TRANSDATATYPEFREQUENCE B
WHERE A.MULLINKCONFIG_ID = B.MULLINKCONFIG_ID AND
A.MULLINKCONFIG_STATE = 1 AND A.SERVERPARTCODE IN ({0})", _serverpartCodes.Trim().Trim(','));
string tmpResult = "";//记录返回结果
try
{
DataTable _CommodityTable = _OracleHelper.ExcuteSqlGetDataSet(_strSelect).Tables[0];
mm_linkDataConfigs.IsSuccess = 1;
mm_linkDataConfigs.Msg = "下发成功!";
mm_linkDataConfigs.Obj = _CommodityTable;
tmpResult = JsonConvert.SerializeObject(mm_linkDataConfigs);
//释放资源
if (_CommodityTable != null)
{
_CommodityTable.Clear();
_CommodityTable.Dispose();
}
}
catch (Exception ex)
{
mm_linkDataConfigs.IsSuccess = 0;
mm_linkDataConfigs.Msg = "获取数据时发生异常!";
LogHelper.WriteSendLog(ex.ToString(), "多链路配置项数据下发接口异常", true);
tmpResult = JsonConvert.SerializeObject(mm_linkDataConfigs);
}
return tmpResult;
}
#endregion
#region 方法 -> 设置下发数据版本更新
///
/// 设置下发数据版本更新
///
/// 表名
/// 数据版本
/// 服务区编号
/// 门店编号
/// 机器编号
/// 业态
/// 数据版本更新状态:-1,失败;1、成功
[WebMethod]
public string SetNewDataVersion(string TableName, string DataVersion, string ServerpartCode, string ShopCode, string MachineCode, string BusinessType)
{
string strBack = "{\"error\": -1 ,\"msg\": \"数据版本更新失败\"}";
if (string.IsNullOrEmpty(TableName) || string.IsNullOrEmpty(ServerpartCode) || string.IsNullOrEmpty(DataVersion) || !Validation.IsDate(DataVersion))
{
return "{\"error\": -1 ,\"msg\": \"参数错误!\"}";
}
OracleHelper _OracleHelper = new OracleHelper(_OracleHelperString.Split(',')[0], _OracleHelperString.Split(',')[1],
_OracleHelperString.Split(',')[2], _OracleHelperString.Split(',')[3]);
switch (TableName)
{
case "T_COMMODITY"://添加或更新商品数据版本号
case "T_AUDITTASKS"://添加或更新稽核任务数据版本号
strBack = Method.DownloadMethod.SetCommodityVersion(_OracleHelper, TableName, DataVersion, ServerpartCode, BusinessType);
break;
case "T_SHOPMESSAGE"://添加或更新门店数据版本号
case "T_SALESPROMOTE"://添加或更新促销数据版本号
strBack = Method.DownloadMethod.SetShopDataVersion(_OracleHelper, TableName, DataVersion, ServerpartCode, ShopCode);
break;
case "T_SELLWORKER"://添加或更新工号数据版本号
strBack = Method.DownloadMethod.SetSellWorkerDataVersion(_OracleHelper, TableName, DataVersion, ServerpartCode);
break;
case "T_ENDACCOUNT"://日结报表
case "T_CHECKACCOUNT"://稽核报表
case "T_PERSONSELL"://交班报表
case "T_COMMODITYSALE"://单品明细
strBack = Method.UploadMethod.UpdateDataVersion(_OracleHelper, ServerpartCode, ShopCode, MachineCode, TableName, Convert.ToDateTime(DataVersion));
break;
}
return strBack;
}
#endregion
#region 方法 -> 提交扫码上传数据版本更新
///
/// 提交扫码上传数据版本更新
///
///
/// 提交数据类型(EndAccount:日结,Inspections:稽核,Personsell:交班,CommoditySale:单品)
///
[WebMethod]
public string PostNewDataVersion(string JsonString, string PostDataType)
{
Transaction _Transaction = new Transaction();
string result = "";
switch (PostDataType)
{
case "EndAccount":
result = EShang.Common.DataTransfer.PostEndAccountDate(JsonString);
break;
case "Inspections":
result = EShang.Common.DataTransfer.PostInspectionsDate(JsonString);
break;
case "Personsell":
result = EShang.Common.DataTransfer.PostPersonsellDate(JsonString);
break;
case "CommoditySale":
result = EShang.Common.DataTransfer.PostCommoditySaleDate(_Transaction, JsonString);
break;
default:
result = "{\"error\": -1 ,\"msg\": \"提交类型错误!\"}";
break;
}
return result;
}
#endregion
}
}