ReadSchViewModel.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. using AutoMapper;
  2. using BizService;
  3. using Microsoft.Extensions.Logging;
  4. using Model.Dto;
  5. using Model.Entities;
  6. using Newtonsoft.Json;
  7. using PLCTool.Common;
  8. using Prism.Commands;
  9. using Prism.Events;
  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. using System.Windows;
  19. namespace PLCTool.ViewModels.BasicConfigViewModel
  20. {
  21. public class ReadSchViewModel : BindableBase, IDialogAware
  22. {
  23. private readonly IDialogService _dialog;
  24. private readonly IEventAggregator _aggregator;
  25. private readonly IOptionConfigService _optionConfigService;
  26. private readonly IBasicPlcTestSchemeService _basicPlcTestSchemeService;
  27. private readonly IBasicPlcTestSchemeDtlService _basicPlcTestSchemeDtlService;
  28. private readonly IBizTestRecordService _iBizTestRecordService;
  29. private readonly IBizTestRecordDtlService _iBizTestRecordDtlService;
  30. private readonly IMapper _mapper;
  31. private readonly ILogger _logger;
  32. private List<OptionConfigDto> _optionConfigs;
  33. private DateTime startTime = DateTime.Now;
  34. private DateTime endTime = DateTime.Now;
  35. private int testStatus = 0; //测试状态
  36. private int testResult = 0; //测试结果
  37. private long schId = 0; //方案ID
  38. private long globalSchDetailId = 0; //测试方案明细ID
  39. private long globalDeviceId = 0; //设备ID
  40. private BizTestRecordDtlDto bizTestRecordDtlDto = new BizTestRecordDtlDto(); //测试方案明细表
  41. private int delayTime = 20;
  42. public ReadSchViewModel(IDialogService dialog, IEventAggregator aggregator, IOptionConfigService optionConfigService, IBasicPlcTestSchemeService basicPlcTestSchemeService, IBasicPlcTestSchemeDtlService basicPlcTestSchemeDtlService, IBizTestRecordService iBizTestRecordService, IBizTestRecordDtlService iBizTestRecordDtlService, IMapper mapper, ILogger logger)
  43. {
  44. _dialog = dialog;
  45. _aggregator = aggregator;
  46. _optionConfigService = optionConfigService;
  47. _basicPlcTestSchemeService = basicPlcTestSchemeService;
  48. _basicPlcTestSchemeDtlService = basicPlcTestSchemeDtlService;
  49. _iBizTestRecordDtlService = iBizTestRecordDtlService;
  50. _iBizTestRecordService = iBizTestRecordService;
  51. _mapper = mapper;
  52. _logger = logger;
  53. CloseCommand = new DelegateCommand(Close);
  54. ItemChangeCommand = new DelegateCommand(ItemChange);
  55. BeforeConList = new ObservableCollection<BasPlcItemConfigDto>();
  56. InConList = new ObservableCollection<BasPlcItemConfigDto>();
  57. OutConList = new ObservableCollection<BasPlcItemConfigDto>();
  58. GetConfigOption();
  59. }
  60. /// <summary>
  61. /// 选中测试项
  62. /// </summary>
  63. private void ItemChange()
  64. {
  65. var findDtlMsg = _basicPlcTestSchemeDtlService.FindAllBySchId(schId)?.FirstOrDefault(X => X.item_name == SelectItem);
  66. if (findDtlMsg != null)
  67. {
  68. int id = Convert.ToInt32(findDtlMsg.scheme_dtl_id);
  69. // 根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
  70. globalSchDetailId = id;
  71. GetDetailInfo(id);
  72. }
  73. }
  74. #region idialog接口实现
  75. public string Title { set; get; } = "方案详情";
  76. public event Action<IDialogResult> RequestClose;
  77. public bool CanCloseDialog()
  78. {
  79. return true;
  80. }
  81. public void OnDialogClosed()
  82. {
  83. }
  84. public void OnDialogOpened(IDialogParameters parameters)
  85. {
  86. //编辑
  87. var getMsg = parameters.GetValues<long>("Key");
  88. ///值不为空,表示修改
  89. if (getMsg != null)
  90. {
  91. foreach (var item in getMsg)
  92. {
  93. //测试方案号
  94. schId = item;
  95. var schDtls = _basicPlcTestSchemeDtlService.FindAllBySchId(schId).OrderBy(x => x.scheme_dtl_id).ToList(); ;
  96. foreach (var sch in schDtls)
  97. {
  98. long dtlId = sch.scheme_dtl_id;
  99. SchItems.Add(sch.item_name);
  100. }
  101. //默认显示第一个测试项的信息
  102. if (schDtls.Count != 0)
  103. {
  104. int id = Convert.ToInt32(schDtls[0].scheme_dtl_id);
  105. globalSchDetailId = id;
  106. // 根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
  107. GetDetailInfo(id);
  108. SelectItemIndex = 0;
  109. }
  110. }
  111. }
  112. }
  113. /// <summary>
  114. /// //根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
  115. /// </summary>
  116. /// <param name="id"></param>
  117. private void GetDetailInfo(int schDetailId)
  118. {
  119. //根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
  120. var findEntity = _basicPlcTestSchemeDtlService.Find(schDetailId);
  121. var findresult = _mapper.Map<bas_plc_test_scheme_dtl, BasicPlcTestSchemeDtlDto>(findEntity);
  122. if (findresult != null)
  123. {
  124. //根据方案id 在方案表中查找方案名 设备名
  125. schId = findresult.SchemeId.Value; //方案id,方便下一步查找
  126. int intSchId = Convert.ToInt32(findresult.SchemeId);
  127. var findSch = _basicPlcTestSchemeService.Find(intSchId);
  128. if (findSch != null)
  129. {
  130. ScheduleName = findSch.scheme_name;
  131. DeviceKindName = findSch.devicekind_name;
  132. }
  133. TestName = findresult.ItemName;
  134. SelectTest = findresult.ItemType;
  135. //前置项解析
  136. string preconStr = findresult.Precondition.ToString();
  137. if (!string.IsNullOrEmpty(preconStr))
  138. {
  139. JsonModel preconditionModel = JsonConvert.DeserializeObject<JsonModel>(preconStr);
  140. BeforeSelectJudge = preconditionModel.ItemType;
  141. SelectLogic = preconditionModel.ItemLogical;
  142. BeforeDetail = preconditionModel.Description;
  143. BeforeConList.Clear();
  144. foreach (var detail in preconditionModel.DetailInfo)
  145. {
  146. BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
  147. basPlcItemConfigDto.Id = detail.Id;
  148. basPlcItemConfigDto.PlcItem = detail.PlcItem;
  149. basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
  150. basPlcItemConfigDto.PlcAddType = detail.PlcAddType;
  151. basPlcItemConfigDto.PlcValue = detail.PlcValue;
  152. basPlcItemConfigDto.Remark = detail.Remark;
  153. BeforeConList.Add(basPlcItemConfigDto);
  154. }
  155. }
  156. //输入项解析
  157. string inStr = findresult.Action.ToString();
  158. if (!string.IsNullOrEmpty(inStr))
  159. {
  160. JsonModel inModel = JsonConvert.DeserializeObject<JsonModel>(inStr);
  161. SelectInJudge = inModel.ItemType;
  162. InSelectLogic = inModel.ItemLogical;
  163. InDetail = inModel.Description;
  164. InConList.Clear();
  165. foreach (var detail in inModel.DetailInfo)
  166. {
  167. BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
  168. basPlcItemConfigDto.Id = detail.Id;
  169. basPlcItemConfigDto.PlcItem = detail.PlcItem;
  170. basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
  171. basPlcItemConfigDto.PlcAddType = detail.PlcAddType;
  172. basPlcItemConfigDto.PlcValue = detail.PlcValue;
  173. basPlcItemConfigDto.Remark = detail.Remark;
  174. InConList.Add(basPlcItemConfigDto);
  175. }
  176. }
  177. //输出项解析
  178. string outStr = findresult.JudgementResult.ToString();
  179. if (!string.IsNullOrEmpty(outStr))
  180. {
  181. JsonModel outModel = JsonConvert.DeserializeObject<JsonModel>(outStr);
  182. SelectOutJudge = outModel.ItemType;
  183. OutSelectLogic = outModel.ItemLogical;
  184. OutDetail = outModel.Description;
  185. OutConList.Clear();
  186. foreach (var detail in outModel.DetailInfo)
  187. {
  188. BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
  189. basPlcItemConfigDto.Id = detail.Id;
  190. basPlcItemConfigDto.PlcItem = detail.PlcItem;
  191. basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
  192. basPlcItemConfigDto.PlcAddType = detail.PlcAddType;
  193. basPlcItemConfigDto.PlcValue = detail.PlcValue;
  194. basPlcItemConfigDto.Remark = detail.Remark;
  195. OutConList.Add(basPlcItemConfigDto);
  196. }
  197. }
  198. }
  199. }
  200. #endregion
  201. #region 私有发方法
  202. /// <summary>
  203. /// 获取配置
  204. /// </summary>
  205. private void GetConfigOption()
  206. {
  207. var configList = _optionConfigService.QueryList();
  208. _optionConfigs = _mapper.Map<List<OptionConfig>, List<OptionConfigDto>>(configList);
  209. var tests = _optionConfigs.FindAll(x => x.TypeID == 1);
  210. TestKinds = new List<string>();
  211. foreach (var test in tests)
  212. {
  213. TestKinds.Add(test.ContentOption);
  214. }
  215. //测试项类型
  216. var judges = _optionConfigs.FindAll(x => x.TypeID == 2);
  217. foreach (var judge in judges)
  218. {
  219. BeforeJudgeKinds.Add(judge.ContentOption);
  220. InJudgeKinds.Add(judge.ContentOption);
  221. OutJudgeKinds.Add(judge.ContentOption);
  222. }
  223. //判定逻辑
  224. var logics = _optionConfigs.FindAll(x => x.TypeID == 3);
  225. foreach (var logic in logics)
  226. {
  227. JudgeLogicKinds.Add(logic.ContentOption);
  228. InJudgeLogicKinds.Add(logic.ContentOption);
  229. OutJudgeLogicKinds.Add(logic.ContentOption);
  230. }
  231. }
  232. /// <summary>
  233. /// 关闭按钮
  234. /// </summary>
  235. private void Close()
  236. {
  237. MessageBoxResult boxResult = MessageBox.Show("确认退出自动测试", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Information);
  238. if (boxResult == MessageBoxResult.OK)
  239. {
  240. RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
  241. }
  242. }
  243. /// <summary>
  244. /// mode转json
  245. /// </summary>
  246. /// <param name="itemType"></param>
  247. /// <param name="itemLogical"></param>
  248. /// <param name="description"></param>
  249. /// <param name="conList"></param>
  250. /// <returns></returns>
  251. #endregion
  252. #region 命令绑定
  253. public DelegateCommand CloseCommand { set; get; }
  254. public DelegateCommand ItemChangeCommand { set; get; }
  255. #endregion
  256. #region 变量绑定
  257. /// <summary>
  258. /// 测试方案编码
  259. /// </summary>
  260. private string scheduleName;
  261. public string ScheduleName
  262. {
  263. get { return scheduleName; }
  264. set { scheduleName = value; RaisePropertyChanged(); }
  265. }
  266. /// <summary>
  267. /// 设备名称
  268. /// </summary>
  269. private string deviceKindName;
  270. public string DeviceKindName
  271. {
  272. get { return deviceKindName; }
  273. set { deviceKindName = value; RaisePropertyChanged(); }
  274. }
  275. /// <summary>
  276. /// 测试项名称
  277. /// </summary>
  278. private string testName;
  279. public string TestName
  280. {
  281. get { return testName; }
  282. set { testName = value; RaisePropertyChanged(); }
  283. }
  284. /// <summary>
  285. /// 测试项类型
  286. /// </summary>
  287. private List<string> testKinds = new List<string>();
  288. public List<string> TestKinds
  289. {
  290. get { return testKinds; }
  291. set { testKinds = value; RaisePropertyChanged(); }
  292. }
  293. /// <summary>
  294. ///
  295. /// </summary>
  296. private string selectTest;
  297. public string SelectTest
  298. {
  299. get { return selectTest; }
  300. set { selectTest = value; RaisePropertyChanged(); }
  301. }
  302. /// <summary>
  303. /// 判定类型(前置项)
  304. /// </summary>
  305. private List<string> beforeJudgeKinds = new List<string>();
  306. public List<string> BeforeJudgeKinds
  307. {
  308. get { return beforeJudgeKinds; }
  309. set { beforeJudgeKinds = value; RaisePropertyChanged(); }
  310. }
  311. private string beforeSelectJudge;
  312. public string BeforeSelectJudge
  313. {
  314. get { return beforeSelectJudge; }
  315. set { beforeSelectJudge = value; RaisePropertyChanged(); }
  316. }
  317. /// <summary>
  318. /// 逻辑判断
  319. /// </summary>
  320. private List<string> judgeLogicKinds = new List<string>();
  321. public List<string> JudgeLogicKinds
  322. {
  323. get { return judgeLogicKinds; }
  324. set { judgeLogicKinds = value; RaisePropertyChanged(); }
  325. }
  326. private string selectLogic;
  327. public string SelectLogic
  328. {
  329. get { return selectLogic; }
  330. set { selectLogic = value; RaisePropertyChanged(); }
  331. }
  332. private string beforeDetail;
  333. public string BeforeDetail
  334. {
  335. get { return beforeDetail; }
  336. set { beforeDetail = value; RaisePropertyChanged(); }
  337. }
  338. private ObservableCollection<BasPlcItemConfigDto> beforeConList;
  339. public ObservableCollection<BasPlcItemConfigDto> BeforeConList
  340. {
  341. get { return beforeConList; }
  342. set { beforeConList = value; RaisePropertyChanged(); }
  343. }
  344. /// <summary>
  345. /// 判定类型(输入项)
  346. /// </summary>
  347. private List<string> inJudgeKinds = new List<string>();
  348. public List<string> InJudgeKinds
  349. {
  350. get { return inJudgeKinds; }
  351. set { inJudgeKinds = value; RaisePropertyChanged(); }
  352. }
  353. private string selectInJudge;
  354. public string SelectInJudge
  355. {
  356. get { return selectInJudge; }
  357. set { selectInJudge = value; RaisePropertyChanged(); }
  358. }
  359. /// <summary>
  360. /// 逻辑判断
  361. /// </summary>
  362. private List<string> inJudgeLogicKinds = new List<string>();
  363. public List<string> InJudgeLogicKinds
  364. {
  365. get { return inJudgeLogicKinds; }
  366. set { inJudgeLogicKinds = value; RaisePropertyChanged(); }
  367. }
  368. private string inSelectLogic;
  369. public string InSelectLogic
  370. {
  371. get { return inSelectLogic; }
  372. set { inSelectLogic = value; RaisePropertyChanged(); }
  373. }
  374. private string inDetail;
  375. public string InDetail
  376. {
  377. get { return inDetail; }
  378. set { inDetail = value; RaisePropertyChanged(); }
  379. }
  380. private ObservableCollection<BasPlcItemConfigDto> inConList;
  381. public ObservableCollection<BasPlcItemConfigDto> InConList
  382. {
  383. get { return inConList; }
  384. set { inConList = value; RaisePropertyChanged(); }
  385. }
  386. /// <summary>
  387. /// 判定类型(结果项)
  388. /// </summary>
  389. private List<string> outJudgeKinds = new List<string>();
  390. public List<string> OutJudgeKinds
  391. {
  392. get { return outJudgeKinds; }
  393. set { outJudgeKinds = value; RaisePropertyChanged(); }
  394. }
  395. private string selectOutJudge;
  396. public string SelectOutJudge
  397. {
  398. get { return selectOutJudge; }
  399. set { selectOutJudge = value; RaisePropertyChanged(); }
  400. }
  401. /// <summary>
  402. /// 逻辑判断
  403. /// </summary>
  404. private List<string> outJudgeLogicKinds = new List<string>();
  405. public List<string> OutJudgeLogicKinds
  406. {
  407. get { return outJudgeLogicKinds; }
  408. set { outJudgeLogicKinds = value; RaisePropertyChanged(); }
  409. }
  410. private string outSelectLogic;
  411. public string OutSelectLogic
  412. {
  413. get { return outSelectLogic; }
  414. set { outSelectLogic = value; RaisePropertyChanged(); }
  415. }
  416. private string outDetail;
  417. public string OutDetail
  418. {
  419. get { return outDetail; }
  420. set { outDetail = value; RaisePropertyChanged(); }
  421. }
  422. private ObservableCollection<BasPlcItemConfigDto> outConList;
  423. public ObservableCollection<BasPlcItemConfigDto> OutConList
  424. {
  425. get { return outConList; }
  426. set { outConList = value; RaisePropertyChanged(); }
  427. }
  428. private int stepIndex = 0;
  429. public int StepIndex
  430. {
  431. get { return stepIndex; }
  432. set { stepIndex = value; RaisePropertyChanged(); }
  433. }
  434. private Visibility proVisibility = Visibility.Hidden;
  435. public Visibility ProVisibility
  436. {
  437. get { return proVisibility; }
  438. set { proVisibility = value; RaisePropertyChanged(); }
  439. }
  440. private bool startEnalbe = true;
  441. public bool StartEnalbe
  442. {
  443. get { return startEnalbe; }
  444. set { startEnalbe = value; RaisePropertyChanged(); }
  445. }
  446. //所有测试项列表
  447. private List<string> schItems = new List<string>();
  448. public List<string> SchItems
  449. {
  450. get { return schItems; }
  451. set { schItems = value; RaisePropertyChanged(); }
  452. }
  453. //所选测试方案
  454. private string selectItem;
  455. public string SelectItem
  456. {
  457. get { return selectItem; }
  458. set { selectItem = value; RaisePropertyChanged(); }
  459. }
  460. private int selectItemIndex;
  461. public int SelectItemIndex
  462. {
  463. get { return selectItemIndex; }
  464. set { selectItemIndex = value; RaisePropertyChanged(); }
  465. }
  466. #endregion
  467. }
  468. }