VmManitainerProjectInfo.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. 
  2. ///////////////////////////////////////////////////////////////////////////////
  3. //文件名称: VmManitainerProjectInfo.cs
  4. //文件描述: 维修商项目信息
  5. //创 建 者: xls
  6. //创建日期: 2018/5/24 22:08:12
  7. //版 本 号:1.0.0.0
  8. ////////////////////////////////////////////////////////////////////////////////
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Collections.ObjectModel;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows;
  16. using System.Windows.Data;
  17. using CEFSharpWpf;
  18. using Com.FirmLib.Bll;
  19. using Com.FirmLib.Entity;
  20. using Com.FirmLib.UI.BllCommon;
  21. using Com.FirmLib.UI.Common.Model;
  22. using Com.FirmLib.UI.Maintainer.Mode;
  23. using FWindSoft.DataFramework;
  24. using FWindSoft.MVVM;
  25. using FWindSoft.SystemExtensions;
  26. using FWindSoft.Wpf;
  27. using FWindSoft.Wpf.Common;
  28. namespace Com.FirmLib.UI.Maintainer
  29. {
  30. public class VmManitainerProjectInfo : BaseViewModel
  31. {
  32. public VmManitainerProjectInfo()
  33. {
  34. Init();
  35. }
  36. private void Init()
  37. {
  38. ContactItem = new ContactInformationItem();
  39. }
  40. public void Init(LoadParameter parameter)
  41. {
  42. MaintainerParameter para = parameter.Parameter as MaintainerParameter;
  43. MaintainerId = para.Maintainer.Id;
  44. ProjectId = para.Project.Id;
  45. //加载数据
  46. LoadProjectItem(ProjectId);
  47. LoadMaintainerItem(MaintainerId);
  48. LoadLinkerItem(MaintainerId, ProjectId);
  49. LoadAssetItems(MaintainerId, ProjectId);
  50. }
  51. #region 属性相关
  52. /// <summary>
  53. /// 维修商id
  54. /// </summary>
  55. private string MaintainerId { get; set; }
  56. /// <summary>
  57. /// 项目Id
  58. /// </summary>
  59. public string ProjectId { get; private set; }
  60. public string ProjectName { get; private set; }
  61. private string m_MaintainerName;
  62. /// <summary>
  63. /// 维修商名称
  64. /// </summary>
  65. public string MaintainerName
  66. {
  67. get { return this.m_MaintainerName; }
  68. set
  69. {
  70. this.m_MaintainerName = value;
  71. RaisePropertyChanged(() => this.MaintainerName);
  72. }
  73. }
  74. private string m_MaintainerUrl;
  75. /// <summary>
  76. /// 维修商网址
  77. /// </summary>
  78. public string MaintainerUrl
  79. {
  80. get { return this.m_MaintainerUrl; }
  81. set
  82. {
  83. this.m_MaintainerUrl = value;
  84. RaisePropertyChanged(() => this.MaintainerUrl);
  85. }
  86. }
  87. private ContactInformationItem m_ContactItem;
  88. /// <summary>
  89. /// 联系信息
  90. /// </summary>
  91. public ContactInformationItem ContactItem
  92. {
  93. get { return this.m_ContactItem; }
  94. set
  95. {
  96. this.m_ContactItem = value;
  97. RaisePropertyChanged(() => this.ContactItem);
  98. }
  99. }
  100. private ObservableCollection<AssetShowItem> m_CurrentAssets;
  101. /// <summary>
  102. /// 当前资产
  103. /// </summary>
  104. public ObservableCollection<AssetShowItem> CurrentAssets
  105. {
  106. get { return this.m_CurrentAssets; }
  107. set
  108. {
  109. this.m_CurrentAssets = value;
  110. RaisePropertyChanged(() => this.CurrentAssets);
  111. }
  112. }
  113. private ObservableCollection<AssetShowItem> m_HistotyAssets;
  114. /// <summary>
  115. /// 历史资产
  116. /// </summary>
  117. public ObservableCollection<AssetShowItem> HistotyAssets
  118. {
  119. get { return this.m_HistotyAssets; }
  120. set
  121. {
  122. this.m_HistotyAssets = value;
  123. RaisePropertyChanged(() => this.HistotyAssets);
  124. }
  125. }
  126. private bool m_IsFilter;
  127. /// <summary>
  128. /// 是否过滤
  129. /// </summary>
  130. public bool IsFilter
  131. {
  132. get { return this.m_IsFilter; }
  133. set
  134. {
  135. this.m_IsFilter = value;
  136. RaisePropertyChanged(nameof(this.IsFilter));
  137. }
  138. }
  139. #endregion
  140. #region 命令相关
  141. /// <summary>
  142. /// 浏览资产信息
  143. /// </summary>
  144. /// <param name="parameter"></param>
  145. [Command]
  146. public void ScanAssetInfo(object parameter)
  147. {
  148. AssetShowItem item = parameter as AssetShowItem;
  149. if (item == null)
  150. return;
  151. AssetItem parItem = new AssetItem();
  152. parItem.Id = item.Id;
  153. parItem.ProjectId = item.ProjectId;
  154. //获取三位编码
  155. parItem.FamilyCode = item.FamilyCode.Substring(2);// EquipmentFamilyManager.GetaTopCode(item.Category.Substring(2)); //item.Category.Substring(0,3);
  156. string url = BllFactory<AssetBll>.Instance.GetEquipmentUrl(parItem);
  157. WinBrowser.Instance.Show(url, "设备信息");
  158. }
  159. public bool CanScanAssetInfo(object parameter)
  160. {
  161. return true;
  162. }
  163. /// <summary>
  164. /// 保存按钮
  165. /// </summary>
  166. /// <param name="parameter"></param>
  167. [Command]
  168. public void SaveCommand(object parameter)
  169. {
  170. var flag = CreateAssets();
  171. if (flag)
  172. {
  173. AfterSuccessSave();
  174. MessageTip.Show(this.GetWindow(), "保存成功");
  175. }
  176. else
  177. {
  178. MessageTip.Show(this.GetWindow(), "保存失败");
  179. }
  180. }
  181. public bool CanSaveCommand(object parameter)
  182. {
  183. return true;
  184. }
  185. /// <summary>
  186. /// 选择设备
  187. /// </summary>
  188. /// <param name="parameter"></param>
  189. [Command]
  190. public void SelectAssetCommand(object parameter)
  191. {
  192. WinMaintainerAssetSelector win = new WinMaintainerAssetSelector();
  193. win.Owner = this.GetWindow();
  194. SelectAssetContext context = new SelectAssetContext();
  195. context.ProjectId = ProjectId;
  196. context.VenderId = MaintainerId;
  197. context.ContainIds = new List<string>(CurrentAssets.Select(p => p.Id));
  198. LoadParameter.StartParameter(win, new LoadParameter(context));
  199. if (win.ShowDialog() == true)
  200. {
  201. if (CurrentAssets == null)
  202. {
  203. CurrentAssets = new ObservableCollection<AssetShowItem>();
  204. }
  205. var addRelations = context.AddedItems;
  206. foreach (var item in addRelations)
  207. {
  208. if (CurrentAssets.Any(c => c.Id == item.Id))
  209. return;
  210. CurrentAssets.Add(item);
  211. }
  212. }
  213. }
  214. public bool CanSelectAssetCommand(object parameter)
  215. {
  216. return true;
  217. }
  218. /// <summary>
  219. /// 删除维护设备
  220. /// </summary>
  221. /// <param name="parameter"></param>
  222. [Command]
  223. public void DeleteCommand(object parameter)
  224. {
  225. AssetShowItem showItem = parameter as AssetShowItem;
  226. if (showItem == null)
  227. return;
  228. var result = MessageTip.Show(this.GetWindow(), "是否要删除", "提示", MessageBoxButton.YesNo);
  229. if (result == MessageBoxResult.Yes)
  230. {
  231. bool flag = false;
  232. if (showItem.MaintainerId == MaintainerId)
  233. {
  234. flag = AssetManager.DeleteMaintainerEquipments(ProjectId, new List<string>() { showItem.Id });
  235. }
  236. else
  237. {
  238. flag = true;
  239. }
  240. if (flag)
  241. {
  242. this.CurrentAssets.Remove(showItem);
  243. }
  244. else
  245. {
  246. MessageTip.Show(this.GetWindow(), "删除失败");
  247. }
  248. }
  249. }
  250. public bool CanDeleteCommand(object parameter)
  251. {
  252. return true;
  253. }
  254. /// <summary>
  255. /// 过滤相关设备
  256. /// </summary>
  257. /// <param name="parameter"></param>
  258. [Command]
  259. public void FilterNearCommand(object parameter)
  260. {
  261. this.IsFilter = !IsFilter;
  262. if (this.CurrentAssets != null)
  263. {
  264. var view = CollectionViewSource.GetDefaultView(this.CurrentAssets);
  265. if (IsFilter)
  266. {
  267. view.Filter = DatetimeFilter;
  268. }
  269. else
  270. {
  271. view.Filter = null;
  272. }
  273. view.Refresh();
  274. }
  275. }
  276. public bool CanFilterNearCommand(object parameter)
  277. {
  278. return true;
  279. }
  280. private bool DatetimeFilter(object o)
  281. {
  282. AssetShowItem item = o as AssetShowItem;
  283. if (item == null)
  284. return false;
  285. var now = DateTime.Now.Date.AddMonths(6).ToString("yyyyMMdd");
  286. var time = item.MaintainerEndDate;
  287. if (string.IsNullOrEmpty(time))
  288. {
  289. return true;
  290. }
  291. return time.CompareTo(now)<=0;
  292. }
  293. /// <summary>
  294. /// 更新指定字段信息
  295. /// </summary>
  296. /// <param name="field"></param>
  297. /// <returns></returns>
  298. public bool SingleUpdateLinkerItem(string field)
  299. {
  300. LinkerItem item = new LinkerItem();
  301. item.VenderId = this.MaintainerId;
  302. item.ProjectId = this.ProjectId;
  303. SetFieldValue(item, field);
  304. var result = BllFactory<MaintainerBll>.Instance.UpdateLinker(item);
  305. if (!result)
  306. {
  307. MessageTip.Show(this.GetWindow(), BllFactory<MaintainerBll>.Instance.ErrorMessage ?? string.Empty);
  308. }
  309. return result;
  310. }
  311. private void SetFieldValue(LinkerItem item, string field)
  312. {
  313. item.Name = ContactItem.People;
  314. item.Phone = this.ContactItem.Telephone;
  315. item.Email = this.ContactItem.Email;
  316. item.Fax = this.ContactItem.Fax;
  317. #region 修改相关
  318. //if (field == "People")
  319. //{
  320. // item.Name = ContactItem.People;
  321. // return;
  322. //}
  323. //if (field == "Telephone")
  324. //{
  325. // item.Phone = this.ContactItem.Telephone;
  326. // return;
  327. //}
  328. //if (field == "Email")
  329. //{
  330. // item.Email = this.ContactItem.Email;
  331. // return;
  332. //}
  333. //if (field == "Fax")
  334. //{
  335. // item.Fax = this.ContactItem.Fax;
  336. // return;
  337. //}
  338. #endregion
  339. }
  340. #endregion
  341. #region 私有方法
  342. /// <summary>
  343. /// 加载供应商信息
  344. /// </summary>
  345. /// <param name="venderId">厂商id</param>
  346. private void LoadMaintainerItem(string venderId)
  347. {
  348. var seller = BllFactory<MaintainerBll>.Instance.GetAllItems().FirstOrDefault(c => c.Id == venderId);
  349. if (seller != null)
  350. {
  351. this.MaintainerName = seller.Name;
  352. this.MaintainerUrl = seller.Website;
  353. }
  354. }
  355. /// <summary>
  356. /// 加载联系人信息
  357. /// </summary>
  358. /// <param name="venderId">厂商库id</param>
  359. /// <param name="projectId">项目Id</param>
  360. private void LoadLinkerItem(string venderId, string projectId)
  361. {
  362. var linkerItem = BllFactory<MaintainerBll>.Instance.GetLinker(venderId, projectId);
  363. if (linkerItem != null)
  364. {
  365. this.ContactItem.Telephone = linkerItem.Phone;
  366. this.ContactItem.People = linkerItem.Name;
  367. this.ContactItem.Fax = linkerItem.Fax;
  368. this.ContactItem.Email = linkerItem.Email;
  369. }
  370. }
  371. /// <summary>
  372. /// 获取相关设备信息
  373. /// </summary>
  374. /// <param name="venderId"></param>
  375. /// <param name="projectId"></param>
  376. private void LoadAssetItems(string venderId, string projectId)
  377. {
  378. CurrentAssets = new ObservableCollection<AssetShowItem>();
  379. HistotyAssets = new ObservableCollection<AssetShowItem>();
  380. var dataItems = BllFactory<MaintainerBll>.Instance.GetCurrentProjectAssetItems(venderId, projectId);
  381. foreach (var dataItem in dataItems)
  382. {
  383. var tempItem = MaintainerDataConverter.ConvertShowItem(dataItem);
  384. tempItem.ProjectId = projectId;
  385. CurrentAssets.Add(tempItem);
  386. }
  387. dataItems = BllFactory<MaintainerBll>.Instance.GetHistoryProjectAssetItems(venderId, projectId);
  388. foreach (var dataItem in dataItems)
  389. {
  390. var tempItem = MaintainerDataConverter.ConvertShowItem(dataItem);
  391. tempItem.ProjectId = projectId;
  392. HistotyAssets.Add(tempItem);
  393. }
  394. }
  395. private void LoadProjectItem(string projectId)
  396. {
  397. var projectItem = BllFactory<ProjectBll>.Instance.GetProjectItem(projectId);
  398. if (projectItem != null)
  399. {
  400. this.ProjectName = projectItem.Name;
  401. }
  402. }
  403. #endregion
  404. #region 保存设备
  405. private bool CreateAssets()
  406. {
  407. if (this.CurrentAssets == null || !this.CurrentAssets.Any())
  408. return true;
  409. //维修商变化设备
  410. List<AssetShowItem> changedItems = new List<AssetShowItem>();
  411. foreach (var item in this.CurrentAssets)
  412. {
  413. item.CacheParameters.Clear();
  414. var parameters = GetChangeParameters(item);
  415. if (!parameters.IsEmpty)
  416. {
  417. item.CacheParameters.Merge(parameters);
  418. changedItems.Add(item);
  419. }
  420. }
  421. if (changedItems.Any())
  422. {
  423. AssetSaveContext context = new AssetSaveContext();
  424. context.ChangedItems = changedItems;
  425. WinMaintainerSaveEnsure win = new WinMaintainerSaveEnsure();
  426. win.Owner = this.GetWindow();
  427. LoadParameter.StartParameter(win, new LoadParameter(context));
  428. if (win.ShowDialog() == true)
  429. {
  430. context = win.GetRealResult<AssetSaveContext>();
  431. if (context != null)
  432. {
  433. var items = context.ChangedItems ?? new List<AssetShowItem>();
  434. foreach (var item in items)
  435. {
  436. if (context.EditType == EditType.Correct)
  437. {
  438. item.CacheParameters.SetAllParameterTime(context.EffectiveTime);
  439. }
  440. }
  441. }
  442. }
  443. }
  444. #region 数据整理
  445. CurrentAssets.ToList().ForEach(assetItem =>
  446. {
  447. //变化的才修改,不变的不修改
  448. if (string.IsNullOrEmpty(assetItem.MaintainerId))
  449. {
  450. assetItem.CacheParameters.Add((new WatchParameter(MBIBuiltInParameter.DPMaintainerID)));
  451. }
  452. assetItem.MaintainerId = MaintainerId;
  453. assetItem.CacheParameters.Add((new WatchParameter(MBIBuiltInParameter.MaintainDeadline)));
  454. assetItem.CacheParameters.Add((new WatchParameter(MBIBuiltInParameter.MaintainPeriod)));
  455. });
  456. #endregion
  457. #region 历史资产保存
  458. var historyItems =new List<AssetShowItem>();
  459. if(HistotyAssets!=null)
  460. {
  461. foreach (var assetShowItem in HistotyAssets)
  462. {
  463. assetShowItem.CacheParameters.Clear();
  464. if (!assetShowItem.ChangeMaintainer)
  465. {
  466. assetShowItem.CacheParameters.CheckAdd((new WatchParameter(MBIBuiltInParameter.MaintainDeadline)));
  467. historyItems.Add(assetShowItem);
  468. }
  469. }
  470. }
  471. #endregion
  472. historyItems.AddRange(CurrentAssets.ToList());
  473. bool flag = AssetManager.UpdateEqItems(ProjectId,historyItems);
  474. return flag;
  475. }
  476. /// <summary>
  477. /// 初始化变化参数
  478. /// </summary>
  479. /// <param name="item"></param>
  480. private WatchParameters GetChangeParameters(AssetShowItem item)
  481. {
  482. WatchParameters parameters = new WatchParameters();
  483. if (!string.IsNullOrEmpty(item.MaintainerId) && item.MaintainerId != MaintainerId)
  484. {
  485. parameters.Add(new WatchParameter(MBIBuiltInParameter.DPMaintainerID));
  486. }
  487. return parameters;
  488. }
  489. #endregion
  490. /// <summary>
  491. /// 成功保存后处理
  492. /// </summary>
  493. private void AfterSuccessSave()
  494. {
  495. LoadLinkerItem(MaintainerId, ProjectId);
  496. LoadAssetItems(MaintainerId, ProjectId);
  497. }
  498. }
  499. }