/// <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); }
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()); } }
/// <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)); }
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)); }
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)); }
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); }
/// <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); }
/// <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); }
/// <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)); }
/// <summary> /// 从指的数据库中删除该行数据。根据主键值执行删除。此操作为永久删除 /// </summary> /// <param name="dBase"></param> public virtual void DeleteFrom(Shotgun.Database.IBaseDataClass2 dBase) { dBase.DeleteData(this); }
/// <summary> /// 保存当前已经修改的数据 /// 根据标识字段,自动选择insert还update,如是insert会更新标识字段 /// </summary> /// <param name="dBase"></param> public virtual void SaveToDatabase(Shotgun.Database.IBaseDataClass2 dBase) { dBase.SaveData(this); }