/////////////////////////////////////////////////////////////////////////////// //文件名称: VmManufactureInfo.cs //文件描述: 生产厂商信息维护 //创 建 者: xls //创建日期: 2018/5/23 23:22:04 //版 本 号:1.0.0.0 //////////////////////////////////////////////////////////////////////////////// using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows; using Com.FirmLib.Bll; using Com.FirmLib.Entity; using Com.FirmLib.UI.BllCommon; using Com.FirmLib.UI.Manufacturer.Model; using FWindSoft.Data; using FWindSoft.DataFramework; using FWindSoft.MVVM; using FWindSoft.Tools; using FWindSoft.Wpf; namespace Com.FirmLib.UI.Manufacturer { public class VmManufactureInfo : BaseViewModel { public VmManufactureInfo() { Init(); } private void Init() { } public void Init(LoadParameter parameter) { var id = parameter.Parameter as string; Id = id; if (string.IsNullOrEmpty(Id)) return; LoadManufactureItem(id); LoadBrandItems(); LoadProjectAssetItems(id); //LoadSellerItems(id); //LoadMaintainerItems(id); LoadVenderItems(id); } #region 属性相关 public string Id { get; private set; } private string m_ManufactureName; /// /// 生产厂家名称 /// public string ManufactureName { get { return this.m_ManufactureName; } set { this.m_ManufactureName = value; RaisePropertyChanged(() => this.ManufactureName); } } private ObservableCollection m_Brands; /// /// 关联品牌 /// public ObservableCollection Brands { get { return this.m_Brands; } set { this.m_Brands = value; RaisePropertyChanged(() => this.Brands); } } private BrandShowItem m_CurrentSelectedBrand; /// /// 当前选中品牌 /// public BrandShowItem CurrentSelectedBrand { get { return this.m_CurrentSelectedBrand; } set { this.m_CurrentSelectedBrand = value; GetProductsByBranch(value); RaisePropertyChanged(() => this.CurrentSelectedBrand); } } private ObservableCollection m_ProductItems; /// /// 产品信息集合 /// public ObservableCollection ProductItems { get { return this.m_ProductItems; } set { this.m_ProductItems = value; RaisePropertyChanged(() => this.ProductItems); } } private ObservableCollection m_ProjectAssetItems; /// /// 项目资产条目 /// public ObservableCollection ProjectAssetItems { get { return this.m_ProjectAssetItems; } set { this.m_ProjectAssetItems = value; RaisePropertyChanged(() => this.ProjectAssetItems); } } private ObservableCollection m_SellerItems; /// /// 关联供应商信息 /// public ObservableCollection SellerItems { get { return this.m_SellerItems; } set { this.m_SellerItems = value; RaisePropertyChanged(nameof(this.SellerItems)); } } private ObservableCollection m_MaintainerItems; /// /// 关联维修商信息 /// public ObservableCollection MaintainerItems { get { return this.m_MaintainerItems; } set { this.m_MaintainerItems = value; RaisePropertyChanged(nameof(this.MaintainerItems)); } } #endregion #region 命令相关 /// /// 添加品牌 /// /// [Command] public void AddBranchCommand(object parameter) { try { WinBrandEditor win = new WinBrandEditor(); BrandShowItem item = new BrandShowItem() { ManufacturerId = Id }; LoadParameter.StartParameter(win, new LoadParameter(item)); win.Owner = this.GetWindow(); if (win.ShowDialog() == true) { //刷新品牌列表,切换到当前品牌视图 LoadBrandItems(); if (!win.AddProduct) return; #region 继续添加产品 //todo 进行产品添加,存在默认的品牌初始值 var brandId = win.BrandId; WinProductEditor winProduct = new WinProductEditor(); ManufactureParameter startParameter = new ManufactureParameter(); startParameter.Manufacture.Id = Id; startParameter.Branch.Id = brandId; LoadParameter.StartParameter(winProduct, new LoadParameter(startParameter)); winProduct.Owner = this.GetWindow(); if (winProduct.ShowDialog() == true) { //todo 刷新产品列表 if (CurrentSelectedBrand != null && CurrentSelectedBrand.Id == brandId) { LoadProdutItems(brandId);//这个可能无效刷新,因为当前 } if (winProduct.ManageType) { WinProductType winType = new WinProductType(); //todo 初始化参数信息 ProductShowItem showItem = new ProductShowItem(); showItem.VenderId = Id; showItem.BrandId = brandId; showItem.ProductId = winProduct.ProductId; LoadParameter.StartParameter(winType, new LoadParameter(showItem)); winType.Show(this.GetNavigationBar()); } } #endregion } } catch (Exception ex) { MessageTipEx.Show(ex); } } public bool CanAddBranchCommand(object parameter) { return true; } /// /// 添加产品 /// /// [Command] public void AddProductCommand(object parameter) { try { ManufactureParameter startParameter = new ManufactureParameter(); startParameter.Manufacture.Id = Id; WinProductEditor win = new WinProductEditor(); LoadParameter.StartParameter(win, new LoadParameter(startParameter)); win.Owner = this.GetWindow(); if (win.ShowDialog() == true) { if (CurrentSelectedBrand != null) { //理论上添加了该品牌的产品,才去更新 LoadProdutItems(CurrentSelectedBrand.Id); } if (win.ManageType) { WinProductType winType = new WinProductType(); ProductShowItem showItem = new ProductShowItem(); showItem.VenderId = Id; showItem.BrandId = win.BrandId; showItem.ProductId = win.ProductId; //showItem.ProductName = "新产品名";//todo通过id获取产品名称 LoadParameter.StartParameter(winType, new LoadParameter(showItem)); winType.Show(this.GetNavigationBar()); } } } catch (Exception ex) { MessageTipEx.Show(ex); } } public bool CanAddProductCommand(object parameter) { return true; } /// /// 删除产品 /// /// [Command] public void DeleteCommand(object parameter) { try { ProductShowItem item = parameter as ProductShowItem; if (item == null) return; var result = MessageTip.Show(this.GetWindow(), "是否要删除", "提示", MessageBoxButton.YesNo); if (result == MessageBoxResult.Yes) { var flag=BllFactory.Instance.Delete(new ProductItem() { Id = item.ProductId }); if (!flag) { MessageTip.Show(this.GetWindow(), "删除失败"); } LoadProdutItems(CurrentSelectedBrand.Id);//或者用下面的方式 // ProductItems.Remove(item); } } catch (Exception ex) { MessageTipEx.Show(this.GetWindow(), ex); } } public bool CanDeleteCommand(object parameter) { return true; } /// /// 更新品牌命令 /// /// [Command] public void UpdateBranchCommand(object parameter) { try { BrandShowItem item = parameter as BrandShowItem; WinBrandEditor win = new WinBrandEditor(); LoadParameter.StartParameter(win, new LoadParameter(item)); win.Owner = this.GetWindow(); if (win.ShowDialog() == true) { //如果是修改完成,根据Id去更新名称。如果是删除完成,则重新加载品牌信息 if (win.UseDelete) { //更新品牌信息 LoadBrandItems(); } else { //更新BranchItem名称 item.Name = GetBrandName(item.Id); } } } catch (Exception ex) { MessageTipEx.Show(ex); } } public bool CanUpdateBranchCommand(object parameter) { return true; } /// /// 调用资源清单命令 /// /// [Command] public void GoAssetCommand(object parameter) { try { ProjectAssetShowItem item = parameter as ProjectAssetShowItem; if (item == null) return; WinProjectAssetList win = new WinProjectAssetList(); LoadParameter.StartParameter(win, new LoadParameter(item)); win.Show(this.GetNavigationBar()); } catch (Exception ex) { MessageTipEx.Show(ex); } } public bool CanGoAssetCommand(object parameter) { return true; } /// /// 管理类型 /// /// [Command] public void ManageTypeCommand(object parameter) { try { ProductShowItem showItem = parameter as ProductShowItem; if (showItem == null) return; WinProductType win = new WinProductType(); LoadParameter.StartParameter(win, new LoadParameter(showItem)); win.Show(this.GetNavigationBar()); } catch (Exception ex) { MessageTipEx.Show(ex); } } public bool CanManageTypeCommand(object parameter) { return true; } /// /// 保存功能 /// /// [Command] public void SaveCommand(object parameter) { try { if (UpdateProduct()) { MessageTip.Show(this.GetWindow(), "保存成功"); } else { MessageTip.Show(this.GetWindow(), "保存失败"); } } catch (Exception ex) { MessageTipEx.Show(ex); } } public bool CanSaveCommand(object parameter) { return true; } /// /// 查看产品名录命令 /// /// [Command] public void ScanRefTypesCommand (object parameter) { try { var showItem = parameter as RefVenderShowItem; if (showItem == null) { return; } WinProductList win = new WinProductList(); bool isSeller = false; if (this.SellerItems != null) { isSeller = this.SellerItems.Contains(showItem); } win.Title = isSeller ? "供应产品名录" : "维修产品名录"; win.Owner = this.GetWindow(); LoadParameter.StartParameter(win, new LoadParameter(showItem)); if (win.ShowDialog() == true) { } } catch (Exception ex) { MessageTipEx.Show(ex); } } public bool CanScanRefTypesCommand (object parameter) { return true; } /// /// 刷新动画 /// /// [Command] public void RefreshCommand(object parameter) { try { var item = parameter as ProjectAssetShowItem; if (item != null) { item.IsLoading = true; TaskUtil.StartSTATask((obj) => { var useItem = obj as ProjectAssetShowItem; if (useItem == null) return; try { BllFactory.Instance.ProjectSync(useItem.ProjectId); Thread.Sleep(3000);//立即执行偶尔导致连接取消 var projectAssetItems = BllFactory.Instance.GetProjectItems(Id); foreach (var dataItem in projectAssetItems) { if (dataItem.Id == useItem.ProjectId) { useItem.AssetCount = dataItem.TotalCount.ToString(); } } } catch (Exception ex) { MessageTipEx.Show(ex); } finally { useItem.IsLoading = false; } }, item); } } catch (Exception ex) { MessageTipEx.Show(ex); } } public bool CanRefreshCommand(object parameter) { return true; } #endregion #region 单条修改模块 public bool UpdateManufacture() { ManufacturerItem item = new ManufacturerItem(); item.Id = this.Id; item.Name = this.ManufactureName; var result = BllFactory.Instance.Update(item); if (!result) { MessageTip.Show(this.GetWindow(), BllFactory.Instance.ErrorMessage ?? string.Empty); } return result; } #endregion #region 私有方法 /// /// 加载厂商信息 /// /// 生产厂商Id private void LoadManufactureItem(string manufactureId) { #region 加载厂商信息 var manufactureItem = BllFactory.Instance.GetAllItems().FirstOrDefault(c => c.Id == manufactureId); ManufactureName = manufactureItem?.Name; #endregion } /// /// 通过品牌获取产品信息 /// /// private void GetProductsByBranch(BrandShowItem item) { if (item == null) return; LoadProdutItems(item.Id); } /// /// 加载品牌信息 /// private void LoadBrandItems() { var brands= BllFactory.Instance.GetAllItems(Id); string oldId = string.Empty; if (CurrentSelectedBrand != null) { oldId = CurrentSelectedBrand.Id; } Brands = new ObservableCollection(); foreach (var brandItem in brands) { Brands.Add(new BrandShowItem() { ManufacturerId= Id, Id = brandItem.Id, Name = brandItem.Name}); } if (string.IsNullOrEmpty(oldId)) { this.CurrentSelectedBrand = Brands.FirstOrDefault(); } else { this.CurrentSelectedBrand= Brands.FirstOrDefault(b=>b.Id== oldId) ?? Brands.FirstOrDefault(); } } /// /// 加载项目资产信息 /// /// private void LoadProjectAssetItems(string manufactureId) { #region 资产信息加载 var projectAssetItems = BllFactory.Instance.GetProjectItems(manufactureId); ProjectAssetItems = new ObservableCollection(); foreach (var dataItem in projectAssetItems) { ProjectAssetItems.Add(new ProjectAssetShowItem() {ProjectId=dataItem.Id, ManufactureId=manufactureId, ProjectLocalName = dataItem.Name, AssetCount = dataItem.TotalCount.ToString()}); } #endregion } /// /// 获取品牌名称 /// /// /// private string GetBrandName(string id) { var brandItem = BllFactory.Instance.GetItem(Id,id); if (brandItem == null) return string.Empty; return brandItem.Name; } /// /// 通过品牌获取产品列表 /// /// private void LoadProdutItems(string brandId) { var productItems = BllFactory.Instance.GetAllItems(brandId); List items = new List(); foreach (var product in productItems) { ProductShowItem tempItem = new ProductShowItem(); tempItem.VenderId = Id; tempItem.BrandId = brandId; tempItem.ProductId = product.Id; tempItem.ProductName = product.Name; tempItem.ComonError = string.Empty; tempItem.OwnerFamily = EquipmentFamilyManager.GetFamilyName(product.FamilyCode); tempItem.ContainTypes = product.ProductTypes.Select(p=>p.Name).ToList(); items.Add(tempItem); } ProductItems = new ObservableCollection(items); } /// /// 修改产品信息 /// /// private bool UpdateProduct() { var modifyItems = ProductItems.Where(c=>c.IsEdited).ToList(); bool flag = true; foreach (var productShowItem in modifyItems) { ProductItem item = new ProductItem(); item.Id = productShowItem.ProductId; item.Name = productShowItem.ProductName; BllFactory.Instance.Update(item); } return true; } /// /// 加载厂商统计信息 /// /// private void LoadVenderItems(string venderId) { var tupleItem=BllFactory.Instance.GetRefVenderItems(venderId); LoadSellerItems(tupleItem.Item1, venderId); LoadMaintainerItems(tupleItem.Item2, venderId); } /// /// 加载供应商商关联信息 /// /// /// private void LoadSellerItems( List items,string manufacturerId) { //todo 调用后台api查找相关关联项目 // List items = new List(); List showItems = new List(); foreach (var refVenderItem in items) { var showItem = ConvertToShowItem(refVenderItem); showItem.ManufacturerId = manufacturerId; showItems.Add(showItem); } SellerItems = new ObservableCollection(showItems); } /// /// 加载维修商关联信息 /// /// /// public void LoadMaintainerItems(List items,string manufacturerId) { //todo 调用后台api查找相关关联项目 //List items = new List(); List showItems = new List(); foreach (var refVenderItem in items) { var showItem = ConvertToShowItem(refVenderItem); showItem.ManufacturerId = manufacturerId; showItems.Add(showItem); } MaintainerItems = new ObservableCollection(showItems); } private RefVenderShowItem ConvertToShowItem(RefVenderItem item) { RefVenderShowItem showItem = new RefVenderShowItem(); showItem.RefVenderId = item.Id; showItem.VenderName = item.Name; showItem.WebSite = item.WebSite; showItem.ProductCount = item.RefProductCount; showItem.BrandCount = item.RefBrandCount; showItem.ProductTypes = item.RefProductTypeIds ?? new List(); return showItem; } #endregion } /// /// 项目显示信息类 /// public class ProjectAssetShowItem :BasePropertyChanged { /// /// 关联生产厂商Id /// public string ManufactureId { get; set; } private string m_ProjectId; /// /// 项目Id /// public string ProjectId { get { return this.m_ProjectId; } set { this.m_ProjectId = value; RaisePropertyChanged(() => this.ProjectId); } } private string m_ProjectLocalName; /// /// 项目本地名称 /// public string ProjectLocalName { get { return this.m_ProjectLocalName; } set { this.m_ProjectLocalName = value; RaisePropertyChanged(() => this.ProjectLocalName); } } private string m_AssetCount; /// /// 资产数量[只是显示,字符串就行了,没必要写成数字] /// public string AssetCount { get { return this.m_AssetCount; } set { this.m_AssetCount = value; RaisePropertyChanged(() => this.AssetCount); } } private bool m_IsLoading; /// /// 是否在加载 /// public bool IsLoading { get { return this.m_IsLoading; } set { this.m_IsLoading = value; RaisePropertyChanged(nameof(this.IsLoading)); } } } }