BaseConfigViewModel.cs 15 KB

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