using AutoMapper; using AutoMapper.Internal; using BBWY.Client.APIServices; using BBWY.Client.Helpers; using BBWY.Client.Models; using BBWY.Client.Models.APIModel.Request; using BBWY.Client.Models.APIModel.Response.PackTask; using BBWY.Client.Models.PackTask; using BBWY.Client.Views.PackTask; using BBWY.Common.Models; using GalaSoft.MvvmLight.Command; using HandyControl.Controls; using Microsoft.Extensions.Logging; using NPOI.Util; using Org.BouncyCastle.Asn1.Crmf; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Drawing.Printing; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Metadata.Ecma335; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; using System.Windows.Media.Imaging; namespace BBWY.Client.ViewModels.PackTask { public class PackServiceViewModel : BaseVM { private string suggestPackUserName; /// /// 打包人 /// public string SuggestPackUserName { get => suggestPackUserName; set { Set(ref suggestPackUserName, value); } } private int? floorDragNumber; public int? FloorDragNumber { get => floorDragNumber; set { Set(ref floorDragNumber, value); } } private string packUserName; /// /// 打包人 /// public string PackUserName { get => packUserName; set { Set(ref packUserName, value); } } private int incrementPartTaskCount; /// /// 配件任务数量 /// public int IncrementPartTaskCount { get => incrementPartTaskCount; set { Set(ref incrementPartTaskCount, value); } } private int incrementPartCount; /// /// 配件数量 /// public int IncrementPartCount { get => incrementPartCount; set { Set(ref incrementPartCount, value); } } private string directionalFees; /// /// 定向费用 /// public string DirectionalFees { get => directionalFees; set { Set(ref directionalFees, value); } } private BitmapImage barcodeImage; /// /// 任务Id条形码 /// public BitmapImage BarcodeImage { get => barcodeImage; set { Set(ref barcodeImage, value); } } private BitmapImage taskImage; /// /// 任务Id条形码 /// public BitmapImage TaskImage { get => taskImage; set { Set(ref taskImage, value); } } private string printName; public string PrintName { get => printName; set { Set(ref printName, value); } } private ObservableCollection printList; /// /// 打印机列表 /// public ObservableCollection PrintList { get => printList; set { Set(ref printList, value); } } private ObservableCollection packTaskList; /// /// 动态数据表 /// public ObservableCollection PackTaskList { get => packTaskList; set { Set(ref packTaskList, value); } } private PackTaskModel packTaskModel; public PackTaskModel PackTaskModel { get => packTaskModel; set { Set(ref packTaskModel, value); } } // public ICommand AddPackServiceCommand { get; set; } public ICommand AddBasicPackServiceCommand { get; set; } public ICommand AddIncreateServiceCommand { get; set; } public ICommand AddConsumableCommand { get; set; } public ICommand UpLoadPackCommand { get; set; } public ICommand SetAllCountCommand { get; set; } public ICommand PrintCommand { get; set; } readonly PackTaskService packTaskService; readonly ConsumableService consumableService; readonly PackDetailService packDetailService; private ObservableCollection increateList = new ObservableCollection(); public ObservableCollection IncreateList { get => increateList; set { Set(ref increateList, value); } } // //private ObservableCollection // packList = new ObservableCollection(); //public ObservableCollection PackList { get => packList; set { Set(ref packList, value); } } // private ObservableCollection consumableServiceList = new ObservableCollection(); public ObservableCollection ConsumableServiceList { get => consumableServiceList; set { Set(ref consumableServiceList, value); } } // private ObservableCollection basicPackProcessList = new ObservableCollection(); private ObservableCollection incrementProcessList = new ObservableCollection(); /// ///增量工序 /// public ObservableCollection IncrementProcessList { get => incrementProcessList; set { Set(ref incrementProcessList, value); } } // /// /// 基础包装工序 /// public ObservableCollection BasicPackProcessList { get => basicPackProcessList; set { Set(ref basicPackProcessList, value); } } private string discount = "1"; /// /// 折扣 /// public string Discount { get => discount; set { Set(ref discount, value); } } // public ObservableCollection IncreateServiceList { get; set; } = new ObservableCollection(); public ObservableCollection MemberList { get; set; } = new ObservableCollection(); public ObservableCollection ConsumableList { get; set; } = new ObservableCollection(); public ObservableCollection PackServiceList { get; set; } = new ObservableCollection(); /// /// 基础包装服务项目列表 /// public ObservableCollection BasicPackServiceList { get; set; } = new ObservableCollection(); /// /// 加载原数据 /// public List LoadList = new List(); public void InitPrintList() { TaskImage = MyPrintHelper.GetBarcodeImage(TaskId.ToString(), 300, 60); BarcodeImage = MyPrintHelper.GetBarcodeImage(SkuId, 300, 60); PrintList = new ObservableCollection(); var printingNames = PrinterSettings.InstalledPrinters;//获取本机的打印机数据 int index = -1; int selectIndex = 0; foreach (string name in printingNames) { if (name == "Microsoft XPS Document Writer" || name == "Microsoft Print to PDF" || name == "Fax") { continue; } index++; if (name.Contains("Deli")) { selectIndex = index; } PrintList.Add(name); } try { var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string printNames = Path.Combine(applicationPath, "printName.init"); if (File.Exists(printNames)) { PrintName = File.ReadAllText(printNames); } else { if (PrintList.Count > 0) { PrintName = PrintList[0].ToString(); } } } catch (Exception) { } } public PackServiceViewModel(PackTaskService packTaskService, ConsumableService consumableService, PackDetailService packDetailService)//, long taskId { //TaskId = taskId; this.consumableService = consumableService; this.packTaskService = packTaskService; this.packDetailService = packDetailService; AddIncreateServiceCommand = new RelayCommand(AddIncreateService); AddPackServiceCommand = new RelayCommand(AddPackService); AddBasicPackServiceCommand = new RelayCommand(AddBasicPackService); AddConsumableCommand = new RelayCommand(AddConsumable); UpLoadPackCommand = new RelayCommand(UpLoadPack); SetAllCountCommand = new RelayCommand(SetAllCount); //加载数据 //LoadPackDatas(); } /// /// 加载任务数据 /// public void LoadPackDatas() { IncrementPartTaskCount = TaskCount; try { InitPrintList(); } catch (Exception) { } LoadList = new List(); Task task = Task.Factory.StartNew(() => { var resMember = this.packTaskService.GetPackMembers();//成员表 if (resMember.Success) { MemberList = new ObservableCollection(); foreach (var item in resMember.Data) { App.Current.Dispatcher.Invoke(() => { MemberList.Add(item); }); } } var res = this.packDetailService.GetPackTaskDetail(TaskId); if (res.Success) { SuggestPackUserName = res.Data.SuggestPackUserName; IncrementPartCount = res.Data.IncrementPartCount == null ? 0 : res.Data.IncrementPartCount.Value; if (res.Data != null && res.Data.IncrementItemList.Count() > 0) { IncreateServiceList = new ObservableCollection(); foreach (var packService in res.Data.IncrementItemList) { if (packService.ServiceType == ServiceType.增值服务) App.Current.Dispatcher.Invoke(() => { IncreateServiceList.Add(packService);//加载增值服务列表 }); } } if (res.Data != null && res.Data.ProcessItemList.Count() > 0) { PackServiceList = new ObservableCollection(); BasicPackServiceList = new ObservableCollection(); foreach (var packService in res.Data.ProcessItemList) { if (packService.ServiceType == ServiceType.打包服务) App.Current.Dispatcher.Invoke(() => { BasicPackServiceList.Add(packService); if (packService.Name != "贴条码") PackServiceList.Add(packService);//加载工序服务列表 }); } } if (res.Data != null && res.Data.ConsumableItemList.Count() > 0) { ConsumableList = new ObservableCollection(); foreach (var item in res.Data.ConsumableItemList) { App.Current.Dispatcher.Invoke(() => { ConsumableList.Add(new ConsumableModel(consumableService) { Width = item.Width, Weigth = item.Weigth, Remark = item.Remark, Price = item.Price, Name = item.Name, Length = item.Length, Heigth = item.Heigth, Id = item.Id }); }); } } if (res.Data.IncreateList != null) { IncreateList = new ObservableCollection(); foreach (var item in res.Data.IncreateList) { App.Current.Dispatcher.Invoke(() => { IncreateList.Add(new PackItemModel() { MemberList = MemberList, IncreateServiceList = IncreateServiceList, ItemCount = item.ItemCount, ItemName = item.ItemName, SelectId = item.SelectId, SelectUserId = item.SelectUserId, MemberName = item.MemberName }); }); } } if (res.Data.ConsumableList != null) { ConsumableServiceList = new ObservableCollection(); foreach (var item in res.Data.ConsumableList) { App.Current.Dispatcher.Invoke(() => { ConsumableServiceList.Add(new PackItemModel() { MemberList = MemberList, ConsumableList = ConsumableList, ItemCount = item.ItemCount, ItemName = item.ItemName, SelectId = item.SelectId, }); }); } } if (res.Data.IncrementProcessList != null) { IncrementProcessList = new ObservableCollection(); foreach (var item in res.Data.IncrementProcessList) { App.Current.Dispatcher.Invoke(() => { IncrementProcessList.Add(new PackItemModel() { MemberList = MemberList, PackServiceList = PackServiceList.Copy(), ItemCount = item.ItemCount, ItemName = item.ItemName, SelectId = item.SelectId, SelectUserId = item.SelectUserId, MemberName = item.MemberName }); }); } } if (res.Data.BasicPackProcessList != null) { BasicPackProcessList = new ObservableCollection(); foreach (var item in res.Data.BasicPackProcessList) { App.Current.Dispatcher.Invoke(() => { BasicPackProcessList.Add(new PackItemModel() { MemberList = MemberList, PackServiceList = BasicPackServiceList.Copy(), ItemCount = item.ItemCount, ItemName = item.ItemName, SelectId = item.SelectId, SelectUserId = item.SelectUserId, MemberName = item.MemberName }); }); } } LoadList.AddRange(IncreateList); LoadList.AddRange(IncrementProcessList); DirectionalFees = res.Data.DirectionalFees?.ToString(); } }); } /// /// 批量设置耗材数量 /// /// private void SetAllCount(object obj) { SetCountWindow set = new SetCountWindow(); set.SetCount = new Action((s) => { var lbox = obj as ListBox; var serviceList = lbox.ItemsSource as ObservableCollection; foreach (var item in serviceList) { if (item.ItemName == null) { item.ItemName = ConsumableList.SingleOrDefault(c => c.Id == item.SelectId).Name; } item.ItemCount = s; } lbox.ItemsSource = serviceList; }); set.Show(); } private long taskId; public long TaskId { get => taskId; set { Set(ref taskId, value); } } // private int taskCount; public int TaskCount { get => taskCount; set { Set(ref taskCount, value); } } // public string OrderId { get; set; } public string SkuId { get; set; } private List IsOverCount(ObservableCollection packItemModels, bool needUserId = true) { List disItems = new List(); foreach (var packItem in packItemModels)//增值服务上传 { var item = new PackItemModel { ItemCount = packItem.ItemCount, SelectId = packItem.SelectId, SelectUserId = packItem.SelectUserId, ItemName = packItem.ItemName, MemberName = packItem.MemberName }; if (needUserId) if (item.SelectId <= 0 || string.IsNullOrEmpty(item.SelectUserId) || item.ItemCount <= 0) { System.Windows.MessageBox.Show($"数据输入有误"); return null; } else if (item.SelectId <= 0 || item.ItemCount <= 0) { System.Windows.MessageBox.Show($"数据输入有误"); return null; } if (item.ItemCount > TaskCount) { System.Windows.MessageBox.Show($"{item.ItemName}:{item.ItemCount}超出任务量{TaskCount}"); return null; } if (disItems.Select(a => a.SelectId).Contains(item.SelectId))//相同服务 存在累加 { var data = disItems.SingleOrDefault(a => a.SelectId == item.SelectId); if (data != null) data.ItemCount += item.ItemCount; if (data.ItemCount > TaskCount)//累积超出任务量 { System.Windows.MessageBox.Show($"{item.ItemName}:{data.ItemCount}超出任务量{TaskCount}"); return null; } continue; } disItems.Add(item); } return disItems; } /// /// 上传数据 (判断是否超量) 统一上传 /// private void UpLoadPack(object obj) { decimal? directFees = null; if (!string.IsNullOrEmpty(DirectionalFees)) { try { directFees = decimal.Parse(DirectionalFees); } catch (Exception) { directFees = null; } } PackTaskDetailRequest packTaskDetail = new PackTaskDetailRequest(); packTaskDetail.DirectionalFees = directFees; packTaskDetail.IncrementPartCount = IncrementPartCount; packTaskDetail.IncrementPartTaskCount = IncrementPartTaskCount; packTaskDetail.TaskId = TaskId; decimal IncreateFees = 0, PackFees = 0, ConsumableFees = 0, DiscountPrice = 0; var disIncreateList = IsOverCount(IncreateList); if (disIncreateList == null) return; var disBasicPackProcessList = IsOverCount(BasicPackProcessList); if (disBasicPackProcessList == null) return; if (disBasicPackProcessList.Select(d => d.SelectId).Distinct().Count() > 2) { System.Windows.MessageBox.Show("基础包装工序不能超过两道"); return; } var disIncrementProcessList = IsOverCount(IncrementProcessList); if (disIncrementProcessList == null) return; if (disBasicPackProcessList.Select(d => d.ItemName).Distinct().Count() == 1 && disBasicPackProcessList.Select(d => d.ItemName).Contains("贴条码") && disIncrementProcessList.Count > 0) { System.Windows.MessageBox.Show("只有一道贴码工序,无法添加增值包装工序"); return; } var disConsumableServiceList = IsOverCount(ConsumableServiceList, false); if (disConsumableServiceList == null) return; packTaskDetail.IncreateList = IncreateList.ToList(); packTaskDetail.BasicPackProcessList = BasicPackProcessList.ToList(); packTaskDetail.IncrementProcessList = IncrementProcessList.ToList(); packTaskDetail.ConsumableList = disConsumableServiceList; var res = packDetailService.SetPackTaskDetail(packTaskDetail); if (res == null) { System.Windows.MessageBox.Show("网络异常!"); return; } if (!res.Success) { System.Windows.MessageBox.Show(res.Msg); return; } // new TipsWindow("上传成功!").Show(); var win = obj as System.Windows.Window; if (ReflashWindow != null) ReflashWindow(); win.Close(); } /// /// 刷新界面 /// public Action ReflashWindow { get; set; } private void AddPackService() { App.Current.Dispatcher.Invoke(new Action(() => { IncrementProcessList.Add(new PackItemModel() { ItemCount = TaskCount, MemberList = MemberList, PackServiceList = PackServiceList, }); })); } private void AddBasicPackService() { App.Current.Dispatcher.Invoke(new Action(() => { BasicPackProcessList.Add(new PackItemModel() { ItemCount = TaskCount, MemberList = MemberList, PackServiceList = BasicPackServiceList, }); })); } private void AddIncreateService() { App.Current.Dispatcher.Invoke(new Action(() => { IncreateList.Add(new PackItemModel() { ItemCount = TaskCount, IncreateServiceList = IncreateServiceList, MemberList = MemberList, }); })); } private void AddConsumable() { App.Current.Dispatcher.Invoke(new Action(() => { ConsumableServiceList.Add(new PackItemModel() { ItemCount = TaskCount, ConsumableList = ConsumableList }); })); } } }