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

194 lines
9.1 KiB
C#

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
namespace POSV.Utils
{
public class InitUtils
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
private static object _lock = new object();
private static InitUtils _instance;
public static InitUtils Instance
{
get
{
if (_instance == null)
{
lock (_lock)
{
_instance = new InitUtils();
}
}
return _instance;
}
}
/// <summary>
/// 系统初始化,清理数据库数据
/// </summary>
/// <param name="tenantId"></param>
/// <returns></returns>
public bool Init(string tenantId,string storeId,bool tenantChanged , bool storeChanged)
{
bool result = false;
try
{
var lists = new ConcurrentQueue<string>();
//租户或者门店任意一个变更,都清除数据
if (tenantChanged || storeChanged)
{
//变更开放接口的租户编码
lists.Enqueue(string.Format("update [pos_apis] set [tenantId] = '{0}';" , tenantId));
//变更开放地址的租户编码
lists.Enqueue(string.Format("update [pos_urls] set [tenantId] = '{0}';" , tenantId));
//变更参数配置的租户编码
lists.Enqueue(string.Format("update [pos_config] set [tenantId] = '{0}';" , tenantId));
//变更参数配置-流水序号
lists.Enqueue(string.Format("update [pos_config] set [values] = '{0}' where [group] = '{1}' and [keys] = '{2}';" , "0001" , ConfigConstant.GROUP_BUSINESS , ConfigConstant.VOUCHER_NO));
//变更模块表的租户编码
lists.Enqueue(string.Format("update [pos_module] set [tenantId] = '{0}';" , tenantId));
//变更资源表的租户编码
lists.Enqueue(string.Format("update [pos_resources] set [tenantId] = '{0}';" , tenantId));
//变更快捷表的租户编码
lists.Enqueue(string.Format("update [pos_shortcut] set [tenantId] = '{0}';" , tenantId));
//清理厨打方案表信息
lists.Enqueue("delete from [pos_kit_plan];");
//清理订单主表信息
lists.Enqueue("delete from [pos_order];");
//清理订单商品明细表信息
lists.Enqueue("delete from [pos_order_item];");
//清理订单商品做法表信息
lists.Enqueue("delete from [pos_order_item_make];");
//清理订单商品优惠表信息
lists.Enqueue("delete from [pos_order_item_promotion];");
//清理订单优惠表信息
lists.Enqueue("delete from [pos_order_promotion];");
//清理订单支付表信息
lists.Enqueue("delete from [pos_order_pay];");
//清理耗料数据
lists.Enqueue("delete from [pos_order_product_burden];");
//清理厨显方案表信息
lists.Enqueue("delete from [pos_kds_plan];");
//清理授权日志信息
lists.Enqueue("delete from [pos_log];");
//清理沽清信息
lists.Enqueue("delete from [pos_sale_clear];");
//清理交班信息
lists.Enqueue("delete from [pos_store_handover];");
lists.Enqueue("delete from [pos_store_handover_detail];");
lists.Enqueue("delete from [pos_store_handover_detail_part];");
//清理未上传交班
lists.Enqueue("delete from [pos_upload_handover_json];");
//清理未上传非营业数据
lists.Enqueue("delete from [pos_upload_cost_revenue_json];");
//清理非营业收入支出
lists.Enqueue("delete from [pos_store_cost_revenue];");
//清理熟客信息
lists.Enqueue("delete from [pos_visitor];");
lists.Enqueue("delete from [pos_visitor_address];");
lists.Enqueue("delete from [pos_visitor_tag];");
//清理挂单信息
lists.Enqueue("delete from [pos_order_temp];");
//清理外送单信息
lists.Enqueue("delete from [pos_order_delivery];");
//清理交班信息
lists.Enqueue("delete from [pos_business_plan_log];");
//清理卡充值信息
lists.Enqueue("delete from [pos_card_recharge_pay];");
lists.Enqueue("delete from [pos_card_recharge];");
lists.Enqueue("delete from [pos_card_account_destroy];");
//清理核销记录
lists.Enqueue("delete from [pos_saoma_pay_ticket];");
//清理礼品卡销售记录
lists.Enqueue("delete from [pos_card_sale];");
lists.Enqueue("delete from [pos_card_sale_pay];");
//清理操作日志
lists.Enqueue("delete from [pos_store_operation_log];");
}
//zhangy 2020-02-25 Edit
//清理数据版本,无论是否更换门店或者租户,数据都重新下载
lists.Enqueue("delete from [pos_server_data_version];");
lock (Global.Instance.SyncLock)
{
SqliteUtils.ExecuteTransaction(lists);
Thread.Sleep(30);
}
result = true;
}
catch(Exception ex)
{
logger.Error(ex, "数据库初始化异常");
result = false;
}
return result;
}
/// <summary>
/// 清理3个月前已上传数据
/// </summary>
/// <returns></returns>
public bool CleanHistoryData()
{
bool result = false;
try
{
logger.Info("开始删除数据");
Stopwatch sw = Stopwatch.StartNew();
//删除3个月前的记录
var startMonth = DateTime.Now.AddMonths(-3).ToString("yyyy-MM-dd 00:00:00");
//删除5个月前的核销记录
var startHXMonth = DateTime.Now.AddMonths(-5).ToString("yyyy-MM-dd 00:00:00");
var list = new ConcurrentQueue<string>();
list.Enqueue(string.Format("delete from [pos_order_delivery] where orderId in (select id from [pos_order] where syncStatus = 1 and finishDate < '{0}');", startMonth));
list.Enqueue(string.Format("delete from [pos_order_item] where orderId in (select id from [pos_order] where syncStatus = 1 and finishDate < '{0}');", startMonth));
list.Enqueue(string.Format("delete from [pos_order_item_make] where orderId in (select id from [pos_order] where syncStatus = 1 and finishDate < '{0}');", startMonth));
list.Enqueue(string.Format("delete from [pos_order_item_promotion] where orderId in (select id from [pos_order] where syncStatus = 1 and finishDate < '{0}');", startMonth));
list.Enqueue(string.Format("delete from [pos_order_pay] where orderId in (select id from [pos_order] where syncStatus = 1 and finishDate < '{0}');", startMonth));
list.Enqueue(string.Format("delete from [pos_order_promotion] where orderId in (select id from [pos_order] where syncStatus = 1 and finishDate < '{0}');", startMonth));
list.Enqueue(string.Format("delete from [pos_order] where syncStatus = 1 and finishDate < '{0}';", startMonth));
list.Enqueue(string.Format("delete from [pos_order_product_burden] where uploadStatus = 1 and createDate < '{0}';", startMonth));
list.Enqueue(string.Format("delete from [pos_saoma_pay_ticket] where createDate < '{0}';", startHXMonth));
list.Enqueue(string.Format("delete from [pos_store_operation_log] where createDate < '{0}';", startHXMonth));
//清理卡务数据
lock (Global.Instance.SyncLock)
{
SqliteUtils.ExecuteTransaction(list);
Thread.Sleep(30);
}
logger.Info("完成清理[{0}]之前的历史数据,耗时[{1}]", startMonth, sw.ElapsedMilliseconds);
sw.Stop();
result = true;
}
catch(Exception ex)
{
logger.Error(ex, "清理历史数据发生异常");
}
return result;
}
}
}