StatisticsViewModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. using AutoMapper;
  2. using BizService;
  3. using LiveCharts;
  4. using LiveCharts.Defaults;
  5. using LiveCharts.Wpf;
  6. using Microsoft.Extensions.Logging;
  7. using Model.Dto;
  8. using Model.Entities;
  9. using Prism.Commands;
  10. using Prism.Mvvm;
  11. using Prism.Services.Dialogs;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Collections.ObjectModel;
  15. using System.Linq;
  16. using System.Text;
  17. using System.Threading.Tasks;
  18. namespace BlankApp1.ViewModels
  19. {
  20. public class StatisticsViewModel:BindableBase
  21. {
  22. private readonly IDialogService _dialog;
  23. private readonly IOptionConfigService _optionConfigService;
  24. private readonly IBasicPlcTestSchemeService _basicPlcTestSchemeService;
  25. private readonly IBasicPlcTestSchemeDtlService _basicPlcTestSchemeDtlService;
  26. private readonly IBizTestRecordDtlService _iBizTestRecordDtlService;
  27. private readonly ILogger _logger;
  28. private readonly IMapper _mapper;
  29. private List<SchDtlWithResultModel> allConfigList = new List<SchDtlWithResultModel>();//所有方案
  30. private List<SchDtlWithResultModel> conditionConfig = new List<SchDtlWithResultModel>();//符合条件的方案
  31. private int allSchCount = 0; //所有测试项
  32. public StatisticsViewModel(IDialogService dialog, IMenuService menuService, IOptionConfigService optionConfigService, IBasicPlcTestSchemeService basicPlcTestSchemeService, IBasicPlcTestSchemeDtlService basicPlcTestSchemeDtlService, IBizTestRecordDtlService iBizTestRecordDtlService, IMapper mapper, ILogger logger)
  33. {
  34. _dialog = dialog;
  35. _optionConfigService = optionConfigService;
  36. _basicPlcTestSchemeService = basicPlcTestSchemeService;
  37. _basicPlcTestSchemeDtlService = basicPlcTestSchemeDtlService;
  38. _iBizTestRecordDtlService = iBizTestRecordDtlService;
  39. _logger = logger;
  40. _mapper = mapper;
  41. PieSeriesCollectionDone = new SeriesCollection();
  42. PieSeriesCollectionFail= new SeriesCollection();
  43. PieSeriesCollectionEveryday = new SeriesCollection();
  44. PieSeriesCollectionPLC = new SeriesCollection();
  45. OnLoadCommand = new DelegateCommand(OnLoad);
  46. }
  47. private void OnLoad()
  48. {
  49. GetContent();
  50. GetPieSeriesDone();
  51. GetPieSeriesPLC();
  52. GetPieSeriesEveryDay();
  53. GetPieSeriesFail();
  54. }
  55. /// <summary>
  56. /// 获取解决方案
  57. /// </summary>
  58. private void GetContent()
  59. {
  60. allSchCount = 0;
  61. //所有测试方案
  62. var schlist = _basicPlcTestSchemeService.QueryList();
  63. var configList = _mapper.Map<List<bas_plc_test_scheme>, List<BasicPlcTestSchemeDto>>(schlist);
  64. //清空集合
  65. BaseConfigList.Clear();
  66. allConfigList.Clear();
  67. conditionConfig.Clear();
  68. //查找测试项名称
  69. foreach (var sch in configList)
  70. {
  71. long schId = sch.SchemeId;
  72. //在解决方案详细表中查找所有的测试项
  73. var items = _basicPlcTestSchemeDtlService.FindAllBySchId(schId);
  74. foreach (var item in items)
  75. {
  76. //上面是测试方案明细
  77. SchDtlWithResultModel basicPlcTestSchemeDto = new SchDtlWithResultModel();
  78. basicPlcTestSchemeDto.SchemeId = item.scheme_dtl_id;
  79. basicPlcTestSchemeDto.SchemeName = sch.SchemeName;
  80. basicPlcTestSchemeDto.DeviceName = sch.DeviceName;
  81. switch (item.item_type)
  82. {
  83. case 0:
  84. basicPlcTestSchemeDto.ItemType = "前置项";
  85. break;
  86. case 1:
  87. basicPlcTestSchemeDto.ItemType = "PLC点位测试项";
  88. break;
  89. case 2:
  90. basicPlcTestSchemeDto.ItemType = "Robot动作测试";
  91. break;
  92. }
  93. basicPlcTestSchemeDto.ItemName = item.item_name;
  94. basicPlcTestSchemeDto.CreateBy = sch.CreateBy;
  95. basicPlcTestSchemeDto.CreateTime = sch.CreateTime;
  96. //这里是测试项 结果和 测试记录明细状态
  97. var recordDetail = _iBizTestRecordDtlService.FindRecordDetailBySchDtlID(item.scheme_dtl_id);
  98. if (recordDetail != null)
  99. {
  100. basicPlcTestSchemeDto.StartTestTime = recordDetail.start_test_time.Value;
  101. basicPlcTestSchemeDto.FinishTestTime = recordDetail.finish_test_time.Value;
  102. basicPlcTestSchemeDto.TestMode = recordDetail.test_mode;
  103. switch (recordDetail.test_result)
  104. {
  105. case 0:
  106. basicPlcTestSchemeDto.TestResult = "不通过";
  107. break;
  108. case 1:
  109. basicPlcTestSchemeDto.TestResult = "通过";
  110. break;
  111. }
  112. switch (recordDetail.status)
  113. {
  114. case 0:
  115. basicPlcTestSchemeDto.TestStatus = "未测试";
  116. break;
  117. case 99:
  118. basicPlcTestSchemeDto.TestStatus = "已测试";
  119. break;
  120. }
  121. allConfigList.Add(basicPlcTestSchemeDto);
  122. conditionConfig.Add(basicPlcTestSchemeDto);
  123. }
  124. //统计所有测试项个数
  125. allSchCount++;
  126. }
  127. //默认显示的第一页
  128. Getpage();
  129. }
  130. }
  131. /// <summary>
  132. /// 获取页面
  133. /// </summary>
  134. private void Getpage()
  135. {
  136. CurrentPage = 1;
  137. TotalCount = conditionConfig.Count;
  138. CurrentPageChanged();
  139. }
  140. /// <summary>
  141. /// 页面变化
  142. /// </summary>
  143. private void CurrentPageChanged()
  144. {
  145. BaseConfigList.Clear();
  146. foreach (var i in conditionConfig.Skip((CurrentPage - 1) * CountPerPage).Take(CountPerPage))
  147. {
  148. BaseConfigList.Add(i);
  149. }
  150. }
  151. private void GetPieSeriesDone()
  152. {
  153. PieSeriesCollectionDone.Clear();
  154. int tesNoDone = allSchCount-TotalCount;
  155. ChartValues<int> chartvalue = new ChartValues<int>();
  156. chartvalue.Add(TotalCount);
  157. ChartValues<int> noChartvalue = new ChartValues<int>();
  158. noChartvalue.Add(tesNoDone);
  159. PieSeries series = new PieSeries();
  160. series.DataLabels = true;
  161. series.Title = "已测试";
  162. series.Values = chartvalue;
  163. PieSeries series2 = new PieSeries();
  164. series2.DataLabels = true;
  165. series2.Title = "未测试";
  166. series2.Values = noChartvalue;
  167. PieSeriesCollectionDone.Add(series);
  168. PieSeriesCollectionDone.Add(series2);
  169. }
  170. private void GetPieSeriesPLC()
  171. {
  172. PieSeriesCollectionPLC.Clear();
  173. int succTest = allConfigList.FindAll(x => x.TestResult == "通过").Count;
  174. int noSuccTest = allConfigList.FindAll(x => x.TestResult == "不通过").Count;
  175. ChartValues<int> chartvalue = new ChartValues<int>();
  176. chartvalue.Add(succTest);
  177. ChartValues<int> nochartvalue = new ChartValues<int>();
  178. nochartvalue.Add(noSuccTest);
  179. PieSeries series = new PieSeries();
  180. series.DataLabels = true;
  181. series.Title = "通过率";
  182. series.Values = chartvalue;
  183. PieSeries series2 = new PieSeries();
  184. series2.DataLabels = true;
  185. series2.Title = "不通过率";
  186. series2.Values = nochartvalue;
  187. PieSeriesCollectionPLC.Add(series);
  188. PieSeriesCollectionPLC.Add(series2);
  189. }
  190. private void GetPieSeriesFail()
  191. {
  192. PieSeriesCollectionFail.Clear();
  193. int succTest = allConfigList.FindAll(x => x.TestResult == "通过").Count;
  194. int noSuccTest = allConfigList.FindAll(x => x.TestResult == "不通过").Count;
  195. ChartValues<int> chartvalue = new ChartValues<int>();
  196. chartvalue.Add(succTest);
  197. ChartValues<int> noChartvalue = new ChartValues<int>();
  198. noChartvalue.Add(noSuccTest);
  199. PieSeries series = new PieSeries();
  200. series.DataLabels = true;
  201. series.Title = "通过";
  202. series.Values = chartvalue;
  203. PieSeries series2 = new PieSeries();
  204. series2.DataLabels = true;
  205. series2.Title = "不通过";
  206. series2.Values = noChartvalue;
  207. PieSeriesCollectionFail.Add(series);
  208. PieSeriesCollectionFail.Add(series2);
  209. }
  210. private void GetPieSeriesEveryDay()
  211. {
  212. PieSeriesCollectionEveryday.Clear();
  213. int dayTest = allConfigList.FindAll(x => x.StartTestTime.Date == DateTime.Now.Date).Count;
  214. ChartValues<int> chartvalue = new ChartValues<int>();
  215. chartvalue.Add(dayTest);
  216. PieSeries series = new PieSeries();
  217. series.DataLabels = true;
  218. series.Title = "测试数量";
  219. series.Values = chartvalue;
  220. PieSeriesCollectionEveryday.Add(series);
  221. }
  222. #region 数据绑定
  223. /// <summary>
  224. /// 图标数据
  225. /// </summary>
  226. private SeriesCollection pieSeriesCollectionDone;
  227. public SeriesCollection PieSeriesCollectionDone
  228. {
  229. get { return pieSeriesCollectionDone; }
  230. set { pieSeriesCollectionDone = value; RaisePropertyChanged(); }
  231. }
  232. private SeriesCollection pieSeriesCollectionPLC;
  233. public SeriesCollection PieSeriesCollectionPLC
  234. {
  235. get { return pieSeriesCollectionPLC; }
  236. set { pieSeriesCollectionPLC = value; RaisePropertyChanged(); }
  237. }
  238. private SeriesCollection pieSeriesCollectionEveryday;
  239. public SeriesCollection PieSeriesCollectionEveryday
  240. {
  241. get { return pieSeriesCollectionEveryday; }
  242. set { pieSeriesCollectionEveryday = value; RaisePropertyChanged(); }
  243. }
  244. private SeriesCollection pieSeriesCollectionFail;
  245. public SeriesCollection PieSeriesCollectionFail
  246. {
  247. get { return pieSeriesCollectionFail; }
  248. set { pieSeriesCollectionFail = value; RaisePropertyChanged(); }
  249. }
  250. /// <summary>
  251. /// 总条数
  252. /// </summary>
  253. private int totalCount;
  254. public int TotalCount
  255. {
  256. get { return totalCount; }
  257. set { totalCount = value; RaisePropertyChanged(); CurrentPageChanged(); }
  258. }
  259. /// <summary>
  260. /// 每页数量
  261. /// </summary>
  262. private int countPerPage = 10;
  263. public int CountPerPage
  264. {
  265. get { return countPerPage; }
  266. set { countPerPage = value; RaisePropertyChanged(); CurrentPageChanged(); }
  267. }
  268. /// <summary>
  269. /// 单前页
  270. /// </summary>
  271. private int currentPage = 1;
  272. public int CurrentPage
  273. {
  274. get { return currentPage; }
  275. set { currentPage = value; RaisePropertyChanged(); CurrentPageChanged(); }
  276. }
  277. private ObservableCollection<SchDtlWithResultModel> baseConfigList = new ObservableCollection<SchDtlWithResultModel>();
  278. public ObservableCollection<SchDtlWithResultModel> BaseConfigList
  279. {
  280. get { return baseConfigList; }
  281. set { SetProperty(ref baseConfigList, value); }
  282. }
  283. #endregion
  284. #region 命令绑定
  285. public DelegateCommand OnLoadCommand { set; get; }
  286. #endregion
  287. }
  288. }