using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using Gs.DataPush.WebApi.SzytDataInfrace; using Newtonsoft.Json; using SysBaseLibs; using SysDataLibs.TableClass; namespace Gs.DataPush.WebApi.ApiService { public class SzytDataService { public static SzytDataService Instance { get; }=new SzytDataService(); private static string Token { get; set; } = ""; private bool FisrtPush { get; set; } = true; public string GetToken() { string lcToken = ""; sDataInfraceSoapClient loYtInterface = new sDataInfraceSoapClient(); GetYtApiName(out string name,out string password); //string userInfo = SysDataLibs.AppEnv.SysSetObj.GetString("YTInterfaceLoginInfo"); string userInfo = "" + name + "" + password + ""; this.LogInfo("【YT-GetToken-Start:" + userInfo); string lcTokenInfo = loYtInterface.checkIn(userInfo); this.LogInfo("YT-GetToken-END】:"+ lcTokenInfo); rsXmlNode loMainNode = rsXmlNode.ParseGenericXml(lcTokenInfo); rsXmlNode loResponseNode = loMainNode?.GetChildNode("response"); if (loResponseNode != null) { lcToken = loResponseNode.GetChildValue("tokenNo"); } return lcToken; } public string PushData(List poCheckDatas) { List loDataList = DataTrans(poCheckDatas); head loHead = GetHead(poCheckDatas.FirstOrDefault()?.MarketID); string lcRetval = PushData(new webService(){head = loHead,request = new request(){dataList = loDataList}}); return lcRetval; } public string PushData(webService obj) { string xmlStr = SerializerHelper.SerializerToString(obj); string lcRetval = PushData(xmlStr); return lcRetval; } public string PushData(string xmlStr) { sDataInfraceSoapClient loYtInterface = new sDataInfraceSoapClient(); this.LogInfo("【YT-QuickCheckItemInfo-Start:" + xmlStr); string lcRetval = loYtInterface.saveQuickCheckItemInfo(xmlStr); this.LogInfo("YT-QuickCheckItemInfo-END】:" + lcRetval); if (FisrtPush && lcRetval.Contains("令牌号已过期")) { FisrtPush = false; string lcToken = GetToken(); xmlStr = xmlStr.Contains("") ? xmlStr.Replace("", "" + lcToken + "") : xmlStr.Replace("" + Token + "", "" + lcToken + ""); Token = lcToken; lcRetval = PushData(xmlStr); } else { FisrtPush = true; } return lcRetval; } #region 拼接webService对象(私有方法) private head GetHead(string marketId) { if (string.IsNullOrEmpty(marketId)) return new head(); head loHead = new head() { CardIndex = GetMarketCardIndex(marketId), marketCode = GetMarketLicenseNo(marketId), marketName = GetMarketName(marketId), tokenNo = Token }; return loHead; } private QuickCheckItemJC DataTrans(CheckData poCheckData) { QuickCheckItemJC loQuickCheckItemJc = new QuickCheckItemJC() { JCCode = Guid.NewGuid().ToString().Replace("-", ""), //scLicenseNo = GetMarketSellerLicenseNo(poCheckData.MarketID,poCheckData.CorpName), //scUnitName = GetMarketSellerName(poCheckData.MarketID, poCheckData.CorpName), //DABH = GetMarketSellerDabh(poCheckData.MarketID, poCheckData.CorpName), //PositionNo = poCheckData.CorpName, //MarketType = "2", scCardIndex=poCheckData.CardIndex, scLicenseNo = poCheckData.LicenseNo, scUnitName = poCheckData.UnitName, DABH = poCheckData.IdCode, PositionNo = poCheckData.PositionNo, Name = poCheckData.CorpNameName, //MarketType = poCheckData.CorpKind, MarketType = "2", SubItemCode = GetSubItemCode(poCheckData.SampleId), SubItemName = poCheckData.SampleName, QuickCheckDate = poCheckData.UploadTime, QuickCheckItemCode = GetCheckItemCode(poCheckData.CheckProjectTypeID), QuickCheckSubItemCode = GetCheckSubItemCode(poCheckData.CheckProjectTypeID), QuickCheckResult = poCheckData.CheckResult == "合格" ? "-" : "+", QuickCheckResultValue = poCheckData.CheckValue, //QuickCheckResultValueUnit = "", QuickCheckUnitId = GetMarketLicenseNo(poCheckData.MarketID), QuickCheckUnitName = GetMarketLicenseName(poCheckData.MarketID), QuickCheckResultValueUnit = poCheckData.CheckValue, QuickCheckResultValueCKarea = poCheckData.CheckLimit, QuickCheckResultDependOn = "", QuickCheckRemarks = "", QuickChecker = poCheckData.CheckUser, QuickReChecker = poCheckData.CheckUser, JCManufactor = poCheckData.MachineMaker, JCModel = poCheckData.MachineID, JCSN = "", ReviewIs = "0" }; //loQuickCheckItemJc.JCCode = Guid.NewGuid().ToString().Replace("-", ""); //检测编号 ////loQuickCheckItemJc.DABH = loStallInfo.IdCard;//"320502194701151534"; //经营户身份证号码 //loQuickCheckItemJc.PositionNo = poCheckData.CorpName;// poCheckData.CorpName; //摊位编号 ////loQuickCheckItemJc.Name = loStallInfo.MarketSellerName;//"韩国金"; //经营户姓名 Y //loQuickCheckItemJc.SubItemCode = poCheckData.SampleId; //抽检的品种编码 Y //loQuickCheckItemJc.SubItemName = poCheckData.SampleName; //抽检的品种名称 Y //loQuickCheckItemJc.QuickCheckDate = poCheckData.UploadTime; //检测时间 Y //loQuickCheckItemJc.QuickCheckItemCode = loCheckMapping.szCheckItemTypeGreatCode; //检测项目分类编号 Y //loQuickCheckItemJc.QuickCheckSubItemCode = loCheckMapping.szCheckItemTypeLittleCode; //检测项目小类编号 Y //loQuickCheckItemJc.QuickCheckResult = poCheckData.CheckResult == "合格" ? "-" : "+"; //检测项目结果(定性值) Y (+ / -) //loQuickCheckItemJc.QuickCheckResultValue = poCheckData.CheckValue; //检测项目结果值 //loQuickCheckItemJc.QuickCheckResultValueUnit = ""; //实际值单位 //loQuickCheckItemJc.QuickCheckResultValueCKarea = poCheckData.CheckLimit; //检测项目结果值参考范围 //loQuickCheckItemJc.QuickCheckResultDependOn = ""; //检测依据 //loQuickCheckItemJc.QuickCheckRemarks = ""; //检测备注 //loQuickCheckItemJc.QuickChecker = poCheckData.CheckUser; //检测人姓名 Y //loQuickCheckItemJc.QuickReChecker = poCheckData.CheckUser; //复核人员姓名 Y //loQuickCheckItemJc.JCManufactor = poCheckData.MachineMaker; //检测设备厂家名 //loQuickCheckItemJc.JCModel = poCheckData.MachineID; //检测设备型号 //loQuickCheckItemJc.JCSN = ""; return loQuickCheckItemJc; } private List DataTrans(List poCheckDatas) { List loRetval = new List(); foreach (var d in poCheckDatas) { loRetval.Add(DataTrans(d)); } Cache.Clear(); return loRetval; } #region 获取信息 private string GetMarketSellerLicenseNo(string pcMarketId,string pcStallName) { string key = ("MarketSellerInfo_" + pcMarketId).Trim(); var loQuery = QueryMarketSellersInfo(pcMarketId, pcStallName, key); string lcRetval = loQuery?.LicenseNo ?? ""; return lcRetval; } private string GetMarketSellerName(string pcMarketId, string pcStallName) { string key = ("MarketSellerInfo_" + pcMarketId).Trim(); var loQuery = QueryMarketSellersInfo(pcMarketId, pcStallName, key); string lcRetval = loQuery?.Name ?? ""; return lcRetval; } private string GetMarketSellerDabh(string pcMarketId, string pcStallName) { string key = ("MarketSellerInfo_" + pcMarketId).Trim(); var loQuery = QueryMarketSellersInfo(pcMarketId, pcStallName, key); string lcRetval = loQuery?.IdCard ?? ""; return lcRetval; } private string GetMarketLicenseNo(string pcMarketId) { string key = ("MarketInfo_" + pcMarketId).Trim(); var loQuery = QueryMarketsInfo(pcMarketId, key); string lcRetval = loQuery?.LicenseNo ?? ""; return lcRetval; } private string GetMarketLicenseName(string pcMarketId) { string key = ("MarketInfo_" + pcMarketId).Trim(); var loQuery = QueryMarketsInfo(pcMarketId, key); string lcRetval = loQuery?.LicenseName ?? ""; return lcRetval; } private string GetMarketCardIndex(string pcMarketId) { string key = ("MarketInfo_" + pcMarketId).Trim(); var loQuery = QueryMarketsInfo(pcMarketId, key); string lcRetval = loQuery?.CardIndex ?? ""; return lcRetval; } private string GetMarketName(string pcMarketId) { string key = ("MarketInfo_" + pcMarketId).Trim(); var loQuery = QueryMarketsInfo(pcMarketId, key); string lcRetval = loQuery?.Names ?? ""; return lcRetval; } private string GetSubItemCode(string pcSampleId) { string key = ("CategoryInfo_" + pcSampleId).Trim(); var loQuery = QueryCategoryInfo(pcSampleId, key); string lcRetval = loQuery?.LocalNo ?? ""; return lcRetval; } private string GetCheckItemCode(string pcCheckProjectTypeId) { string key = ("CheckItemMap_" + pcCheckProjectTypeId).Trim(); var loQuery = QueryCheckCodeInfo(pcCheckProjectTypeId, key); string lcRetval = loQuery?.szCheckItemTypeGreatCode ?? ""; return lcRetval; } private string GetCheckSubItemCode(string pcCheckProjectTypeId) { string key = ("CheckItemMap_" + pcCheckProjectTypeId).Trim(); var loQuery = QueryCheckCodeInfo(pcCheckProjectTypeId, key); string lcRetval = loQuery?.szCheckItemTypeLittleCode ?? ""; return lcRetval; } #endregion #region 查询数据库信息 private MarketSellers_info QueryMarketSellersInfo(string pcMarketId,string pcStallName, string key) { MarketSellers_info loInfo = null; if (Cache.ContainsKey(key)) { loInfo = (MarketSellers_info)Cache[key]; } else { string lcSql = "SELECT m.SellerID, m.MarketID, m.Name, m.LicenseNo, m.LicenseName, m.CardIndex, st.IsLock FROM dbo.SellerHasStall AS sh LEFT OUTER JOIN dbo.MarketSellers AS m ON sh.SellerID = m.SellerID RIGHT OUTER JOIN dbo.Stalls AS st ON sh.StallID = st.StallID WHERE(m.IsLock = N'N') AND(st.IsLock = N'N') AND(st.MarketID ='" + pcMarketId + "') AND(st.StallNo='"+ pcStallName + "')"; DBConnSql loDbConn = new DBConnSql(); try { if (loDbConn.Open()) { rsQuery loQuery = loDbConn.OpenQuery(lcSql); if (loQuery != null && loQuery.IsOpened && loQuery.RecCount == 1) { loInfo = new MarketSellers_info() { Name = loQuery.GetString("Name"), LicenseNo = loQuery.GetString("LicenseNo"), LicenseName = loQuery.GetString("LicenseName"), CardIndex = loQuery.GetString("CardIndex"), IdCard = loQuery.GetString("IdCard") }; Cache.Add(key, loInfo); } } } catch (Exception err) { this.LogError(err); } finally { loDbConn.Close(); } } return loInfo; } private Markets_info QueryMarketsInfo(string pcMarketId, string key) { Markets_info loInfo = null; if (Cache.ContainsKey(key)) { loInfo = (Markets_info)Cache[key]; } else { string lcSql = "SELECT [Names],[MarketTypeID],[LicenseNo],[LicenseName],[CardIndex] FROM " + Tn.Markets + " WHERE MarketID='" + pcMarketId + "'"; DBConnSql loDbConn = new DBConnSql(); try { if (loDbConn.Open()) { rsQuery loQuery = loDbConn.OpenQuery(lcSql); if (loQuery != null && loQuery.IsOpened && loQuery.RecCount == 1) { loInfo = new Markets_info() { Names = loQuery.GetString("Names"), LicenseNo = loQuery.GetString("LicenseNo"), LicenseName = loQuery.GetString("LicenseName"), CardIndex = loQuery.GetString("CardIndex"), MarketTypeID = loQuery.GetString("MarketTypeID") }; Cache.Add(key, loInfo); } } } catch (Exception err) { this.LogError(err); } finally { loDbConn.Close(); } } return loInfo; } private VarietyCategory_info QueryCategoryInfo(string pcCategoryNo, string key) { VarietyCategory_info loInfo = null; if (Cache.ContainsKey(key)) { loInfo = (VarietyCategory_info)Cache[key]; } else { string lcSql = "SELECT [VarietyCategoryName],[LocalNo],[Path] FROM " + Tn.VarietyCategory + " WHERE [VarietyCategoryNo]='" + pcCategoryNo + "'"; DBConnSql loDbConn = new DBConnSql(); try { if (loDbConn.Open()) { rsQuery loQuery = loDbConn.OpenQuery(lcSql); if (loQuery != null && loQuery.IsOpened && loQuery.RecCount == 1) { loInfo = new VarietyCategory_info() { VarietyCategoryNo = pcCategoryNo, VarietyCategoryName = loQuery.GetString("VarietyCategoryName"), LocalNo = loQuery.GetString("LocalNo"), //Path = loQuery.GetString("Path") }; if (string.IsNullOrEmpty(loInfo.LocalNo)) { loInfo.LocalNo = QueryCategoryLocalNo(loQuery.GetString("Path")); } Cache.Add(key, loInfo); } } } catch (Exception err) { this.LogError(err); } finally { loDbConn.Close(); } } return loInfo; } /// /// 逐级获取父节点 LocalNo /// /// /// private string QueryCategoryLocalNo(string pcPath) { string lcRetval = ""; DBConnSql loDbConn = new DBConnSql(); try { if (loDbConn.Open()) return lcRetval; string[] laPaths = pcPath?.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (laPaths == null || laPaths.Length <= 0) return lcRetval; for (int i = laPaths.Length - 2; i >= 0; i--) { string lcSql = "SELECT [LocalNo] FROM " + Tn.VarietyCategory + " WHERE [VarietyCategoryNo]='" + laPaths[i] + "'"; rsQuery loQuery = loDbConn.OpenQuery(lcSql); if (loQuery != null && loQuery.IsOpened && loQuery.RecCount == 1) { lcRetval = loQuery.GetString("LocalNo"); if (!string.IsNullOrEmpty(lcRetval)) break; } } } catch (Exception err) { this.LogError(err); } finally { loDbConn.Close(); } return lcRetval; } private CheckProjectTypeMapping_info QueryCheckCodeInfo(string pcCheckProjectId, string key) { CheckProjectTypeMapping_info loInfo = null; if (Cache.ContainsKey(key)) { loInfo = (CheckProjectTypeMapping_info)Cache[key]; } else { string lcSql = "SELECT m.CheckItemId , m.szCheckItemTypeLittleCode, m.szCheckItemTypeGreatCode FROM dbo.CheckProjectType AS p LEFT OUTER JOIN dbo.CheckProjectTypeMapping AS m ON p.CheckItemId = m.CheckItemId WHERE CheckProjectTypeID='" + pcCheckProjectId + "'"; DBConnSql loDbConn = new DBConnSql(); try { if (loDbConn.Open()) { rsQuery loQuery = loDbConn.OpenQuery(lcSql); if (loQuery != null && loQuery.IsOpened && loQuery.RecCount == 1) { loInfo = new CheckProjectTypeMapping_info() { CheckItemId = loQuery.GetString("CheckItemId"), szCheckItemTypeLittleCode = loQuery.GetString("szCheckItemTypeLittleCode"), szCheckItemTypeGreatCode = loQuery.GetString("szCheckItemTypeGreatCode") }; Cache.Add(key, loInfo); } } } catch (Exception err) { this.LogError(err); } finally { loDbConn.Close(); } } return loInfo; } #endregion public static Dictionary Cache = new Dictionary(); #endregion public string UpdateMarkets() { string lcSql = ""; List markets = GetMarketInfos(); foreach (var m in markets) { lcSql += "UPDATE [dbo].[Markets] SET [LicenseNo]='" + m.LicenseNo + "',[LicenseName]='" + m.MarketName + "',[CardIndex]='" + m.CardIndex + "' WHERE ([Names] LIKE '%" + m.MarketName + "%' OR [Names] LIKE '%" + m.Abbreviation + "%') AND ([LicenseNo] IS NULL OR [LicenseNo]='')\r\n"; } ExcuteSqlTran(lcSql, out string msg); return msg; } public string UpdateMarketSellers() { string lcSql = ""; List markets = GetMarketInfos(); foreach (var m in markets) { lcSql += "UPDATE [dbo].[Markets] SET [LicenseNo]='" + m.LicenseNo + "',[LicenseName]='" + m.MarketName + "',[CardIndex]='" + m.CardIndex + "' WHERE ([Names] LIKE '%" + m.MarketName + "%' OR[Names] LIKE '%" + m.Abbreviation + "%') AND ([LicenseNo] IS NOT NULL OR [LicenseNo]!='')\r\n"; } ExcuteSqlTran(lcSql, out string msg); return msg; } public List GetMarketInfos() { List markets = null; string lcRetval = GetAreaMarket(); try { markets = JsonConvert.DeserializeObject>(lcRetval); } catch (Exception e) { this.LogError(e); } return markets; } public string GetAreaMarket() { GetYtApiName(out string name,out string password); string xmlStr = "" + name + "" + password + ""; sDataInfraceSoapClient loYtInterface = new sDataInfraceSoapClient(); this.LogInfo("【YT-GetAreaMarket-Start:" + xmlStr); string lcRetval = loYtInterface.GetAreaMarket(xmlStr); this.LogInfo("YT-GetAreaMarket-END】:" + lcRetval); return lcRetval; } public List GetMarketSellerInfos() { List marketSellers = null; string lcRetval = GetAreaSignContact(); try { marketSellers = JsonConvert.DeserializeObject>(lcRetval); } catch (Exception e) { this.LogError(e); } return marketSellers; } public string GetAreaSignContact() { string licenseNo = GetYtApiName(out string name, out string password); string xmlStr = "" + name + "" + password + "" + licenseNo + ""; sDataInfraceSoapClient loYtInterface = new sDataInfraceSoapClient(); this.LogInfo("【YT-GetAreaSignContact-Start:" + xmlStr); string lcRetval = loYtInterface.GetAreaMarket(xmlStr); this.LogInfo("YT-GetAreaSignContact-END】:" + lcRetval); return lcRetval; } /// /// 执行Sql语句 /// /// /// /// public bool ExcuteSqlTran(string pcSql, out string msg) { msg = "System Error![ DB ]";//"Sql Excute Failed"; bool lbRetval = false; //return false; if (string.IsNullOrEmpty(pcSql)) { msg = "Sql is empty."; return false; } DBConnSql dbConn = new DBConnSql(); try { dbConn.Open(); if (dbConn.ExcuteSqlTran(pcSql)) { msg = ""; lbRetval = true; } } catch (Exception e) { msg = e.Message; this.LogError(e); } finally { dbConn.Close(); } return lbRetval; } private string GetYtApiName(out string name ,out string password) { string licenseNo = ""; name = ""; password = ""; try { var xDoc = XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + "Resources/AppInfos.xml"); var app = (from r in xDoc.Descendants("app") where r.Attribute("id")?.Value.ToLower() == "yt" select r).FirstOrDefault(); if (app != null) { name = app.Attribute("user")?.Value; password = app.Attribute("secret")?.Value; licenseNo = app.Attribute("licenseNo")?.Value; } } catch (Exception e) { this.LogError(e); } return licenseNo; } } }