ManualTestViewModel.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. using AutoMapper;
  2. using BizService;
  3. using Model.Dto;
  4. using Model.Entities;
  5. using Newtonsoft.Json;
  6. using NLog;
  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. using WPFDevelopers.Controls.Runtimes.Shell32;
  20. namespace PLCTool.ViewModels.BusinessManageViewModel
  21. {
  22. public class ManualTestViewModel : BindableBase, IDialogAware
  23. {
  24. private readonly IDialogService _dialog;
  25. private readonly IEventAggregator _aggregator;
  26. private readonly IOptionConfigService _optionConfigService;
  27. private readonly IBasicPlcTestSchemeService _basicPlcTestSchemeService;
  28. private readonly IBasicPlcTestSchemeDtlService _basicPlcTestSchemeDtlService;
  29. private readonly IBizTestRecordService _iBizTestRecordService;
  30. private readonly IBizTestRecordDtlService _iBizTestRecordDtlService;
  31. private readonly IMapper _mapper;
  32. private readonly ILogger _logger;
  33. private List<OptionConfigDto> _optionConfigs;
  34. private DateTime startTime= DateTime.Now;
  35. private DateTime endTime=DateTime.Now;
  36. private int testStatus = 0; //测试状态
  37. private int testResult = 0; //测试结果
  38. private long schDetailId = 0; //测试方案明细ID
  39. public ManualTestViewModel(IDialogService dialog, IEventAggregator aggregator, IOptionConfigService optionConfigService, IBasicPlcTestSchemeService basicPlcTestSchemeService, IBasicPlcTestSchemeDtlService basicPlcTestSchemeDtlService, IBizTestRecordService iBizTestRecordService, IBizTestRecordDtlService iBizTestRecordDtlService,IMapper mapper)
  40. {
  41. _dialog = dialog;
  42. _aggregator = aggregator;
  43. _optionConfigService = optionConfigService;
  44. _basicPlcTestSchemeService = basicPlcTestSchemeService;
  45. _basicPlcTestSchemeDtlService = basicPlcTestSchemeDtlService;
  46. _iBizTestRecordDtlService = iBizTestRecordDtlService;
  47. _iBizTestRecordService= iBizTestRecordService;
  48. _mapper = mapper;
  49. //_logger = logger;
  50. CloseCommand = new DelegateCommand(Close);
  51. StartCommand = new DelegateCommand<object>(Start);
  52. PreviousCommand = new DelegateCommand<object>(Previous);
  53. NextCommand = new DelegateCommand<object>(Next);
  54. DoneCommand = new DelegateCommand<object>(Done);
  55. BeforeConList = new ObservableCollection<BasPlcItemConfigDto>();
  56. InConList = new ObservableCollection<BasPlcItemConfigDto>();
  57. OutConList = new ObservableCollection<BasPlcItemConfigDto>();
  58. GetConfigOption();
  59. }
  60. #region idialog接口实现
  61. public string Title { set; get; } = "手动测试";
  62. public event Action<IDialogResult> RequestClose;
  63. public bool CanCloseDialog()
  64. {
  65. return true;
  66. }
  67. public void OnDialogClosed()
  68. {
  69. }
  70. public void OnDialogOpened(IDialogParameters parameters)
  71. {
  72. //编辑
  73. var getMsg = parameters.GetValues<long>("Key");
  74. ///值不为空,表示修改
  75. if (getMsg != null)
  76. {
  77. foreach (var item in getMsg)
  78. {
  79. schDetailId = item; //测试方案明细ID
  80. int id = Convert.ToInt32(item);
  81. //根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
  82. var findEntity = _basicPlcTestSchemeDtlService.Find(id);
  83. var findresult = _mapper.Map<bas_plc_test_scheme_dtl, BasicPlcTestSchemeDtlDto>(findEntity);
  84. if (findresult != null)
  85. {
  86. //根据方案id 在方案表中查找方案名 设备名
  87. int schID = Convert.ToInt32(findresult.SchemeId);
  88. var findSch = _basicPlcTestSchemeService.Find(schID);
  89. if (findSch != null)
  90. {
  91. ScheduleName = findSch.scheme_name;
  92. DeviceName = findSch.device_name;
  93. }
  94. TestName = findresult.ItemName;
  95. SelectTest = findresult.ItemType;
  96. //前置项解析
  97. string preconStr = findresult.Precondition.ToString();
  98. if (!string.IsNullOrEmpty(preconStr))
  99. {
  100. JsonModel preconditionModel = JsonConvert.DeserializeObject<JsonModel>(preconStr);
  101. BeforeSelectJudge = preconditionModel.ItemType;
  102. SelectLogic = preconditionModel.ItemLogical;
  103. BeforeDetail = preconditionModel.Description;
  104. BeforeConList.Clear();
  105. foreach (var detail in preconditionModel.DetailInfo)
  106. {
  107. BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
  108. basPlcItemConfigDto.PlcItem = detail.PlcItem;
  109. basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
  110. basPlcItemConfigDto.PlcValue = detail.PlcValue;
  111. basPlcItemConfigDto.Remark = detail.Remark;
  112. beforeConList.Add(basPlcItemConfigDto);
  113. }
  114. }
  115. //输入项解析
  116. string inStr = findresult.Action.ToString();
  117. if (!string.IsNullOrEmpty(inStr))
  118. {
  119. JsonModel inModel = JsonConvert.DeserializeObject<JsonModel>(inStr);
  120. SelectInJudge = inModel.ItemType;
  121. InSelectLogic = inModel.ItemLogical;
  122. InDetail = inModel.Description;
  123. InConList.Clear();
  124. foreach (var detail in inModel.DetailInfo)
  125. {
  126. BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
  127. basPlcItemConfigDto.PlcItem = detail.PlcItem;
  128. basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
  129. basPlcItemConfigDto.PlcValue = detail.PlcValue;
  130. basPlcItemConfigDto.Remark = detail.Remark;
  131. InConList.Add(basPlcItemConfigDto);
  132. }
  133. }
  134. //输出项解析
  135. string outStr = findresult.JudgementResult.ToString();
  136. if (!string.IsNullOrEmpty(outStr))
  137. {
  138. JsonModel outModel = JsonConvert.DeserializeObject<JsonModel>(outStr);
  139. SelectOutJudge = outModel.ItemType;
  140. OutSelectLogic = outModel.ItemLogical;
  141. OutDetail = outModel.Description;
  142. OutConList.Clear();
  143. foreach (var detail in outModel.DetailInfo)
  144. {
  145. BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
  146. basPlcItemConfigDto.PlcItem = detail.PlcItem;
  147. basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
  148. basPlcItemConfigDto.PlcValue = detail.PlcValue;
  149. basPlcItemConfigDto.Remark = detail.Remark;
  150. OutConList.Add(basPlcItemConfigDto);
  151. }
  152. }
  153. }
  154. }
  155. }
  156. }
  157. #endregion
  158. #region 私有发方法
  159. /// <summary>
  160. /// 完成时间
  161. /// </summary>
  162. /// <param name="obj"></param>
  163. private void Done(object obj)
  164. {
  165. endTime = DateTime.Now;
  166. //记录记录主表中是否有这个方案的记录,没有则添加
  167. var findRecord = _iBizTestRecordService.FindRecorddBySchname(ScheduleName);
  168. if(findRecord == null)
  169. {
  170. //状态status 没有赋值
  171. BizTestRecordDto bizTestRecordDto = new BizTestRecordDto();
  172. bizTestRecordDto.RecordName = ScheduleName + "_Record";
  173. bizTestRecordDto.SchemeName=ScheduleName;
  174. bizTestRecordDto.Tester = Appsession.UserName;
  175. bizTestRecordDto.StartTestTime = startTime;
  176. bizTestRecordDto.FinishTestTime = endTime;
  177. bizTestRecordDto.CreateBy = Appsession.UserName;
  178. bizTestRecordDto.CreateTime = DateTime.Now;
  179. bizTestRecordDto.UpdateBy = Appsession.UserName;
  180. bizTestRecordDto.UpdateTime = DateTime.Now;
  181. var testRecord = _mapper.Map<BizTestRecordDto, biz_test_record>(bizTestRecordDto);
  182. _iBizTestRecordService.Add(testRecord);
  183. }
  184. //查找record ID
  185. long recordId = 0;
  186. var findRecordID = _iBizTestRecordService.FindRecorddBySchname(ScheduleName);
  187. if(findRecordID != null)
  188. {
  189. recordId = findRecordID.record_id;
  190. }
  191. testStatus = 99;//测试状态赋值为99
  192. //记录记录明细表中是否有这个方案明细ID的记录,没有则添加,有则更新记录状态
  193. var findRecordDetail = _iBizTestRecordDtlService.FindRecordDetailBySchDtlID(schDetailId);
  194. if (findRecordDetail == null)
  195. {
  196. //状态status 没有赋值
  197. BizTestRecordDtlDto bizTestRecordDtlDto = new BizTestRecordDtlDto();
  198. bizTestRecordDtlDto.RecordId= recordId;
  199. bizTestRecordDtlDto.SchemeDtlId = schDetailId;
  200. bizTestRecordDtlDto.StartTestTime = startTime;
  201. bizTestRecordDtlDto.FinishTestTime = endTime;
  202. bizTestRecordDtlDto.Status = testStatus;
  203. bizTestRecordDtlDto.TestResult= testResult;
  204. bizTestRecordDtlDto.CreateBy = Appsession.UserName;
  205. bizTestRecordDtlDto.CreateTime = DateTime.Now;
  206. bizTestRecordDtlDto.UpdateBy = Appsession.UserName;
  207. bizTestRecordDtlDto.UpdateTime = DateTime.Now;
  208. var testRecordDtl = _mapper.Map<BizTestRecordDtlDto, biz_test_record_dtl>(bizTestRecordDtlDto);
  209. _iBizTestRecordDtlService.Add(testRecordDtl);
  210. }
  211. else
  212. {
  213. //如果有,则更新测试状态和测试结果
  214. findRecordDetail.start_test_time = startTime;
  215. findRecordDetail.finish_test_time = endTime;
  216. findRecordDetail.update_by = Appsession.UserName;
  217. findRecordDetail.update_time = DateTime.Now;
  218. findRecordDetail.status = testStatus;
  219. findRecordDetail.test_result = 99;
  220. _iBizTestRecordDtlService.Edit(findRecordDetail);
  221. }
  222. }
  223. private void Next(object obj)
  224. {
  225. }
  226. private void Previous(object obj)
  227. {
  228. }
  229. /// <summary>
  230. /// 开始检测
  231. /// </summary>
  232. /// <param name="obj"></param>
  233. private void Start(object obj)
  234. {
  235. //开始时间
  236. startTime = DateTime.Now;
  237. }
  238. /// <summary>
  239. /// 获取配置
  240. /// </summary>
  241. private void GetConfigOption()
  242. {
  243. var configList = _optionConfigService.QueryList();
  244. _optionConfigs = _mapper.Map<List<OptionConfig>, List<OptionConfigDto>>(configList);
  245. var tests = _optionConfigs.FindAll(x => x.TypeID == 1);
  246. TestKinds = new List<string>();
  247. foreach (var test in tests)
  248. {
  249. TestKinds.Add(test.ContentOption);
  250. }
  251. //测试项类型
  252. var judges = _optionConfigs.FindAll(x => x.TypeID == 2);
  253. foreach (var judge in judges)
  254. {
  255. BeforeJudgeKinds.Add(judge.ContentOption);
  256. InJudgeKinds.Add(judge.ContentOption);
  257. OutJudgeKinds.Add(judge.ContentOption);
  258. }
  259. //判定逻辑
  260. var logics = _optionConfigs.FindAll(x => x.TypeID == 3);
  261. foreach (var logic in logics)
  262. {
  263. JudgeLogicKinds.Add(logic.ContentOption);
  264. InJudgeLogicKinds.Add(logic.ContentOption);
  265. OutJudgeLogicKinds.Add(logic.ContentOption);
  266. }
  267. }
  268. /// <summary>
  269. /// 关闭按钮
  270. /// </summary>
  271. private void Close()
  272. {
  273. RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
  274. }
  275. /// <summary>
  276. /// mode转json
  277. /// </summary>
  278. /// <param name="itemType"></param>
  279. /// <param name="itemLogical"></param>
  280. /// <param name="description"></param>
  281. /// <param name="conList"></param>
  282. /// <returns></returns>
  283. private string ModelToJsonToStr(string itemType, string itemLogical, string description, ObservableCollection<BasPlcItemConfigDto> conList)
  284. {
  285. JsonModel prefixJsonModel = new JsonModel();
  286. prefixJsonModel.ItemType = itemType;
  287. prefixJsonModel.ItemLogical = itemLogical;
  288. prefixJsonModel.Description = description;
  289. prefixJsonModel.DetailInfo = new List<DetailPLC>();
  290. foreach (var item in conList)
  291. {
  292. DetailPLC plcItem = new DetailPLC();
  293. plcItem.PlcItem = item.PlcItem;
  294. plcItem.PlcAddress = item.PlcAddress;
  295. plcItem.PlcValue = item.PlcValue;
  296. plcItem.Remark = item.Remark;
  297. prefixJsonModel.DetailInfo.Add(plcItem);
  298. }
  299. string prefixJsonStr = JsonConvert.SerializeObject(prefixJsonModel);
  300. return prefixJsonStr;
  301. }
  302. #endregion
  303. #region 命令绑定
  304. public DelegateCommand CloseCommand { set; get; }
  305. public DelegateCommand<object> StartCommand { set; get; }
  306. public DelegateCommand<object> PreviousCommand { set; get; }
  307. public DelegateCommand<object> NextCommand { set; get; }
  308. public DelegateCommand<object> DoneCommand { set; get; }
  309. #endregion
  310. #region 变量绑定
  311. /// <summary>
  312. /// 测试方案编码
  313. /// </summary>
  314. private string scheduleName;
  315. public string ScheduleName
  316. {
  317. get { return scheduleName; }
  318. set { scheduleName = value; RaisePropertyChanged(); }
  319. }
  320. /// <summary>
  321. /// 设备名称
  322. /// </summary>
  323. private string deviceName;
  324. public string DeviceName
  325. {
  326. get { return deviceName; }
  327. set { deviceName = value; RaisePropertyChanged(); }
  328. }
  329. /// <summary>
  330. /// 测试项名称
  331. /// </summary>
  332. private string testName;
  333. public string TestName
  334. {
  335. get { return testName; }
  336. set { testName = value; RaisePropertyChanged(); }
  337. }
  338. /// <summary>
  339. /// 测试项类型
  340. /// </summary>
  341. private List<string> testKinds = new List<string>();
  342. public List<string> TestKinds
  343. {
  344. get { return testKinds; }
  345. set { testKinds = value; RaisePropertyChanged(); }
  346. }
  347. /// <summary>
  348. ///
  349. /// </summary>
  350. private string selectTest;
  351. public string SelectTest
  352. {
  353. get { return selectTest; }
  354. set { selectTest = value; RaisePropertyChanged(); }
  355. }
  356. /// <summary>
  357. /// 判定类型(前置项)
  358. /// </summary>
  359. private List<string> beforeJudgeKinds = new List<string>();
  360. public List<string> BeforeJudgeKinds
  361. {
  362. get { return beforeJudgeKinds; }
  363. set { beforeJudgeKinds = value; RaisePropertyChanged(); }
  364. }
  365. private string beforeSelectJudge;
  366. public string BeforeSelectJudge
  367. {
  368. get { return beforeSelectJudge; }
  369. set { beforeSelectJudge = value; RaisePropertyChanged(); }
  370. }
  371. /// <summary>
  372. /// 逻辑判断
  373. /// </summary>
  374. private List<string> judgeLogicKinds = new List<string>();
  375. public List<string> JudgeLogicKinds
  376. {
  377. get { return judgeLogicKinds; }
  378. set { judgeLogicKinds = value; RaisePropertyChanged(); }
  379. }
  380. private string selectLogic;
  381. public string SelectLogic
  382. {
  383. get { return selectLogic; }
  384. set { selectLogic = value; RaisePropertyChanged(); }
  385. }
  386. private string beforeDetail;
  387. public string BeforeDetail
  388. {
  389. get { return beforeDetail; }
  390. set { beforeDetail = value; RaisePropertyChanged(); }
  391. }
  392. private ObservableCollection<BasPlcItemConfigDto> beforeConList;
  393. public ObservableCollection<BasPlcItemConfigDto> BeforeConList
  394. {
  395. get { return beforeConList; }
  396. set { beforeConList = value; RaisePropertyChanged(); }
  397. }
  398. /// <summary>
  399. /// 判定类型(输入项)
  400. /// </summary>
  401. private List<string> inJudgeKinds = new List<string>();
  402. public List<string> InJudgeKinds
  403. {
  404. get { return inJudgeKinds; }
  405. set { inJudgeKinds = value; RaisePropertyChanged(); }
  406. }
  407. private string selectInJudge;
  408. public string SelectInJudge
  409. {
  410. get { return selectInJudge; }
  411. set { selectInJudge = value; RaisePropertyChanged(); }
  412. }
  413. /// <summary>
  414. /// 逻辑判断
  415. /// </summary>
  416. private List<string> inJudgeLogicKinds = new List<string>();
  417. public List<string> InJudgeLogicKinds
  418. {
  419. get { return inJudgeLogicKinds; }
  420. set { inJudgeLogicKinds = value; RaisePropertyChanged(); }
  421. }
  422. private string inSelectLogic;
  423. public string InSelectLogic
  424. {
  425. get { return inSelectLogic; }
  426. set { inSelectLogic = value; RaisePropertyChanged(); }
  427. }
  428. private string inDetail;
  429. public string InDetail
  430. {
  431. get { return inDetail; }
  432. set { inDetail = value; RaisePropertyChanged(); }
  433. }
  434. private ObservableCollection<BasPlcItemConfigDto> inConList;
  435. public ObservableCollection<BasPlcItemConfigDto> InConList
  436. {
  437. get { return inConList; }
  438. set { inConList = value; RaisePropertyChanged(); }
  439. }
  440. /// <summary>
  441. /// 判定类型(结果项)
  442. /// </summary>
  443. private List<string> outJudgeKinds = new List<string>();
  444. public List<string> OutJudgeKinds
  445. {
  446. get { return outJudgeKinds; }
  447. set { outJudgeKinds = value; RaisePropertyChanged(); }
  448. }
  449. private string selectOutJudge;
  450. public string SelectOutJudge
  451. {
  452. get { return selectOutJudge; }
  453. set { selectOutJudge = value; RaisePropertyChanged(); }
  454. }
  455. /// <summary>
  456. /// 逻辑判断
  457. /// </summary>
  458. private List<string> outJudgeLogicKinds = new List<string>();
  459. public List<string> OutJudgeLogicKinds
  460. {
  461. get { return outJudgeLogicKinds; }
  462. set { outJudgeLogicKinds = value; RaisePropertyChanged(); }
  463. }
  464. private string outSelectLogic;
  465. public string OutSelectLogic
  466. {
  467. get { return outSelectLogic; }
  468. set { outSelectLogic = value; RaisePropertyChanged(); }
  469. }
  470. private string outDetail;
  471. public string OutDetail
  472. {
  473. get { return outDetail; }
  474. set { outDetail = value; RaisePropertyChanged(); }
  475. }
  476. private ObservableCollection<BasPlcItemConfigDto> outConList;
  477. public ObservableCollection<BasPlcItemConfigDto> OutConList
  478. {
  479. get { return outConList; }
  480. set { outConList = value; RaisePropertyChanged(); }
  481. }
  482. private int stepIndex = 0;
  483. public int StepIndex
  484. {
  485. get { return stepIndex; }
  486. set { stepIndex = value; RaisePropertyChanged(); }
  487. }
  488. #endregion
  489. }
  490. }