StatisticsViewModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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.DeviceKindName = sch.DeviceKindName;
  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. conditionConfig = conditionConfig.OrderBy(x => x.SchemeName).ThenBy(x=>x.SchemeId).ToList();
  128. //默认显示的第一页
  129. Getpage();
  130. }
  131. }
  132. /// <summary>
  133. /// 获取页面
  134. /// </summary>
  135. private void Getpage()
  136. {
  137. CurrentPage = 1;
  138. TotalCount = conditionConfig.Count;
  139. CurrentPageChanged();
  140. }
  141. /// <summary>
  142. /// 页面变化
  143. /// </summary>
  144. private void CurrentPageChanged()
  145. {
  146. BaseConfigList.Clear();
  147. foreach (var i in conditionConfig.Skip((CurrentPage - 1) * CountPerPage).Take(CountPerPage))
  148. {
  149. BaseConfigList.Add(i);
  150. }
  151. }
  152. private void GetPieSeriesDone()
  153. {
  154. PieSeriesCollectionDone.Clear();
  155. int tesNoDone = allSchCount-TotalCount;
  156. ChartValues<int> chartvalue = new ChartValues<int>();
  157. chartvalue.Add(TotalCount);
  158. ChartValues<int> noChartvalue = new ChartValues<int>();
  159. noChartvalue.Add(tesNoDone);
  160. PieSeries series = new PieSeries();
  161. series.DataLabels = true;
  162. series.Title = "已测试";
  163. series.Values = chartvalue;
  164. PieSeries series2 = new PieSeries();
  165. series2.DataLabels = true;
  166. series2.Title = "未测试";
  167. series2.Values = noChartvalue;
  168. PieSeriesCollectionDone.Add(series);
  169. PieSeriesCollectionDone.Add(series2);
  170. }
  171. private void GetPieSeriesPLC()
  172. {
  173. PieSeriesCollectionPLC.Clear();
  174. int succTest = allConfigList.FindAll(x => x.TestResult == "通过").Count;
  175. int noSuccTest = allConfigList.FindAll(x => x.TestResult == "不通过").Count;
  176. ChartValues<int> chartvalue = new ChartValues<int>();
  177. chartvalue.Add(succTest);
  178. ChartValues<int> nochartvalue = new ChartValues<int>();
  179. nochartvalue.Add(noSuccTest);
  180. PieSeries series = new PieSeries();
  181. series.DataLabels = true;
  182. series.Title = "通过率";
  183. series.Values = chartvalue;
  184. PieSeries series2 = new PieSeries();
  185. series2.DataLabels = true;
  186. series2.Title = "不通过率";
  187. series2.Values = nochartvalue;
  188. PieSeriesCollectionPLC.Add(series);
  189. PieSeriesCollectionPLC.Add(series2);
  190. }
  191. private void GetPieSeriesFail()
  192. {
  193. PieSeriesCollectionFail.Clear();
  194. int succTest = allConfigList.FindAll(x => x.TestResult == "通过").Count;
  195. int noSuccTest = allConfigList.FindAll(x => x.TestResult == "不通过").Count;
  196. ChartValues<int> chartvalue = new ChartValues<int>();
  197. chartvalue.Add(succTest);
  198. ChartValues<int> noChartvalue = new ChartValues<int>();
  199. noChartvalue.Add(noSuccTest);
  200. PieSeries series = new PieSeries();
  201. series.DataLabels = true;
  202. series.Title = "通过";
  203. series.Values = chartvalue;
  204. PieSeries series2 = new PieSeries();
  205. series2.DataLabels = true;
  206. series2.Title = "不通过";
  207. series2.Values = noChartvalue;
  208. PieSeriesCollectionFail.Add(series);
  209. PieSeriesCollectionFail.Add(series2);
  210. }
  211. private void GetPieSeriesEveryDay()
  212. {
  213. PieSeriesCollectionEveryday.Clear();
  214. int dayTest = allConfigList.FindAll(x => x.StartTestTime.Date == DateTime.Now.Date).Count;
  215. ChartValues<int> chartvalue = new ChartValues<int>();
  216. chartvalue.Add(dayTest);
  217. PieSeries series = new PieSeries();
  218. series.DataLabels = true;
  219. series.Title = "测试数量";
  220. series.Values = chartvalue;
  221. PieSeriesCollectionEveryday.Add(series);
  222. }
  223. #region 数据绑定
  224. /// <summary>
  225. /// 图标数据
  226. /// </summary>
  227. private SeriesCollection pieSeriesCollectionDone;
  228. public SeriesCollection PieSeriesCollectionDone
  229. {
  230. get { return pieSeriesCollectionDone; }
  231. set { pieSeriesCollectionDone = value; RaisePropertyChanged(); }
  232. }
  233. private SeriesCollection pieSeriesCollectionPLC;
  234. public SeriesCollection PieSeriesCollectionPLC
  235. {
  236. get { return pieSeriesCollectionPLC; }
  237. set { pieSeriesCollectionPLC = value; RaisePropertyChanged(); }
  238. }
  239. private SeriesCollection pieSeriesCollectionEveryday;
  240. public SeriesCollection PieSeriesCollectionEveryday
  241. {
  242. get { return pieSeriesCollectionEveryday; }
  243. set { pieSeriesCollectionEveryday = value; RaisePropertyChanged(); }
  244. }
  245. private SeriesCollection pieSeriesCollectionFail;
  246. public SeriesCollection PieSeriesCollectionFail
  247. {
  248. get { return pieSeriesCollectionFail; }
  249. set { pieSeriesCollectionFail = value; RaisePropertyChanged(); }
  250. }
  251. /// <summary>
  252. /// 总条数
  253. /// </summary>
  254. private int totalCount;
  255. public int TotalCount
  256. {
  257. get { return totalCount; }
  258. set { totalCount = value; RaisePropertyChanged(); CurrentPageChanged(); }
  259. }
  260. /// <summary>
  261. /// 每页数量
  262. /// </summary>
  263. private int countPerPage = 15;
  264. public int CountPerPage
  265. {
  266. get { return countPerPage; }
  267. set { countPerPage = value; RaisePropertyChanged(); CurrentPageChanged(); }
  268. }
  269. /// <summary>
  270. /// 单前页
  271. /// </summary>
  272. private int currentPage = 1;
  273. public int CurrentPage
  274. {
  275. get { return currentPage; }
  276. set { currentPage = value; RaisePropertyChanged(); CurrentPageChanged(); }
  277. }
  278. private ObservableCollection<SchDtlWithResultModel> baseConfigList = new ObservableCollection<SchDtlWithResultModel>();
  279. public ObservableCollection<SchDtlWithResultModel> BaseConfigList
  280. {
  281. get { return baseConfigList; }
  282. set { SetProperty(ref baseConfigList, value); }
  283. }
  284. #endregion
  285. #region 命令绑定
  286. public DelegateCommand OnLoadCommand { set; get; }
  287. #endregion
  288. }
  289. }