Exemplo n.º 1
0
        /// <summary>
        /// 根据sp业务id 查找sp通道 (缓存)
        /// </summary>
        /// <param name="dBase">缓存未建议立时,使用数据库进行查询</param>
        /// <param name="spTroneId"></param>
        /// <returns></returns>
        public static IEnumerable <tbl_troneItem> GetTroneIdsBySptroneId(Shotgun.Database.IBaseDataClass2 dBase, int spTroneId)
        {
            IEnumerable <tbl_troneItem> cmds;
            var tTrones = cache.GetCacheData(true);

            if (tTrones != null)
            {
                lock (cache.SyncRoot)
                {
                    cmds = from t in tTrones where t.sp_trone_id == spTroneId select t;
                    if (cmds != null)
                    {
                        return(cmds.ToArray());
                    }
                    return(null);
                }
            }
            var csl = GetQueries(dBase);

            csl.Filter.AndFilters.Add(Fields.sp_trone_id, spTroneId);
            csl.PageSize = int.MaxValue;

            cmds = csl.GetDataList();
            if (cmds != null)
            {
                foreach (var cmd in cmds)
                {
                    cache.InsertItem(cmd);
                }
            }
            return(cmds);
        }
Exemplo n.º 2
0
        public static List <PoolSetModel> QueryPoolSetById(Shotgun.Database.IBaseDataClass2 dBase, int poolId)
        {
            var data = cache.GetCacheData(false);

            if (data == null)
            {
                lock (cache)
                {
                    data = cache.GetCacheData(false);
                    if (data == null)
                    {
                        if (LoadFromDbase(dBase) == 0)
                        {
                            return(null);
                        }
                        data = cache.GetCacheData(false);
                    }
                }
            }
            if (poolId == 0)
            {
                return(null);
            }
            if (data == null)
            {
                return(null);
            }
            lock (cache.SyncRoot)
            { return(data.Where(e => e.cp_pool_id == poolId).ToList()); }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 根据手机前七位查出城市(持续缓存)
        /// </summary>
        /// <param name="dBase"></param>
        /// <param name="spNum"></param>
        /// <returns></returns>
        public static tbl_cityItem GetRowByMobile(Shotgun.Database.IBaseDataClass2 dBase, int spNum)
        {
            tbl_phone_locateItem m = null;

            if (phones != null && phones.ContainsKey(spNum))
            {
                m = phones[spNum];
            }
            else if (cacheStatus != 2)
            {//缓存未生成时
                if (cacheStatus == 0)
                {
                    lock (locker)
                    {//防止并发重复查询
                        if (cacheStatus == 0)
                        {
                            cacheStatus = 1;
                            ThreadPool.QueueUserWorkItem(LoadCache);
                        }
                    }
                }
                var q = GetQueries(dBase);
                q.Filter.AndFilters.Add(Fields.phone, spNum.ToString());
                m = q.GetRowByFilters();
            }
            if (m == null)
            {
                return(null);
            }

            return(tbl_cityItem.GetRowById(dBase, m.city_id));
        }
Exemplo n.º 4
0
        public static List <tbl_sp_troneItem> QuerySptroneByPoolid(Shotgun.Database.IBaseDataClass2 dBase, int poolId)
        {
            var sql = "select stn.* from  tbl_cp_pool_set cps "
                      + " left join tbl_trone_order tno on cps.trone_order_id = tno.id"
                      + " left join tbl_trone tn on tno.trone_id= tn.id"
                      + " left join tbl_sp_trone stn on tn.sp_trone_id =stn.id"
                      + " where cps.status=1 and stn.status=1 and tn.status=1 and tno.disable=0 and cps.cp_pool_id=" + poolId.ToString();
            var q = LightDataModel.tbl_sp_troneItem.GetQueries(dBase);

            return(q.GetDataListBySql(sql));
        }
Exemplo n.º 5
0
        public static List <PoolSetInfoModel> QueryPoolSetInfoById(Shotgun.Database.IBaseDataClass2 dBase, int poolId)
        {
            var sql = "select tno.id paycode, tno.trone_id,trn.trone_name,trn.price,trn.sp_trone_id,strn.name,cps.cp_pool_id,strn.sp_id,strn.provinces,"
                      + " (strn.status=1 and trn.status=1 and tno.Disable=0 and cps.status=1 ) status ,priority,cps.id cp_pool_set_id from tbl_trone_order tno "
                      + " left join tbl_trone trn on trn.id= tno.trone_id"
                      + " left join tbl_sp_trone strn on strn.id= trn.sp_trone_id "
                      + " left join tbl_cp_pool_set cps  on tno.id= cps.trone_order_id"
                      + " where cp_pool_id=" + poolId.ToString() + " order by cp_pool_id desc ,status desc , paycode desc";

            var q = new Shotgun.Model.List.LightDataQueries <NoSqlModel.PoolSetInfoModel>("-");

            q.dBase = dBase;
            return(q.GetDataListBySql(sql));
        }
Exemplo n.º 6
0
        private static int LoadFromDbase(Shotgun.Database.IBaseDataClass2 dBase)
        {
            var sql = "SELECT cpls.id,cpls.cp_pool_id,tn.sp_trone_id,tod.trone_id,trone_order_id,priority,"
                      + " ( cpls.status=1 and stn.status=1 and tn.status=1 and tod.disable=0 and stn.is_on_api=1) status"
                      + " FROM daily_config.tbl_cp_pool_set cpls "
                      + "left join tbl_cp_pool cpl on cpl.id= cpls.cp_pool_id "
                      + "left join tbl_trone_order tod on cpls.trone_order_id= tod.id "
                      + "left join tbl_trone tn on tn.id= tod.trone_id "
                      + "left join tbl_sp_trone stn on stn.id= tn.sp_trone_id "
                      + "where  cpl.status=1 ";
            var cmd = dBase.Command();

            cmd.CommandText = sql;
            System.Data.IDataReader rd = null;
            int c = 0;

            try
            {
                rd = dBase.ExecuteReader(cmd);
                lock (cache.SyncRoot)
                {
                    cache.ClearCache();
                    while (rd.Read())
                    {
                        PoolSetModel pm = new PoolSetModel();
                        pm.id             = rd.GetInt32(0);
                        pm.cp_pool_id     = rd.GetInt32(1);
                        pm.sp_trone_id    = rd.GetInt32(2);
                        pm.trone_id       = rd.GetInt32(3);
                        pm.trone_order_id = rd.GetInt32(4);
                        pm.priority       = rd.GetInt32(5);
                        pm.status         = rd.GetInt32(6);
                        cache.InsertItem(pm);
                        c++;
                    }
                }
            }
            finally
            {
                if (rd != null)
                {
                    rd.Dispose();
                }
                cmd.Dispose();
            }
            return(c);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 根据主键查找指定的行,返回指定字段
        /// </summary>
        /// <param name="dBase"></param>
        /// <param name="id">主键值</param>
        /// <param name="fields">返回字段</param>
        /// <returns></returns>
        public static tbl_troneItem GetRowById(Shotgun.Database.IBaseDataClass2 dBase, int id, string[] fields)
        {
            tbl_troneItem m = null;

            lock (cache.SyncRoot)
            {
                m = cache.GetDataByIdx(id);
                if (m != null)
                {
                    return(m);
                }
            }

            var q = GetQueries(dBase);

            m = q.GetRowById(id);
            cache.InsertItem(m);
            return(m);
        }
Exemplo n.º 8
0
        /// <summary>
        /// 根据 sp_api_url_id 和端口号查找所有通道 (缓存15分钟)
        /// </summary>
        /// <param name="apiId"></param>
        /// <param name="port"></param>
        /// <returns></returns>
        public static IEnumerable <tbl_troneItem> QueryTronesByPort(Shotgun.Database.IBaseDataClass2 dBase, int apiId, string port)
        {
            IEnumerable <tbl_troneItem> cmds;
            var tTrones = cache.GetCacheData(true);

            if (tTrones != null)
            {
                lock (cache.SyncRoot)
                {
                    cmds = from t in tTrones where t.sp_api_url_id == apiId && t.trone_num == port && t.status == 1 select t;
                    if (cmds != null)
                    {
                        return(cmds.ToArray());
                    }
                    return(null);
                }
            }
            var csl = GetQueries(dBase);

            csl.Filter.AndFilters.Add(Fields.sp_api_url_id, apiId);
            csl.Filter.AndFilters.Add(Fields.trone_num, port);
            csl.Filter.AndFilters.Add(Fields.status, 1);

            //csl.Fields = new string[] { Fields.id, Fields.trone_num, Fields.orders, Fields.is_dynamic, Fields.price, Fields.match_price, Fields.sp_trone_id };

            csl.PageSize = int.MaxValue;

            cmds = csl.GetDataList();
            if (cmds != null)
            {
                foreach (var cmd in cmds)
                {
                    cache.InsertItem(cmd);
                }
            }
            return(cmds);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 匹对指令
        /// </summary>
        /// <param name="dBase"></param>
        /// <param name="m"></param>
        /// <returns></returns>
        public static LightDataModel.tbl_troneItem FillToneId(Shotgun.Database.IBaseDataClass2 dBase, Logical.ISMS_DataItem m)
        {

            var cmds = LightDataModel.tbl_troneItem.QueryTronesByPort(dBase, m.sp_api_url_id, m.ori_trone);
            if (cmds == null && cmds.Count() == 0)
                return null;//没有可用通道
            var mMsg = m.ori_order;
            if (mMsg == null)
                mMsg = string.Empty;

            m.trone_id = C_TM_NOT_Order;
            LightDataModel.tbl_troneItem trone = null;
            int iCount = 0;
            foreach (var cmd in cmds)
            {
                var cMsg = cmd.orders;
                if (string.IsNullOrEmpty(cMsg) && string.IsNullOrEmpty(mMsg))
                {
                    trone = cmd;
                    iCount++;
                    continue;
                }
                if (cmd.match_price)
                {//无规则指令,直接匹配价格
                    if (cmd.price == (m.price / 100m))
                    {
                        trone = cmd;
                        iCount++;
                        continue;
                    }
                }
                else if (cmd.is_dynamic)
                {//模糊指令
                    var rx = Library.GetRegex(cmd.orders);
                    if (rx.IsMatch(mMsg))
                    {
                        trone = cmd;
                        iCount++;
                        continue;
                    }
                }
                else
                {//精确指令
                    if (mMsg.Equals(cMsg, StringComparison.OrdinalIgnoreCase))
                    {
                        trone = cmd;
                        iCount++;
                        continue;
                    }
                }
            }
            if (iCount == 0)
                return null;

            if (iCount > 1)
            {
                m.trone_id = C_TM_MULTI_TRONE;
                return null;
            }

            if (m.price > 0)
            {//SP价格校验 防止配置错
                if (trone.price != (m.price / 100m))
                {
                    m.trone_id = C_TM_PRICE_NOT_EQUQLS;
                    return null;
                }
            }
            m.trone_id = trone.id;


            var sp_trone = LightDataModel.tbl_sp_troneItem.GetRowById(dBase, trone.sp_trone_id, null);
            if (sp_trone == null)
                return null;
            m.trone_type = sp_trone.trone_type;
            if (m is LightDataModel.tbl_mrItem)
            {
                var mr = (LightDataModel.tbl_mrItem)m;
                mr.sp_trone_id = sp_trone.id;
                if (mr.ivr_time > 20)
                {
                    m.trone_id = C_IVR_TIME_CFG_ERROR;
                    return null;
                }
                else if (mr.ivr_time > 0)
                {
                    if (m.trone_type != C_IVR_TRONE_TYPE)
                    { //通道类型检查
                        m.trone_id = C_IVR_TRONE_TYPE_ERROR;
                        return null;
                    }
                }
            }


            return trone;
        }
 /// <summary>
 /// 创建一个新的查询器
 /// </summary>
 public static Shotgun.Model.List.LightDataQueries <tbl_day_month_limitItem> GetQueries(Shotgun.Database.IBaseDataClass2 dBase)
 {
     return(new Shotgun.Model.List.LightDataQueries <tbl_day_month_limitItem>(tableName, Fields.PrimaryKey, dBase, SCHEMA));
 }
Exemplo n.º 11
0
 /// <summary>
 /// 从指的数据库中删除该行数据。根据主键值执行删除。此操作为永久删除
 /// </summary>
 /// <param name="dBase"></param>
 public virtual void DeleteFrom(Shotgun.Database.IBaseDataClass2 dBase)
 {
     dBase.DeleteData(this);
 }
Exemplo n.º 12
0
 /// <summary>
 /// 保存当前已经修改的数据
 /// 根据标识字段,自动选择insert还update,如是insert会更新标识字段
 /// </summary>
 /// <param name="dBase"></param>
 public virtual void SaveToDatabase(Shotgun.Database.IBaseDataClass2 dBase)
 {
     dBase.SaveData(this);
 }