using DevComponents.DotNetBar; using DevComponents.DotNetBar.Controls; using DevComponents.DotNetBar.SuperGrid; using POS.Language.Language; using POSV.Component; using POSV.Entity.Report; using POSV.Entity.ReportPrint; using POSV.Helper; using POSV.Utils; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace POSV.Report { public partial class TimeSummary : BusinessForm { public TimeSummary() { InitializeComponent(); this.controlBox1.Text = LangProxy.ToLang("时段分析"); this.controlBox1.ShowApplicationVersion = false; } public int Timetype = 0;//0不按日期1按日期 public int Index = 1;//时间间隔 1,2,3,4,6 /// /// 不按日期汇总 /// List listTimeType0 = new List(); /// /// 按日期汇总 /// List listTimeType1 = new List(); protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.DesignMode) return; DefaultGridStyle.setDefaultGridStyle(this.timeDateListTable); DefaultGridStyle.setDefaultGridStyle(this.timeListTable); this.startPicker.Value = DateTime.Parse(Global.Instance.BusinessPlan.StartTimeSimple); this.endPicker.Value = DateTime.Parse(Global.Instance.BusinessPlan.EndTimeSimple); listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value); timeListTable.PrimaryGrid.DataSource = listTimeType0; } private void OnControlBoxCloseClick(object sender, EventArgs e) { OnCloseTouchClick(sender, e); } private void OnCloseTouchClick(object sender, EventArgs e) { //先关闭父窗体 if (this.Owner != null) { this.Owner.Close(); } //再关闭当前窗体 this.Close(); } private void btn_query_Click(object sender, EventArgs e) { QueryTicket(); } private void btn_time_Click(object sender, EventArgs e) { var obj = sender as ButtonX; var typeStr = obj.Tag as string; var type = (ReportQuickDate)Enum.Parse(typeof(ReportQuickDate), typeStr); var res = DateTimeUtils.CalculateBusinessPlanDate(type, this.startPicker.Value, this.endPicker.Value); this.startPicker.Value = res.Item1; this.endPicker.Value = res.Item2; if (Timetype == 0) { listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value); timeListTable.PrimaryGrid.DataSource = listTimeType0; } else if (Timetype == 1) { listTimeType1 = getTimeList(this.startPicker.Value, this.endPicker.Value); timeDateListTable.PrimaryGrid.DataSource = listTimeType1; } } public List getTimeList(DateTime startTime, DateTime endTime) { List listSum = new List(); List list = null; try { using (var db = Global.Instance.OpenDataBase) { StringBuilder sqlBuld = new StringBuilder(); if (Timetype == 0) { sqlBuld.Append(" select SUBSTR(finishDate,12,2) as dateHour, count(*) as sumCount,sum(amount) as sumAmount,sum(receivableAmount) as sumReceivableAmount "); sqlBuld.Append(" from pos_order "); sqlBuld.Append(" where pos_order.finishDate >= '{0}' and pos_order.finishDate <= '{1}' "); sqlBuld.Append(" and pos_order.orderStatus in(2,4) "); sqlBuld.Append(" group by dateHour order by dateHour "); } else { sqlBuld.Append(" select SUBSTR(finishDate,0,14) as dateHour, count(*) as sumCount,sum(amount) as sumAmount,sum(receivableAmount) as sumReceivableAmount "); sqlBuld.Append(" from pos_order "); sqlBuld.Append(" where pos_order.finishDate >= '{0}' and pos_order.finishDate <= '{1}' "); sqlBuld.Append(" and pos_order.orderStatus in(2,4) "); sqlBuld.Append(" group by dateHour order by dateHour "); } string sql = string.Format(sqlBuld.ToString(), startTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.ToString("yyyy-MM-dd HH:mm:ss")); list = db.Query(sql).ToList(); if (list == null) { list = new List(); } //格式化开始结束时间 if (Timetype == 0) { DateTime startDateTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")); DateTime endDateTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")); while (startDateTime < endDateTime) { string dateHour = string.Format("{0}-{1}", startDateTime.ToString("HH"), startDateTime.AddHours(+Index).ToString("HH")); TimeSummaryTicket ticket = new TimeSummaryTicket(); decimal sumCountTicket = 0.0M; decimal sumAmountTicket = 0.0M; decimal sumReceivableAmountTicket = 0.0M; foreach (TimeSummaryTicket timeSummaryTicket in list) { DateTime summaryHour = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + timeSummaryTicket.DateHour + ":00:00"); if (DateTime.Compare(startDateTime, summaryHour) <= 0 && DateTime.Compare(startDateTime.AddHours(+Index), summaryHour) > 0) { sumCountTicket = sumCountTicket + timeSummaryTicket.SumCount; sumAmountTicket = sumAmountTicket + timeSummaryTicket.SumAmount; sumReceivableAmountTicket = sumReceivableAmountTicket + timeSummaryTicket.SumReceivableAmount; } } ticket.DateHour = dateHour; ticket.SumCount = (int)sumCountTicket; ticket.SumAmount = sumAmountTicket; ticket.SumReceivableAmount = sumReceivableAmountTicket; listSum.Add(ticket); startDateTime = DateTime.Parse(startDateTime.AddHours(+Index).ToString("yyyy-MM-dd HH:00:00")); } } else { DateTime startDateTime = DateTime.Parse(startTime.ToString("yyyy-MM-dd 00:00:00")); DateTime endDateTime = DateTime.Parse(endTime.ToString("yyyy-MM-dd 23:59:59")); while (startDateTime < endDateTime) { string dateHour = string.Format("{0}-{1}", startDateTime.ToString("yyyy-MM-dd HH:00:00"), startDateTime.AddHours(Index - 1).ToString("yyyy-MM-dd HH:59:59")); TimeSummaryTicket ticket = new TimeSummaryTicket(); decimal sumCountTicket = 0.0M; decimal sumAmountTicket = 0.0M; decimal sumReceivableAmountTicket = 0.0M; foreach (TimeSummaryTicket timeSummaryTicket in list) { DateTime summaryHour = DateTime.Parse(timeSummaryTicket.DateHour + ":00:00"); if (DateTime.Compare(startDateTime, summaryHour) <= 0 && DateTime.Compare(startDateTime.AddHours(Index - 1), summaryHour) >= 0) { sumCountTicket = sumCountTicket + timeSummaryTicket.SumCount; sumAmountTicket = sumAmountTicket + timeSummaryTicket.SumAmount; sumReceivableAmountTicket = sumReceivableAmountTicket + timeSummaryTicket.SumReceivableAmount; } } ticket.DateHour = dateHour; ticket.SumCount = (int)sumCountTicket; ticket.SumAmount = sumAmountTicket; ticket.SumReceivableAmount = sumReceivableAmountTicket; if (DateTime.Compare(startTime, DateTime.Parse(startDateTime.ToString("yyyy-MM-dd HH:00:00"))) <= 0 && DateTime.Compare(endTime, DateTime.Parse(startDateTime.AddHours(Index - 1).ToString("yyyy-MM-dd HH:59:59"))) >= 0) { listSum.Add(ticket); } startDateTime = DateTime.Parse(startDateTime.AddHours(Index).ToString("yyyy-MM-dd HH:00:00")); } } decimal sumCount = 0; decimal sumAmount = 0.0M; decimal sumReceivableAmount = 0.0M; foreach (TimeSummaryTicket timeSummaryTicket in listSum) { sumCount = sumCount + timeSummaryTicket.SumCount; sumAmount = sumAmount + timeSummaryTicket.SumAmount; sumReceivableAmount = sumReceivableAmount + timeSummaryTicket.SumReceivableAmount; } TimeSummaryTicket dish = new TimeSummaryTicket(); dish.DateHour = LangProxy.ToLang("合计"); dish.SumCount = (int)sumCount; dish.SumAmount = sumAmount; dish.SumReceivableAmount = sumReceivableAmount; listSum.Add(dish); } } catch (Exception ex) { LOGGER.Error(ex); } return listSum; } private void btn_exit_Click(object sender, EventArgs e) { OnCloseTouchClick(sender, e); } private void cb_change_click(object sender, EventArgs e) { var obj = sender as CheckBoxX; var indexT = obj.Tag as string; if ("Box1".Equals(indexT) && obj.Checked) { Index = 1; } else if ("Box2".Equals(indexT) && obj.Checked) { Index = 2; } else if ("Box3".Equals(indexT) && obj.Checked) { Index = 3; } else if ("Box4".Equals(indexT) && obj.Checked) { Index = 4; } else if ("Box6".Equals(indexT) && obj.Checked) { Index = 6; } if (Timetype == 0) { listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value); timeListTable.PrimaryGrid.DataSource = listTimeType0; } else if (Timetype == 1) { listTimeType1 = getTimeList(this.startPicker.Value, this.endPicker.Value); timeDateListTable.PrimaryGrid.DataSource = listTimeType1; } } private void OnBind(object sender, DevComponents.DotNetBar.SuperGrid.GridDataBindingCompleteEventArgs e) { var panel = e.GridPanel; foreach (var r in panel.Rows) { var row = r as GridRow; var dateHour = row.Cells["dateHour"].Value.ToString(); if (LangProxy.ToLang("合计").Equals(dateHour)) { row.CellStyles.Default.Background.Color1 = Color.AliceBlue; row.CellStyles.Default.Font = new Font("宋体", 14.00f, FontStyle.Bold, GraphicsUnit.Pixel); } } } private void tab_onclick(object sender, EventArgs e) { var obj = sender as SuperTabItem; var name = obj.Tag as string; switch (name) { case "superTabItem1"://不按日期 Timetype = 0; break; case "superTabItem2"://按日期 Timetype = 1; break; } if (Timetype == 0) { listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value); timeListTable.PrimaryGrid.DataSource = listTimeType0; } else if (Timetype == 1) { listTimeType1 = getTimeList(this.startPicker.Value, this.endPicker.Value); timeDateListTable.PrimaryGrid.DataSource = listTimeType1; } } private void btn_print_Click(object sender, EventArgs e) { switch (Timetype) { case 0: { PrintTimeSummaryTicket printTimeSummaryTicket = new PrintTimeSummaryTicket(); printTimeSummaryTicket.StoreNo = Global.Instance.Worker.StoreInfo.No; printTimeSummaryTicket.StoreName = Global.Instance.Worker.StoreInfo.PrintName; printTimeSummaryTicket.WorkerNo = Global.Instance.Worker.No; printTimeSummaryTicket.WorkerName = Global.Instance.Worker.Name; printTimeSummaryTicket.PrintTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); printTimeSummaryTicket.StartTime = this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"); printTimeSummaryTicket.EndTime = this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"); printTimeSummaryTicket.TotalCount = string.Format("{0}", 0); printTimeSummaryTicket.TotalMoney = string.Format("{0}", 0.00M); List imtes = new List(); foreach (TimeSummaryTicket ticket in listTimeType0) { if (!LangProxy.ToLang("合计").Equals(ticket.DateHour)) { imtes.Add(ticket); } else { printTimeSummaryTicket.TotalCount = string.Format("{0}", ticket.SumCount); printTimeSummaryTicket.TotalMoney = string.Format("{0}", ticket.SumAmount); } } printTimeSummaryTicket.Items = imtes; this.ShowToastNotify(this, LangProxy.ToLang("开始打印")); //构建收银小票模版参数 var vars = ReportHelper.BuilderTimeVariable(printTimeSummaryTicket); Tuple result = ReportHelper.PrinterTicket("时段分析", vars, true, false); this.ShowToastNotify(this, string.Format("{0}", result.Item2)); } break; case 1: { PrintTimeSummaryTicket printTimeSummaryTicket = new PrintTimeSummaryTicket(); printTimeSummaryTicket.StoreNo = Global.Instance.Worker.StoreInfo.No; printTimeSummaryTicket.StoreName = Global.Instance.Worker.StoreInfo.Name; printTimeSummaryTicket.WorkerNo = Global.Instance.Worker.No; printTimeSummaryTicket.WorkerName = Global.Instance.Worker.Name; printTimeSummaryTicket.PrintTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); printTimeSummaryTicket.StartTime = this.startPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"); printTimeSummaryTicket.EndTime = this.endPicker.Value.ToString("yyyy-MM-dd HH:mm:ss"); printTimeSummaryTicket.TotalCount = string.Format("{0}", 0); printTimeSummaryTicket.TotalMoney = string.Format("{0}", 0.00M); List imtes = new List(); foreach (TimeSummaryTicket ticket in listTimeType1) { if (!LangProxy.ToLang("合计").Equals(ticket.DateHour)) { imtes.Add(ticket); } else { printTimeSummaryTicket.TotalCount = string.Format("{0}", ticket.SumCount); printTimeSummaryTicket.TotalMoney = string.Format("{0}", ticket.SumAmount); } } printTimeSummaryTicket.Items = imtes; this.ShowToastNotify(this, LangProxy.ToLang("开始打印")); //构建收银小票模版参数 var vars = ReportHelper.BuilderTimeVariable(printTimeSummaryTicket); Tuple result = ReportHelper.PrinterTicket("时段分析", vars, true, false); this.ShowToastNotify(this, string.Format("{0}", result.Item2)); } break; } } private void OnControlBoxMinClick(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; } /// /// 日期变更 /// /// /// private void onDateChange(object sender, EventArgs e) { //QueryTicket(); } public void QueryTicket() { if (Timetype == 0) { listTimeType0 = getTimeList(this.startPicker.Value, this.endPicker.Value); timeListTable.PrimaryGrid.DataSource = listTimeType0; } else if (Timetype == 1) { listTimeType1 = getTimeList(this.startPicker.Value, this.endPicker.Value); timeDateListTable.PrimaryGrid.DataSource = listTimeType1; } } } }