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

539 lines
26 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.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
{
/// <summary>
/// Service 的摘要说明
/// </summary>
[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
{
/// <summary>
/// 交互数据库连接字符串
/// </summary>
protected static string _OracleConnStr = ConfigurationManager.AppSettings["OracleConnStr"];
/// <summary>
/// 正式库连接字符串
/// </summary>
protected static string _OracleHelperString = ConfigurationManager.AppSettings["OracleHelperString"];
/// <summary>
/// 合作商户数据库连接字符串
/// </summary>
private static string _OracleConn_Merchants = ConfigurationManager.AppSettings["OracleConn_Merchants"];
#region ->
/// <summary>
/// 上报工具运行状态
/// </summary>
/// <param name="provinceCode">省份编码</param>
/// <param name="provinceName">省份名称</param>
/// <param name="serverPartCode">服务区编码</param>
/// <param name="serverPartName">服务区名称</param>
/// <param name="appName">工具名称</param>
/// <param name="appVersion">工具当前版本</param>
/// <returns></returns>
[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 ->
/// <summary>
/// 数据上传
/// </summary>
/// <param name="code"></param>
/// <param name="tableName"></param>
/// <param name="jsonString"></param>
/// <param name="orderString"></param>
/// <returns></returns>
[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 ->
/// <summary>
/// 数据下发
/// </summary>
/// <param name="code"></param>
/// <param name="tableName"></param>
/// <param name="jsonString"></param>
/// <param name="orderString"></param>
/// <returns></returns>
[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 ->
/// <summary>
/// 商品去重查询
/// </summary>
/// <param name="serverPartShop_id">门店ID</param>
/// <returns></returns>
[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
/// <summary>
/// 根据传入的服务区编码返回该服务区的链路配置项数据
/// </summary>
/// <param name="serverpartCodes">服务区编码格式000000,111111,222222部分服务区或存在一个服务区托管多个服务区信息的现象
/// 所以使用多服务区编码字符串拼接英文逗号隔开的形式)</param>
/// <returns>返回该服务区的链路配置信息</returns>
[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 ->
/// <summary>
/// 设置下发数据版本更新
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="DataVersion">数据版本</param>
/// <param name="ServerpartCode">服务区编号</param>
/// <param name="ShopCode">门店编号</param>
/// <param name="MachineCode">机器编号</param>
/// <param name="BusinessType">业态</param>
/// <returns>数据版本更新状态:-1失败1、成功</returns>
[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 ->
/// <summary>
/// 提交扫码上传数据版本更新
/// </summary>
/// <param name="JsonString"></param>
/// <param name="PostDataType">提交数据类型(EndAccount:日结,Inspections:稽核,Personsell:交班,CommoditySale:单品)</param>
/// <returns></returns>
[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
}
}