chr
7 天以前 43a0207d207390abdeeb3ab9155eebf03edd7b1a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using PdmSwPlugin.Common.Constants;
using PdmSwPlugin.PriceCheck.Model;
using PdmSwPlugin.PriceCheck.Param;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Controls;
 
namespace PdmSwPlugin.PriceCheck
{
    /// <summary>
    /// TaibanControl.xaml 的交互逻辑
    /// </summary>
    public partial class TaibanControl : UserControl, PriceCounter
    {
        public TaibanModel Model;
 
        public ModelProperty ModelProperty
        {
            get => Model.ModelProperty;
            set => Model.ModelProperty = value;
        }
 
        // 缓存服务器返回的工艺数据
        private Technology tech { get; set; }
 
        public TaibanControl(ModelProperty modelProperty)
        {
            Model = new TaibanModel(modelProperty);
            DataContext = Model;
            InitializeComponent();
        }
 
        public double GetPrice(out string message)
        {
            return Model.CountTotal(out message);
        }
 
        public double DoCount(Technology tech, out string message)
        {
            message = null;
            // 傻逼WPF瞎几把触发事件,真尼玛弱智,垃圾,垃圾垃圾,傻逼
            if (tech == null)
            {
                return 0;
            }
            this.tech = tech;
 
            TechProp densityProp = tech.props.FirstOrDefault(e => e.name == PriceCheckName.DENSITY);
            TechProp unitPriceProp = tech.props.FirstOrDefault(e => e.name == PriceCheckName.UNIT_PRICE);
            TechCraft surfaceCraft = tech.surfaceProcesses.FirstOrDefault(e => e.parameter == PriceCheckName.SURFACE_UP_W);
            TechCraft heatCraft = tech.heatProcesses.FirstOrDefault(e => e.parameter == PriceCheckName.UNIT_PRICE_CN);
 
            ModelProperty.density = densityProp == null ? 0 : double.Parse(densityProp.value);
            // 计算体积 立方毫米
            ModelProperty.currentVolume = (ModelProperty.length + 10) * (ModelProperty.width + 10) * (ModelProperty.height + 5);
            // 计算重量 g
            ModelProperty.weight = ModelProperty.currentVolume / 1000000 * ModelProperty.density;
 
            // 保存材料单价
            ModelProperty.stuffUnitPrice = unitPriceProp == null ? 0 : double.Parse(unitPriceProp.value);
            ModelProperty.stuffPrice = ModelProperty.stuffUnitPrice * ModelProperty.weight;
            Model.stuffFee = ModelProperty.stuffPrice.ToString();
            // 保存表处理单价
            ModelProperty.surfaceUnitPrice = surfaceCraft == null ? 0 : double.Parse(surfaceCraft.value);
 
            ModelProperty.surfacePrice = (ModelProperty.length + ModelProperty.height) * (ModelProperty.width + ModelProperty.height) * 2 * ModelProperty.surfaceUnitPrice / 10000;
            //ModelProperty.surfaceUnitPrice * ModelProperty.weight;
            Model.surfaceFee = ModelProperty.surfacePrice.ToString();
 
            Model.ProcessGrid = new ObservableCollection<TechProcess>(tech.techProcesses);
            if (Model.ProcessGrid.Count > 0)
            {
                Model.workFee = Model.ProcessGrid.Select(e => e.price).Aggregate((i, j) => i + j).ToString();
            }
            else
            {
                Model.workFee = "0";
            }
 
            double totalPrice = Model.CountTotal(out message);
            if (message != null)
            {
                Model.price = null;
                return 0;
            }
            Model.price = totalPrice.ToString();
            return totalPrice;
        }
 
        private void workFeeTable_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            Model.workFee = Model.ProcessGrid.Select(data => data.price).Aggregate((i, j) => i + j).ToString();
            double totalPrice = Model.CountTotal(out string message);
            if (message != null)
            {
                Model.price = null;
            }
            else
            {
                Model.price = totalPrice.ToString();
            }
        }
    }
}