using DevComponents.DotNetBar; using DevComponents.DotNetBar.Controls; using DevComponents.DotNetBar.SuperGrid; 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 MTimeSummary : BusinessForm { public MTimeSummary() { InitializeComponent(); //this.controlBox1.Text = "时段分析"; //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; //初始化表格样式 LoadTablStyle(); 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; } #region /// /// 表格样式 /// public void LoadTablStyle() { //第一步是主单样式 var cellStyles1 = timeListTable.DefaultVisualStyles.CellStyles; //设置选中以背景色、行字体颜色 cellStyles1.Selected.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); cellStyles1.Selected.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); cellStyles1.Selected.TextColor = ColorTranslator.FromHtml("#000000"); //设置鼠标经过背景色、行字体颜色 cellStyles1.SelectedMouseOver.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); cellStyles1.SelectedMouseOver.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); cellStyles1.SelectedMouseOver.TextColor = ColorTranslator.FromHtml("#000000"); var rowStyles1 = timeListTable.DefaultVisualStyles.RowStyles; //设置选中以后行头部、底部背景色、头部字体颜色 rowStyles1.Selected.RowHeaderStyle.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles1.Selected.RowHeaderStyle.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles1.Selected.RowHeaderStyle.TextColor = ColorTranslator.FromHtml("#000000"); rowStyles1.Selected.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles1.Selected.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); //设置鼠标经过行头部、底部背景色、头部字体颜色 rowStyles1.SelectedMouseOver.RowHeaderStyle.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles1.SelectedMouseOver.RowHeaderStyle.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles1.SelectedMouseOver.RowHeaderStyle.TextColor = ColorTranslator.FromHtml("#000000"); rowStyles1.SelectedMouseOver.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles1.SelectedMouseOver.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); //第二步是销售明细样式 var cellStyles2 = timeDateListTable.DefaultVisualStyles.CellStyles; //设置选中以背景色、行字体颜色 cellStyles2.Selected.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); cellStyles2.Selected.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); cellStyles2.Selected.TextColor = ColorTranslator.FromHtml("#000000"); //设置鼠标经过背景色、行字体颜色 cellStyles2.SelectedMouseOver.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); cellStyles2.SelectedMouseOver.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); cellStyles2.SelectedMouseOver.TextColor = ColorTranslator.FromHtml("#000000"); var rowStyles2 = timeDateListTable.DefaultVisualStyles.RowStyles; //设置选中以后行头部、底部背景色、头部字体颜色 rowStyles2.Selected.RowHeaderStyle.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles2.Selected.RowHeaderStyle.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles2.Selected.RowHeaderStyle.TextColor = ColorTranslator.FromHtml("#000000"); rowStyles2.Selected.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles2.Selected.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); //设置鼠标经过行头部、底部背景色、头部字体颜色 rowStyles2.SelectedMouseOver.RowHeaderStyle.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles2.SelectedMouseOver.RowHeaderStyle.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles2.SelectedMouseOver.RowHeaderStyle.TextColor = ColorTranslator.FromHtml("#000000"); rowStyles2.SelectedMouseOver.Background.Color1 = ColorTranslator.FromHtml("#E7EAF1"); rowStyles2.SelectedMouseOver.Background.Color2 = ColorTranslator.FromHtml("#E7EAF1"); //按钮样式 TodayTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#00C7BA"); TodayTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#00C7BA"); TodayTouchButtonX.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); } #endregion 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) { } private void btn_time_Click(object sender, EventArgs e) { } 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).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), 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")); } } 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 = "合计"; 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) { } 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 ("合计".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) { } 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; } } private void btn_exit_touch_Click(object sender, TouchEventArgs e) { OnCloseTouchClick(sender, e); } private void btn_time_touch_Click(object sender, EventArgs e) { var obj = sender as TouchLabelXX; var typeStr = obj.Tag as string; var type = (ReportQuickDate)Enum.Parse(typeof(ReportQuickDate), typeStr); //按钮样式 //今天 TodayTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#FFFFFF"); TodayTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#FFFFFF"); TodayTouchButtonX.ForeColor = ColorTranslator.FromHtml("#000000"); //昨天 YesdayTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#FFFFFF"); YesdayTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#FFFFFF"); YesdayTouchButtonX.ForeColor = ColorTranslator.FromHtml("#000000"); //上一天 BefdayTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#FFFFFF"); BefdayTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#FFFFFF"); BefdayTouchButtonX.ForeColor = ColorTranslator.FromHtml("#000000"); //本周 ToWeekTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#FFFFFF"); ToWeekTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#FFFFFF"); ToWeekTouchButtonX.ForeColor = ColorTranslator.FromHtml("#000000"); //上周 BefWeekTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#FFFFFF"); BefWeekTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#FFFFFF"); BefWeekTouchButtonX.ForeColor = ColorTranslator.FromHtml("#000000"); //本月 ToMonthTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#FFFFFF"); ToMonthTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#FFFFFF"); ToMonthTouchButtonX.ForeColor = ColorTranslator.FromHtml("#000000"); //上月 BefMonthTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#FFFFFF"); BefMonthTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#FFFFFF"); BefMonthTouchButtonX.ForeColor = ColorTranslator.FromHtml("#000000"); switch (type) { case ReportQuickDate.今天: { TodayTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#00C7BA"); TodayTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#00C7BA"); TodayTouchButtonX.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); } break; case ReportQuickDate.昨天: { YesdayTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#00C7BA"); YesdayTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#00C7BA"); YesdayTouchButtonX.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); } break; case ReportQuickDate.前一天: { BefdayTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#00C7BA"); BefdayTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#00C7BA"); BefdayTouchButtonX.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); } break; case ReportQuickDate.本周: { ToWeekTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#00C7BA"); ToWeekTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#00C7BA"); ToWeekTouchButtonX.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); } break; case ReportQuickDate.上周: { BefWeekTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#00C7BA"); BefWeekTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#00C7BA"); BefWeekTouchButtonX.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); } break; case ReportQuickDate.本月: { ToMonthTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#00C7BA"); ToMonthTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#00C7BA"); ToMonthTouchButtonX.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); } break; case ReportQuickDate.上月: { BefMonthTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#00C7BA"); BefMonthTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#00C7BA"); BefMonthTouchButtonX.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); } break; default: { TodayTouchButtonX.BackgroundStyle.BackColor = ColorTranslator.FromHtml("#00C7BA"); TodayTouchButtonX.BackgroundStyle.BackColor2 = ColorTranslator.FromHtml("#00C7BA"); TodayTouchButtonX.ForeColor = ColorTranslator.FromHtml("#FFFFFF"); } break; } 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; } } private void btn_print_touchh_Click(object sender, TouchEventArgs 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 (!"合计".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, "开始打印"); //构建收银小票模版参数 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 (!"合计".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, "开始打印"); //构建收银小票模版参数 var vars = ReportHelper.BuilderTimeVariable(printTimeSummaryTicket); Tuple result = ReportHelper.PrinterTicket("时段分析", vars, true, false); this.ShowToastNotify(this, string.Format("{0}", result.Item2)); } break; } } private void btn_query_touch_Click(object sender, TouchEventArgs e) { QueryTicket(); } } }