ProjectTestResultViewModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. using AutoMapper;
  2. using BizService;
  3. using Microsoft.Extensions.Logging;
  4. using Model.Dto;
  5. using Model.Entities;
  6. using PLCTool.Views.BusinessManageView;
  7. using Prism.Commands;
  8. using Prism.Mvvm;
  9. using Prism.Services.Dialogs;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Collections.ObjectModel;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. namespace PLCTool.ViewModels.BusinessManageViewModel
  17. {
  18. class ProjectTestResultViewModel : BindableBase
  19. {
  20. private readonly IBasicDeviceService _iBasicDeviceService;
  21. private readonly IBasicDeviceKindService _iBasicDeviceKindService;
  22. private readonly IBasicProjectService _iBasicProjectService;
  23. private readonly IBasicPlcTestSchemeService _basicPlcTestSchemeService;
  24. private readonly IMapper _mapper;
  25. private readonly IDialogService _dialog;
  26. private readonly ILogger _logger;
  27. private readonly IBizTestRecordService _iBizTestRecordService;
  28. private readonly IBasicPlcTestSchemeDtlService _iBasicPlcTestSchemeDtlService;
  29. private readonly IBizTestRecordDtlService _iBizTestRecordDtlService;
  30. private ObservableCollection<DeviceResultCardView> allProjectResultPicList = new ObservableCollection<DeviceResultCardView>();
  31. private int eachColumNum = 3; //每行展示卡片个数
  32. public ProjectTestResultViewModel(IBasicDeviceService iBasicDeviceService, IBasicDeviceKindService iBasicDeviceKindService, IBasicProjectService iBasicProjectService, IBasicPlcTestSchemeService basicPlcTestSchemeService, IBizTestRecordService iBizTestRecordService, IBasicPlcTestSchemeDtlService iBasicPlcTestSchemeDtlService, IBizTestRecordDtlService iBizTestRecordDtlService,IMapper mapper, IDialogService dialog, ILogger logger)
  33. {
  34. _iBasicDeviceService = iBasicDeviceService;
  35. _iBasicDeviceKindService = iBasicDeviceKindService;
  36. _iBasicProjectService = iBasicProjectService;
  37. _basicPlcTestSchemeService = basicPlcTestSchemeService;
  38. _iBizTestRecordService = iBizTestRecordService;
  39. _iBasicPlcTestSchemeDtlService= iBasicPlcTestSchemeDtlService;
  40. _iBizTestRecordDtlService = iBizTestRecordDtlService;
  41. _mapper = mapper;
  42. _dialog = dialog;
  43. _logger = logger;
  44. OnLoadCommand = new DelegateCommand(OnLoad);
  45. QueryCommand = new DelegateCommand<object>(Query);
  46. ResetCommand = new DelegateCommand<object>(Reset);
  47. }
  48. #region 私有方法
  49. private void Reset(object obj)
  50. {
  51. ProjectNo = string.Empty;
  52. ProjectLeader = string.Empty;
  53. ProjectName = string.Empty;
  54. StartTime = string.Empty;
  55. EndTime = string.Empty;
  56. }
  57. private void Query(object obj)
  58. {
  59. var conditions = (from a in allProjectResultPicList
  60. where (string.IsNullOrEmpty(ProjectNo) ? true : (a.txtProjectNo.Text == ProjectNo))
  61. && (string.IsNullOrEmpty(ProjectName) ? true : (a.txtName.Text == ProjectName))
  62. && (string.IsNullOrEmpty(ProjectLeader) ? true : (a.txtProjectLeader.Text == ProjectLeader))
  63. select a).ToList();
  64. ProjectResultPicList = new ObservableCollection<DeviceResultCardView>(conditions);
  65. }
  66. private void OnLoad()
  67. {
  68. GetProjectConfig();
  69. }
  70. /// <summary>
  71. /// 获取所有项目
  72. /// </summary>
  73. private void GetProjectConfig()
  74. {
  75. allProjectResultPicList.Clear();
  76. ProjectResultPicList.Clear();
  77. List<DeviceDtlWithResultModel> allDeviceList = new List<DeviceDtlWithResultModel>();//所有方案
  78. //所有测试方案
  79. var schlist = _basicPlcTestSchemeService.QueryList();
  80. var schDtoList = _mapper.Map<List<bas_plc_test_scheme>, List<BasicPlcTestSchemeDto>>(schlist);
  81. //测试记录中的所有设备
  82. var deviceIds = _iBizTestRecordService.QueryList().Select(X => X.device_id).Distinct();
  83. foreach (var deviceId in deviceIds)
  84. {
  85. List<DateTime> startDateTimes = new List<DateTime>();
  86. var deviceMsg = _iBasicDeviceService.Find(((int)deviceId));
  87. if (deviceMsg != null)
  88. {
  89. string deviceKind = _iBasicDeviceKindService.Find((int)deviceMsg.device_kind_id)?.devicekind_name;
  90. string projectName = _iBasicProjectService.Find((int)deviceMsg.project_id)?.project_name;
  91. //记录设备下的方案通过个数
  92. int deviceCountResult = 0;
  93. string deviceTestResult = string.Empty;
  94. //查找哦记录有的方案
  95. var recordMsgs = _iBizTestRecordService.FindRecordByDeviceId(deviceId);
  96. foreach (var sch in recordMsgs)
  97. {
  98. long schId = (long)_basicPlcTestSchemeService.FindByNameAndType(sch.scheme_name, deviceKind)?.scheme_id;
  99. //计算测试结果
  100. string testResult = string.Empty;
  101. int countResult = 0;
  102. var records = _iBizTestRecordDtlService.FindRecordDetailByRecordID(sch.record_id);
  103. //
  104. var schDtls = _iBasicPlcTestSchemeDtlService.FindAllBySchId(schId);
  105. //循环所有测试项,有一个不合格,则整个测试方案不合格
  106. foreach (var dtl in schDtls)
  107. {
  108. //选取开始时间最大的一个数据,查看测试结果
  109. long schDtId = dtl.scheme_dtl_id;
  110. var findRecords = records.FindAll(x => x.scheme_dtl_id == schDtId).OrderByDescending(x => x.start_test_time).ToArray();
  111. if (findRecords.Length > 0)
  112. {
  113. int result = (int)findRecords[0]?.test_result.Value;
  114. if (result == 0)
  115. {
  116. testResult = "不通过";
  117. break;
  118. }
  119. else
  120. {
  121. countResult++;
  122. }
  123. }
  124. }
  125. //测试结果
  126. if (countResult == schDtls.Count)
  127. {
  128. testResult = "通过";
  129. }
  130. //计算这个设备是否通过
  131. if (testResult == "通过")
  132. {
  133. deviceCountResult++;
  134. }
  135. //加入时间集合
  136. startDateTimes.Add(sch.start_test_time.Value);
  137. }
  138. //计算这个设备是否所有的方案都通过
  139. if ((deviceCountResult != 0) && (deviceCountResult == recordMsgs.Count))
  140. {
  141. deviceTestResult = "通过";
  142. }
  143. else
  144. {
  145. deviceTestResult = "不通过";
  146. }
  147. //这里不添加方案名称
  148. allDeviceList.Add(new DeviceDtlWithResultModel()
  149. {
  150. ProjectId= deviceMsg.project_id,
  151. DeviceId = deviceMsg.device_id,
  152. DeviceNo = deviceMsg.device_no,
  153. DeviceName = deviceMsg.device_name,
  154. DeviceKindName = deviceKind,
  155. ProjectName = projectName,
  156. StartTestTime = startDateTimes.Min(),//取最小时间
  157. TestResult = deviceTestResult
  158. });
  159. }
  160. }
  161. //所有新项目
  162. List<string> projectNames = allDeviceList.Select(x => x.ProjectName).Distinct().ToList();
  163. foreach (var project in projectNames)
  164. {
  165. int projectId =(int) allDeviceList?.FirstOrDefault(x => x.ProjectName == project)?.ProjectId;
  166. //总设备
  167. int totalDevice=(int)_iBasicDeviceService.QueryList()?.FindAll(x=>x.project_id== projectId).Count();
  168. //已测试设备数
  169. int deviceTestCount =(int)allDeviceList?.FindAll(x => x.ProjectName == project)?.Select(x => x.DeviceId)?.Distinct().Count();
  170. int passCount=(int)allDeviceList?.FindAll(x => (x.ProjectName == project)&&(x.TestResult=="通过")).Count;
  171. int noPassCount = (int)allDeviceList?.FindAll(x => (x.ProjectName == project) && (x.TestResult == "不通过")).Count;
  172. //添加卡片
  173. DeviceResultCardView deviceCard = new DeviceResultCardView();
  174. deviceCard.txtName.Text = project;
  175. deviceCard.txtProjectNo.Text = _iBasicProjectService.FindByProjectName(project)?.project_no;
  176. deviceCard.txtProjectLeader.Text = _iBasicProjectService.FindByProjectName(project)?.project_leader;
  177. //总设备数量
  178. deviceCard.txtDeviceCount.Text = totalDevice.ToString()+" 台";
  179. deviceCard.txtTestCount.Text = deviceTestCount.ToString()+" 台";
  180. deviceCard.txtPassCount.Text = passCount.ToString()+" 台";
  181. deviceCard.txtNoPassCount.Text = noPassCount.ToString() + " 台";
  182. //赋值
  183. allProjectResultPicList.Add(deviceCard);
  184. }
  185. foreach (var item in allProjectResultPicList)
  186. {
  187. ProjectResultPicList.Add(item);
  188. }
  189. //计算行数
  190. if (projectNames.Count % eachColumNum == 0)
  191. {
  192. RowsCount = projectNames.Count / eachColumNum;
  193. }
  194. else
  195. {
  196. RowsCount = projectNames.Count / eachColumNum + 1;
  197. }
  198. if (RowsCount < 2)
  199. {
  200. RowsCount = 2;
  201. }
  202. }
  203. #endregion
  204. #region 命令绑定
  205. public DelegateCommand OnLoadCommand { set; get; }
  206. public DelegateCommand<object> QueryCommand { set; get; }
  207. public DelegateCommand<object> ResetCommand { set; get; }
  208. #endregion
  209. #region 数据绑定
  210. /// <summary>
  211. /// 设备卡片
  212. /// </summary>
  213. private ObservableCollection<DeviceResultCardView> projectResultPicList = new ObservableCollection<DeviceResultCardView>();
  214. public ObservableCollection<DeviceResultCardView> ProjectResultPicList
  215. {
  216. get { return projectResultPicList; }
  217. set { projectResultPicList = value; RaisePropertyChanged(); }
  218. }
  219. private int rowsCount = 2;
  220. public int RowsCount
  221. {
  222. get { return rowsCount; }
  223. set { rowsCount = value; RaisePropertyChanged(); }
  224. }
  225. private string projectNo;
  226. public string ProjectNo
  227. {
  228. get { return projectNo; }
  229. set { projectNo = value; RaisePropertyChanged(); }
  230. }
  231. private string projectName;
  232. public string ProjectName
  233. {
  234. get { return projectName; }
  235. set { projectName = value; RaisePropertyChanged(); }
  236. }
  237. private string projectLeader;
  238. public string ProjectLeader
  239. {
  240. get { return projectLeader; }
  241. set { projectLeader = value; RaisePropertyChanged(); }
  242. }
  243. /// <summary>
  244. /// 开始时间
  245. /// </summary>
  246. private string startTime = DateTime.Now.AddDays(-1).ToString();
  247. public string StartTime
  248. {
  249. get { return startTime; }
  250. set { startTime = value; RaisePropertyChanged(); }
  251. }
  252. private string endTime = DateTime.Now.ToString();
  253. public string EndTime
  254. {
  255. get { return endTime; }
  256. set { endTime = value; RaisePropertyChanged(); }
  257. }
  258. #endregion
  259. }
  260. }