using BBWY.Client.APIServices; using BBWY.Client.Models.APIModel.Response.PackTask; using NPOI.POIFS.Crypt.Dsig; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Markup; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace BBWY.Client.Views.PackTask { /// /// FeesExcelControl.xaml 的交互逻辑 /// public partial class FeesExcelControl : UserControl { /// /// 是否仓库端 /// public bool IsWareHouse { get { return (bool)GetValue(IsWareHouseProperty); } set { SetValue(IsWareHouseProperty, value); } } public static readonly DependencyProperty IsWareHouseProperty = DependencyProperty.Register("IsWareHouse", typeof(bool), typeof(FeesExcelControl), new PropertyMetadata(true, ChangedProperty1)); /// /// 价格 /// //public decimal FeesPrice //{ // get { return (decimal)GetValue(FeesPriceProperty); } // set // { // SetValue(FeesPriceProperty, value); // } //} //public static readonly DependencyProperty FeesPriceProperty = // DependencyProperty.Register("FeesPrice", typeof(decimal), typeof(FeesExcelControl), new PropertyMetadata(ChangedProperty2)); public FeesItemResponse FeesItem { get { return (FeesItemResponse)GetValue(FeesItemProperty); } set { SetValue(FeesItemProperty, value); } } public static readonly DependencyProperty FeesItemProperty = DependencyProperty.Register("FeesItem", typeof(FeesItemResponse), typeof(FeesExcelControl), new PropertyMetadata(ChangedProperty)); private static void ChangedProperty1(DependencyObject d, DependencyPropertyChangedEventArgs e) { var control = d as FeesExcelControl; var newValue = e.NewValue as FeesItemResponse; } private static void ChangedProperty(DependencyObject d, DependencyPropertyChangedEventArgs e) { var control = d as FeesExcelControl; // control.Str var newValue = e.NewValue as FeesItemResponse; control.FeesItem = newValue; if (control.IsWareHouse) { control.LoadData(false); } else { control.LoadData(true); } } string xaml = @" [:Columns:] [:Header:] [:ListData:] "; /// /// index 从1开始 0+1 /// string columnData = @" "; string columnStr = ""; string increateService = @" "; string workProcess = "\r\n \r\n "; string consumableService = "\r\n \r\n "; public FeesExcelControl() { InitializeComponent(); } private void LoadData(bool isPrice) { if (FeesItem == null || FeesItem.ServiceList.Count <= 0) { return; } try { App.Current.Dispatcher.Invoke(() => { gd.Children.Clear(); }); var increateList = FeesItem.ServiceList.Where(s => s.ServiceType == ServiceType.增值服务).ToList(); var processList = FeesItem.ServiceList.Where(s => s.ServiceType == ServiceType.打包服务).ToList(); var consumableList = FeesItem.ServiceList.Where(s => s.ServiceType == ServiceType.耗材服务).ToList(); var increateCount = increateList.Count(); var processCount = processList.Count(); var consumableCount = consumableList.Count(); List all = new List(); all.AddRange(increateList); all.AddRange(processList); all.AddRange(consumableList); var columnCount = 2 + all.Count + 2; StringBuilder columns = new StringBuilder(); for (int i = 0; i < columnCount; i++) { columns.AppendLine(columnStr); } StringBuilder serviceData = new StringBuilder(); if (isPrice) { for (int i = 0; i < all.Count; i++) { serviceData.AppendLine(columnData.Replace("[:index:]", $"{i + 1}") .Replace("[:ServiceName:]", $"{all[i].ItemName}") .Replace("[:ServiceCount:]", $"{all[i].ItemPrice}")); } } else { for (int i = 0; i < all.Count; i++) { serviceData.AppendLine(columnData.Replace("[:index:]", $"{i + 1}") .Replace("[:ServiceName:]", $"{all[i].ItemName}") .Replace("[:ServiceCount:]", $"{all[i].ItemPrice}*{all[i].ItemCount}")); } } StringBuilder header = new StringBuilder(); if (increateCount > 0) { header.AppendLine(increateService); } if (processCount > 0) { header.AppendLine(workProcess); } if (consumableCount > 0) { header.AppendLine(consumableService); } decimal allFees = 0; decimal discount = 0; decimal discountFees = 0; discount = FeesItem.disCount; if (isPrice) { allFees = FeesItem.SingleFees; } else { allFees = FeesItem.AllFees; } discountFees = allFees * discount; string discountStr = "原价"; if (discount > 1) discountStr = $"{discount.ToString("0.0")}倍"; if (discount < 1) discountStr = $"{(discount * 10).ToString("0.0")}折"; var newGrid = xaml.Replace("[:Header:]", header.ToString()) .Replace("[:Columns:]", columns.ToString()) .Replace("[:ColumnCount:]", $"{columnCount}") .Replace("[:ColumnCount-2:]", $"{columnCount - 4}") .Replace("[:1+IncreateCount:]", $"{increateCount + 1}") .Replace("[:1+IncreateCount+ProcessCount:]", $"{1 + increateCount + processCount}") .Replace("[:1+IncreateCount+ProcessCount:+ConsumableCount]", $"{1 + increateCount + processCount + consumableCount}") .Replace("[:2+IncreateCount+ProcessCount:+ConsumableCount]", $"{2 + increateCount + processCount + consumableCount}") .Replace("[:3+IncreateCount+ProcessCount:+ConsumableCount]", $"{3 + increateCount + processCount + consumableCount}") .Replace("[:IncreateCount:]", $"{increateCount}") .Replace("[:ProcessCount:]", $"{processCount}") .Replace("[:ConsumableCount:]", $"{consumableCount}") .Replace("[:TaskId:]", $"{FeesItem.TaskId}") .Replace("[:ListData:]", serviceData.ToString()) .Replace("[:AllFees:]", $"{allFees}") .Replace("[:Discount:]", discountStr) .Replace("[:DiscountFees:]", $"{discountFees.ToString(" 0.00")}"); var grid = XamlReader.Parse(newGrid) as Grid; App.Current.Dispatcher.Invoke(() => { gd.Children.Add(grid); }); } catch { } } } }