using BBWY.Client.Models.APIModel.Response.PackTask; using System; using System.Collections.Generic; using System.Linq; using System.Text; 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 { /// <summary> /// MinFeesExcelControl.xaml 的交互逻辑 /// </summary> public partial class MinFeesExcelControl : UserControl { public MinFeesExcelControl() { InitializeComponent(); } /// <summary> /// 是否仓库端 /// </summary> public bool IsWareHouse { get { return (bool)GetValue(IsWareHouseProperty); } set { SetValue(IsWareHouseProperty, value); } } public static readonly DependencyProperty IsWareHouseProperty = DependencyProperty.Register("IsWareHouse", typeof(bool), typeof(MinFeesExcelControl), new PropertyMetadata(true, ChangedProperty1)); /// <summary> /// 价格 /// </summary> //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 bool IsMin { get { return (bool)GetValue(IsMinProperty); } set { SetValue(IsMinProperty, value); } } public static readonly DependencyProperty IsMinProperty = DependencyProperty.Register("IsMin", typeof(bool), typeof(MinFeesExcelControl)); public FeesItemResponse FeesItem { get { return (FeesItemResponse)GetValue(FeesItemProperty); } set { SetValue(FeesItemProperty, value); } } public static readonly DependencyProperty FeesItemProperty = DependencyProperty.Register("FeesItem", typeof(FeesItemResponse), typeof(MinFeesExcelControl), 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 MinFeesExcelControl; // control.Str var newValue = e.NewValue as FeesItemResponse; control.FeesItem = newValue; if (control.IsWareHouse) { control.LoadData(false); } else { control.LoadData(true); } } string xaml = @" <Grid xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> <Grid.ColumnDefinitions > [:Columns:] </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height=""30"" /> <RowDefinition Height=""30"" /> <RowDefinition Height=""30"" /> <RowDefinition Height=""30"" /> </Grid.RowDefinitions> <Border Background=""#F2F2F2"" Grid.RowSpan=""3"" Grid.ColumnSpan=""[:ColumnCount:]""/> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.Column=""0"" Grid.Row=""0"" Grid.RowSpan=""4"" BorderThickness=""1,0,0,0""/> <Border Width=""1"" HorizontalAlignment=""Right"" BorderBrush=""#D7D7D7"" Grid.Column=""[:1+IncreateCount+ProcessCount:+ConsumableCount]"" Grid.Row=""0"" Grid.RowSpan=""4"" BorderThickness=""0,0,1,0""/> <Border Height=""1"" VerticalAlignment=""Top"" BorderBrush=""#D7D7D7"" Grid.Column=""0"" Grid.Row=""0"" Grid.ColumnSpan=""[:ColumnCount:]"" BorderThickness=""0,1,0,0""/> <Border Height=""1"" VerticalAlignment=""Top"" BorderBrush=""#D7D7D7"" Grid.Column=""0"" Grid.Row=""1"" Grid.ColumnSpan=""[:ColumnCount-2:]"" BorderThickness=""0,1,0,0""/> <Border Height=""1"" VerticalAlignment=""Bottom"" BorderBrush=""#D7D7D7"" Grid.Column=""0"" Grid.Row=""2"" Grid.ColumnSpan=""[:ColumnCount:]"" BorderThickness=""0,1,0,0""/> <Border Height=""1"" VerticalAlignment=""Bottom"" BorderBrush=""#D7D7D7"" Grid.Column=""0"" Grid.Row=""3"" Grid.ColumnSpan=""[:ColumnCount:]"" BorderThickness=""0,1,0,0""/> [:Header:] <TextBlock MinWidth=""101"" TextAlignment=""Center"" Text=""结算金额"" Grid.Column=""[:1+IncreateCount+ProcessCount:+ConsumableCount]"" Grid.RowSpan=""3"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <TextBlock Text=""[:AllFees:]"" Grid.Row=""3"" Grid.Column=""[:1+IncreateCount+ProcessCount:+ConsumableCount]"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> [:ListData:] </Grid>"; /// <summary> /// index 从1开始 0+1 增值服务 和打包耗材 /// </summary> string columnData = @" <Grid Grid.Column=""[:index:]"" MinWidth=""84"" Grid.Row=""1"" Grid.RowSpan=""3"" > <Grid.RowDefinitions> <RowDefinition Height=""*""/> <RowDefinition Height=""*""/> </Grid.RowDefinitions> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.RowSpan=""2"" BorderThickness=""0,0,1,0""/> <TextBlock Text=""[:ServiceName:]"" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <TextBlock Text=""[:ServiceCount:]"" Grid.Row=""1"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> </Grid>"; string incrementConsumableStr = @" <Grid Grid.Column=""[:index:]"" MinWidth=""84"" Grid.Row=""1"" Grid.RowSpan=""3"" > <Grid.RowDefinitions> <RowDefinition Height=""2*""/> <RowDefinition Height=""*""/> </Grid.RowDefinitions> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.RowSpan=""2"" BorderThickness=""0,0,1,0""/> <TextBlock Text=""[:ServiceName:]"" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <TextBlock Text=""[:ServiceCount:]"" Grid.Row=""1"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> </Grid>"; //string totalIncrementConsumableStr = @" <Grid Grid.Column=""[:index:]"" MinWidth=""84"" Grid.Row=""1"" Grid.RowSpan=""3"" > // <Grid.RowDefinitions> // <RowDefinition Height=""2*""/> // <RowDefinition Height=""*""/> // </Grid.RowDefinitions> // <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.RowSpan=""2"" BorderThickness=""0,0,1,0""/> // <TextBlock Text=""小计"" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> // <TextBlock Text=""[:Price:]"" Grid.Row=""1"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> //</Grid>"; string basicPackStr = @" <Grid Grid.Column=""[:index:]"" MinWidth=""84"" Grid.Row=""1"" Grid.RowSpan=""3"" > <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.RowSpan=""2"" BorderThickness=""0,0,1,0""/> <TextBlock Text=""基础包装"" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <Grid Grid.Row=""1"" > <Grid.ColumnDefinitions> [:Columns:] </Grid.ColumnDefinitions> [:BasicProcessData:] <Border Height=""1"" VerticalAlignment=""Top"" BorderBrush=""#D7D7D7"" Grid.Row=""1"" Grid.ColumnSpan=""2"" BorderThickness=""0,1,0,0""/> </Grid> <TextBlock Text=""[:ServiceCount:]"" Grid.Row=""3"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.Row=""0"" Grid.RowSpan=""3"" BorderThickness=""1,0,0,0""/> </Grid>"; string basicProcessdata = @" <TextBlock Text=""[:ServiceName:]"" Grid.Column=""[:index:]"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <Border Width=""1"" HorizontalAlignment=""Right"" BorderBrush=""#D7D7D7"" BorderThickness=""0,0,1,0""/>"; string increateProcessStr = @"<Grid Grid.Column=""[:index:]"" Grid.Row=""1"" Grid.RowSpan=""3"" > <Grid.RowDefinitions> <RowDefinition Height=""*""/> <RowDefinition Height=""2*""/> </Grid.RowDefinitions> <TextBlock Text=""增量工序"" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <Grid Grid.Row=""1""> <Grid.ColumnDefinitions> [:Columns:] </Grid.ColumnDefinitions> [:IncreateProcessDatas:] <Border Height=""1"" VerticalAlignment=""Top"" BorderBrush=""#D7D7D7"" Grid.Row=""1"" Grid.ColumnSpan=""[:IncreateProcessCount:]"" BorderThickness=""0,1,0,0""/> </Grid> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.Row=""0"" Grid.RowSpan=""3"" BorderThickness=""1,0,0,0""/> </Grid>"; string increateProcessData = @" <Grid Grid.Column=""[:index:]"" MinWidth=""84"" Grid.Row=""1"" Grid.RowSpan=""2"" > <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.RowSpan=""2"" BorderThickness=""0,0,1,0""/> <TextBlock Text=""[:ServiceName:]"" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <TextBlock Text=""[:ServiceCount:]"" Grid.Row=""1"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> </Grid>"; string increatePartData = @"<Grid Grid.Column=""[:index:]"" MinWidth=""84"" Grid.Row=""1"" Grid.RowSpan=""3"" > <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <TextBlock Text=""增量配件"" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <TextBlock Text=""[:PartCount:]件"" Grid.Row=""1"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <TextBlock Text=""[:ServiceCount:]"" Grid.Row=""2"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <Border Height=""1"" VerticalAlignment=""Top"" Grid.Row=""1"" BorderBrush=""#D7D7D7"" BorderThickness=""0,1,0,0""/> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.RowSpan=""3"" BorderThickness=""0,0,1,0""/> </Grid>"; string FeesModeStr = @"<Grid Grid.Column=""[:index:]"" MinWidth=""84"" Grid.Row=""1"" Grid.RowSpan=""3"" > <Grid.RowDefinitions> <RowDefinition Height=""2*""/> <RowDefinition Height=""*""/> </Grid.RowDefinitions> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.RowSpan=""2"" BorderThickness=""0,0,1,0""/> <TextBlock Text="" 收费方式 "" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <TextBlock Text=""[:FeesMode:]"" Grid.Row=""1"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> </Grid>"; string discountFactorStr = @" <Grid Grid.Column=""[:index:]"" MinWidth=""84"" Grid.Row=""1"" Grid.RowSpan=""3"" > <Grid.RowDefinitions> <RowDefinition Height=""2*""/> <RowDefinition Height=""*""/> </Grid.RowDefinitions> <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.RowSpan=""2"" BorderThickness=""0,0,1,0""/> <TextBlock Text="" 折扣系数 "" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> <TextBlock Text=""[:DiscountFactor:]"" Grid.Row=""1"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> </Grid>"; //string processFeesStr = @" //<Grid Grid.Column=""[:index:]"" MinWidth=""84"" Grid.Row=""1"" Grid.RowSpan=""3"" > // <Grid.RowDefinitions> // <RowDefinition Height=""2*""/> // <RowDefinition Height=""*""/> // </Grid.RowDefinitions> // <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.RowSpan=""2"" BorderThickness=""0,0,1,0""/> // <TextBlock Text=""小计"" Grid.Row=""0"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> // <TextBlock Text=""[:PackFees:]"" Grid.Row=""1"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> //</Grid>"; string columnStr = "<ColumnDefinition Width=\"auto\"/>"; //string increateService = @" <TextBlock Text=""增值服务"" Grid.Column=""1"" Grid.ColumnSpan=""2"" VerticalAlignment=""Center"" HorizontalAlignment=""Center""/> // <Border Width=""1"" HorizontalAlignment=""Left"" BorderBrush=""#D7D7D7"" Grid.Column=""[:1+IncreateCount:]"" Grid.Row=""0"" Grid.RowSpan=""4"" BorderThickness=""1,0,0,0""/>"; string workProcess = "<TextBlock Text=\"打包服务\" Grid.Column=\"[:1+IncreateCount:]\" Grid.ColumnSpan=\"[:ProcessCount:]\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\r\n <Border Width=\"1\" HorizontalAlignment=\"Left\" BorderBrush=\"#D7D7D7\" Grid.Column=\"[:1+IncreateCount+ProcessCount:]\" Grid.Row=\"0\" Grid.RowSpan=\"4\" BorderThickness=\"1,0,0,0\"/>\r\n "; string consumableService = "<TextBlock Text=\"打包耗材\" Grid.Column=\"[:1+IncreateCount+ProcessCount:]\" Grid.ColumnSpan=\"[:ConsumableCount:]\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\"/>\r\n <Border Width=\"1\" HorizontalAlignment=\"Left\" BorderBrush=\"#D7D7D7\" Grid.Column=\"[:1+IncreateCount+ProcessCount:+ConsumableCount]\" Grid.Row=\"0\" Grid.RowSpan=\"4\" BorderThickness=\"1,0,0,0\"/>\r\n "; private void LoadData(bool isPrice) { isPrice = false; if (FeesItem == null || FeesItem.ServiceList.Count <= 0) { return; } try { App.Current.Dispatcher.Invoke(() => { gd.Children.Clear(); }); int packserviceCount = 0; bool isExitIncrementPart = false; if (FeesItem.IncrementPartTaskCount != null && FeesItem.IncrementPartTaskCount > 0 && FeesItem.IncrementPartCount > 1) { isExitIncrementPart = true; packserviceCount++; } var basicProcessList = FeesItem.PackItemList.Where(f => f.ProcessType == Models.ProcessType.基础包装工序).ToList(); if (basicProcessList.Count > 0) packserviceCount++; var increateProcessList = FeesItem.PackItemList.Where(f => f.ProcessType == Models.ProcessType.增值服务工序).ToList(); if (increateProcessList.Count > 0) packserviceCount++; var processList = FeesItem.PackItemList; var consumableList = FeesItem.ConsumableList; if (packserviceCount > 0) packserviceCount += 2; var processCount = packserviceCount; var consumableCount = consumableList.Count(); var columnCount = consumableCount + processCount + 1; StringBuilder columns = new StringBuilder(); for (int i = 0; i < columnCount; i++) { columns.AppendLine(columnStr); } StringBuilder serviceData = new StringBuilder(); int allCount = consumableCount + processCount ; int rowIndex = 0; if (basicProcessList.Count > 0)//打包服务 { StringBuilder basicSB = new StringBuilder(); StringBuilder basiccolumns = new StringBuilder(); for (int i = 0; i < basicProcessList.Count; i++) { basicSB.AppendLine(basicProcessdata.Replace("[:index:]", $"{i}") .Replace("[:ServiceName:]", $" {basicProcessList[i].ItemName} ") .Replace("[:ServiceCount:]", $"{basicProcessList[i].ItemPrice}*{basicProcessList[i].ItemCount}")); basiccolumns.AppendLine(columnStr); } serviceData.AppendLine(basicPackStr.Replace("[:index:]", $"{rowIndex}") .Replace("[:Columns:]", $"{basiccolumns}") .Replace("[:ServiceCount:]", $"{FeesItem.BasicProcessPrice}*{FeesItem.BasicProcessCount}") .Replace("[:BasicProcessData:]", basicSB.ToString())); } if (increateProcessList.Count > 0) { rowIndex++; StringBuilder increateProcessSB = new StringBuilder(); StringBuilder increateProcesscolumns = new StringBuilder(); for (int i = 0; i < increateProcessList.Count(); i++) { increateProcessSB.AppendLine(increateProcessData.Replace("[:index:]", $"{i}") .Replace("[:ServiceName:]", $" {increateProcessList[i].ItemName} ") .Replace("[:ServiceCount:]", $"{increateProcessList[i].ItemPrice}*{increateProcessList[i].ItemCount}")); increateProcesscolumns.AppendLine(columnStr); } //[:IncreateProcessCount:] serviceData.AppendLine(increateProcessStr.Replace("[:index:]", $"{rowIndex}") .Replace("[:IncreateProcessCount:]", $"{increateProcessList.Count()}") .Replace("[:Columns:]", $"{increateProcesscolumns}") .Replace("[:IncreateProcessDatas:]", $"{increateProcessSB.ToString()}") .Replace("[:ServiceCount:]", $"{FeesItem.BasicProcessPrice}*{FeesItem.BasicProcessCount}")); } if (isExitIncrementPart) { rowIndex++; serviceData.AppendLine(increatePartData.Replace("[:index:]", $"{rowIndex}") .Replace("[:PartCount:]", $"{FeesItem.IncrementPartCount}") .Replace("[:ServiceCount:]", $"{FeesItem.IncrementPartPrice}*{FeesItem.IncrementPartTaskCount}")); } if (processCount > 0) { rowIndex++; serviceData.AppendLine(FeesModeStr.Replace("[:index:]", $"{rowIndex}") .Replace("[:FeesMode:]", $"{FeesItem.FeesMode}")); rowIndex++; serviceData.AppendLine(discountFactorStr.Replace("[:index:]", $"{rowIndex}") .Replace("[:DiscountFactor:]", $"{FeesItem.DiscountFoctor}") ); } if (consumableList.Count > 0) { foreach (var item in consumableList) { rowIndex++; serviceData.AppendLine(incrementConsumableStr.Replace("[:index:]", $"{rowIndex}") .Replace("[:ServiceName:]", $" {item.ItemName} ") .Replace("[:ServiceCount:]", $"")); } } StringBuilder header = new StringBuilder(); if (processCount > 0) { header.AppendLine(workProcess); } if (consumableCount > 0) { header.AppendLine(consumableService); } decimal allFees = 0; decimal discount = 0; decimal discountFees = 0; discount = FeesItem.disCount; 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 - 1}") .Replace("[:1+IncreateCount:]", $"{0}") .Replace("[:1+IncreateCount+ProcessCount:]", $"{ processCount}") .Replace("[:1+IncreateCount+ProcessCount:+ConsumableCount]", $"{ processCount + consumableCount}") .Replace("[:2+IncreateCount+ProcessCount:+ConsumableCount]", $"{1 + processCount + consumableCount}") .Replace("[:3+IncreateCount+ProcessCount:+ConsumableCount]", $"{2 + processCount + consumableCount}") .Replace("[:IncreateCount:]", $"{0}") .Replace("[:ProcessCount:]", $"{processCount}") .Replace("[:ConsumableCount:]", $"{consumableCount}") .Replace("[:TaskId:]", $"{FeesItem.TaskId}") .Replace("[:ListData:]", serviceData.ToString()) .Replace("[:AllFees:]", $"{FeesItem.PackFees}"); //.Replace("[:Discount:]", $"{FeesItem.DiscountFoctor}") //.Replace("[:DiscountFees:]", $"{discountFees.ToString(" 0.00")}"); if (IsMin) { newGrid = newGrid.Replace(@"MinWidth=""84""", "").Replace(@"[:Visity:]", "Width=\"0\""); } else { // newGrid = newGrid.Replace(@"[:Visity:]", ""); } var grid = XamlReader.Parse(newGrid) as Grid; App.Current.Dispatcher.Invoke(() => { gd.Children.Add(grid); }); } catch { } } } }