| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 | using System;using System.Collections.Generic;using System.Configuration;using System.Data;using System.Data.Odbc;using System.Data.SqlClient;using System.Linq;using System.Text;namespace SinochemInternetPlusApp{#warning As of Feb 2020, there are limited functions used from this utility, consider refactoring this    internal class SiteConfigUtility    {        private static SiteConfigUtility instance = new SiteConfigUtility();        private object syncObject = new object();        private IEnumerable<DataRow> latestConfig = null;        private SiteConfigUtility()        {        }        public static SiteConfigUtility Default        {            get { return instance; }        }                                                public void UpdateLatestSiteConfig(IEnumerable<DataRow> config)        {            lock (this.syncObject)            {                this.latestConfig = config;            }        }        public IEnumerable<int> GetAllSiteLevelNozzleIds()        {            lock (this.syncObject)            {                return this.latestConfig.Select(r => int.Parse(r["siteLevelNozzleId"].ToString()));            }        }                                                        public int GetSiteLevelNozzleIdByLogicalNozzleId(int pumpId, int logicalNozzleId)        {            lock (this.syncObject)            {                var targetRow =                    latestConfig.FirstOrDefault(                        r => r["pumpid"].ToString() == pumpId.ToString() &&                             r["HoseLogicalId"].ToString() == logicalNozzleId.ToString());                if (targetRow != null)                {                    return int.Parse(targetRow["siteLevelNozzleId"].ToString());                }                return -1;            }        }                                                public IEnumerable<int> GetSiteLevelNozzleIdsByPumpId(int pumpId)        {            lock (this.syncObject)            {                var targetRows = latestConfig.Where(r => r["pumpid"].ToString() == pumpId.ToString());                if (targetRows.Any())                {                    return targetRows.Select(r => int.Parse(r["siteLevelNozzleId"].ToString()));                }                return null;            }        }                                                                [Obsolete("Don't access Global FC database directly, use Global_Pump_Fdc instead!")]        public Tuple<float, float> GetTotalizer(int pumpId, int logicalNozzleId)        {            using (                var fcOdbcConnection =                    new SqlConnection(GenericSinochemEpsApp.AppSettings["FCDatabaseConnStr"]))            {                using (var oda = new SqlDataAdapter(                    string.Format("select attr_name,attr_value from " +                                  "ssf_device_data where attr_name in ('VolumeTotalizer', 'MoneyTotalizer') " +                                  "and device_id='{0}' and subdevice_id='{1}'", pumpId, logicalNozzleId),                    fcOdbcConnection))                {                    var totalizersInFcDb = new DataTable();                    oda.Fill(totalizersInFcDb);                    var totalizersDataRowsInFcDb = totalizersInFcDb.Rows.Cast<DataRow>();                    if (!totalizersDataRowsInFcDb.Any())                        return new Tuple<float, float>(0, 0);                    var VolumeTotalizerRow =                        totalizersDataRowsInFcDb.FirstOrDefault(r => r["attr_name"].ToString() == "VolumeTotalizer");                    var MoneyTotalizerRow =                        totalizersDataRowsInFcDb.FirstOrDefault(r => r["attr_name"].ToString() == "MoneyTotalizer");                    var result =                        new Tuple<float, float>(                            VolumeTotalizerRow == null ? 0 : float.Parse(VolumeTotalizerRow["attr_value"].ToString()),                            MoneyTotalizerRow == null ? 0 : float.Parse(MoneyTotalizerRow["attr_value"].ToString()));                    return result;                }            }        }                                                                public Tuple<string, float> GetTotalizerFromPos(int pumpId, int logicalNozzleId)        {            int jihao = GetSiteLevelNozzleIdByLogicalNozzleId(pumpId, logicalNozzleId);            using (                var posSqlConnection =                    new SqlConnection(GenericSinochemEpsApp.AppSettings["PosDatabaseConnStr"]))            {                using (var sda = new SqlDataAdapter(                    string.Format("select fzqty,fzamount from jy_info where jihao={0}", jihao),                    posSqlConnection))                {                    var totalizersInPosDb = new DataTable();                    sda.Fill(totalizersInPosDb);                    if (totalizersInPosDb.Rows.Count == 0)                        return new Tuple<string, float>("0", 0);                    var result =                        new Tuple<string, float>((string)(totalizersInPosDb.Rows[0]["fzqty"]),                            float.Parse(totalizersInPosDb.Rows[0]["fzamount"].ToString()));                    return result;                }            }        }                                                        public Tuple<float, float> GetTotalizer(int siteLevelNozzleId)        {            int pumpId = -1;            int hoseLogicalId = -1;            lock (this.syncObject)            {                var targetRow =                    this.latestConfig.First(r => r["siteLevelNozzleId"].ToString() == siteLevelNozzleId.ToString());                pumpId = int.Parse(targetRow["pumpid"].ToString());                hoseLogicalId = int.Parse(targetRow["HoseLogicalId"].ToString());            }            return this.GetTotalizer(pumpId, hoseLogicalId);        }                                                        [Obsolete("Don't access Global FC database directly, use Global_Pump_Fdc instead!")]        public string GetGradeName(int pumpId, int logicalNozzleId)        {            using (                var fcOdbcConnection =                    new SqlConnection(GenericSinochemEpsApp.AppSettings["FCDatabaseConnStr"]))            {                var selectCmd = new SqlCommand(                    string.Format("select param_value from " +                                  "config_values where library='pump' and groupname='subinfo' and id='{0}' and device_id = 'hose{1}' " +                                  "and parameter='grade' "                        , pumpId, logicalNozzleId),                    fcOdbcConnection);                fcOdbcConnection.Open();                var gradeName = selectCmd.ExecuteScalar().ToString();                return gradeName;            }        }        public string GetGradeName(int siteLevelNozzleId)        {            int pumpId = -1;            int hoseLogicalId = -1;            lock (this.syncObject)            {                var targetRow =                    this.latestConfig.First(r => r["siteLevelNozzleId"].ToString() == siteLevelNozzleId.ToString());                pumpId = int.Parse(targetRow["pumpid"].ToString());                hoseLogicalId = int.Parse(targetRow["HoseLogicalId"].ToString());            }            return this.GetGradeName(pumpId, hoseLogicalId);        }                                                [Obsolete("Don't access Global FC database directly, use Global_Pump_Fdc instead!")]        public string GetGradeNameByGradeId(int gradeId)        {            using (                var fcOdbcConnection =                    new SqlConnection(GenericSinochemEpsApp.AppSettings["FCDatabaseConnStr"]))            {                var selectCmd = new SqlCommand(                    string.Format("select id from " +                                  "config_values where library='grade' and groupname='general' and parameter='number' and param_value='{0}' "                        , gradeId),                    fcOdbcConnection);                fcOdbcConnection.Open();                var gradeName = selectCmd.ExecuteScalar().ToString();                return gradeName;            }        }    }}
 |