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.

224 lines
9.9 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mesnac.Action.Base;
using System.Windows.Forms;
using Mesnac.Controls.Base;
using Mesnac.Controls.Default;
using Mesnac.Codd.Session;
namespace Mesnac.Action.Feeding.Qingquan.Sys
{
/// <summary>
/// 清除历史存盘数据界面初始化
/// </summary>
public class InitClearHistoryDataUI : FeedingAction, IAction
{
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime);
ICSharpCode.Core.LoggingService.Debug("清除历史存盘数据界面初始化...");
//1、查找日期控件、信息提示控件
IBaseControl datePickerbaseControl = this.GetMCControlByKey("EndDatePicker").FirstOrDefault<IBaseControl>();
IBaseControl lblInfo = this.GetMCControlByKey("lblInfo").FirstOrDefault<IBaseControl>();
if (datePickerbaseControl != null)
{
datePickerbaseControl.MCValue = DateTime.Now.AddMonths(-3); //默认保留三个月的历史数据
}
if (lblInfo != null)
{
lblInfo.MCValue = String.Empty;
}
}
}
/// <summary>
/// 清除历史存盘数据
/// </summary>
public class ClearHistoryDataAction : FeedingAction , IAction
{
private IBaseControl _sender; //保存事件源
private IBaseControl _lblInfo; //消息标签
private IBaseControl _lblPercent; //百分比标签
private IBaseControl _progressBar; //进度条控件
private MCProgressBar _mcProgressBar; //
private DateTime _endDate = DateTime.Now.AddMonths(-3); //保存截止日期
private DateTime _minDate = DateTime.Now.AddMonths(-3).AddDays(-1); //保存最小日期
private System.Timers.Timer timer = new System.Timers.Timer();
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime);
if (MessageBox.Show(Language(40), Language(1), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
runtime.IsReturn = true;
return;
}
this._sender = runtime.Sender as IBaseControl;
this._lblInfo = this.GetMCControlByKey("lblInfo").FirstOrDefault<IBaseControl>();
this._lblPercent = this.GetMCControlByKey("lblPercent").FirstOrDefault<IBaseControl>();
this._progressBar = this.GetMCControlByKey("ProgressBar").FirstOrDefault<IBaseControl>();
IBaseControl datePickerbaseControl = this.GetMCControlByKey("EndDatePicker").FirstOrDefault<IBaseControl>();
if (this._progressBar != null)
{
this._mcProgressBar = this._progressBar as MCProgressBar;
if (this._mcProgressBar != null)
{
if (datePickerbaseControl != null)
{
DateTime.TryParse(datePickerbaseControl.MCValue.ToString(), out this._endDate);
if (this.GetMinDate(out this._minDate))
{
TimeSpan ts = this._endDate - this._minDate;
double days = ts.TotalDays + 1;
if (days > 0)
{
string msg = String.Empty;
msg = String.Format("清除{0:yyyy-MM-dd}之前的历史存盘数据!", this._endDate);
base.DBLog("系统操作", "清除历史存盘数据", msg);
this._mcProgressBar.Maximum = (int)days;
//启动执行清除历史数据的业务线程
timer.Interval = 500; //时间间隔0.5秒
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
//禁用事件源
if (this._sender != null)
{
this._sender.MCEnabled = false;
}
}
}
}
}
}
}
/// <summary>
/// 删除历史数据业务处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
ICSharpCode.Core.LoggingService.Debug("清除历史数据业务处理");
if (this._mcProgressBar != null)
{
if (this._mcProgressBar.Value < this._mcProgressBar.Maximum)
{
this._mcProgressBar.Value++;
if (this._lblPercent != null)
{
this._lblPercent.MCValue = String.Format("{0}", this._mcProgressBar.Value * 100 / this._mcProgressBar.Maximum);
}
if (this._lblInfo != null)
{
this._lblInfo.MCValue = String.Format("正在删除{0:yyyy-MM-dd}的数据...", this._minDate);
}
this.DeleteByEndDate(this._minDate);
if (this._minDate < this._endDate)
{
this._minDate = this._minDate.AddDays(1);
}
}
if (this._mcProgressBar.Value >= this._mcProgressBar.Maximum)
{
//终止线程
this.timer.Stop();
if (this._lblInfo != null)
{
this._lblInfo.MCValue = "本次删除执行完毕...";
}
//启用事件源
if (this._sender != null)
{
this._sender.MCEnabled = true;
}
}
}
}
/// <summary>
/// 删除指定日期之前的历史存盘数据
/// </summary>
/// <param name="endDate">截止日期</param>
public void DeleteByEndDate(DateTime endDate)
{
string strEndDate = String.Format("{0:yyMMdd}", endDate);
try
{
StringBuilder sbSql = new StringBuilder();
sbSql.Append("delete from PptMixData where left(Barcode,6) <= @endDate;"); //混炼数据
sbSql.Append("delete from PptWeigh where left(Barcode,6) <= @endDate;"); //称量数据
sbSql.Append("delete from PptLotData where left(Barcode,6) <= @endDate;"); //车报表
sbSql.Append("delete from PptGroupLot where FinishTag = 1 and convert(varchar,StartDatetime,12) <= @endDate;"); //批报表
sbSql.Append("delete from PptLotBatchCount where left(FirstPlanID,6) <= @endDate;"); //批次记录表
sbSql.Append("delete from PptShiftConfig where left(Barcode,6) <= @endDate;"); //架子信息表
sbSql.Append("delete from ppt_plan where LEFT(plan_id,6) <= @endDate;"); //计划表
DbHelper localHelper = base.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local);
localHelper.CommandType = System.Data.CommandType.Text;
localHelper.ClearParameter();
localHelper.CommandText = sbSql.ToString();
localHelper.AddParameter("@endDate", strEndDate);
localHelper.ExecuteNonQuery();
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("清除历史数据-删除指定日期之前的历史存盘数据失败:" + ex.Message);
}
try
{
string strSql = "delete from Ppt_CurveData where left(Barcode,6) <= @endDate"; //密炼曲线表
DbHelper localCurveHelper = base.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Curve);
localCurveHelper.CommandType = System.Data.CommandType.Text;
localCurveHelper.ClearParameter();
localCurveHelper.CommandText = strSql;
localCurveHelper.AddParameter("@endDate", strEndDate);
localCurveHelper.ExecuteNonQuery();
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("清除历史数据-删除指定日期之前的密炼曲线数据失败:" + ex.Message);
}
}
/// <summary>
/// 获取车报表中的最小日期
/// </summary>
/// <param name="minDate">输出参数:最小日期</param>
/// <returns>获取成功返回true失败返回false</returns>
public bool GetMinDate(out DateTime minDate)
{
bool blResult = false; //设置默认返回值
minDate = DateTime.Now.AddMonths(-3).AddDays(-1); //设置默认日期
try
{
string strSql = "select convert(datetime,left(MIN(barcode),6),12) from PptLotData";
DbHelper localHelper = base.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local);
localHelper.CommandType = System.Data.CommandType.Text;
localHelper.ClearParameter();
localHelper.CommandText = strSql;
object result = localHelper.ToScalar();
if (result != null && result != System.DBNull.Value)
{
blResult = DateTime.TryParse(result.ToString(), out minDate);
}
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("清除历史数据-获取最小日期失败:" + ex.Message);
}
return blResult;
}
}
}