namespace Dao { using Common; using Model; using Oracle.DataAccess.Client; using System; using System.Collections.Generic; using System.Data; using System.Runtime.InteropServices; using System.Text; using System.Text.RegularExpressions; public class GwAuditCacheDao : IDisposable { private int CalcDeductCount(int count, int deductPercent) { return ((count * deductPercent) / 100); } public void Dispose() { } private string GenerateDeductRownumString(int totalCount, int count) { Dictionary dictionary = new Dictionary(); Random random = new Random(); while ((dictionary.Count < count) && (dictionary.Count < totalCount)) { int key = random.Next(totalCount); if (!dictionary.ContainsKey(key)) { dictionary.Add(key, key); } } StringBuilder builder = new StringBuilder(); foreach (int num2 in dictionary.Keys) { builder.AppendFormat("{0},", num2); } if (builder.Length > 0) { builder.Remove(builder.Length - 1, 1); } return builder.ToString(); } //处理账号集合 private string GenerateOpIDsString(string selectedOpIDs) { if (string.IsNullOrEmpty(selectedOpIDs)) { return string.Empty; } return string.Format("ca.SP_ID IN ({0}) AND ", Regex.Replace(selectedOpIDs, @"(\d+)", (MatchEvaluator)(m => ("'" + m.Groups[1].Value + "'")))); } public GwAuditCache GetAuditCache(string hashCode) { string str = "SELECT COUNT(*) AS CNT, HASH_CODE,MSG_CONTENT,STRATEGY_ID,DEDUCT_PERCENT,sp_id,client_id FROM GW_AUDIT_CACHE WHERE HASH_CODE=:HASH_CODE GROUP BY HASH_CODE,MSG_CONTENT,STRATEGY_ID,DEDUCT_PERCENT,sp_id,client_id"; OracleParameter[] parameterArray = new OracleParameter[] { new OracleParameter(":HASH_CODE", hashCode) }; using (OracleDataReader reader = OracleHelper.ExecuteReader(str, OracleHelper.Connection, parameterArray)) { while ((reader != null) && reader.Read()) { GwAuditCache cache = new GwAuditCache(); OracleReaderWrapper wrapper = new OracleReaderWrapper(reader); cache.StrategyID = wrapper.GetInt("STRATEGY_ID", 0); cache.Content = wrapper.GetString("MSG_CONTENT", ""); cache.Cnt = wrapper.GetInt("CNT", 0); cache.DeductPercent = wrapper.GetInt("DEDUCT_PERCENT", 0); cache.SpID = wrapper.GetString("sp_id", ""); cache.ClientID = wrapper.GetString("client_id", ""); return cache; } } return null; } /// /// 加载待审核数据 /// /// /// /// /// /// /// /// /// /// public DataTable LoadCache(DateTime begin, DateTime end, int status, string content, string spids, out int recordCount, int pageSize, int pageIndex) { string str = string.Format("SELECT op.op_name,ca.SP_ID,ca.OP_ID,ca.MSG_CONTENT,ca.KEYWORD,ca.HASH_CODE,COUNT(*) CNT FROM GW_AUDIT_CACHE ca left join gw_op op on ca.op_id=op.op_id WHERE {0} ca.AP_SUBMIT_TIME BETWEEN :START_TIME AND :END_TIME AND (ca.MSG_CONTENT LIKE :CONTENT OR :CONTENT='%%') AND ca.AUDITING_STATUS=:AUDITING_STATUS \r\n GROUP BY ca.SP_ID,ca.OP_ID,ca.MSG_CONTENT,ca.KEYWORD,ca.HASH_CODE,op.op_name", this.GenerateOpIDsString(spids)); List list = new List(); OracleParameter[] parameterArray = new OracleParameter[] { new OracleParameter(":START_TIME", begin), new OracleParameter(":END_TIME", end), new OracleParameter(":CONTENT", "%" + content + "%"), new OracleParameter(":AUDITING_STATUS", status) }; recordCount = Convert.ToInt32(OracleHelper.ExecuteScalar(OracleHelper.ToCountSql(str), OracleHelper.Connection, parameterArray)); return OracleHelper.Execute(OracleHelper.ToPagerSql(str, pageIndex, pageSize, recordCount), OracleHelper.Connection, parameterArray); } /// /// 加载详情 /// /// /// /// /// public DataTable LoadDetail(DateTime startTime, DateTime endTime, string hashCode) { return OracleHelper.Execute("SELECT AP_SUBMIT_TIME,MSG_CONTENT,MOBILE,SP_ID,OP_ID FROM GW_AUDIT_CACHE WHERE HASH_CODE=:HASH_CODE AND AP_SUBMIT_TIME BETWEEN :START_TIME AND :END_TIME AND ROWNUM < 20", OracleHelper.Connection, new OracleParameter[] { new OracleParameter(":HASH_CODE", hashCode), new OracleParameter(":START_TIME", startTime), new OracleParameter(":END_TIME", endTime) }); } public List LoadInfoList(string spID, string pattern) { List list = new List(); string str = "SELECT * FROM GW_AUDIT_CACHE WHERE SP_ID=:SP_ID AND regexp_like(replace(msg_content,CHR(10),'*'),:REGEXP) ORDER BY ID ASC"; OracleParameter[] parameterArray = new OracleParameter[] { new OracleParameter(":SP_ID", spID), new OracleParameter(":REGEXP", pattern) }; using (OracleDataReader reader = OracleHelper.ExecuteReader(str, OracleHelper.Connection, parameterArray)) { while ((reader != null) && reader.Read()) { OracleReaderWrapper wrapper = new OracleReaderWrapper(reader); GwAuditCache item = new GwAuditCache(); item.StrategyID = wrapper.GetInt("STRATEGY_ID", 0); item.CreateTime = wrapper.GetDateTime("AP_SUBMIT_TIME"); item.Content = wrapper.GetString("MSG_CONTENT", ""); item.Cnt = wrapper.GetInt("CNT", 0); list.Add(item); } } return list; } public List LoadInfoList(DateTime startTime, DateTime endTime, int auditingStatus, string content, string selectedOpIDs, out int recordcount, int pageSize, int pageIndex) { string str = string.Format("SELECT * FROM (SELECT TO_CHAR(AP_SUBMIT_TIME,'YYYY-MM-DD HH24:\"00\":\"00\"') as CREATE_TIME,COUNT(*) AS CNT,SP_ID,OP_ID,HASH_CODE, STRATEGY_ID,MSG_CONTENT, AUDITING_MODE,DEDUCT_PERCENT FROM GW_AUDIT_CACHE ca WHERE {0} (MSG_CONTENT LIKE :CONTENT OR :CONTENT='%%') AND AP_SUBMIT_TIME BETWEEN :START_TIME AND :END_TIME AND AUDITING_MODE IN (1,2) and AUDITING_STATUS=:AUDITING_STATUS GROUP BY TO_CHAR(AP_SUBMIT_TIME,'YYYY-MM-DD HH24:\"00\":\"00\"'),HASH_CODE,OP_ID, STRATEGY_ID,MSG_CONTENT,SP_ID,AUDITING_MODE,DEDUCT_PERCENT ORDER BY 1 ASC)", this.GenerateOpIDsString(selectedOpIDs)); List list = new List(); OracleParameter[] parameterArray = new OracleParameter[] { new OracleParameter(":START_TIME", startTime), new OracleParameter(":END_TIME", endTime), new OracleParameter(":CONTENT", "%" + content + "%"), new OracleParameter(":AUDITING_STATUS", auditingStatus) }; recordcount = Convert.ToInt32(OracleHelper.ExecuteScalar(OracleHelper.ToCountSql(str), OracleHelper.Connection, parameterArray)); using (OracleDataReader reader = OracleHelper.ExecuteReader(OracleHelper.ToPagerSql(str, pageIndex, pageSize, recordcount), OracleHelper.Connection, parameterArray)) { while ((reader != null) && reader.Read()) { GwAuditCache o = new GwAuditCache(); if (this.ReadInfo(reader, o)) { list.Add(o); } } } return list; } public bool MakeTest(string apID, int opID, string extNo, string extParams, string mobile, string content) { string str = "INSERT INTO GW_AUDIT_CACHE(ID,AP_MID, AP_ID, OP_ID, SP_ID, CLIENT_ID, STRATEGY_ID, EXT_NO,EXT_PARAMS, MOBILE, PK_TOTAL, PK_NUMBER, TPPID, TPUDHI, PRIORITY, RD_FLAG, MSG_FORMAT, MSG_LENGTH, MSG_CONTENT, AP_RESULT, AP_SUBMIT_TIME, AUDITING_STATUS, AUDITING_MODE, DEDUCT_PERCENT, HASH_CODE, PRICE,ROUTER_TYPE,MCPM) \r\nVALUES(:ID,:AP_MID,:AP_ID,:OP_ID, 0, 0, 0,:EXT_NO,:EXT_PARAMS, :MOBILE, 1, 1, 0, 0, 0, 1, 8, :MSG_LENGTH, :MSG_CONTENT, 0, SYSDATE, :AUDITING_STATUS, :AUDITING_MODE, 0, 0, 0,1,99999)"; OracleParameter[] parameterArray = new OracleParameter[] { new OracleParameter(":ID", DateTime.Now.AddYears(-2010).Ticks * 0x3e8L), new OracleParameter(":AP_MID", DateTime.Now.Ticks.ToString()), new OracleParameter(":AP_ID", apID), new OracleParameter(":OP_ID", opID), new OracleParameter(":MOBILE", mobile), new OracleParameter(":EXT_NO", extNo), new OracleParameter(":EXT_PARAMS", extParams), new OracleParameter(":MSG_LENGTH", content.Length * 2), new OracleParameter(":MSG_CONTENT", content), new OracleParameter(":AUDITING_STATUS", Convert.ToInt32((AuditingStatus)4)), new OracleParameter(":AUDITING_MODE", Convert.ToInt32((AuditingMode)1)) }; return (OracleHelper.ExecuteSql(str, OracleHelper.Connection, parameterArray) > 0); } private bool ReadInfo(OracleDataReader reader, GwAuditCache o) { OracleReaderWrapper wrapper = new OracleReaderWrapper(reader); o.HashCode = wrapper.GetString("HASH_CODE", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); o.StrategyID = wrapper.GetInt("STRATEGY_ID", 0); o.Content = wrapper.GetString("MSG_CONTENT", ""); o.Cnt = wrapper.GetInt("CNT", 0); o.DeductPercent = wrapper.GetInt("DEDUCT_PERCENT", 0); o.AuditingMode = (AuditingMode)wrapper.GetInt("AUDITING_MODE", 0); o.CreateTime = wrapper.GetDateTime("CREATE_TIME"); o.SpID = wrapper.GetString("SP_ID", ""); o.OpID = wrapper.GetString("OP_ID", ""); return true; } public bool UpdateCacheStatus(string hashCode, AuditingStatus status) { string str = "UPDATE GW_AUDIT_CACHE SET AP_SUBMIT_TIME=SYSDATE,AUDITING_STATUS=:AUDITING_STATUS WHERE HASH_CODE=:HASH_CODE"; OracleParameter[] parameterArray = new OracleParameter[] { new OracleParameter(":AUDITING_STATUS", (int)status), new OracleParameter(":HASH_CODE", hashCode) }; return (OracleHelper.ExecuteSql(str, OracleHelper.Connection, parameterArray) > 0); } public bool UpdateCacheStatus(string hashCode, AuditingStatus status, int opID) { string str = "UPDATE GW_AUDIT_CACHE SET AP_SUBMIT_TIME=SYSDATE, AUDITING_STATUS=:AUDITING_STATUS,OP_ID=:OP_ID,ROUTER_TYPE=1 WHERE HASH_CODE=:HASH_CODE"; OracleParameter[] parameterArray = new OracleParameter[] { new OracleParameter(":AUDITING_STATUS", (int)status), new OracleParameter(":HASH_CODE", hashCode), new OracleParameter(":OP_ID", opID) }; return (OracleHelper.ExecuteSql(str, OracleHelper.Connection, parameterArray) > 0); } } }