using ClosedXML.Excel; using LeatherApp.Utils; using Models; using Newtonsoft.Json.Linq; using Service; using SqlSugar; using Sunny.UI; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace LeatherApp.Page { public partial class FChart : UIPage { RecordsService service=new RecordsService(); public FChart() { InitializeComponent(); initData(); } private void initData() { this.uiProcessDay.Maximum = this.uiProcessMonth.Maximum = this.uiProcessQuarter.Maximum = this.uiProcessYear.Maximum = 100; var list1 = service.GetReport_Qualified_Total(""); this.lblTotal_Day.Text += list1[0][0].ToString(); this.lblQualified_Day.Text += list1[0][1].ToString(); this.uiProcessDay.Value = list1[0][0] > 0 ? list1[0][1] / list1[0][0] : 0; this.lblTotal_Month.Text += list1[1][0].ToString(); this.lblQualified_Month.Text += list1[1][1].ToString(); this.uiProcessMonth.Value = list1[1][0] > 0 ? list1[1][1] / list1[1][0] : 0; this.lblTotal_Quarter.Text += list1[2][0].ToString(); this.lblQualified_Quarter.Text += list1[2][1].ToString(); this.uiProcessQuarter.Value = list1[2][0] > 0 ? list1[2][1] / list1[2][0] : 0; this.lblTotal_Year.Text += list1[3][0].ToString(); this.lblQualified_Year.Text += list1[3][1].ToString(); this.uiProcessYear.Value = list1[3][0] > 0 ? list1[3][1] / list1[3][0] : 0; // var exp = createQueryExpression(); try { string data = service.GetReport_Qualified_Date(exp); JArray jArray = JArray.Parse(data); initQualifiedChar(jArray); data = service.GetReport_Defects_Date(exp); jArray = JArray.Parse(data); initDefectChar(jArray); data = service.GetReport_Defects_Total(exp); jArray = JArray.Parse(data); initPieChar((JObject)jArray[0]); } catch (Exception ex) { API.OutputDebugString("FCHAR Err:"+ex.Message+ex.StackTrace); } } /// /// 合格率趋势图 /// /// private void initQualifiedChar(JArray data) { UIBarOption option = new UIBarOption(); option.Title = new UITitle(); option.Title.Text = barcharQualified.Text; //option.Title.SubText = "BarChart"; //设置Legend option.Legend = new UILegend(); option.Legend.Orient = UIOrient.Horizontal; option.Legend.Top = UITopAlignment.Top; option.Legend.Left = UILeftAlignment.Left; option.Legend.AddData("总量"); option.Legend.AddData("合格量"); var series = new UIBarSeries(); series.Name = "总量"; var series2 = new UIBarSeries(); series2.Name = "合格量"; foreach (JObject item in data) { series.AddData(item.Value("Total")); series2.AddData(item.Value("Qualified")); option.XAxis.Data.Add(item.Value("Date").ToString("yyyy-MM-dd")); } //数据显示小数位数 series.DecimalPlaces = 0; series2.DecimalPlaces = 0; option.Series.Add(series); option.Series.Add(series2); option.ToolTip.Visible = true; option.YAxis.Scale = true; option.XAxis.Name = "日期"; option.XAxis.AxisLabel.Angle = 30;//(0° ~ 90°) option.YAxis.Name = "数值"; //坐标轴显示小数位数 option.YAxis.AxisLabel.DecimalPlaces = 0; //option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = "上限", Value = 12 }); //option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Gold, Name = "下限", Value = -20 }); option.ToolTip.AxisPointer.Type = UIAxisPointerType.Shadow; option.ShowValue = true; barcharQualified.SetOption(option); } /// /// 瑕疵量趋势图 /// /// private void initDefectChar(JArray data) { UILineOption option = new UILineOption(); option.ToolTip.Visible = true; option.Title = new UITitle(); option.Title.Text = linecharDefect.Text; //option.Title.SubText = "LineChart"; option.XAxisType = UIAxisType.DateTime; foreach (JObject obj in data) { string date = obj.Value("Date").ToString("yyyy-MM-dd"); if(!option.XAxis.Data.Contains(date)) option.XAxis.Data.Add(date); foreach (var item in obj.Properties()) { if (item.Name == "Date") continue; if (!option.Series.ContainsKey(item.Name)) option.AddSeries(new UILineSeries(item.Name)).ShowLine=true; option.Series[item.Name].Add(date, (int)item.Value); } } option.GreaterWarningArea = new UILineWarningArea(3.5); option.LessWarningArea = new UILineWarningArea(2.2, Color.Gold); option.YAxisScaleLines.Add(new UIScaleLine("上限", 3.5, Color.Red)); option.YAxisScaleLines.Add(new UIScaleLine("下限", 2.2, Color.Gold)); option.XAxis.Name = "日期"; option.YAxis.Name = "数值"; //X轴坐标轴显示格式化 option.XAxis.AxisLabel.DateTimeFormat = "yyyy-MM-dd"; //Y轴坐标轴显示小数位数 option.YAxis.AxisLabel.DecimalPlaces = 0; //设置X轴显示范围 //option.XAxis.SetRange(dt, dt.AddHours(8)); linecharDefect.SetOption(option); } /// /// 瑕疵分布图 /// /// private void initPieChar(JObject data) { var option = new UIPieOption(); //设置Title option.Title = new UITitle(); option.Title.Text = pieDefect.Text; option.Title.SubText = ""; option.Title.Left = UILeftAlignment.Center; //设置ToolTip option.ToolTip.Visible = true; //设置Legend option.Legend = new UILegend(); option.Legend.Orient = UIOrient.Vertical; option.Legend.Top = UITopAlignment.Top; option.Legend.Left = UILeftAlignment.Left; //设置Series var series = new UIPieSeries(); series.Name = "瑕疵数量"; series.Center = new UICenter(50, 55); series.Radius = 70; series.Label.Show = true; foreach (var item in data.Properties()) { option.Legend.AddData(item.Name); series.AddData(item.Name, (double)item.Value); } //增加Series option.Series.Clear(); option.Series.Add(series); //显示数据小数位数 option.DecimalPlaces = 1; //设置Option pieDefect.SetOption(option); } private Expression> createQueryExpression() { //return Expressionable.Create() // .And(it => it.CreateTime >= uiDatePicker1.Value.SetTime(0,0,0)) // .And(it => it.CreateTime < uiDatePicker2.Value.SetTime(0, 0, 0).AddDays(1)) // .AndIF(!string.IsNullOrWhiteSpace(txtBatchId.Text), it => it.BatchId.Contains(txtBatchId.Text.Trim())) // .AndIF(!string.IsNullOrWhiteSpace(txtReelId.Text), it => it.ReelId.Contains(txtReelId.Text.Trim())) // .ToExpression();//注意 这一句 不能少 return null; } private void FChart_Shown(object sender, EventArgs e) { barcharQualified.Height = linecharDefect.Height = pieDefect.Height / 2 - 5; linecharDefect.Top = pieDefect.Top+ pieDefect.Height/2 + 5; } private void btnQuery_Click(object sender, EventArgs e) { } private void btnBack_Click(object sender, EventArgs e) { Frame.SelectPage(1002); } private void btnExport_Click(object sender, EventArgs e) { Bitmap bmp = new Bitmap(this.Width, this.Height); Graphics graphics = Graphics.FromImage(bmp); Rectangle rectangle = new Rectangle(0, 0, this.Width, this.Height); this.DrawToBitmap(bmp, rectangle); var path=FileUtil.saveAsFile("分析图.jpg", "图像文件|*.jpg"); if (string.IsNullOrWhiteSpace(path)) return; bmp.Save(path,ImageFormat.Jpeg); UIMessageTip.ShowOk("导出成功!", 1000); System.Diagnostics.Process.Start(path); } } }