You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

619 lines
19 KiB

1 month ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO;
using System.Text;
using Sog;
using MySql.Data.MySqlClient;
namespace bill_statistics
{
public class ExportToMysql : Singleton<ExportToMysql>
{
private MySqlDB m_mySqlDb;
private Dictionary<string, int> m_createdSqlDict = new Dictionary<string, int>();
private Dictionary<DateTime, ActiveData_userNewAdd> m_activeDataUserNewAdd = new Dictionary<DateTime, ActiveData_userNewAdd>();
private Dictionary<DateTime, ActiveData_userActive> m_activeDataUserActive = new Dictionary<DateTime, ActiveData_userActive>();
private Dictionary<DateTime, IncomeData_daily> m_incomeDataDaily = new Dictionary<DateTime, IncomeData_daily>();
private List<Coupon_Info> m_exchangeCoupon = new List<Coupon_Info>(); //电话卡
private Dictionary<DateTime, NewUserRecharge_Info> m_NewUserRecharge = new Dictionary<DateTime, NewUserRecharge_Info>();
private Dictionary<DateTime, PrintTreasureDraw_Info> m_PrintTreasureDraw = new Dictionary<DateTime, PrintTreasureDraw_Info>();
private Dictionary<DateTime, PrintChipDiamond_Info> m_PrintChipDiamond = new Dictionary<DateTime, PrintChipDiamond_Info>();
private Dictionary<DateTime, PrintChipDiamondRange_Info> m_PrintChipDiamondRange = new Dictionary<DateTime, PrintChipDiamondRange_Info>();
//按分钟的时间,导入数据库记录,不能重复了
private Dictionary<string, int> m_onlineAlreadyExportToSql = new Dictionary<string, int>();
//销毁的时候置空
public void Dispose()
{
m_mySqlDb.Dispose();
m_mySqlDb = null;
}
public ExportToMysql()
{
}
public void Init(string db, string ip, string user, string password)
{
m_mySqlDb = new MySqlDB(db, ip, user, password);
}
public MySqlDB GetMySqlDB()
{
return m_mySqlDb;
}
public bool CheckThisHourAlreadyInSql(string fileName)
{
bool result = false;
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8);
fileStream.Seek(0, SeekOrigin.Begin);
string content = streamReader.ReadLine();
while (content != null)
{
string[] splitStr = content.Split('|');
if (splitStr.Length > 2)
{
int billType = BillTypeUtils.GetBillType(splitStr[1]);
//取online日志,判断数据库里是否存在
if (billType == 3001)
{
DateTime dateTime = BillTypeUtils.GetTime(splitStr[0]);
if (BillTypeUtils.NeedExportOnlineByTime(dateTime))
{
string sql = BillSqlBuilder.GenSelectOnlineByTime(splitStr[0]);
try
{
MySqlDataReader reader = m_mySqlDb.ExecReader(sql);
if (reader == null)
{
//说明不存在
break;
}
if (reader.HasRows)
{
result = true;
}
//记住一定要Close
reader.Close();
}
catch (Exception)
{
break;
}
break;
}
}
}
content = streamReader.ReadLine();
}
streamReader.Dispose();
fileStream.Dispose();
return result;
}
public void DoExportBillType(string[] splitStr)
{
DateTime dateTime = BillTypeUtils.GetTime(splitStr[0]);
string strTimeMinute = splitStr[0].Substring(0, 16);
//获取这一天的标准时间
DateTime thisdayBeginTime = dateTime - dateTime.TimeOfDay;
int billType = BillTypeUtils.GetBillType(splitStr[1]);
string tablename = "bill_" + billType.ToString();
//在线就1张表
if (billType == 3001)
{
//online表只需要5分钟一条就可以了,其他的可以不入库
if (BillTypeUtils.NeedExportOnlineByTime(dateTime) == false)
{
return;
}
//重复一分钟的记录已经导了一条了,第二条不要
if (m_onlineAlreadyExportToSql.ContainsKey(strTimeMinute))
{
return;
}
}
else
{
string beginTimeStr = thisdayBeginTime.ToString("u");
//2016-10-09
beginTimeStr = beginTimeStr.Substring(0, 10);
tablename = tablename + "_" + beginTimeStr;
}
string createSql = BillSqlBuilder.GenCreateTableSql(splitStr, billType, tablename);
if (m_createdSqlDict.ContainsKey(createSql) == false)
{
m_createdSqlDict.Add(createSql, 1);
MySqlDataReader reader = m_mySqlDb.ExecReader(createSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
{
List<MySqlParameter> paramList = new List<MySqlParameter>();
string insertSql = BillSqlBuilder.GenInsertTableSql(splitStr, tablename, paramList);
if (insertSql != null)
{
MySqlDataReader reader = m_mySqlDb.ExecReader(insertSql, paramList.ToArray());
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
if (billType == 3001)
{
if (m_onlineAlreadyExportToSql.ContainsKey(strTimeMinute) == false)
{
m_onlineAlreadyExportToSql.Add(strTimeMinute, 1);
}
}
}
}
}
public void AddOneDailyNewAddUserInfo(ActiveData_userNewAdd data)
{
if (m_activeDataUserNewAdd.ContainsKey(data.dateId))
{
m_activeDataUserNewAdd[data.dateId] = data;
}
else
{
m_activeDataUserNewAdd.Add(data.dateId, data);
}
}
//新进用户统计结果表
public void ExportActUserNew()
{
string tablename = "daily_activedata_usernewadd";
string createSql = BillSqlBuilder.GenCreateTableActiveUserNewSql(tablename);
if (m_createdSqlDict.ContainsKey(createSql) == false)
{
m_createdSqlDict.Add(createSql, 1);
MySqlDataReader reader = m_mySqlDb.ExecReader(createSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
foreach (var dailyNewUser in m_activeDataUserNewAdd.Values)
{
string insertSql = BillSqlBuilder.GenInsertTableActiveUserNewSql(tablename, dailyNewUser);
if (insertSql != null)
{
MySqlDataReader reader = m_mySqlDb.ExecReader(insertSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
}
}
public void AddOneDailyActiveUserInfo(ActiveData_userActive data)
{
if (m_activeDataUserActive.ContainsKey(data.dateId))
{
m_activeDataUserActive[data.dateId] = data;
}
else
{
m_activeDataUserActive.Add(data.dateId, data);
}
}
//活跃用户统计结果表
public void ExportActUserActive()
{
string tablename = "daily_activedata_useractive";
string createSql = BillSqlBuilder.GenCreateTableActiveUserSql(tablename);
if (m_createdSqlDict.ContainsKey(createSql) == false)
{
m_createdSqlDict.Add(createSql, 1);
MySqlDataReader reader = m_mySqlDb.ExecReader(createSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
foreach (var dailyUser in m_activeDataUserActive.Values)
{
string insertSql = BillSqlBuilder.GenInsertTableActiveUserSql(tablename, dailyUser);
if (insertSql != null)
{
MySqlDataReader reader = m_mySqlDb.ExecReader(insertSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
}
}
public void AddOneDailyPaymentInfo(IncomeData_daily data)
{
if (m_incomeDataDaily.ContainsKey(data.dateId))
{
m_incomeDataDaily[data.dateId] = data;
}
else
{
m_incomeDataDaily.Add(data.dateId, data);
}
}
//付费统计
public void ExportPayment()
{
string tablename = "daily_incomedata";
string createSql = BillSqlBuilder.GenCreateTablePaymentSql(tablename);
if (m_createdSqlDict.ContainsKey(createSql) == false)
{
m_createdSqlDict.Add(createSql, 1);
MySqlDataReader reader = m_mySqlDb.ExecReader(createSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
foreach (var payment in m_incomeDataDaily.Values)
{
string insertSql = BillSqlBuilder.GenInsertTablePaymentSql(tablename, payment);
if (insertSql != null)
{
MySqlDataReader reader = m_mySqlDb.ExecReader(insertSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
}
}
//电话卡
public void AddExchangeCouponInfo(Coupon_Info data)
{
m_exchangeCoupon.Add(data);
/*
if (m_exchangeCoupon.ContainsKey(data.dateId))
{
m_exchangeCoupon[data.dateId] = data;
}
else
{
m_exchangeCoupon.Add(data.dateId, data);
}
*/
}
public void ExportCoupon()
{
string tablename = "daily_coupon";
string createSql = BillSqlBuilder.GenCreateTableCouponsql(tablename);
if (m_createdSqlDict.ContainsKey(createSql) == false)
{
m_createdSqlDict.Add(createSql, 1);
MySqlDataReader reader = m_mySqlDb.ExecReader(createSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
foreach (var couponInfo in m_exchangeCoupon)
{
List<MySqlParameter> paramList = new List<MySqlParameter>();
string insertSql = BillSqlBuilder.GenInsertTableCouponSql(tablename, couponInfo, paramList);
if (insertSql != null)
{
MySqlDataReader reader = m_mySqlDb.ExecReader(insertSql, paramList.ToArray());
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
}
}
public void AddNewUserRechargeInfo(NewUserRecharge_Info data)
{
if (m_NewUserRecharge.ContainsKey(data.dateId))
{
m_NewUserRecharge[data.dateId] = data;
}
else
{
m_NewUserRecharge.Add(data.dateId, data);
}
}
//新用户付费
public void ExportNewUserRecharge()
{
string tablename = "daily_newuserrecharge";
string createSql = BillSqlBuilder.GenCreateTableNewUserRechargeSql(tablename);
if (m_createdSqlDict.ContainsKey(createSql) == false)
{
m_createdSqlDict.Add(createSql, 1);
MySqlDataReader reader = m_mySqlDb.ExecReader(createSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
foreach (var NewUserRecharge in m_NewUserRecharge.Values)
{
string insertSql = BillSqlBuilder.GenInsertTableNewUserRechargeSql(tablename, NewUserRecharge);
if (insertSql != null)
{
MySqlDataReader reader = m_mySqlDb.ExecReader(insertSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
}
}
public void AddPrintTreasureDrawInfo(PrintTreasureDraw_Info data)
{
if (m_PrintTreasureDraw.ContainsKey(data.dateId))
{
m_PrintTreasureDraw[data.dateId] = data;
}
else
{
m_PrintTreasureDraw.Add(data.dateId, data);
}
}
//夺宝
public void ExportPrintTreasureDraw()
{
string tablename = "daily_printtreasuredraw";
string createSql = BillSqlBuilder.GenCreateTablePrintTreasureDrawSql(tablename);
if (m_createdSqlDict.ContainsKey(createSql) == false)
{
m_createdSqlDict.Add(createSql, 1);
MySqlDataReader reader = m_mySqlDb.ExecReader(createSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
foreach (var PrintTreasureDraw in m_PrintTreasureDraw.Values)
{
string insertSql = BillSqlBuilder.GenInsertTablePrintTreasureDrawSql(tablename, PrintTreasureDraw);
if (insertSql != null)
{
MySqlDataReader reader = m_mySqlDb.ExecReader(insertSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
}
}
public void AddPrintChipDiamondInfo(PrintChipDiamond_Info data)
{
if (m_PrintChipDiamond.ContainsKey(data.dateId))
{
m_PrintChipDiamond[data.dateId] = data;
}
else
{
m_PrintChipDiamond.Add(data.dateId, data);
}
}
//筹码钻石产出消耗
public void ExportPrintChipDiamond()
{
string tablename = "daily_printchipdiamond";
string createSql = BillSqlBuilder.GenCreateTablePrintChipDiamondSql(tablename);
if (m_createdSqlDict.ContainsKey(createSql) == false)
{
m_createdSqlDict.Add(createSql, 1);
MySqlDataReader reader = m_mySqlDb.ExecReader(createSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
foreach (var PrintChipDiamond in m_PrintChipDiamond.Values)
{
string insertSql = BillSqlBuilder.GenInsertTablePrintChipDiamondSql(tablename, PrintChipDiamond);
if (insertSql != null)
{
MySqlDataReader reader = m_mySqlDb.ExecReader(insertSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
}
}
public void AddPrintChipDiamondRangeInfo(PrintChipDiamondRange_Info data)
{
if (m_PrintChipDiamondRange.ContainsKey(data.dateId))
{
m_PrintChipDiamondRange[data.dateId] = data;
}
else
{
m_PrintChipDiamondRange.Add(data.dateId, data);
}
}
public void ExportPrintChipDiamondRange()
{
string tablename = "daily_printchipdiamondrange";
string createSql = BillSqlBuilder.GenCreateTablePrintChipDiamondRangeSql(tablename);
if (m_createdSqlDict.ContainsKey(createSql) == false)
{
m_createdSqlDict.Add(createSql, 1);
MySqlDataReader reader = m_mySqlDb.ExecReader(createSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
foreach (var PrintChipDiamondRange in m_PrintChipDiamondRange.Values)
{
string insertSql = BillSqlBuilder.GenInsertTablePrintChipDiamondRangeSql(tablename, PrintChipDiamondRange);
if (insertSql != null)
{
MySqlDataReader reader = m_mySqlDb.ExecReader(insertSql);
if (reader == null)
{
return;
}
//记住一定要Close
reader.Close();
}
}
}
}
}