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 } }