EditItemDetailViewModel.cs 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083
  1. using AutoMapper;
  2. using BizService;
  3. using BlankApp1.Events;
  4. using Microsoft.Extensions.Logging;
  5. using Model.Dto;
  6. using Model.Entities;
  7. using NetTaste;
  8. using Newtonsoft.Json;
  9. using PLCTool.Common;
  10. using PLCTool.Events;
  11. using PLCTool.Models;
  12. using Prism.Commands;
  13. using Prism.Events;
  14. using Prism.Mvvm;
  15. using Prism.Regions;
  16. using Prism.Services.Dialogs;
  17. using System;
  18. using System.Collections.Generic;
  19. using System.Collections.ObjectModel;
  20. using System.Configuration;
  21. using System.Linq;
  22. using System.Text;
  23. using System.Threading.Tasks;
  24. using System.Windows;
  25. namespace PLCTool.ViewModels.BasicConfigViewModel
  26. {
  27. public class EditItemDetailViewModel : BindableBase, IDialogAware
  28. {
  29. private readonly IDialogService _dialog;
  30. private readonly IEventAggregator _aggregator;
  31. private readonly IRegionManager _regionManager;
  32. private readonly IOptionConfigService _optionConfigService;
  33. private readonly IBasicPlcTestSchemeService _basicPlcTestSchemeService;
  34. private readonly IBasicPlcTestSchemeDtlService _basicPlcTestSchemeDtlService;
  35. private readonly IBasicDeviceKindService _iBasicDeviceKindService;
  36. private readonly IMapper _mapper;
  37. private readonly ILogger _logger;
  38. private List<OptionConfigDto> _optionConfigs;
  39. private bas_plc_test_scheme bas_Plc_Test_Scheme;//测试方案
  40. private int schDtlMainId = 0;//测试方案明细主键id
  41. private int delayTime = Convert.ToInt32(ConfigurationManager.AppSettings["DelayTime"]);
  42. private int longDelayTime = Convert.ToInt32(ConfigurationManager.AppSettings["LongDelayTime"]);
  43. public EditItemDetailViewModel(IDialogService dialog, IEventAggregator aggregator, IRegionManager regionManager, IOptionConfigService optionConfigService, IBasicPlcTestSchemeService basicPlcTestSchemeService, IBasicPlcTestSchemeDtlService basicPlcTestSchemeDtlService, IBasicDeviceKindService iBasicDeviceKindService, IMapper mapper, ILogger logger)
  44. {
  45. _dialog = dialog;
  46. _aggregator = aggregator;
  47. _regionManager = regionManager;
  48. _optionConfigService = optionConfigService;
  49. _basicPlcTestSchemeService = basicPlcTestSchemeService;
  50. _basicPlcTestSchemeDtlService = basicPlcTestSchemeDtlService;
  51. _iBasicDeviceKindService = iBasicDeviceKindService;
  52. _mapper = mapper;
  53. _logger = logger;
  54. CloseCommand = new DelegateCommand(Close);
  55. SureCommand = new DelegateCommand<string>(Sure);
  56. ResetCommand = new DelegateCommand<string>(ResetMethod);
  57. AddDetailCommand = new DelegateCommand<string>(AddPLCDetail);
  58. EditInCommand = new DelegateCommand<object>(EditIn);
  59. EditOutCommand = new DelegateCommand<object>(EditOut);
  60. EditBeforeCommand = new DelegateCommand<Object>(EditBefore);
  61. DeleteBeforeCommand = new DelegateCommand<Object>(DeleteBefore);
  62. DeleteInCommand = new DelegateCommand<object>(DeleteIn);
  63. DeleteOutCommand = new DelegateCommand<object>(DeleteOut);
  64. OnLoadCommand = new DelegateCommand<object>(OnLoad);
  65. TxtLostFocusCommand = new DelegateCommand(GetExistSchs);
  66. OpenExistCommand = new DelegateCommand<string>(OpenExist);
  67. UpCommand = new DelegateCommand<object>(DataUp);
  68. DownCommand = new DelegateCommand<object>(DataDown);
  69. DetailCommand = new DelegateCommand<object>(CheckDetail);
  70. DeleteCommand = new DelegateCommand<object>(Delete);
  71. BeforeConList = new ObservableCollection<BasPlcItemConfigDto>();
  72. InConList = new ObservableCollection<BasPlcItemConfigDto>();
  73. OutConList = new ObservableCollection<BasPlcItemConfigDto>();
  74. //获取设备类型
  75. DeviceKindNameList = _iBasicDeviceKindService.FindAllDeviceKind();
  76. GetConfigOption();
  77. }
  78. private void Delete(object obj)
  79. {
  80. int id = Convert.ToInt32(obj);
  81. bool isResult = _basicPlcTestSchemeDtlService.Delete(id);
  82. if (isResult)
  83. {
  84. MessageBox.Show("删除成功!", "确认", MessageBoxButton.OK, MessageBoxImage.Information);
  85. //更新已有的测试项
  86. GetExistSchs();
  87. }
  88. }
  89. private void CheckDetail(object obj)
  90. {
  91. }
  92. #region idialog接口实现
  93. public string Title { set; get; } = "编辑测试项";
  94. public event Action<IDialogResult> RequestClose;
  95. #endregion
  96. #region 私有方法
  97. /// <summary>
  98. /// 测试方案明细主键ID 查找测试方案id 及方案名
  99. /// </summary>
  100. /// <param name="schDtlId"></param>
  101. private void GetDetaiMsg(int schDtlId)
  102. {
  103. //根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
  104. var findEntity = _basicPlcTestSchemeDtlService.Find(schDtlId);
  105. var findresult = _mapper.Map<bas_plc_test_scheme_dtl, BasicPlcTestSchemeDtlDto>(findEntity);
  106. if (findresult != null)
  107. {
  108. //根据方案id 在方案表中查找方案名 设备名
  109. int schID = Convert.ToInt32(findresult.SchemeId);
  110. //测试方案
  111. bas_Plc_Test_Scheme = _basicPlcTestSchemeService.Find(schID);
  112. if (bas_Plc_Test_Scheme != null)
  113. {
  114. ScheduleName = bas_Plc_Test_Scheme.scheme_name;
  115. DeviceKindName = bas_Plc_Test_Scheme.devicekind_name;
  116. }
  117. TestName = findresult.ItemName;
  118. SelectTest = findresult.ItemType;
  119. SelectTime = findresult.ItemTime.ToString();
  120. //前置项解析
  121. string preconStr = findresult.Precondition.ToString();
  122. if (!string.IsNullOrEmpty(preconStr))
  123. {
  124. JsonModel preconditionModel = JsonConvert.DeserializeObject<JsonModel>(preconStr);
  125. BeforeSelectJudge = preconditionModel.ItemType;
  126. SelectLogic = preconditionModel.ItemLogical;
  127. BeforeDetail = preconditionModel.Description;
  128. BeforeConList.Clear();
  129. foreach (var detail in preconditionModel.DetailInfo)
  130. {
  131. BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
  132. basPlcItemConfigDto.Id = detail.Id;
  133. basPlcItemConfigDto.PlcItem = detail.PlcItem;
  134. basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
  135. basPlcItemConfigDto.PlcAddType = detail.PlcAddType;
  136. basPlcItemConfigDto.PlcValue = detail.PlcValue;
  137. basPlcItemConfigDto.Remark = detail.Remark;
  138. BeforeConList.Add(basPlcItemConfigDto);
  139. }
  140. }
  141. //输入项解析
  142. string inStr = findresult.Action.ToString();
  143. if (!string.IsNullOrEmpty(inStr))
  144. {
  145. JsonModel inModel = JsonConvert.DeserializeObject<JsonModel>(inStr);
  146. SelectInJudge = inModel.ItemType;
  147. InSelectLogic = inModel.ItemLogical;
  148. InDetail = inModel.Description;
  149. InConList.Clear();
  150. foreach (var detail in inModel.DetailInfo)
  151. {
  152. BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
  153. basPlcItemConfigDto.Id = detail.Id;
  154. basPlcItemConfigDto.PlcItem = detail.PlcItem;
  155. basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
  156. basPlcItemConfigDto.PlcAddType = detail.PlcAddType;
  157. basPlcItemConfigDto.PlcValue = detail.PlcValue;
  158. basPlcItemConfigDto.Remark = detail.Remark;
  159. InConList.Add(basPlcItemConfigDto);
  160. }
  161. }
  162. //输出项解析
  163. string outStr = findresult.JudgementResult.ToString();
  164. if (!string.IsNullOrEmpty(outStr))
  165. {
  166. JsonModel outModel = JsonConvert.DeserializeObject<JsonModel>(outStr);
  167. SelectOutJudge = outModel.ItemType;
  168. OutSelectLogic = outModel.ItemLogical;
  169. OutDetail = outModel.Description;
  170. OutConList.Clear();
  171. foreach (var detail in outModel.DetailInfo)
  172. {
  173. BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
  174. basPlcItemConfigDto.Id = detail.Id;
  175. basPlcItemConfigDto.PlcItem = detail.PlcItem;
  176. basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
  177. basPlcItemConfigDto.PlcAddType = detail.PlcAddType;
  178. basPlcItemConfigDto.PlcValue = detail.PlcValue;
  179. basPlcItemConfigDto.Remark = detail.Remark;
  180. OutConList.Add(basPlcItemConfigDto);
  181. }
  182. }
  183. }
  184. }
  185. /// <summary>
  186. /// 打开已有方案
  187. /// </summary>
  188. /// <param name="obj"></param>
  189. /// <exception cref="NotImplementedException"></exception>
  190. private void OpenExist(string str)
  191. {
  192. if (string.IsNullOrEmpty(DeviceKindName))
  193. {
  194. MessageBox.Show("请选择设备类型!", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
  195. return;
  196. }
  197. if (string.IsNullOrEmpty(ScheduleName))
  198. {
  199. MessageBox.Show("请填写方案名称!", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
  200. return;
  201. }
  202. //设备类型名称
  203. DialogParameters parm = new DialogParameters();
  204. parm.Add("Key", DeviceKindName);
  205. parm.Add("Key2", ScheduleName);
  206. //已有的测试项
  207. parm.Add("Key3", SchProjectList);
  208. //弹出详情对话框
  209. _dialog.ShowDialog("CopySchView", parm, async callback =>
  210. {
  211. if (callback.Result == ButtonResult.OK)
  212. {
  213. List<bas_plc_test_scheme_dtl> returnValue = callback.Parameters.GetValue<List<bas_plc_test_scheme_dtl>>("ReturnValue");
  214. //更新表格,重新获取
  215. GetExistSchs();
  216. }
  217. });
  218. }
  219. /// <summary>
  220. /// 获取测试项
  221. /// </summary>
  222. private void GetExistSchs()
  223. {
  224. SchProjectList.Clear();
  225. var findSche = _basicPlcTestSchemeService.FindByName(ScheduleName);
  226. if (findSche != null)
  227. {
  228. //显示设备名称
  229. DeviceKindName = findSche.devicekind_name;
  230. long schID = findSche.scheme_id;
  231. //查找此方案下的所有的测试项,并增加到表格
  232. var schDtls = _basicPlcTestSchemeDtlService.QueryList()?.FindAll(x => x.scheme_id == schID)?.OrderBy(x => x.scheme_dtl_id);
  233. foreach (var unit in schDtls)
  234. {
  235. string itemType = string.Empty;
  236. switch (unit.item_type)
  237. {
  238. case 0:
  239. itemType = "前置项";
  240. break;
  241. case 1:
  242. itemType = "PLC点位测试项";
  243. break;
  244. case 2:
  245. itemType = "Robot动作测试";
  246. break;
  247. }
  248. SchProjectList.Add(new SelectItemModel
  249. {
  250. SchDtlId = unit.scheme_dtl_id,
  251. ItemName = unit.item_name,
  252. ItemType = itemType,
  253. BeforeDetail = unit.precondition_describe,
  254. InDetail = unit.action_describe,
  255. OutDetail = unit.judgement_result_describe
  256. });
  257. }
  258. }
  259. }
  260. /// <summary>
  261. /// 下移
  262. /// </summary>
  263. /// <param name="obj"></param>
  264. private void DataDown(object obj)
  265. {
  266. int id = Convert.ToInt32(obj);
  267. var findScheExist = SchProjectList.FirstOrDefault(x => x.SchDtlId == id);
  268. if (findScheExist != null)
  269. {
  270. int index = SchProjectList.IndexOf(findScheExist);
  271. if (index != -1)
  272. {
  273. if (index == SchProjectList.Count - 1)
  274. return;
  275. SchProjectList.RemoveAt(index);
  276. index = index + 1;
  277. SchProjectList.Insert(index, findScheExist);
  278. }
  279. }
  280. }
  281. /// <summary>
  282. /// 上移
  283. /// </summary>
  284. /// <param name="obj"></param>
  285. private void DataUp(object obj)
  286. {
  287. int id = Convert.ToInt32(obj);
  288. var findScheExist = SchProjectList.FirstOrDefault(x => x.SchDtlId == id);
  289. if (findScheExist != null)
  290. {
  291. int index = SchProjectList.IndexOf(findScheExist);
  292. if (index != -1)
  293. {
  294. if (index == 0)
  295. return;
  296. SchProjectList.RemoveAt(index);
  297. index = index - 1;
  298. SchProjectList.Insert(index, findScheExist);
  299. }
  300. }
  301. }
  302. private void OnLoad(object obj)
  303. {
  304. }
  305. private void OpenEditDialog(Object obj, ObservableCollection<BasPlcItemConfigDto> conList)
  306. {
  307. int id = Convert.ToInt32(obj);
  308. var edit = conList.FirstOrDefault(x => x.Id == id);
  309. if (edit != null)
  310. {
  311. DialogParameters parm = new DialogParameters();
  312. parm.Add("Key", edit);
  313. //弹出详情对话框
  314. _dialog.ShowDialog("AddDetailView", parm, async callback =>
  315. {
  316. if (callback.Result == ButtonResult.OK)
  317. {
  318. BasPlcItemConfigDto returnValue = callback.Parameters.GetValue<BasPlcItemConfigDto>("ReturnValue");
  319. //更新
  320. var after = conList.FirstOrDefault(x => x.Id == id);
  321. if (after != null)
  322. {
  323. after.PlcItem = returnValue.PlcItem;
  324. after.PlcAddress = returnValue.PlcAddress;
  325. after.PlcAddType = returnValue.PlcAddType;
  326. after.PlcValue = returnValue.PlcValue;
  327. after.Remark = returnValue.Remark;
  328. }
  329. }
  330. });
  331. }
  332. }
  333. /// <summary>
  334. /// 前置条件编辑
  335. /// </summary>
  336. /// <param name="obj"></param>
  337. /// <exception cref="NotImplementedException"></exception>
  338. private void EditBefore(Object obj)
  339. {
  340. OpenEditDialog(obj, BeforeConList);
  341. }
  342. private void EditOut(object obj)
  343. {
  344. OpenEditDialog(obj, OutConList);
  345. }
  346. private void EditIn(object obj)
  347. {
  348. OpenEditDialog(obj, InConList);
  349. }
  350. /// <summary>
  351. /// 前置条件删除
  352. /// </summary>
  353. /// <param name="obj"></param>
  354. /// <exception cref="NotImplementedException"></exception>
  355. private void DeleteBefore(Object obj)
  356. {
  357. int id = Convert.ToInt32(obj);
  358. MessageBoxResult boxResult = MessageBox.Show("确认删除此条数据?", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Question);
  359. if (boxResult == MessageBoxResult.OK)
  360. {
  361. var del = BeforeConList.FirstOrDefault(x => x.Id == id);
  362. if (del != null)
  363. {
  364. BeforeConList.Remove(del);
  365. }
  366. }
  367. }
  368. private void DeleteOut(object obj)
  369. {
  370. int id = Convert.ToInt32(obj);
  371. MessageBoxResult boxResult = MessageBox.Show("确认删除此条数据?", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Question);
  372. if (boxResult == MessageBoxResult.OK)
  373. {
  374. var del = OutConList.FirstOrDefault(x => x.Id == id);
  375. if (del != null)
  376. {
  377. OutConList.Remove(del);
  378. }
  379. }
  380. }
  381. private void DeleteIn(object obj)
  382. {
  383. int id = Convert.ToInt32(obj);
  384. MessageBoxResult boxResult = MessageBox.Show("确认删除此条数据?", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Question);
  385. if (boxResult == MessageBoxResult.OK)
  386. {
  387. var del = InConList.FirstOrDefault(x => x.Id == id);
  388. if (del != null)
  389. {
  390. InConList.Remove(del);
  391. }
  392. }
  393. }
  394. /// <summary>
  395. /// 获取配置
  396. /// </summary>
  397. private void GetConfigOption()
  398. {
  399. var configList = _optionConfigService.QueryList();
  400. _optionConfigs = _mapper.Map<List<OptionConfig>, List<OptionConfigDto>>(configList);
  401. var tests = _optionConfigs.FindAll(x => x.TypeID == 1);
  402. TestKinds = new List<string>();
  403. foreach (var test in tests)
  404. {
  405. TestKinds.Add(test.ContentOption);
  406. }
  407. //测试项类型
  408. var judges = _optionConfigs.FindAll(x => x.TypeID == 2);
  409. foreach (var judge in judges)
  410. {
  411. BeforeJudgeKinds.Add(judge.ContentOption);
  412. InJudgeKinds.Add(judge.ContentOption);
  413. OutJudgeKinds.Add(judge.ContentOption);
  414. }
  415. //判定逻辑
  416. var logics = _optionConfigs.FindAll(x => x.TypeID == 3);
  417. foreach (var logic in logics)
  418. {
  419. JudgeLogicKinds.Add(logic.ContentOption);
  420. InJudgeLogicKinds.Add(logic.ContentOption);
  421. OutJudgeLogicKinds.Add(logic.ContentOption);
  422. }
  423. //测试时间
  424. TestTimeList.Add(delayTime.ToString());
  425. TestTimeList.Add(longDelayTime.ToString());
  426. }
  427. /// <summary>
  428. /// 新增
  429. /// </summary>
  430. /// <param name="str"></param>
  431. private void AddPLCDetail(string str)
  432. {
  433. DialogParameters parm = new DialogParameters();
  434. parm.Add("Key", "");
  435. //弹出详情对话框
  436. _dialog.ShowDialog("AddDetailView", parm, async callback =>
  437. {
  438. if (callback.Result == ButtonResult.OK)
  439. {
  440. BasPlcItemConfigDto returnValue = callback.Parameters.GetValue<BasPlcItemConfigDto>("ReturnValue");
  441. switch (str)
  442. {
  443. case "Before":
  444. returnValue.Id = BeforeConList.Count + 1;
  445. BeforeConList.Add(returnValue); break;
  446. case "In":
  447. returnValue.Id = InConList.Count + 1;
  448. InConList.Add(returnValue); break;
  449. case "Out":
  450. returnValue.Id = OutConList.Count + 1;
  451. OutConList.Add(returnValue); break;
  452. }
  453. }
  454. });
  455. }
  456. /// <summary>
  457. /// 发送log之界面显示
  458. /// </summary>
  459. /// <param name="msg"></param>
  460. private void SendLogToDis(string msg)
  461. {
  462. _aggregator.GetEvent<LogEvent>().Publish(new LogMessage
  463. {
  464. LogTime = DateTime.Now,
  465. LogMsg = msg
  466. });
  467. }
  468. /// <summary>
  469. /// 初始化
  470. /// </summary>
  471. /// <summary>
  472. /// 关闭按钮
  473. /// </summary>
  474. private void Close()
  475. {
  476. //RequestClose?.Invoke(new NavigationResult(new NavigationContext(),true);
  477. }
  478. /// <summary>
  479. /// 确认
  480. /// </summary>
  481. /// <param name="obj"></param>
  482. private void Sure(string obj)
  483. {
  484. if (string.IsNullOrEmpty(ScheduleName))
  485. {
  486. MessageBox.Show("请填写测试方案名称!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  487. return;
  488. }
  489. if (string.IsNullOrEmpty(DeviceKindName))
  490. {
  491. MessageBox.Show("请填写设备类型名称!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  492. return;
  493. }
  494. if (string.IsNullOrEmpty(SelectTest))
  495. {
  496. MessageBox.Show("请选择测试项类型!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  497. return;
  498. }
  499. if (string.IsNullOrEmpty(TestName))
  500. {
  501. MessageBox.Show("请填写测试项名称!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  502. return;
  503. }
  504. if (string.IsNullOrEmpty(BeforeSelectJudge))
  505. {
  506. MessageBox.Show("请填写前置项测试项测试类型!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  507. return;
  508. }
  509. //前置项
  510. if (string.IsNullOrEmpty(BeforeSelectJudge))
  511. {
  512. MessageBox.Show("请填写前置项测试项测试类型!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  513. return;
  514. }
  515. if (string.IsNullOrEmpty(SelectLogic))
  516. {
  517. MessageBox.Show("请填写前置项判定逻辑!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  518. return;
  519. }
  520. //输入项
  521. if (string.IsNullOrEmpty(SelectInJudge))
  522. {
  523. MessageBox.Show("请填写输入项测试项测试类型!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  524. return;
  525. }
  526. if (string.IsNullOrEmpty(InSelectLogic))
  527. {
  528. MessageBox.Show("请填写输入项判定逻辑!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  529. return;
  530. }
  531. //输出项
  532. if (string.IsNullOrEmpty(SelectOutJudge))
  533. {
  534. MessageBox.Show("请填写结果项测试项测试类型!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  535. return;
  536. }
  537. if (string.IsNullOrEmpty(OutSelectLogic))
  538. {
  539. MessageBox.Show("请填写结果项判定逻辑!", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  540. return;
  541. }
  542. try
  543. {
  544. //更新测试方案名称
  545. if (bas_Plc_Test_Scheme != null)
  546. {
  547. bas_Plc_Test_Scheme.scheme_name = ScheduleName;
  548. bas_Plc_Test_Scheme.devicekind_name = DeviceKindName;
  549. _basicPlcTestSchemeService.Edit(bas_Plc_Test_Scheme);
  550. }
  551. //查找测试方案id
  552. var finsScheHave = _basicPlcTestSchemeService.FindByName(ScheduleName);
  553. if (finsScheHave != null)
  554. {
  555. long id = finsScheHave.scheme_id;
  556. //增加或修改方案明细表
  557. AddOrEditDetailsToDb(id);
  558. }
  559. //更新已有的测试项
  560. GetExistSchs();
  561. SendLogToDis($"修改测试项,测试项名称为{TestName},方案名称为{ScheduleName}");
  562. RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
  563. }
  564. catch (Exception ex)
  565. {
  566. _logger.LogError(ex.ToString());
  567. }
  568. }
  569. /// <summary>
  570. /// 方案明细添加到数据库
  571. /// </summary>
  572. private void AddOrEditDetailsToDb(long scheduleId)
  573. {
  574. //前置项json转化
  575. string prefixJsonStr = ModelToJsonToStr(BeforeSelectJudge, SelectLogic, BeforeDetail, BeforeConList);
  576. //输入项json转化
  577. string inJsonStr = ModelToJsonToStr(SelectInJudge, InSelectLogic, InDetail, InConList);
  578. //输出项json转化
  579. string outJsonStr = ModelToJsonToStr(SelectOutJudge, OutSelectLogic, OutDetail, OutConList);
  580. //添加达到测试主表
  581. //增加测试方案
  582. BasicPlcTestSchemeDtlDto schDtlDto = new BasicPlcTestSchemeDtlDto();
  583. schDtlDto.SchemeId = scheduleId;
  584. schDtlDto.ItemName = TestName;
  585. schDtlDto.ItemType = SelectTest;
  586. schDtlDto.ItemTime =Convert.ToInt32(SelectTime);
  587. schDtlDto.Precondition = prefixJsonStr;
  588. schDtlDto.PreconditionDescribe = BeforeDetail;
  589. schDtlDto.Action = inJsonStr;
  590. schDtlDto.ActionDescribe = InDetail;
  591. schDtlDto.JudgementResult = outJsonStr;
  592. schDtlDto.JudgementResultDescribe = OutDetail;
  593. schDtlDto.CreateBy = Appsession.UserName;
  594. schDtlDto.CreateTime = DateTime.Now;
  595. schDtlDto.UpdateTime = DateTime.Now;
  596. schDtlDto.UpdateBy = Appsession.UserName;
  597. bas_plc_test_scheme_dtl schDtlEntity = _mapper.Map<BasicPlcTestSchemeDtlDto, bas_plc_test_scheme_dtl>(schDtlDto);
  598. schDtlEntity.item_type = StrToItemType(schDtlDto.ItemType);
  599. try
  600. {
  601. {
  602. {
  603. schDtlDto.SchemeDtlId = schDtlMainId;
  604. bas_plc_test_scheme_dtl schDtlEntityEdit = _mapper.Map<BasicPlcTestSchemeDtlDto, bas_plc_test_scheme_dtl>(schDtlDto);
  605. //ItemType 转化
  606. schDtlEntityEdit.item_type = StrToItemType(schDtlDto.ItemType);
  607. bool isSucc = _basicPlcTestSchemeDtlService.Edit(schDtlEntityEdit);
  608. if (isSucc)
  609. {
  610. _logger.LogInformation($"更新方案成功。方案名{ScheduleName},测试项{TestName}");
  611. MessageBoxResult boxResult = MessageBox.Show("保存成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
  612. }
  613. else
  614. {
  615. MessageBoxResult boxResult = MessageBox.Show("保存失败", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
  616. return;
  617. }
  618. }
  619. }
  620. }
  621. catch (Exception ex)
  622. {
  623. _logger.LogError(ex.ToString());
  624. }
  625. }
  626. /// <summary>
  627. /// 转化
  628. /// </summary>
  629. /// <param name="typeStr"></param>
  630. /// <returns></returns>
  631. private int StrToItemType(string typeStr)
  632. {
  633. int itemInt = 0;
  634. switch (typeStr)
  635. {
  636. case "前置项":
  637. itemInt = 0;
  638. break;
  639. case "PLC点位测试项":
  640. itemInt = 1;
  641. break;
  642. case "Robot动作测试":
  643. itemInt = 2;
  644. break;
  645. }
  646. return itemInt;
  647. }
  648. /// <summary>
  649. /// mode转json
  650. /// </summary>
  651. /// <param name="itemType"></param>
  652. /// <param name="itemLogical"></param>
  653. /// <param name="description"></param>
  654. /// <param name="conList"></param>
  655. /// <returns></returns>
  656. private string ModelToJsonToStr(string itemType, string itemLogical, string description, ObservableCollection<BasPlcItemConfigDto> conList)
  657. {
  658. JsonModel prefixJsonModel = new JsonModel();
  659. prefixJsonModel.ItemType = itemType;
  660. prefixJsonModel.ItemLogical = itemLogical;
  661. prefixJsonModel.Description = description;
  662. prefixJsonModel.DetailInfo = new List<DetailPLC>();
  663. foreach (var item in conList)
  664. {
  665. DetailPLC plcItem = new DetailPLC();
  666. plcItem.Id = item.Id;
  667. plcItem.PlcItem = item.PlcItem;
  668. plcItem.PlcAddress = item.PlcAddress;
  669. plcItem.PlcAddType = item.PlcAddType;
  670. plcItem.PlcValue = item.PlcValue;
  671. plcItem.Remark = item.Remark;
  672. prefixJsonModel.DetailInfo.Add(plcItem);
  673. }
  674. string prefixJsonStr = JsonConvert.SerializeObject(prefixJsonModel);
  675. return prefixJsonStr;
  676. }
  677. /// <summary>
  678. /// 重置
  679. /// </summary>
  680. /// <param name="obj"></param>
  681. private void ResetMethod(string obj)
  682. {
  683. ScheduleName = string.Empty;
  684. DeviceKindName = string.Empty;
  685. TestName = string.Empty;
  686. }
  687. public bool CanCloseDialog()
  688. {
  689. return true;
  690. }
  691. public void OnDialogClosed()
  692. {
  693. }
  694. public void OnDialogOpened(IDialogParameters parameters)
  695. {
  696. //编辑
  697. var getMsg = parameters.GetValues<long>("Key");
  698. ///值不为空,表示修改,为空表示新增
  699. if (getMsg != null)
  700. {
  701. foreach (var item in getMsg)
  702. {
  703. int schDtlId = Convert.ToInt32(item);
  704. schDtlMainId = schDtlId;//全局变量赋值,测试方案明细id
  705. GetDetaiMsg(schDtlId);
  706. }
  707. }
  708. }
  709. #endregion
  710. #region 命令绑定
  711. public DelegateCommand CloseCommand { set; get; }
  712. public DelegateCommand<string> SureCommand { set; get; }
  713. public DelegateCommand<string> ResetCommand { set; get; }
  714. /// <summary>
  715. /// 新增对话框按钮
  716. /// </summary>
  717. public DelegateCommand<string> AddDetailCommand { set; get; }
  718. /// <summary>
  719. /// 表格删除
  720. /// </summary>
  721. public DelegateCommand<Object> DeleteBeforeCommand { set; get; }
  722. /// <summary>
  723. /// 表格编辑按钮
  724. /// </summary>
  725. public DelegateCommand<Object> EditBeforeCommand { set; get; }
  726. /// <summary>
  727. /// 输入项
  728. /// </summary>
  729. public DelegateCommand<Object> DeleteInCommand { set; get; }
  730. public DelegateCommand<Object> EditInCommand { set; get; }
  731. /// <summary>
  732. /// 输出项
  733. /// </summary>
  734. public DelegateCommand<Object> DeleteOutCommand { set; get; }
  735. public DelegateCommand<Object> EditOutCommand { set; get; }
  736. public DelegateCommand<Object> OnLoadCommand { set; get; }
  737. public DelegateCommand TxtLostFocusCommand { set; get; }
  738. public DelegateCommand<string> OpenExistCommand { set; get; }
  739. public DelegateCommand<object> DownCommand { set; get; }
  740. public DelegateCommand<object> UpCommand { set; get; }
  741. public DelegateCommand<object> EditDetailCommand { set; get; }
  742. public DelegateCommand<object> DisAnoCommand { set; get; }
  743. public DelegateCommand<object> CancelCommand { set; get; }
  744. public DelegateCommand<object> DetailCommand { set; get; }
  745. public DelegateCommand<object> DeleteCommand { set; get; }
  746. #endregion
  747. #region 变量绑定
  748. /// <summary>
  749. /// 测试方案编码
  750. /// </summary>
  751. private string scheduleName;
  752. public string ScheduleName
  753. {
  754. get { return scheduleName; }
  755. set { scheduleName = value; RaisePropertyChanged(); }
  756. }
  757. /// <summary>
  758. /// 设备类型
  759. /// </summary>
  760. private string deviceKindName;
  761. public string DeviceKindName
  762. {
  763. get { return deviceKindName; }
  764. set { deviceKindName = value; RaisePropertyChanged(); }
  765. }
  766. /// <summary>
  767. /// 测试项名称
  768. /// </summary>
  769. private string testName;
  770. public string TestName
  771. {
  772. get { return testName; }
  773. set { testName = value; RaisePropertyChanged(); }
  774. }
  775. /// <summary>
  776. /// 测试项类型
  777. /// </summary>
  778. private List<string> testKinds = new List<string>();
  779. public List<string> TestKinds
  780. {
  781. get { return testKinds; }
  782. set { testKinds = value; RaisePropertyChanged(); }
  783. }
  784. /// <summary>
  785. ///
  786. /// </summary>
  787. private string selectTest;
  788. public string SelectTest
  789. {
  790. get { return selectTest; }
  791. set { selectTest = value; RaisePropertyChanged(); }
  792. }
  793. /// <summary>
  794. /// 测试时间
  795. /// </summary>
  796. private string selectTime;
  797. public string SelectTime
  798. {
  799. get { return selectTime; }
  800. set { selectTime = value; RaisePropertyChanged(); }
  801. }
  802. private ObservableCollection<string> testTimeList = new ObservableCollection<string>();
  803. public ObservableCollection<string> TestTimeList
  804. {
  805. get { return testTimeList; }
  806. set { testTimeList = value; RaisePropertyChanged(); }
  807. }
  808. /// <summary>
  809. /// 判定类型(前置项)
  810. /// </summary>
  811. private List<string> beforeJudgeKinds = new List<string>();
  812. public List<string> BeforeJudgeKinds
  813. {
  814. get { return beforeJudgeKinds; }
  815. set { beforeJudgeKinds = value; RaisePropertyChanged(); }
  816. }
  817. private string beforeSelectJudge;
  818. public string BeforeSelectJudge
  819. {
  820. get { return beforeSelectJudge; }
  821. set { beforeSelectJudge = value; RaisePropertyChanged(); }
  822. }
  823. /// <summary>
  824. /// 逻辑判断
  825. /// </summary>
  826. private List<string> judgeLogicKinds = new List<string>();
  827. public List<string> JudgeLogicKinds
  828. {
  829. get { return judgeLogicKinds; }
  830. set { judgeLogicKinds = value; RaisePropertyChanged(); }
  831. }
  832. private string selectLogic;
  833. public string SelectLogic
  834. {
  835. get { return selectLogic; }
  836. set { selectLogic = value; RaisePropertyChanged(); }
  837. }
  838. private string beforeDetail;
  839. public string BeforeDetail
  840. {
  841. get { return beforeDetail; }
  842. set { beforeDetail = value; RaisePropertyChanged(); }
  843. }
  844. private ObservableCollection<BasPlcItemConfigDto> beforeConList;
  845. public ObservableCollection<BasPlcItemConfigDto> BeforeConList
  846. {
  847. get { return beforeConList; }
  848. set { beforeConList = value; RaisePropertyChanged(); }
  849. }
  850. /// <summary>
  851. /// 判定类型(输入项)
  852. /// </summary>
  853. private List<string> inJudgeKinds = new List<string>();
  854. public List<string> InJudgeKinds
  855. {
  856. get { return inJudgeKinds; }
  857. set { inJudgeKinds = value; RaisePropertyChanged(); }
  858. }
  859. private string selectInJudge;
  860. public string SelectInJudge
  861. {
  862. get { return selectInJudge; }
  863. set { selectInJudge = value; RaisePropertyChanged(); }
  864. }
  865. /// <summary>
  866. /// 逻辑判断
  867. /// </summary>
  868. private List<string> inJudgeLogicKinds = new List<string>();
  869. public List<string> InJudgeLogicKinds
  870. {
  871. get { return inJudgeLogicKinds; }
  872. set { inJudgeLogicKinds = value; RaisePropertyChanged(); }
  873. }
  874. private string inSelectLogic;
  875. public string InSelectLogic
  876. {
  877. get { return inSelectLogic; }
  878. set { inSelectLogic = value; RaisePropertyChanged(); }
  879. }
  880. private string inDetail;
  881. public string InDetail
  882. {
  883. get { return inDetail; }
  884. set { inDetail = value; RaisePropertyChanged(); }
  885. }
  886. private ObservableCollection<BasPlcItemConfigDto> inConList;
  887. public ObservableCollection<BasPlcItemConfigDto> InConList
  888. {
  889. get { return inConList; }
  890. set { inConList = value; RaisePropertyChanged(); }
  891. }
  892. /// <summary>
  893. /// 判定类型(结果项)
  894. /// </summary>
  895. private List<string> outJudgeKinds = new List<string>();
  896. public List<string> OutJudgeKinds
  897. {
  898. get { return outJudgeKinds; }
  899. set { outJudgeKinds = value; RaisePropertyChanged(); }
  900. }
  901. private string selectOutJudge;
  902. public string SelectOutJudge
  903. {
  904. get { return selectOutJudge; }
  905. set { selectOutJudge = value; RaisePropertyChanged(); }
  906. }
  907. /// <summary>
  908. /// 逻辑判断
  909. /// </summary>
  910. private List<string> outJudgeLogicKinds = new List<string>();
  911. public List<string> OutJudgeLogicKinds
  912. {
  913. get { return outJudgeLogicKinds; }
  914. set { outJudgeLogicKinds = value; RaisePropertyChanged(); }
  915. }
  916. private string outSelectLogic;
  917. public string OutSelectLogic
  918. {
  919. get { return outSelectLogic; }
  920. set { outSelectLogic = value; RaisePropertyChanged(); }
  921. }
  922. private string outDetail;
  923. public string OutDetail
  924. {
  925. get { return outDetail; }
  926. set { outDetail = value; RaisePropertyChanged(); }
  927. }
  928. private ObservableCollection<BasPlcItemConfigDto> outConList;
  929. public ObservableCollection<BasPlcItemConfigDto> OutConList
  930. {
  931. get { return outConList; }
  932. set { outConList = value; RaisePropertyChanged(); }
  933. }
  934. /// <summary>
  935. /// 设备类型
  936. /// </summary>
  937. private List<string> deviceKindNameList;
  938. public List<string> DeviceKindNameList
  939. {
  940. get { return deviceKindNameList; }
  941. set { deviceKindNameList = value; RaisePropertyChanged(); }
  942. }
  943. private ObservableCollection<SelectItemModel> schProjectList = new ObservableCollection<SelectItemModel>();
  944. public ObservableCollection<SelectItemModel> SchProjectList
  945. {
  946. get { return schProjectList; }
  947. set { SetProperty(ref schProjectList, value); }
  948. }
  949. #endregion
  950. }
  951. }