革博士V2程序
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

265 lignes
9.7 KiB

  1. using ClosedXML.Excel;
  2. using LeatherApp.Utils;
  3. using Models;
  4. using Newtonsoft.Json.Linq;
  5. using Service;
  6. using SqlSugar;
  7. using Sunny.UI;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.ComponentModel;
  11. using System.Data;
  12. using System.Drawing;
  13. using System.Drawing.Imaging;
  14. using System.IO;
  15. using System.Linq;
  16. using System.Linq.Expressions;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. using System.Windows.Forms;
  20. namespace LeatherApp.Page
  21. {
  22. public partial class FChart : UIPage
  23. {
  24. RecordsService service=new RecordsService();
  25. public FChart()
  26. {
  27. InitializeComponent();
  28. initData();
  29. }
  30. private void initData()
  31. {
  32. this.uiProcessDay.Maximum = this.uiProcessMonth.Maximum = this.uiProcessQuarter.Maximum = this.uiProcessYear.Maximum = 100;
  33. var list1 = service.GetReport_Qualified_Total("");
  34. this.lblTotal_Day.Text += list1[0][0].ToString();
  35. this.lblQualified_Day.Text += list1[0][1].ToString();
  36. this.uiProcessDay.Value = list1[0][0] > 0 ? list1[0][1] / list1[0][0] : 0;
  37. this.lblTotal_Month.Text += list1[1][0].ToString();
  38. this.lblQualified_Month.Text += list1[1][1].ToString();
  39. this.uiProcessMonth.Value = list1[1][0] > 0 ? list1[1][1] / list1[1][0] : 0;
  40. this.lblTotal_Quarter.Text += list1[2][0].ToString();
  41. this.lblQualified_Quarter.Text += list1[2][1].ToString();
  42. this.uiProcessQuarter.Value = list1[2][0] > 0 ? list1[2][1] / list1[2][0] : 0;
  43. this.lblTotal_Year.Text += list1[3][0].ToString();
  44. this.lblQualified_Year.Text += list1[3][1].ToString();
  45. this.uiProcessYear.Value = list1[3][0] > 0 ? list1[3][1] / list1[3][0] : 0;
  46. //
  47. var exp = createQueryExpression();
  48. try
  49. {
  50. string data = service.GetReport_Qualified_Date(exp);
  51. JArray jArray = JArray.Parse(data);
  52. initQualifiedChar(jArray);
  53. data = service.GetReport_Defects_Date(exp);
  54. jArray = JArray.Parse(data);
  55. initDefectChar(jArray);
  56. data = service.GetReport_Defects_Total(exp);
  57. jArray = JArray.Parse(data);
  58. initPieChar((JObject)jArray[0]);
  59. }
  60. catch (Exception ex)
  61. {
  62. API.OutputDebugString("FCHAR Err:"+ex.Message+ex.StackTrace);
  63. }
  64. }
  65. /// <summary>
  66. /// 合格率趋势图
  67. /// </summary>
  68. /// <param name="data"></param>
  69. private void initQualifiedChar(JArray data)
  70. {
  71. UIBarOption option = new UIBarOption();
  72. option.Title = new UITitle();
  73. option.Title.Text = barcharQualified.Text;
  74. //option.Title.SubText = "BarChart";
  75. //设置Legend
  76. option.Legend = new UILegend();
  77. option.Legend.Orient = UIOrient.Horizontal;
  78. option.Legend.Top = UITopAlignment.Top;
  79. option.Legend.Left = UILeftAlignment.Left;
  80. option.Legend.AddData("总量");
  81. option.Legend.AddData("合格量");
  82. var series = new UIBarSeries();
  83. series.Name = "总量";
  84. var series2 = new UIBarSeries();
  85. series2.Name = "合格量";
  86. foreach (JObject item in data)
  87. {
  88. series.AddData(item.Value<int>("Total"));
  89. series2.AddData(item.Value<int>("Qualified"));
  90. option.XAxis.Data.Add(item.Value<DateTime>("Date").ToString("yyyy-MM-dd"));
  91. }
  92. //数据显示小数位数
  93. series.DecimalPlaces = 0;
  94. series2.DecimalPlaces = 0;
  95. option.Series.Add(series);
  96. option.Series.Add(series2);
  97. option.ToolTip.Visible = true;
  98. option.YAxis.Scale = true;
  99. option.XAxis.Name = "日期";
  100. option.XAxis.AxisLabel.Angle = 30;//(0° ~ 90°)
  101. option.YAxis.Name = "数值";
  102. //坐标轴显示小数位数
  103. option.YAxis.AxisLabel.DecimalPlaces = 0;
  104. //option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = "上限", Value = 12 });
  105. //option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Gold, Name = "下限", Value = -20 });
  106. option.ToolTip.AxisPointer.Type = UIAxisPointerType.Shadow;
  107. option.ShowValue = true;
  108. barcharQualified.SetOption(option);
  109. }
  110. /// <summary>
  111. /// 瑕疵量趋势图
  112. /// </summary>
  113. /// <param name="data"></param>
  114. private void initDefectChar(JArray data)
  115. {
  116. UILineOption option = new UILineOption();
  117. option.ToolTip.Visible = true;
  118. option.Title = new UITitle();
  119. option.Title.Text = linecharDefect.Text;
  120. //option.Title.SubText = "LineChart";
  121. option.XAxisType = UIAxisType.DateTime;
  122. foreach (JObject obj in data)
  123. {
  124. string date = obj.Value<DateTime>("Date").ToString("yyyy-MM-dd");
  125. if(!option.XAxis.Data.Contains(date))
  126. option.XAxis.Data.Add(date);
  127. foreach (var item in obj.Properties())
  128. {
  129. if (item.Name == "Date") continue;
  130. if (!option.Series.ContainsKey(item.Name))
  131. option.AddSeries(new UILineSeries(item.Name)).ShowLine=true;
  132. option.Series[item.Name].Add(date, (int)item.Value);
  133. }
  134. }
  135. option.GreaterWarningArea = new UILineWarningArea(3.5);
  136. option.LessWarningArea = new UILineWarningArea(2.2, Color.Gold);
  137. option.YAxisScaleLines.Add(new UIScaleLine("上限", 3.5, Color.Red));
  138. option.YAxisScaleLines.Add(new UIScaleLine("下限", 2.2, Color.Gold));
  139. option.XAxis.Name = "日期";
  140. option.YAxis.Name = "数值";
  141. //X轴坐标轴显示格式化
  142. option.XAxis.AxisLabel.DateTimeFormat = "yyyy-MM-dd";
  143. //Y轴坐标轴显示小数位数
  144. option.YAxis.AxisLabel.DecimalPlaces = 0;
  145. //设置X轴显示范围
  146. //option.XAxis.SetRange(dt, dt.AddHours(8));
  147. linecharDefect.SetOption(option);
  148. }
  149. /// <summary>
  150. /// 瑕疵分布图
  151. /// </summary>
  152. /// <param name="data"></param>
  153. private void initPieChar(JObject data)
  154. {
  155. var option = new UIPieOption();
  156. //设置Title
  157. option.Title = new UITitle();
  158. option.Title.Text = pieDefect.Text;
  159. option.Title.SubText = "";
  160. option.Title.Left = UILeftAlignment.Center;
  161. //设置ToolTip
  162. option.ToolTip.Visible = true;
  163. //设置Legend
  164. option.Legend = new UILegend();
  165. option.Legend.Orient = UIOrient.Vertical;
  166. option.Legend.Top = UITopAlignment.Top;
  167. option.Legend.Left = UILeftAlignment.Left;
  168. //设置Series
  169. var series = new UIPieSeries();
  170. series.Name = "瑕疵数量";
  171. series.Center = new UICenter(50, 55);
  172. series.Radius = 70;
  173. series.Label.Show = true;
  174. foreach (var item in data.Properties())
  175. {
  176. option.Legend.AddData(item.Name);
  177. series.AddData(item.Name, (double)item.Value);
  178. }
  179. //增加Series
  180. option.Series.Clear();
  181. option.Series.Add(series);
  182. //显示数据小数位数
  183. option.DecimalPlaces = 1;
  184. //设置Option
  185. pieDefect.SetOption(option);
  186. }
  187. private Expression<Func<Records, bool>> createQueryExpression()
  188. {
  189. //return Expressionable.Create<Records>()
  190. // .And(it => it.CreateTime >= uiDatePicker1.Value.SetTime(0,0,0))
  191. // .And(it => it.CreateTime < uiDatePicker2.Value.SetTime(0, 0, 0).AddDays(1))
  192. // .AndIF(!string.IsNullOrWhiteSpace(txtBatchId.Text), it => it.BatchId.Contains(txtBatchId.Text.Trim()))
  193. // .AndIF(!string.IsNullOrWhiteSpace(txtReelId.Text), it => it.ReelId.Contains(txtReelId.Text.Trim()))
  194. // .ToExpression();//注意 这一句 不能少
  195. return null;
  196. }
  197. private void FChart_Shown(object sender, EventArgs e)
  198. {
  199. barcharQualified.Height = linecharDefect.Height = pieDefect.Height / 2 - 5;
  200. linecharDefect.Top = pieDefect.Top+ pieDefect.Height/2 + 5;
  201. }
  202. private void btnQuery_Click(object sender, EventArgs e)
  203. {
  204. }
  205. private void btnBack_Click(object sender, EventArgs e)
  206. {
  207. Frame.SelectPage(1002);
  208. }
  209. private void btnExport_Click(object sender, EventArgs e)
  210. {
  211. Bitmap bmp = new Bitmap(this.Width, this.Height);
  212. Graphics graphics = Graphics.FromImage(bmp);
  213. Rectangle rectangle = new Rectangle(0, 0, this.Width, this.Height);
  214. this.DrawToBitmap(bmp, rectangle);
  215. var path=FileUtil.saveAsFile("分析图.jpg", "图像文件|*.jpg");
  216. if (string.IsNullOrWhiteSpace(path))
  217. return;
  218. bmp.Save(path,ImageFormat.Jpeg);
  219. UIMessageTip.ShowOk("导出成功!", 1000);
  220. System.Diagnostics.Process.Start(path);
  221. }
  222. }
  223. }