BaseConfigViewModel.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. using AutoMapper;
  2. using BizService;
  3. using Microsoft.Extensions.Logging;
  4. using MiniExcelLibs;
  5. using Model;
  6. using Model.Dto;
  7. using Model.Entities;
  8. using Prism.Commands;
  9. using Prism.Mvvm;
  10. using Prism.Regions;
  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 BaseConfigViewModel : BindableBase
  22. {
  23. private readonly IDialogService _dialog;
  24. private readonly IOptionConfigService _optionConfigService;
  25. private readonly IBasicPlcTestSchemeService _basicPlcTestSchemeService;
  26. private readonly IBasicPlcTestSchemeDtlService _basicPlcTestSchemeDtlService;
  27. private readonly ILogger _logger;
  28. private readonly IMapper _mapper;
  29. private readonly IMenuService _menuService;
  30. private List<BasicPlcTestSchemeDto> allConfigList = new List<BasicPlcTestSchemeDto>();//所有方案
  31. private List<BasicPlcTestSchemeDto> conditionConfig = new List<BasicPlcTestSchemeDto>();//符合条件的方案
  32. private const int PageCount = 1; //每一页显示个数
  33. public BaseConfigViewModel(IDialogService dialog, IMenuService menuService, IOptionConfigService optionConfigService, IBasicPlcTestSchemeService basicPlcTestSchemeService, IBasicPlcTestSchemeDtlService basicPlcTestSchemeDtlService ,IMapper mapper, ILogger logger)
  34. {
  35. _dialog = dialog;
  36. _optionConfigService = optionConfigService;
  37. _basicPlcTestSchemeService = basicPlcTestSchemeService;
  38. _basicPlcTestSchemeDtlService = basicPlcTestSchemeDtlService;
  39. _logger = logger;
  40. _mapper = mapper;
  41. _menuService = menuService;
  42. QueryCommand = new DelegateCommand<object>(Query);
  43. ResetCommand = new DelegateCommand<object>(Reset);
  44. ExportCommand = new DelegateCommand<string>(Export);
  45. AddPlanCommand = new DelegateCommand<string>(AddPlan);
  46. EditCommand = new DelegateCommand<object>(Edit);
  47. DeleteCommand = new DelegateCommand<object>(Delete);
  48. CopyCommand = new DelegateCommand<object>(Copy);
  49. GetConfigOption();
  50. GetContent();
  51. }
  52. #region 私有方法
  53. private void Reset(object obj)
  54. {
  55. ScheduleName = string.Empty;
  56. DeviceName = string.Empty;
  57. TestName = string.Empty;
  58. SelectTest = string.Empty;
  59. }
  60. /// <summary>
  61. /// 查询
  62. /// </summary>
  63. /// <param name="obj"></param>
  64. private void Query(object obj)
  65. {
  66. if (StartTime > EndTime)
  67. {
  68. MessageBox.Show("起始时间大于结束时间,请重新输入", "确认", MessageBoxButton.OK, MessageBoxImage.Warning);
  69. return;
  70. }
  71. //if (Convert.ToDateTime(StartTime).AddDays(2) < Convert.ToDateTime(EndTime))
  72. //{
  73. // MessageBox.Show("起始时间和结束时间间隔不能大于2天,请重新输入", "确认", MessageBoxButton.OK, MessageBoxImage.Warning);
  74. // return;
  75. //}
  76. conditionConfig = (from a in allConfigList
  77. where (EndTime == DateTime.MinValue ? true : (a.CreateTime < Convert.ToDateTime(EndTime)) && (Convert.ToDateTime(StartTime) < a.CreateTime))
  78. && (string.IsNullOrEmpty(ScheduleName) ? true : (a.SchemeName == ScheduleName))
  79. && (string.IsNullOrEmpty(TestName) ? true : (a.ItemName == TestName))
  80. && (string.IsNullOrEmpty(DeviceName) ? true : (a.DeviceName == DeviceName))
  81. && (string.IsNullOrEmpty(SelectTest) ? true : (a.ItemType == SelectTest))
  82. select a).ToList();
  83. //默认显示的第一页
  84. Getpage();
  85. //BaseConfigList = new ObservableCollection<BasicPlcTestSchemeDto>(conditionConfig);
  86. }
  87. /// <summary>
  88. /// 获取配置
  89. /// </summary>
  90. private void GetConfigOption()
  91. {
  92. var configList = _optionConfigService.QueryList();
  93. var _optionConfigs = _mapper.Map<List<OptionConfig>, List<OptionConfigDto>>(configList);
  94. var tests = _optionConfigs.FindAll(x => x.TypeID == 1);
  95. TestKinds = new List<string>();
  96. foreach (var test in tests)
  97. {
  98. TestKinds.Add(test.ContentOption);
  99. }
  100. }
  101. /// <summary>
  102. /// 编辑
  103. /// </summary>
  104. /// <param name="obj"></param>
  105. private void Edit(object obj)
  106. {
  107. //测试方案明细主键ID
  108. long id = Convert.ToInt64(obj);
  109. DialogParameters parm = new DialogParameters();
  110. parm.Add("Key", id);
  111. //弹出详情对话框
  112. _dialog.ShowDialog("AddOrEditSchView", parm, async callback =>
  113. {
  114. if (callback.Result == ButtonResult.OK)
  115. {
  116. //更新表格,重新获取
  117. GetContent();
  118. }
  119. });
  120. }
  121. /// <summary>
  122. /// 删除操作
  123. /// </summary>
  124. /// <param name="obj"></param>
  125. private void Delete(object obj)
  126. {
  127. int id = Convert.ToInt32(obj);
  128. MessageBoxResult boxResult = MessageBox.Show("确认删除此条数据?", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Question);
  129. if (boxResult == MessageBoxResult.OK)
  130. {
  131. _basicPlcTestSchemeDtlService.Delete(id);
  132. //更新表格,重新获取
  133. GetContent();
  134. }
  135. }
  136. /// <summary>
  137. /// 复制方案
  138. /// </summary>
  139. /// <param name="obj"></param>
  140. private void Copy(object obj)
  141. {
  142. //测试方案名称
  143. string schName = obj.ToString();
  144. DialogParameters parm = new DialogParameters();
  145. parm.Add("Key", schName);
  146. //弹出详情对话框
  147. _dialog.ShowDialog("CopySchView", parm, async callback =>
  148. {
  149. if (callback.Result == ButtonResult.OK)
  150. {
  151. //更新表格,重新获取
  152. GetContent();
  153. }
  154. });
  155. }
  156. /// <summary>
  157. /// 新增按钮
  158. /// </summary>
  159. /// <param name="obj"></param>
  160. private void AddPlan(string obj)
  161. {
  162. //弹出详情对话框
  163. _dialog.ShowDialog("AddOrEditSchView", async callback =>
  164. {
  165. if (callback.Result == ButtonResult.OK)
  166. {
  167. //更新表格,重新获取
  168. GetContent();
  169. }
  170. });
  171. }
  172. /// <summary>
  173. /// excel导出
  174. /// </summary>
  175. /// <param name="obj"></param>
  176. private void Export(object obj)
  177. {
  178. using (System.Windows.Forms.SaveFileDialog saveFileDialog = new System.Windows.Forms.SaveFileDialog()
  179. {
  180. //设置文件类型
  181. //书写规则例如:txt files(*.txt)|*.txt
  182. Filter = "Excel files(*.xlsx)|*.xlsx|All files(*.*)|*.*",
  183. //设置默认文件名(可以不设置)
  184. FileName = "配置导出",
  185. //获取或设置一个值,该值指示如果用户省略扩展名,文件对话框是否自动在文件名中添加扩展名。(可以不设置)
  186. AddExtension = true,
  187. //保存对话框是否记忆上次打开的目录
  188. RestoreDirectory = true
  189. })
  190. {
  191. // Show save file dialog box
  192. //点了保存按钮进入
  193. if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  194. {
  195. try
  196. {
  197. //获得文件路径
  198. string localFilePath = saveFileDialog.FileName.ToString();
  199. //string filePathWithName = localFilePath + ".xlsx";
  200. //获取文件内容
  201. MiniExcel.SaveAs(localFilePath, BaseConfigList);
  202. }
  203. catch (Exception ex)
  204. {
  205. }
  206. }
  207. }
  208. }
  209. /// <summary>
  210. /// 获取解决方案
  211. /// </summary>
  212. private void GetContent()
  213. {
  214. //所有测试方案
  215. var schlist = _basicPlcTestSchemeService.QueryList();
  216. var configList = _mapper.Map<List<bas_plc_test_scheme>, List<BasicPlcTestSchemeDto>>(schlist);
  217. //清空集合
  218. BaseConfigList.Clear();
  219. allConfigList.Clear();
  220. conditionConfig.Clear();
  221. //查找测试项名称
  222. foreach (var sch in configList)
  223. {
  224. long schId = sch.SchemeId;
  225. //在解决方案详细表中查找所有的测试项
  226. var items=_basicPlcTestSchemeDtlService.FindAllBySchId(schId);
  227. foreach(var item in items)
  228. {
  229. BasicPlcTestSchemeDto basicPlcTestSchemeDto = new BasicPlcTestSchemeDto();
  230. basicPlcTestSchemeDto.SchemeId = item.scheme_dtl_id;
  231. basicPlcTestSchemeDto.SchemeName= sch.SchemeName;
  232. basicPlcTestSchemeDto.DeviceName= sch.DeviceName;
  233. switch(item.item_type)
  234. {
  235. case 0:
  236. basicPlcTestSchemeDto.ItemType = "前置项";
  237. break;
  238. case 1:
  239. basicPlcTestSchemeDto.ItemType = "PLC点位测试项";
  240. break;
  241. case 2:
  242. basicPlcTestSchemeDto.ItemType = "Robot动作测试";
  243. break;
  244. }
  245. basicPlcTestSchemeDto.ItemName=item.item_name;
  246. basicPlcTestSchemeDto.CreateBy=sch.CreateBy;
  247. basicPlcTestSchemeDto.CreateTime = sch.CreateTime;
  248. allConfigList.Add(basicPlcTestSchemeDto);
  249. conditionConfig.Add(basicPlcTestSchemeDto);
  250. }
  251. //默认显示的第一页
  252. Getpage();
  253. }
  254. }
  255. /// <summary>
  256. /// 获取页面
  257. /// </summary>
  258. private void Getpage()
  259. {
  260. CurrentPage = 1;
  261. TotalCount = conditionConfig.Count;
  262. CurrentPageChanged();
  263. }
  264. /// <summary>
  265. /// 页面变化
  266. /// </summary>
  267. private void CurrentPageChanged()
  268. {
  269. BaseConfigList.Clear();
  270. foreach (var i in conditionConfig.Skip((CurrentPage - 1) * CountPerPage).Take(CountPerPage))
  271. {
  272. BaseConfigList.Add(i);
  273. }
  274. }
  275. #endregion
  276. #region 命令绑定
  277. public DelegateCommand<object> EditCommand { set; get; }
  278. public DelegateCommand<string> AddPlanCommand { set; get; }
  279. public DelegateCommand<object> QueryCommand { set; get; }
  280. public DelegateCommand<object> ResetCommand { set; get; }
  281. public DelegateCommand<object> DeleteCommand { set; get; }
  282. public DelegateCommand<object> CopyCommand { set; get; }
  283. public DelegateCommand<string> ExportCommand { set; get; }
  284. #endregion
  285. #region 数据绑定
  286. /// <summary>
  287. /// 测试方案编码
  288. /// </summary>
  289. private string scheduleName;
  290. public string ScheduleName
  291. {
  292. get { return scheduleName; }
  293. set { scheduleName = value; RaisePropertyChanged(); }
  294. }
  295. /// <summary>
  296. /// 设备名称
  297. /// </summary>
  298. private string deviceName;
  299. public string DeviceName
  300. {
  301. get { return deviceName; }
  302. set { deviceName = value; RaisePropertyChanged(); }
  303. }
  304. /// <summary>
  305. /// 测试项名称
  306. /// </summary>
  307. private string testName;
  308. public string TestName
  309. {
  310. get { return testName; }
  311. set { testName = value; RaisePropertyChanged(); }
  312. }
  313. /// <summary>
  314. /// 测试项类型
  315. /// </summary>
  316. private List<string> testKinds = new List<string>();
  317. public List<string> TestKinds
  318. {
  319. get { return testKinds; }
  320. set { testKinds = value; RaisePropertyChanged(); }
  321. }
  322. /// <summary>
  323. ///
  324. /// </summary>
  325. private string selectTest;
  326. public string SelectTest
  327. {
  328. get { return selectTest; }
  329. set { selectTest = value; RaisePropertyChanged(); }
  330. }
  331. private DateTime startTime = DateTime.Now;
  332. public DateTime StartTime
  333. {
  334. get { return startTime; }
  335. set { startTime = value; RaisePropertyChanged(); }
  336. }
  337. private DateTime endTime =DateTime.Now;
  338. public DateTime EndTime
  339. {
  340. get { return endTime; }
  341. set { endTime = value; RaisePropertyChanged(); }
  342. }
  343. /// <summary>
  344. /// 总条数
  345. /// </summary>
  346. private int totalCount;
  347. public int TotalCount
  348. {
  349. get { return totalCount; }
  350. set { totalCount = value; RaisePropertyChanged(); CurrentPageChanged(); }
  351. }
  352. /// <summary>
  353. /// 每页数量
  354. /// </summary>
  355. private int countPerPage = 10;
  356. public int CountPerPage
  357. {
  358. get { return countPerPage; }
  359. set { countPerPage = value; RaisePropertyChanged(); CurrentPageChanged(); }
  360. }
  361. /// <summary>
  362. /// 单前页
  363. /// </summary>
  364. private int currentPage = 1;
  365. public int CurrentPage
  366. {
  367. get { return currentPage; }
  368. set { currentPage = value; RaisePropertyChanged(); CurrentPageChanged(); }
  369. }
  370. private ObservableCollection<BasicPlcTestSchemeDto> baseConfigList = new ObservableCollection<BasicPlcTestSchemeDto>();
  371. public ObservableCollection<BasicPlcTestSchemeDto> BaseConfigList
  372. {
  373. get { return baseConfigList; }
  374. set { SetProperty(ref baseConfigList, value); }
  375. }
  376. #endregion
  377. }
  378. }