///////////////////////////////////////////////////////////////////////////////
//文件名称: 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));
}
}
}
}