using PdmSwPlugin.Commmon.Util.UI;
|
using PdmSwPlugin.Common.Util;
|
using PdmSwPlugin.Common;
|
using PdmSwPlugin.Common.Constants;
|
using PdmSwPlugin.Common.Interface;
|
using PdmSwPlugin.Common.Util.Http;
|
using PdmSwPlugin.Common.Util.Pdm;
|
using PdmSwPlugin.PriceCheck.Model;
|
using PdmSwPlugin.PriceCheck.Param;
|
using PdmSwPlugin.PriceCheck.Util;
|
using SolidWorks.Interop.sldworks;
|
using System;
|
using System.Collections.Generic;
|
using System.Net.Http;
|
using System.Threading.Tasks;
|
using System.Windows.Controls;
|
using PdmSwPlugin.Common.Setting;
|
|
namespace PdmSwPlugin.PriceCheck
|
{
|
/// <summary>
|
/// MainWindow.xaml 的交互逻辑
|
/// </summary>
|
[PdmSwPlugin(Title = "加工件核价")]
|
public partial class PriceCheckControl : UserControl, ISwAppSetter
|
{
|
private SldWorks SwApp;
|
SldWorks ISwAppSetter.SwApp => SwApp;
|
private HttpClient Client;
|
// 缓存服务器返回的工艺数据
|
private Technology tech { get; set; }
|
private PriceCheckModel Model;
|
|
private ModelProperty ModelProperty => Model.ModelProperty;
|
|
private TaibanControl taibanControl;
|
private BanjinControl banjinControl;
|
private JgjControl jgjControl;
|
private HttpClientCreator clientCreator { get; set; }
|
|
/// <summary>
|
/// 属性变更事件
|
/// </summary>
|
private event Action PropertyChanged;
|
|
public PriceCheckControl() : base()
|
{
|
clientCreator = new HttpClientCreator(new HttpConfig(PluginSetting.Instance.BaseAddress));
|
InitializeComponent();
|
}
|
|
public PriceCheckControl(SldWorks SwApp) : this()
|
{
|
this.SwApp = SwApp;
|
PropertyChanged += ReDoCountWhenPropertyChanged;
|
Model = new PriceCheckModel(SwApp, PropertyChanged);
|
taibanControl = new TaibanControl(Model.ModelProperty);
|
banjinControl = new BanjinControl(Model.ModelProperty, SwApp);
|
jgjControl = new JgjControl(Model.ModelProperty);
|
|
Client = clientCreator.GetClient();
|
|
DataContext = Model;
|
InitializeComponent();
|
}
|
|
public void SetSwApp(SldWorks SwApp)
|
{
|
this.SwApp = SwApp;
|
banjinControl.swApp = SwApp;
|
}
|
|
private async void Button_Click(object sender, System.Windows.RoutedEventArgs e)
|
{
|
MaskAdorner.ShowMask(mainPanel);
|
try
|
{
|
await Task.Run(() =>
|
{
|
RefreshModelInfo(out string errorInfo);
|
if (errorInfo != null)
|
{
|
this.Warning(errorInfo);
|
}
|
});
|
}
|
finally
|
{
|
MaskAdorner.HideMask(mainPanel);
|
}
|
}
|
|
private async void Calculate_Click(object sender, System.Windows.RoutedEventArgs e)
|
{
|
MaskAdorner.ShowMask(mainPanel);
|
try
|
{
|
ReDoCountWhenPropertyChanged();
|
}
|
finally
|
{
|
MaskAdorner.HideMask(mainPanel);
|
}
|
}
|
|
/// <summary>
|
/// 刷新整个核价页面
|
/// </summary>
|
/// <param name="errorInfo">刷新过程中的错误信息,没有就返回NULL</param>
|
private void RefreshModelInfo(out string errorInfo)
|
{
|
try
|
{
|
// 读取长宽高,加工件类型,材料等基础参数
|
ModelReader.RefreshModelInfo(SwApp, Model.ModelProperty, out errorInfo);
|
|
Technology tech;
|
if (errorInfo != null)
|
{
|
// 有错误
|
Model.ModelProperty = new ModelProperty();
|
tech = new Technology();
|
}
|
else
|
{
|
ModelInfo param = new ModelInfo()
|
{
|
stuff = Model.ModelProperty.stuffType,
|
type = Model.ModelProperty.type,
|
surfaceTreatment = Model.ModelProperty.surfaceType,
|
heatTreatment = Model.ModelProperty.heatType
|
};
|
Result<Technology> res = Client.GetSyncAction<Technology>("wpf/openApi/priceCheck/select", param);
|
tech = res.HandleResult();
|
this.tech = tech;
|
}
|
|
// 根据加工件类型决定customPanel的内容
|
Dispatcher.Invoke(() =>
|
{
|
Model.PropertyList.Clear();
|
customPanel.Children.Clear();
|
string message = null;
|
switch (ModelProperty.type)
|
{
|
case "台板":
|
taibanControl.DoCount(tech, out message);
|
customPanel.Children.Add(taibanControl);
|
break;
|
case "钣金":
|
try
|
{
|
// 钣金需要展开后重新计算长宽高
|
banjinControl.ReSetProperty2();
|
}
|
catch (Exception e)
|
{
|
// 计算失败就失败了,可以手动改长宽高
|
}
|
banjinControl.DoCount(tech, out message);
|
customPanel.Children.Add(banjinControl);
|
break;
|
case "金属加工件":
|
jgjControl.DoCount(tech, out message);
|
customPanel.Children.Add(jgjControl);
|
break;
|
case "树脂加工件":
|
jgjControl.DoCount(tech, out message);
|
customPanel.Children.Add(jgjControl);
|
break;
|
default:
|
break;
|
}
|
Model.PropertyList.Add(Model.ModelProperty);
|
if (message != null)
|
{
|
this.Warning(message);
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
errorInfo = string.Format("获取模型信息时发生异常:{0}", ex.ToString());
|
return;
|
}
|
}
|
|
/// <summary>
|
/// 上传核价按钮
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private async void SendToServer_Click(object sender, System.Windows.RoutedEventArgs e)
|
{
|
MaskAdorner.ShowMask(mainPanel);
|
try
|
{
|
var children = customPanel.Children;
|
double price = 0;
|
string message;
|
foreach (var child in children)
|
{
|
PriceCounter counter = child as PriceCounter;
|
price += counter.GetPrice(out message);
|
if (message != null)
|
{
|
this.Warning(message);
|
return;
|
}
|
}
|
if (price <= 0)
|
{
|
this.Warning("请上传正确的核价");
|
return;
|
}
|
|
await Task.Run(() =>
|
{
|
SendToServer(price);
|
});
|
}
|
finally
|
{
|
MaskAdorner.HideMask(mainPanel);
|
}
|
}
|
|
private void SendToServer(double price)
|
{
|
try
|
{
|
string partModel = ModelUtil.GetPartModelFromName(ModelProperty.name);
|
Result<object> result = Client.PostSyncAction<object>(new Dictionary<string, object>()
|
{
|
{ "machineNo",partModel},
|
{ "price",price},
|
{ "machinePartType",ModelProperty.type},
|
{ "officer",System.Environment.UserName},
|
}, "wpf/openApi/priceCheck/savePriceCheck");
|
object obj = result.HandleResult();
|
this.Info("上传成功");
|
}
|
catch (Exception e)
|
{
|
this.Error(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 手动变更基础属性后,重新计算所有相关数据
|
/// </summary>
|
private void ReDoCountWhenPropertyChanged()
|
{
|
// 只能在UI线程触发,不然就报错。垃圾
|
Dispatcher.Invoke(() =>
|
{
|
var children = customPanel.Children;
|
string message;
|
foreach (var child in children)
|
{
|
PriceCounter counter = child as PriceCounter;
|
counter.DoCount(tech, out message);
|
if (message != null)
|
{
|
this.Warning(message);
|
return;
|
}
|
}
|
});
|
}
|
|
private void CheckBox_Changed(object sender, System.Windows.RoutedEventArgs e)
|
{
|
var children = customPanel.Children;
|
string message;
|
foreach (var child in children)
|
{
|
PriceCounter counter = child as PriceCounter;
|
counter.DoCount(tech, out message);
|
if (message != null)
|
{
|
this.Warning(message);
|
return;
|
}
|
}
|
}
|
}
|
}
|