diff --git a/BBWY.Client/APIServices/IncreateServiceService.cs b/BBWY.Client/APIServices/IncreateServiceService.cs deleted file mode 100644 index 406a992d..00000000 --- a/BBWY.Client/APIServices/IncreateServiceService.cs +++ /dev/null @@ -1,48 +0,0 @@ -using BBWY.Client.Models.PackTask; -using BBWY.Common.Http; -using BBWY.Common.Models; -using System; -using System.Collections.Generic; -using System.Net.Http; -using System.Text; - -namespace BBWY.Client.APIServices -{ - public class IncreateServiceService : BaseApiService, IDenpendency - { - public IncreateServiceService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext) - { - } - - public ApiResponse SearchAll() - { - return SendRequest(globalContext.QKApiHost, "api/IncreateService/SearchAll", - null - , null, HttpMethod.Get); - } - - public ApiResponse Add(IncreateServiceModel consumable) - { - return SendRequest(globalContext.QKApiHost, "api/IncreateService/Add", - consumable - , null, HttpMethod.Post); - } - public ApiResponse Edit(IncreateServiceModel consumable) - { - return SendRequest(globalContext.QKApiHost, "api/IncreateService/Edit", - consumable - , null, HttpMethod.Post); - } - - - public ApiResponse Deleted(long id) - { - return SendRequest(globalContext.QKApiHost, "api/IncreateService/Deleted", - new - { - id = id - } - , null, HttpMethod.Get); - } - } -} diff --git a/BBWY.Client/APIServices/QiKu/MarkMessageService.cs b/BBWY.Client/APIServices/QiKu/MarkMessageService.cs new file mode 100644 index 00000000..f67e3494 --- /dev/null +++ b/BBWY.Client/APIServices/QiKu/MarkMessageService.cs @@ -0,0 +1,37 @@ +using BBWY.Client.Models.APIModel; +using BBWY.Client.Models.APIModel.Response.PackTask; +using BBWY.Common.Http; +using BBWY.Common.Models; +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; + +namespace BBWY.Client.APIServices.QiKu +{ + public class MarkMessageService : BaseApiService, IDenpendency + { + public MarkMessageService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext) + { + } + + public ApiResponse AppendMarkMessage(long TaskId, string MarkMessage, string UserName) + { + return SendRequest(globalContext.QKApiHost, $"api/MarkMessage/AppendMarkMessage", + new + { + TaskId, + MarkMessage, + UserName + } + , null, HttpMethod.Post); + } + + public ApiResponse ShowTaskMarkMessage(long TaskId) + { + return SendRequest(globalContext.QKApiHost, $"api/MarkMessage/ShowTaskMarkMessage?TaskId={TaskId}", + null + , null, HttpMethod.Get); + } + } +} diff --git a/BBWY.Client/APIServices/QiKu/PackTaskService.cs b/BBWY.Client/APIServices/QiKu/PackTaskService.cs index c4eb7183..5d293b82 100644 --- a/BBWY.Client/APIServices/QiKu/PackTaskService.cs +++ b/BBWY.Client/APIServices/QiKu/PackTaskService.cs @@ -27,8 +27,8 @@ namespace BBWY.Client.APIServices - public ApiResponse GetTaskList(string skuId = null, string taskId = null, - + public ApiResponse SearchTaskList(string skuId = null, string taskId = null + , string spuId = null, string orderSn = null, TaskState? TaskState = null, int pageIndex = 1, int pageSize = 10 @@ -36,42 +36,29 @@ namespace BBWY.Client.APIServices ) { - if (taskId != null && !string.IsNullOrEmpty(taskId.Trim())) - { - return SendRequest(globalContext.QKApiHost, "api/PackTask/SearchTaskList", new - { - TaskId = taskId, - ShopId = globalContext.User.Shop.ShopId.ToString() - - }, null, HttpMethod.Post); - } + return SendRequest(globalContext.QKApiHost, "api/PackTask/SearchTaskList", new { + orderSn, + spuId, + skuId, + taskId, + TaskState, + pageIndex, + pageSize, + ShopId = globalContext.User.Shop.ShopId.ToString(), - SkuId = skuId, - TaskId = taskId, - TaskState = TaskState, - PageIndex = pageIndex, - PageSize = pageSize, - ShopId = globalContext.User.Shop.ShopId.ToString() }, null, HttpMethod.Post); } - public ApiResponse GetWareHouseList(string WayBillNo = null, string SourceExpressName = null, string departmentName = null, string skuId = null, string taskId = null, - + public ApiResponse SearchTaskList(string WayBillNo = null, string SourceExpressName = null, string departmentName = null, string skuId = null, string taskId = null, + string spuId = null, string orderSn = null, TaskState? TaskState = null, string ShopName = null, int pageIndex = 1, int pageSize = 10 ) { - if (taskId != null && !string.IsNullOrEmpty(taskId.Trim())) - { - return SendRequest(globalContext.QKApiHost, "api/PackTask/SearchTaskList", new - { - TaskId = taskId - }, null, HttpMethod.Post); - } return SendRequest(globalContext.QKApiHost, "api/PackTask/SearchTaskList", new { DepartmentName = departmentName, @@ -83,6 +70,8 @@ namespace BBWY.Client.APIServices ShopName = ShopName, WayBillNo = WayBillNo, SourceExpressName = SourceExpressName, + spuId, + orderSn }, null, HttpMethod.Post); } @@ -96,7 +85,7 @@ namespace BBWY.Client.APIServices } - public ApiResponse GetProductSku(string skuId) + public ApiResponse SearchProduct(string skuId) { HttpClientHelper helper = new HttpClientHelper(globalContext.QKApiHost); @@ -343,6 +332,7 @@ namespace BBWY.Client.APIServices } + } public class CompeteSealBox diff --git a/BBWY.Client/APIServices/QiKu/SealBoxService.cs b/BBWY.Client/APIServices/QiKu/SealBoxService.cs index 2d93496c..c288ba6a 100644 --- a/BBWY.Client/APIServices/QiKu/SealBoxService.cs +++ b/BBWY.Client/APIServices/QiKu/SealBoxService.cs @@ -1,9 +1,11 @@ -using BBWY.Client.Models; +using BBWY.Client.Helpers; +using BBWY.Client.Models; using BBWY.Client.Models.APIModel; using BBWY.Client.Models.APIModel.Response.PackTask; using BBWY.Client.Views.PackTask; using BBWY.Common.Http; using BBWY.Common.Models; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Net.Http; @@ -24,6 +26,7 @@ namespace BBWY.Client.APIServices return SendRequest(globalContext.QKApiHost, $"api/SealBox/GetSealBoxWaitConfigureList", new { + ShopId = globalContext.User.Shop.ShopId.ToString(), TaskId = TaskId, SkuId = SkuId, @@ -205,6 +208,7 @@ namespace BBWY.Client.APIServices , null, HttpMethod.Post); } + public ApiResponse GetJDSupplierNameAndStoreName(string poOrderNo) { return SendRequest(globalContext.BBYWApiHost, "api/qiku/GetJDSupplierNameAndStoreName", new diff --git a/BBWY.Client/APIServices/WorkProcessService.cs b/BBWY.Client/APIServices/WorkProcessService.cs deleted file mode 100644 index 59d705d7..00000000 --- a/BBWY.Client/APIServices/WorkProcessService.cs +++ /dev/null @@ -1,56 +0,0 @@ -using BBWY.Client.Models.APIModel.Request; -using BBWY.Client.Models.PackTask; -using BBWY.Common.Http; -using BBWY.Common.Models; -using System; -using System.Collections.Generic; -using System.Net.Http; -using System.Text; - -namespace BBWY.Client.APIServices -{ - public class WorkProcessService : BaseApiService, IDenpendency - { - public WorkProcessService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext) - { - } - - public ApiResponse SearchAll() - { - return SendRequest(globalContext.QKApiHost, "api/WorkProcess/SearchAll", - null - , null, HttpMethod.Get); - } - - public ApiResponse Add(WorkProcessModel consumable) - { - return SendRequest(globalContext.QKApiHost, "api/WorkProcess/Add", - consumable - , null, HttpMethod.Post); - } - public ApiResponse Edit(WorkProcessModel consumable) - { - return SendRequest(globalContext.QKApiHost, "api/WorkProcess/Edit", - consumable - , null, HttpMethod.Post); - } - - - public ApiResponse Deleted(long id) - { - return SendRequest(globalContext.QKApiHost, "api/WorkProcess/Deleted", - new - { - id = id - } - , null, HttpMethod.Get); - } - - //public ApiResponse Search(ConsumableRequest consumable) - //{ - // return SendRequest(globalContext.QKApiHost, "api/WorkProcess/Search", - // consumable - // , null, HttpMethod.Post); - //} - } -} diff --git a/BBWY.Client/App.xaml.cs b/BBWY.Client/App.xaml.cs index 81e519b5..bc71d1f5 100644 --- a/BBWY.Client/App.xaml.cs +++ b/BBWY.Client/App.xaml.cs @@ -126,8 +126,9 @@ namespace BBWY.Client serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); - serviceCollection.AddScoped(); + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); #region 注册拳探SDK相关类 serviceCollection.AddSingleton(); #endregion diff --git a/BBWY.Client/Helpers/HttpClientHelper.cs b/BBWY.Client/Helpers/HttpClientHelper.cs index 3c185e21..5cc68f8a 100644 --- a/BBWY.Client/Helpers/HttpClientHelper.cs +++ b/BBWY.Client/Helpers/HttpClientHelper.cs @@ -5,6 +5,7 @@ using System.Net.Http.Headers; using System.Net.Http; using System.Text; using System.Windows; +using System.Linq; namespace BBWY.Client.Helpers { @@ -136,6 +137,48 @@ namespace BBWY.Client.Helpers } return JsonConvert.DeserializeObject(result); } + + + public string Post(string Url, string JsonData, string headers = null) + { + HttpClient client = new HttpClient(); + + + + //设置 API的 基地址 + client.BaseAddress = new Uri(BaseAddr); + + if (!string.IsNullOrEmpty(headers)) + { + var headdics = JsonConvert.DeserializeObject>(headers); + + foreach (var item in headdics.Keys) + { + if (item.ToLower() == "host" || item.ToLower() == "Content-Type".ToLower() || item.ToLower() == "Content-Length".ToLower()) continue; + client.DefaultRequestHeaders.Add(item, headdics[item]); + } + + + } + + + + //设置 默认请求头ACCEPT + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + //设置消息体 + HttpContent content = new StringContent(JsonData); + content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); + //发送Post请求 + HttpResponseMessage msg = client.PostAsync(Url, content).Result; + //判断结果是否成功 + if (msg.IsSuccessStatusCode) + { + //返回响应结果 + return msg.Content.ReadAsStringAsync().Result; + } + //返回空字符串,表示响应错误 + return ""; + } } } diff --git a/BBWY.Client/Helpers/OverTimeHelper.cs b/BBWY.Client/Helpers/OverTimeHelper.cs index f8341f78..f316cc88 100644 --- a/BBWY.Client/Helpers/OverTimeHelper.cs +++ b/BBWY.Client/Helpers/OverTimeHelper.cs @@ -37,5 +37,23 @@ namespace BBWY.Client.Helpers } } + + /// + /// 获取现在时间戳,毫秒 + /// + /// + public static long GetMilliTimeStamp() + { + return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); + } + /// + /// 获取现在时间戳,秒 + /// + /// + public static long GetTimeStamp() + { + return DateTimeOffset.Now.ToUnixTimeSeconds(); + } + } } diff --git a/BBWY.Client/Models/APIModel/Request/BarCodeRequest.cs b/BBWY.Client/Models/APIModel/Request/BarCodeRequest.cs index 42e69d2d..5ff03e71 100644 --- a/BBWY.Client/Models/APIModel/Request/BarCodeRequest.cs +++ b/BBWY.Client/Models/APIModel/Request/BarCodeRequest.cs @@ -43,9 +43,9 @@ namespace BBWY.Client.Models.APIModel.Request /// public BarcodeLabelModel LabelModel { get; set; } - ///// - ///// 型号 - ///// - //public string ModelNo { get; set; } + /// + /// 店铺名 + /// + public string ShopName { get; set; } } } diff --git a/BBWY.Client/Models/APIModel/Response/MarkMessage/ShowTaskMarkMessageResponse.cs b/BBWY.Client/Models/APIModel/Response/MarkMessage/ShowTaskMarkMessageResponse.cs new file mode 100644 index 00000000..cbce1461 --- /dev/null +++ b/BBWY.Client/Models/APIModel/Response/MarkMessage/ShowTaskMarkMessageResponse.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BBWY.Client.Models.APIModel +{ + public class ShowTaskMarkMessageResponse + { + /// + /// 备注消息 + /// + public string MarkMessage { get; set; } + + /// + /// 备注人 + /// + public string UserName { get; set; } + + /// + /// 备注时间 + /// + public DateTime? CreateTime { get; set; } + + + public override string ToString() + { + return $"{CreateTime?.ToString("yyyy-MM-dd")} {UserName}:{MarkMessage}"; + } + } +} diff --git a/BBWY.Client/Models/APIModel/Response/PackTask/SearchTaskListResponse.cs b/BBWY.Client/Models/APIModel/Response/PackTask/SearchTaskListResponse.cs index 9484ab38..0e8ffa8f 100644 --- a/BBWY.Client/Models/APIModel/Response/PackTask/SearchTaskListResponse.cs +++ b/BBWY.Client/Models/APIModel/Response/PackTask/SearchTaskListResponse.cs @@ -188,6 +188,17 @@ namespace BBWY.Client.Models.APIModel /// 打包超时备注信息 /// public string PackOverTimeMarkMsg { get; set; } + + + + /// + /// 备注消息列表 + /// + public string ShowMarkMessage { get; set; } + /// + /// 采购方案 + /// + public string SkuPurchaseSchemeId { get; set; } } public class ExpressOrderResponse { diff --git a/BBWY.Client/Models/BatchPurchase/BatchPublishTask.cs b/BBWY.Client/Models/BatchPurchase/BatchPublishTask.cs index e2070218..39369161 100644 --- a/BBWY.Client/Models/BatchPurchase/BatchPublishTask.cs +++ b/BBWY.Client/Models/BatchPurchase/BatchPublishTask.cs @@ -354,7 +354,7 @@ namespace BBWY.Client.Models foreach (var item in CertificateModel) item.BrandName = BrandName; SetCerWindow setCerWindow = new SetCerWindow(); - setCerWindow.LoadData(CertificateModel, packTaskService, spuCertificateModel, IsSetSpuCertificate); + setCerWindow.LoadData(CertificateModel, packTaskService, spuCertificateModel, IsSetSpuCertificate, SaveType.B端); setCerWindow.SaveResult = s => { CertificateModel = s; @@ -419,7 +419,7 @@ namespace BBWY.Client.Models Brand = productApiResponse.Data.Items[0].BrandName; } - var productSku = packTaskService.GetProductSku(skuid); + var productSku = packTaskService.SearchProduct(skuid); if (productSku == null || !productSku.Success) { @@ -452,6 +452,10 @@ namespace BBWY.Client.Models BarCodeModel = new BarCodeModel(); IsSetBarCode = true; } + if (BarCodeModel.LabelModel== BarcodeLabelModel.无型号模板) + { + BarCodeModel.LabelModel = BarcodeLabelModel.精简模板; + } BarCodeModel.Brand = Brand; if (!string.IsNullOrEmpty(BrandName)) BarCodeModel.BrandName = BrandName; diff --git a/BBWY.Client/Models/PackTask/BarCodeModel.cs b/BBWY.Client/Models/PackTask/BarCodeModel.cs index d6c4e695..b3f46ea4 100644 --- a/BBWY.Client/Models/PackTask/BarCodeModel.cs +++ b/BBWY.Client/Models/PackTask/BarCodeModel.cs @@ -49,15 +49,6 @@ namespace BBWY.Client.Models public string SkuId { get => skuId; set { Set(ref skuId, value); } } - private string modelNo; - /// - /// 型号 - /// - public string ModelNo { get => modelNo; set { Set(ref modelNo, value); } } - - - - private BarcodeLabelModel labelModel= BarcodeLabelModel.精简模板; /// /// 模板标签 diff --git a/BBWY.Client/Models/PackTask/PackTaskModel.cs b/BBWY.Client/Models/PackTask/PackTaskModel.cs index e3817e6f..9d64d4e9 100644 --- a/BBWY.Client/Models/PackTask/PackTaskModel.cs +++ b/BBWY.Client/Models/PackTask/PackTaskModel.cs @@ -6,6 +6,7 @@ using BBWY.Client.ViewModels.PackTask; using BBWY.Client.Views.PackTask; using BBWY.Client.Views.QualityTask; using GalaSoft.MvvmLight.Command; +using NPOI.Util; using System; using System.Collections.Generic; @@ -44,15 +45,22 @@ namespace BBWY.Client.Models { - if (!this.OrderId.IsNullOrEmpty()) + if (!this.SkuPurchaseSchemeId.IsNullOrEmpty()) { - System.Windows.MessageBox.Show("暂不支持修改采购组的任务"); + UpdatePurchaseTaskWindow updatePurchaseWindow = new UpdatePurchaseTaskWindow(this,ReflashTask); + updatePurchaseWindow.ShowDialog(); return; } + if (!OrderId.IsNullOrEmpty()&& SkuPurchaseSchemeId.IsNullOrEmpty())//B端手动添加合格证 + { + PublishTaskWindow publishB = new PublishTaskWindow(ReflashTask, this,SaveType.B端); + publishB.ShowDialog(); + return; + } - PublishTaskWindow publish = new PublishTaskWindow(ReflashTask, this); - publish.Show(); + PublishTaskWindow publish = new PublishTaskWindow(ReflashTask, this, SaveType.C端); + publish.ShowDialog(); } @@ -110,15 +118,7 @@ namespace BBWY.Client.Models return; } LookBarCodeWindow look = new LookBarCodeWindow(); - look.SetData(new BarCodeModel - { - Brand = BarCodeModel.Brand, - BrandName = BarCodeModel.BrandName, - LabelModel = BarCodeModel.LabelModel, - ProductNo = BarCodeModel.ProductNo, - SkuId = BarCodeModel.SkuId, - SkuName = BarCodeModel.SkuName - }); + look.SetData(BarCodeModel.Copy()); look.Show(); } @@ -157,7 +157,7 @@ namespace BBWY.Client.Models ProductNo = BarCodeModel.ProductNo, SkuId = BarCodeModel.SkuId, SkuName = BarCodeModel.SkuName, - ShopName= ShopName + ShopName = BarCodeModel.ShopName }; printWindow.LoadData(); //printWindow.Datas = LoadBarLabelModels(); @@ -336,14 +336,6 @@ namespace BBWY.Client.Models /// public CertificatePosition CertificatePosition { get => certificatePosition; set { Set(ref certificatePosition, value); } } - /// - /// 注意事项(对接备注) - /// - private string markMessage; - /// - /// 注意事项(对接备注) - /// - public string MarkMessage { get => markMessage; set { Set(ref markMessage, value); } } /// /// 服务收费 (单个任务id 消耗的总费用) @@ -363,8 +355,6 @@ namespace BBWY.Client.Models /// public string PackUser { get => packUser; set { Set(ref packUser, value); } } - //public FeesItemTypeDTO FeesItemTypeDTO { get; set; } - private FeesItemResponse feesItemResponse; @@ -432,7 +422,19 @@ namespace BBWY.Client.Models /// 打包超时备注信息 /// public string PackOverTimeMarkMsg { get => packOverTimeMarkMsg; set { Set(ref packOverTimeMarkMsg, value); } } + /// + /// + /// + private string showMarkMessage; + /// + /// 备注消息列表 + /// + public string ShowMarkMessage { get => showMarkMessage; set { Set(ref showMarkMessage, value); } } + /// + /// 采购方案 + /// + public string SkuPurchaseSchemeId { get; set; } } @@ -479,5 +481,9 @@ namespace BBWY.Client.Models public string GoodsNo { get => goodsNo; set { Set(ref goodsNo, value); } } + + + + } } diff --git a/BBWY.Client/ViewModels/PackTask/CreatePackTaskViewModel.cs b/BBWY.Client/ViewModels/PackTask/CreatePackTaskViewModel.cs index ca445be9..702a2460 100644 --- a/BBWY.Client/ViewModels/PackTask/CreatePackTaskViewModel.cs +++ b/BBWY.Client/ViewModels/PackTask/CreatePackTaskViewModel.cs @@ -420,7 +420,6 @@ namespace BBWY.Client.ViewModels.PackTask ProductNo = model.ItemList[0].GoodsNo; Brand = model.Brand; BrandName = model.ItemList[0].BrandName; - this.MarkMessage = model.MarkMessage; IsSetBarCode = model.BarCodeModel != null ? false : true; IsSetCertificate = model.CertificateModel != null ? false : true; BarCodeModel = model.BarCodeModel; @@ -697,7 +696,7 @@ namespace BBWY.Client.ViewModels.PackTask foreach (var item in CertificateModel) item.BrandName = BrandName; //CertificateModel.Foreach(c=>c.BrandName = BrandName) ; SetCerWindow setCerWindow = new SetCerWindow(); - setCerWindow.LoadData(CertificateModel, packTaskService, spuCertificateModel, IsSetSpuCertificate); + setCerWindow.LoadData(CertificateModel, packTaskService, spuCertificateModel, IsSetSpuCertificate, SaveType.C端); setCerWindow.SaveResult = s => { CertificateModel = s; @@ -872,7 +871,7 @@ namespace BBWY.Client.ViewModels.PackTask Brand = productApiResponse.Data.Items[0].BrandName; } - var productSku = packTaskService.GetProductSku(searchSkuId); + var productSku = packTaskService.SearchProduct(searchSkuId); if (productSku == null || !productSku.Success) { IsLoading = false; @@ -943,6 +942,10 @@ namespace BBWY.Client.ViewModels.PackTask BarCodeModel = new BarCodeModel(); IsSetBarCode = true; } + if (BarCodeModel.LabelModel == BarcodeLabelModel.无型号模板) + { + BarCodeModel.LabelModel = BarcodeLabelModel.精简模板; + } BarCodeModel.Brand = Brand; if (!string.IsNullOrEmpty(BrandName)) BarCodeModel.BrandName = BrandName; diff --git a/BBWY.Client/ViewModels/PackTask/PublishTaskViewModel.cs b/BBWY.Client/ViewModels/PackTask/PublishTaskViewModel.cs index ae3f115b..36bd0562 100644 --- a/BBWY.Client/ViewModels/PackTask/PublishTaskViewModel.cs +++ b/BBWY.Client/ViewModels/PackTask/PublishTaskViewModel.cs @@ -1,4 +1,5 @@ using BBWY.Client.APIServices; +using BBWY.Client.APIServices.QiKu; using BBWY.Client.Extensions; using BBWY.Client.Models; using BBWY.Client.Models.PackTask; @@ -11,6 +12,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using System.Net.Mail; using System.Text; using System.Threading.Tasks; using System.Windows; @@ -24,10 +26,13 @@ namespace BBWY.Client.ViewModels.PackTask #region 属性 + public SaveType SaveType { get; set; } + private string searchSkuId; public string SearchSkuId { get => searchSkuId; set { Set(ref searchSkuId, value); } } - public long TaskId { get; set; } + private long taskId; + public long TaskId { get => taskId; set { Set(ref taskId, value); } } //private bool isSelected; //public bool IsSelected { get => isSelected; set { Set(ref isSelected, value); } } @@ -256,6 +261,14 @@ namespace BBWY.Client.ViewModels.PackTask /// public CertificatePosition CertificatePosition { get => certificatePosition; set { Set(ref certificatePosition, value); } } + + + private string showMarkMessage; + /// + /// 显示对接备注消息 + /// + public string ShowMarkMessage { get => showMarkMessage; set { Set(ref showMarkMessage, value); } } + /// /// 注意事项(对接备注) /// @@ -280,7 +293,7 @@ namespace BBWY.Client.ViewModels.PackTask public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } } #endregion - public PublishTaskViewModel(PackTaskService packTaskService, ProductService productService, GlobalContext globalContext) + public PublishTaskViewModel(PackTaskService packTaskService, ProductService productService, GlobalContext globalContext, MarkMessageService markMessageService) { this.packTaskService = packTaskService; this.productService = productService; @@ -307,9 +320,13 @@ namespace BBWY.Client.ViewModels.PackTask InitData(message); }); + + AppendMarkMessageCommand = new RelayCommand(AppendMarkMessage); + this.markMessageService = markMessageService; } + #region 方法 public ICommand SetBarCodeCommand { get; set; } public ICommand SetCertificateCommand { get; set; } @@ -320,6 +337,35 @@ namespace BBWY.Client.ViewModels.PackTask public ICommand CreateTaskCommand { get; set; } public ICommand SearchSkuCommand { get; set; } + public ICommand AppendMarkMessageCommand { get; set; } + + MarkMessageService markMessageService; + + private void AppendMarkMessage() + { + var res = markMessageService.AppendMarkMessage(TaskId, MarkMessage, globalContext.User.Name); + if (res == null) + { + + return; + } + if (!res.Success) + { + MessageBox.Show(res.Msg); + return; + } + + MarkMessage = string.Empty; + + var resShow = markMessageService.ShowTaskMarkMessage(TaskId); + if (resShow != null && resShow.Success && resShow.Data != null) + { + ShowMarkMessage = string.Join("\r\n", resShow.Data.Select(d => d.ToString())); + } + + } + + private void SetBarCode() { if (string.IsNullOrEmpty(SkuId)) @@ -338,6 +384,7 @@ namespace BBWY.Client.ViewModels.PackTask BarCodeModel.Brand = Brand; BarCodeModel.SkuId = SkuId; BarCodeModel.SkuName = SkuName; + BarCodeModel.ShopName = globalContext.User.Shop.ShopName; } if (!string.IsNullOrEmpty(BrandName)) BarCodeModel.BrandName = BrandName; @@ -381,7 +428,7 @@ namespace BBWY.Client.ViewModels.PackTask foreach (var item in CertificateModel) item.BrandName = BrandName; SetCerWindow setCerWindow = new SetCerWindow(); - setCerWindow.LoadData(CertificateModel, packTaskService, spuCertificateModel, IsSetSpuCertificate); + setCerWindow.LoadData(CertificateModel, packTaskService, spuCertificateModel, IsSetSpuCertificate, SaveType); setCerWindow.SaveResult = s => { CertificateModel = s; @@ -445,7 +492,7 @@ namespace BBWY.Client.ViewModels.PackTask Brand = productApiResponse.Data.Items[0].BrandName; } - var productSku = packTaskService.GetProductSku(skuid); + var productSku = packTaskService.SearchProduct(skuid); if (productSku == null || !productSku.Success || productSku.Data == null) return; if (TaskId <= 0) @@ -475,6 +522,9 @@ namespace BBWY.Client.ViewModels.PackTask { BarCodeModel = new BarCodeModel(); } + if (BarCodeModel.LabelModel == BarcodeLabelModel.无型号模板) + BarCodeModel.LabelModel = BarcodeLabelModel.精简模板; + BarCodeModel.Brand = Brand; if (!string.IsNullOrEmpty(BrandName)) BarCodeModel.BrandName = BrandName; @@ -486,26 +536,20 @@ namespace BBWY.Client.ViewModels.PackTask { IsNeedBarCode = Need.需要; IsSetBarCode = true; - + } - if (productSku.Data.PackConfig != null&&TaskId<=0) + if (productSku.Data.PackConfig != null && TaskId <= 0) { var config = productSku.Data.PackConfig; SkuTitle = config.SkuGoodsTitle; GoodsNumber = config.GoodsNumber; PackType = (PackType)config.PackType; BasicPack = (BasicPack)config.BasicPack; - //Availability = (TaskState)config.Availability; - MarkMessage = config.MarkMessage; CertificatePosition = config.CertificatePosition == null ? CertificatePosition.无需合格证 : (CertificatePosition)config.CertificatePosition.Value; - // Increment1 = config.Increment1; string[] increateDatas = config.Increment1.Split(','); IsNeedBarCode = config.NeedBar ? Need.需要 : Need.不需要; IsNeedCertificateModel = config.NeedCer ? Need.需要 : Need.不需要; - IsSetBarCode = !config.NeedBar; - //IsSetCertificate = config.CertificatePosition== (int)CertificatePosition.无需合格证; - bool isSelected = false; foreach (var item in increates) { @@ -573,6 +617,10 @@ namespace BBWY.Client.ViewModels.PackTask public void InitData(PackTaskModel model = null) { + //展示数据 + + + IncreateList = new ObservableCollection(); SpuId = string.Empty; if (model == null) @@ -590,7 +638,6 @@ namespace BBWY.Client.ViewModels.PackTask ProductNo = string.Empty; Brand = string.Empty; BrandName = string.Empty; - this.MarkMessage = ""; IsSetBarCode = true; IsSetCertificate = true; BarCodeModel = null; @@ -610,7 +657,7 @@ namespace BBWY.Client.ViewModels.PackTask return; } SaveTask = "保存"; - Logo = model.ItemList[0].Logo.Replace("80x80","200x200"); + Logo = model.ItemList[0].Logo.Replace("80x80", "200x200"); SearchSkuId = model.SkuId; SkuId = model.SkuId; SkuCount = model.SkuCount; @@ -618,7 +665,7 @@ namespace BBWY.Client.ViewModels.PackTask ProductNo = model.ItemList[0].GoodsNo; Brand = model.Brand; BrandName = model.ItemList[0].BrandName; - this.MarkMessage = model.MarkMessage; + IsSetBarCode = model.BarCodeModel != null ? false : true; IsSetCertificate = model.CertificateModel != null ? false : true; BarCodeModel = model.BarCodeModel; @@ -629,13 +676,12 @@ namespace BBWY.Client.ViewModels.PackTask try { - PositionType = model.PositionType.ToEnum();//多个仓库异常 + PositionType = model.PositionType.ToEnum();//多个仓库异常 todo: } catch { } - PackType = model.PackType; BasicPack = model.BasicPack; IsNeedBarCode = model.BarCodeModel == null ? Need.不需要 : Need.需要; @@ -643,6 +689,12 @@ namespace BBWY.Client.ViewModels.PackTask CertificatePosition = model.CertificatePosition; TaskId = model.TaskId; + var res = markMessageService.ShowTaskMarkMessage(TaskId); + if (res!=null&&res.Success&&res.Data!=null) + { + ShowMarkMessage = string.Join("\r\n", res.Data.Select(d => d.ToString())); + } + string[] increateDatas = model.Increment1?.Split(','); bool isTrue = false; @@ -725,7 +777,7 @@ namespace BBWY.Client.ViewModels.PackTask ShopId = globalContext.User.Shop.ShopId.ToString(), NeedBar = IsNeedBarCode == Need.需要, NeedCer = IsNeedCertificateModel == Need.需要 - + }; if (IsNeedBarCode == Need.需要) { @@ -740,7 +792,7 @@ namespace BBWY.Client.ViewModels.PackTask { if (CertificateModel == null || IsSetCertificate || CertificateModel.Count() <= 0) { - MessageBox.Show ("请设置合格证模板","提示"); + MessageBox.Show("请设置合格证模板", "提示"); return; } createTaskModel.CerId = string.Join(",", CertificateModel.Where(c => c.Id > 0).Select(c => c.Id));// @@ -756,11 +808,12 @@ namespace BBWY.Client.ViewModels.PackTask res = packTaskService.CreateTask(createTaskModel); } - if(res == null) { + if (res == null) + { MessageBox.Show("未知错误"); return; } - if (!res .Success) + if (!res.Success) { MessageBox.Show(res.Msg); return; diff --git a/BBWY.Client/ViewModels/PackTask/TaskListViewModel.cs b/BBWY.Client/ViewModels/PackTask/TaskListViewModel.cs index f17c215c..14867e89 100644 --- a/BBWY.Client/ViewModels/PackTask/TaskListViewModel.cs +++ b/BBWY.Client/ViewModels/PackTask/TaskListViewModel.cs @@ -129,6 +129,20 @@ namespace BBWY.Client.ViewModels.PackTask private string searchSkuId; public string SearchSkuId { get => searchSkuId; set { Set(ref searchSkuId, value); } } + + + /// + /// 查询Spu + /// + private string searchSpuId; + public string SearchSpuId { get => searchSpuId; set { Set(ref searchSpuId, value); } } + + /// + /// 查询拳探订单号 + /// + private string searchOrderSn; + public string SearchOrderSn { get => searchOrderSn; set { Set(ref searchOrderSn, value); } } + private TaskState? taskState; /// /// 任务状态 @@ -522,7 +536,7 @@ namespace BBWY.Client.ViewModels.PackTask try { PackTaskList = new ObservableCollection();//初始化数据 - var datas = packTaskService.GetTaskList(SearchSkuId, SearchTaskId, this.TaskState, + var datas = packTaskService.SearchTaskList(SearchSkuId, SearchTaskId,SearchSpuId,SearchOrderSn, this.TaskState, PageIndex, PageSize); if (datas != null && datas.Data != null && datas.Success) { @@ -546,10 +560,11 @@ namespace BBWY.Client.ViewModels.PackTask { BrandName = item.BrandName, GoodsNo = item.ProductItemNum, Logo= item.Logo, SkuName = item.SkuName, - SkuId = item.SkuId + SkuId = item.SkuId, + } }, - MarkMessage = item.MarkMessage, + ShowMarkMessage = item.ShowMarkMessage, PackType = (PackType)item.PackType, PositionType = item.PositionType, @@ -564,7 +579,7 @@ namespace BBWY.Client.ViewModels.PackTask QualityCompletionOverTime = item.QualityCompletionOverTime, PackCompletionOverTime = item.PackCompletionOverTime, ShopName = item.ShopName, - + SkuPurchaseSchemeId = item.SkuPurchaseSchemeId, }; if (!item.OrderId.IsNullOrEmpty() && !item.SkuId.IsNullOrEmpty())//加载物流信息 @@ -581,6 +596,8 @@ namespace BBWY.Client.ViewModels.PackTask if (item.BarCodeDTO != null && item.BarCodeDTO.Id > 0) { data.BarCodeModel = item.BarCodeDTO; + if (data.BarCodeModel.LabelModel == BarcodeLabelModel.无型号模板) + data.BarCodeModel.LabelModel = BarcodeLabelModel.精简模板; } if (item.Cers != null) { @@ -734,7 +751,7 @@ namespace BBWY.Client.ViewModels.PackTask if (SealBoxConfigureType == SealBoxConfigureType.待配置) { SealBoxWaitConfigureList = new ObservableCollection(); - ApiResponse sealBoxWaitRes = sealBoxService.GetSealBoxWaitConfigureList(SearchSkuId, SearchTaskId, PageSize, PageIndex); + ApiResponse sealBoxWaitRes = sealBoxService.GetSealBoxWaitConfigureList(SearchSkuId, SearchTaskId, PageSize, PageIndex,SearchSpuId); if (sealBoxWaitRes == null) { diff --git a/BBWY.Client/ViewModels/PackTask/UpdatePurchaseTaskViewModel.cs b/BBWY.Client/ViewModels/PackTask/UpdatePurchaseTaskViewModel.cs new file mode 100644 index 00000000..40330280 --- /dev/null +++ b/BBWY.Client/ViewModels/PackTask/UpdatePurchaseTaskViewModel.cs @@ -0,0 +1,808 @@ +using BBWY.Client.APIServices.QiKu; +using BBWY.Client.APIServices; +using BBWY.Client.Models.APIModel.Request; +using BBWY.Client.Models.PackTask; +using BBWY.Client.Models; +using BBWY.Client.Views.PackTask; +using BBWY.Common.Models; +using GalaSoft.MvvmLight.Command; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Windows.Input; +using System.Windows; +using BBWY.Client.Views.QualityTask; +using BBWY.Client.Models.QualityTask; + +namespace BBWY.Client.ViewModels.PackTask +{ + public class UpdatePurchaseTaskViewModel : BaseVM + { + + #region 属性 + + + + + + private ObservableCollection purchaseSkuList; + public ObservableCollection PurchaseSkuList { get => purchaseSkuList; set { Set(ref purchaseSkuList, value); } } + + private string searchSkuId; + public string SearchSkuId { get => searchSkuId; set { Set(ref searchSkuId, value); } } + + // public long TaskId { get; set; } + //private bool isSelected; + //public bool IsSelected { get => isSelected; set { Set(ref isSelected, value); } } + + private ObservableCollection worryList = new ObservableCollection { + "否","是" + }; + public ObservableCollection WorryList { get => worryList; set { Set(ref worryList, value); } } + + private ObservableCollection positionTypeList = new ObservableCollection { + "商家仓","齐越仓", "京东仓","聚水潭仓"}; + public ObservableCollection PositionTypeList { get => positionTypeList; set { Set(ref positionTypeList, value); } } + + private ObservableCollection packTypeList = new ObservableCollection { + "单件","多件" + }; + public ObservableCollection PackTypeList { get => packTypeList; set { Set(ref packTypeList, value); } } + + private ObservableCollection basicPackList = new ObservableCollection { + "快递袋","纸箱","麻袋" + }; + public ObservableCollection BasicPackList { get => basicPackList; set { Set(ref basicPackList, value); } } + + private ObservableCollection isNeedBarCodeList = new ObservableCollection { + "需要", "不需要" }; + public ObservableCollection IsNeedBarCodeList { get => isNeedBarCodeList; set { Set(ref isNeedBarCodeList, value); } } + + private ObservableCollection isNeedCerList = new ObservableCollection { + "需要", "不需要" }; + public ObservableCollection IsNeedCerList { get => isNeedCerList; set { Set(ref isNeedCerList, value); } } + + + private ObservableCollection certificatePositionList = new ObservableCollection { + "无","外部包装","产品包装" + }; + public ObservableCollection CertificatePositionList { get => certificatePositionList; set { Set(ref certificatePositionList, value); } } + + private ObservableCollection availabilityList = new ObservableCollection { + "已到货","部分到货","未到货" + }; + public ObservableCollection AvailabilityList { get => availabilityList; set { Set(ref availabilityList, value); } } + + private int skuCount; + /// + /// Sku任务数 + /// + public int SkuCount { get => skuCount; set { Set(ref skuCount, value); } } + + private string skuId; + /// + /// Sku + /// + public string SkuId { get => skuId; set { Set(ref skuId, value); } } + + + + public string OrderId { get; set; } + + private string logo; + /// + /// 店铺Sku图链接 + /// + public string Logo { get => logo; set { Set(ref logo, value); } } + + private string skuName; + /// + /// 采购Sku名称 + /// + public string SkuName { get => skuName; set { Set(ref skuName, value); } } + + private string brand; + /// + /// 品牌 + /// + public string Brand { get => brand; set { Set(ref brand, value); } } + + + private string productNo; + /// + /// 货号 + /// + public string ProductNo { get => productNo; set { Set(ref productNo, value); } } + + private string brandName; + /// + /// 品名(手写上传) + /// + public string BrandName { get => brandName; set { Set(ref brandName, value); } } + + + private int goodsNumber; + /// + /// 配件数 + /// + public int GoodsNumber { get => goodsNumber; set { Set(ref goodsNumber, value); } } + private Worry isWorry; + /// + /// 是否加急 + /// + public Worry IsWorry { get => isWorry; set { Set(ref isWorry, value); } } + + private Availability availability; + /// + /// 到货情况(待收货=0,部分收货=1,已到货=2) + /// + public Availability Availability { get => availability; set { Set(ref availability, value); } } + + private PackType packType; + /// + /// 打包类型(单件=0,多件=1) + /// + public PackType PackType { get => packType; set { Set(ref packType, value); } } + + private BasicPack basicPack; + /// + /// 基础包装(快递袋=0,纸箱=1,麻袋=2) + /// + public BasicPack BasicPack { get => basicPack; set { Set(ref basicPack, value); } } + + private PositionType positionType; + /// + /// 落仓(商家仓=0,齐越仓=1,京东仓=2,聚水潭仓=3) + /// + public PositionType PositionType { get => positionType; set { Set(ref positionType, value); } } + + private string skuTitle; + /// + /// sku配件商品名称 + /// + public string SkuTitle { get => skuTitle; set { Set(ref skuTitle, value); } } + + private Need isNeedBarCode; + /// + /// 是否需要合格证 + /// + public Need IsNeedBarCode { get => isNeedBarCode; set { Set(ref isNeedBarCode, value); } } + + + private Need isNeedCertificateModel; + /// + /// 是否需要条形码 + /// + public Need IsNeedCertificateModel { get => isNeedCertificateModel; set { Set(ref isNeedCertificateModel, value); } } + + + private BarCodeModel barCodeModel; + /// + /// 条形码 + /// + public BarCodeModel BarCodeModel { get => barCodeModel; set { Set(ref barCodeModel, value); } } + + + private bool isSetBarCode; + /// + /// 设置显示(条形码) + /// + public bool IsSetBarCode + { + get => isSetBarCode; + set + { + + Set(ref isSetBarCode, value); + // IsNeedBarCode = IsSetBarCode ? Need.不需要 : Need.需要; + } + } + + private bool isSetCertificate; + /// + /// 设置显示(合格证) + /// + public bool IsSetCertificate + { + get => isSetCertificate; set + { + + Set(ref isSetCertificate, value); + //IsNeedCertificateModel = IsSetCertificate ? Need.不需要 : Need.需要; + } + } + private string setSpuCerStatus; + + public string SetSpuCerStatus { get => setSpuCerStatus; set { Set(ref setSpuCerStatus, value); } } + private bool isSetSpuCertificate = true; + + + /// + /// 设置spu显示(合格证) + /// + public bool IsSetSpuCertificate + { + get => isSetSpuCertificate; set + { + + Set(ref isSetSpuCertificate, value); + SetSpuCerStatus = IsSetSpuCertificate ? "设置spu模板" : "修改spu模板"; + } + } + + + private string saveTask; + + /// + /// 设置显示(合格证) + /// + public string SaveTask { get => saveTask; set { Set(ref saveTask, value); } } + + + private string spuId; + /// + /// spuid + /// + public string SpuId { get => spuId; set { Set(ref spuId, value); } } + + private CertificateModel spuCertificateModel; + /// + /// spu合格证 + /// + public CertificateModel SpuCertificateModel { get => spuCertificateModel; set { Set(ref spuCertificateModel, value); } } + + + + private CertificateModel certificateModel; + /// + /// 合格证 + /// + public CertificateModel CertificateModel { get => certificateModel; set { Set(ref certificateModel, value); } } + + /// + /// 合格证位置(外部包装=0,产品包装=1) + /// + private CertificatePosition certificatePosition; + /// + /// 合格证位置(外部包装=0,产品包装=1) + /// + public CertificatePosition CertificatePosition { get => certificatePosition; set { Set(ref certificatePosition, value); } } + + /// + /// 注意事项(对接备注) + /// + private string markMessage; + /// + /// 注意事项(对接备注) + /// + public string MarkMessage { get => markMessage; set { Set(ref markMessage, value); } } + + private long taskId; + public long TaskId { get => taskId; set { Set(ref taskId, value); } } + + private string showMarkMessage; + /// + /// 显示备注列表(对接备注) + /// + public string ShowMarkMessage { get => showMarkMessage; set { Set(ref showMarkMessage, value); } } + + + private ObservableCollection increateList; + /// + /// 增量耗材查询关键字 + /// + public ObservableCollection IncreateList { get => increateList; set { Set(ref increateList, value); } } + string[] increates = new string[] { "气泡纸", "气泡袋", "POP袋", "折纸箱", "气泡纸封边", "彩盒", "剪胶", "剪彩带", "快递袋", "收纳盒", "纸箱子", "装纸箱", "封边", "胶带", "折彩盒" }; + + PackPurchaseTaskService packPurchaseTaskService; + PackTaskService packTaskService; + ProductService productService; + GlobalContext globalContext; + private bool isLoading = false; + public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } } + #endregion + + public UpdatePurchaseTaskViewModel(ProductService productService, GlobalContext globalContext, PackPurchaseTaskService packPurchaseTaskService, PurchaseService purchaseService, MarkMessageService markMessageService, PackTaskService packTaskService) + { + this.packPurchaseTaskService = packPurchaseTaskService; + this.productService = productService; + this.globalContext = globalContext; + CreateTaskCommand = new RelayCommand(CreateTask); + OpenSkuDetailCommand = new RelayCommand(OpenSkuDetail); + SetBarCodeCommand = new RelayCommand(SetBarCode); + SetCertificateCommand = new RelayCommand(SetCertificate); + LookBarCommand = new RelayCommand(LookBar); + LookCerCommand = new RelayCommand(LookCer); + + IncreateList = new ObservableCollection(); + foreach (var item in increates) + { + + IncreateList.Add(new IncreateModel + { + IncreateName = item, + IsSelected = false + }); + } + + this.purchaseService = purchaseService; + + AppendMarkMessageCommand = new RelayCommand(AppendMarkMessage); + this.markMessageService = markMessageService; + this.packTaskService = packTaskService; + } + + + MarkMessageService markMessageService; + + private void AppendMarkMessage() + { + var res = markMessageService.AppendMarkMessage(TaskId, MarkMessage, globalContext.User.Name); + if (res == null) + { + + return; + } + if (!res.Success) + { + MessageBox.Show(res.Msg); + return; + } + + MarkMessage = string.Empty; + + var resShow = markMessageService.ShowTaskMarkMessage(TaskId); + if (resShow != null && resShow.Success && resShow.Data != null) + { + ShowMarkMessage = string.Join("\r\n", resShow.Data.Select(d => d.ToString())); + } + + } + + PurchaseService purchaseService; + public string OriginShopName { get; set; } + public string SkuPurchaseSchemeId { get; set; } + public Platform Platform { get; set; } + + + + + public SaveType SaveType { get; set; } + + #region 方法 + public ICommand SetBarCodeCommand { get; set; } + public ICommand SetCertificateCommand { get; set; } + public ICommand LookBarCommand { get; set; } + public ICommand LookCerCommand { get; set; } + + public ICommand OpenSkuDetailCommand { get; set; } + public ICommand CreateTaskCommand { get; set; } + + public ICommand SearchSkuCommand { get; set; } + + public ICommand AppendMarkMessageCommand { get; set; } + private void SetBarCode() + { + if (string.IsNullOrEmpty(SkuId)) + { + return; + } + //if (TaskId > 0 && string.IsNullOrEmpty(SpuId))//修改界面刷新配置数据 + //{ + // SearchSku(SkuId); + //} + + if (BarCodeModel == null) + { + BarCodeModel = new BarCodeModel(); + BarCodeModel.ProductNo = ProductNo; + BarCodeModel.Brand = Brand; + BarCodeModel.SkuId = SkuId; + BarCodeModel.SkuName = SkuName; + } + if (!string.IsNullOrEmpty(BrandName)) + BarCodeModel.BrandName = BrandName; + + SetBarCodeWindow setBarCodeWindow = new SetBarCodeWindow(); + setBarCodeWindow.LoadData(BarCodeModel, packTaskService); + setBarCodeWindow.SaveResult = b => + { + BarCodeModel = b; + IsSetBarCode = false; + IsNeedBarCode = Need.需要; + }; + setBarCodeWindow.Show(); + } + + /// + /// 设置合格证 + /// + private void SetCertificate(PurchaseSku model) + { + + if (model.CerDTO == null) + { + model.CerDTO = new CertificateModel + { + ProductNo = ProductNo, + Brand = Brand, + SkuId = SkuId, + PurchaseSkuId = model.PurchaseSkuId + + }; + } + if (!string.IsNullOrEmpty(BrandName)) + model.CerDTO.BrandName = BrandName; + + QualitySetCerWindow setCerWindow = new QualitySetCerWindow(); + setCerWindow.LoadData(model.IsNeedCer, model.CerDTO, packPurchaseTaskService, spuCertificateModel, IsSetSpuCertificate, SaveType); + setCerWindow.SaveResult = (s, PackCerState) => + { + var skus = PurchaseSkuList.SingleOrDefault(p => p.PurchaseSkuId == s.PurchaseSkuId); + skus.CerDTO = s; + skus.IsSetCertificate = false; + skus.IsNeedCer = PackCerState == PackCerState.合格证信息; + IsNeedCertificateModel = Need.需要; + }; + setCerWindow.Show(); + } + + + /// + /// 查看合格证 + /// + private void LookCer(string id) + { + QualityLookCerWindow lookCerWindow = new QualityLookCerWindow(PurchaseSkuList.SingleOrDefault(p => p.PurchaseSkuId == id).CerDTO); + lookCerWindow.Show(); + } + /// + /// 查看条形码 + /// + private void LookBar() + { + LookBarCodeWindow look = new LookBarCodeWindow(); + look.SetData(BarCodeModel); + look.Show(); + } + + /// + /// 搜索 skuId(todo:) + /// + public bool SearchSku(PackTaskModel obj) + { + //InitData(); + TaskId = obj.TaskId; + SaveType = SaveType.B端; + var resShow = markMessageService.ShowTaskMarkMessage(TaskId); + if (resShow != null && resShow.Success && resShow.Data != null) + { + ShowMarkMessage = string.Join("\r\n", resShow.Data.Select(d => d.ToString())); + } + + + //SkuPurchaseSchemeId = "416647656341573"; + OriginShopName = obj.ShopName; + + + SkuId =obj.SkuId; + OrderId = obj.OrderId; + + var shopList = globalContext.User.ShopList; + var shop = shopList.SingleOrDefault(s => s.ShopName == OriginShopName); + Logo = obj.ItemList[0].Logo; + SkuName = obj.ItemList[0].SkuName; + if (string.IsNullOrEmpty(SkuId)) + return false; + + ApiResponse productApiResponse = null; + var skuResponse = productService.GetProductSkuList(string.Empty, SkuId, shop.Platform, shop.AppKey, shop.AppSecret, shop.AppToken); + if (skuResponse.Success) + { + if (skuResponse.Data.Count() == 0) + { + return false; + } + Logo = skuResponse.Data[0].Logo.Replace("80x80", "200x200"); + SkuName = skuResponse.Data[0].Title; + + SpuId = skuResponse.Data[0].ProductId; + + productApiResponse = productService.GetProductList(skuResponse.Data[0].ProductId, string.Empty, string.Empty, 1, + shop.Platform, shop.AppKey, shop.AppSecret, shop.AppToken); + + if (productApiResponse.Success) + { + if (productApiResponse.Data.Count == 0) + { + + return false; + } + + ProductNo = productApiResponse.Data.Items[0].ProductItemNum; + Brand = productApiResponse.Data.Items[0].BrandName; + + } + var productSku = packPurchaseTaskService.GetConfigPack(SkuId, "", OrderId); + + if (productSku == null || !productSku.Success || productSku.Data == null) + { + MessageBox.Show(productSku.Msg); + return false; + } + + + SkuPurchaseSchemeId = productSku.Data.SkuPurchaseSchemeId; + BarCodeModel = productSku.Data.BarCode; + if (BarCodeModel == null) + { + BarCodeModel = new BarCodeModel(); + + } + if (!string.IsNullOrEmpty(Brand)) + BarCodeModel.Brand = Brand; + if (!string.IsNullOrEmpty(BrandName)) + BarCodeModel.BrandName = BrandName; + BarCodeModel.ProductNo = ProductNo; + BarCodeModel.SkuId = SkuId; + BarCodeModel.SkuName = SkuName; + PurchaseSkuList = new ObservableCollection(); + foreach (var item in productSku.Data.PurchaseSkus) + { + var list = purchaseService.GetPurchaseSkuBasicInfo(item.PurchaseProductId); + if (list == null) continue; + var skuItem = list.Data.ItemList.FirstOrDefault(f => f.PurchaseSkuId == item.PurchaseSkuId); + if (skuItem == null) + { + MessageBox.Show($"{item.PurchaseProductId}采购商品列表不存在skuid:{item.PurchaseSkuId},sku商品可能被下架了."); + //return false; + } + App.Current.Dispatcher.Invoke(new Action(() => + { + PurchaseSkuList.Add(new PurchaseSku + { + Logo = skuItem?.Logo, + Title = skuItem?.Title, + IsNeedCer = item.IsNeedCer, + PurchaseSkuId = item.PurchaseSkuId, + CerDTO = item.CerDTO, + IsSetCertificate = item.CerDTO == null ? true : false, + }); + })); + } + + IsNeedBarCode = Need.需要; + IsSetBarCode = true; + IsSetCertificate = true; + if (productSku.Data.PackConfig != null) + { + var config = productSku.Data.PackConfig; + SkuTitle = config.SkuGoodsTitle; + BrandName = config.BrandName; + GoodsNumber = config.GoodsNumber; + PackType = (PackType)config.PackType; + BasicPack = (BasicPack)config.BasicPack; + //MarkMessage = config.MarkMessage; + CertificatePosition = config.CertificatePosition == null ? CertificatePosition.无需合格证 : (CertificatePosition)config.CertificatePosition.Value; + // Increment1 = config.Increment1; + + IsNeedBarCode = config.NeedBar ? Need.需要 : Need.不需要; + IsNeedCertificateModel = config.NeedCer ? Need.需要 : Need.不需要; + + IsSetBarCode = !config.NeedBar; + IsSetCertificate = !config.NeedCer; + + string[] increateDatas = config.Increment1?.Split(','); + bool isSelected = false; + + IncreateList = new ObservableCollection(); + foreach (var item in increates) + { + isSelected = false; + if (increateDatas != null && increateDatas.Count() > 0 && increateDatas.Contains(item)) + { + isSelected = true; + } + App.Current.Dispatcher.Invoke(() => + { + IncreateList.Add(new IncreateModel + { + IncreateName = item, + IsSelected = isSelected + }); + }); + } + + } + + + return true; + } + else + { + + App.Current.Dispatcher.Invoke(() => MessageBox.Show(skuResponse.Msg, "加载sku")); + return false; + } + return true; + //加载配置文件 + } + + //public void SearSpuCer() + //{ + // if (string.IsNullOrEmpty(SpuId)) + // { + // SearchSku(SkuId); + // return; + // } + // SpuId = SpuId.Trim();//去掉空格 避免数据异常 + + + // var productSku = packPurchaseTaskService.GetSpuCer(SpuId); + // if (productSku == null || !productSku.Success) + // { + // IsSetSpuCertificate = true; + + // return; + // } + // SpuCertificateModel = productSku.Data; + // IsSetSpuCertificate = false; + // if (SpuCertificateModel == null) + // { + // SpuCertificateModel = new CertificateModel(); + // IsSetSpuCertificate = true; + // SpuCertificateModel.Brand = Brand; + // SpuCertificateModel.BrandName = BrandName; + // SpuCertificateModel.ProductNo = ProductNo; + // SpuCertificateModel.SpuId = SpuId; + + // } + + + //} + + public Action ReflashWindow { get; set; } + public void InitData() + { + PurchaseSkuList = new ObservableCollection(); + IsSetBarCode = true; + SkuTitle = ""; + BrandName = ""; + GoodsNumber = 0; + PackType = PackType.单件; + BasicPack = BasicPack.快递袋; + SkuPurchaseSchemeId = ""; + SkuTitle = ""; + BarCodeModel = null; + OriginShopName = ""; + + // Availability = (TaskState.)config.Availability; + MarkMessage = ""; + CertificatePosition = CertificatePosition.产品包装; + // Increment1 = config.Increment1; + + IsNeedBarCode = Need.需要; + IsNeedCertificateModel = Need.不需要; + + + bool isSelected; + IncreateList = new ObservableCollection(); + foreach (var item in increates) + { + isSelected = false; + App.Current.Dispatcher.Invoke(() => + { + IncreateList.Add(new IncreateModel + { + IncreateName = item, + IsSelected = isSelected + }); + }); + } + } + private void OpenSkuDetail(object param) + { + var paramList = (object[])param; + // var orderId = paramList[0].ToString(); + var skuId = paramList[0].ToString(); + + + var url = $"https://item.jd.com/{skuId}.html"; + try + { + System.Diagnostics.Process.Start("explorer.exe", url); + } + catch (Exception ex) + { + Clipboard.SetText(url); + MessageBox.Show($"{ex.Message}\r\n调用浏览器失败,网页链接已复制到剪切板,请手动打开浏览器访问", "提示"); + } + + } + private void CreateTask(object obj) + { + + string increateStr = ""; + var increates = IncreateList.Where(i => i.IsSelected).Select(i => i.IncreateName); + if (increates != null && increates.Count() > 0) + { + increateStr = string.Join(",", increates); + } + var createTaskModel = new UpdatePurchaseTaskRequest + { + ProductNo = ProductNo, + Logo = Logo.Replace("200x200", "80x80"), + SkuName = SkuName, + OrderId = OrderId, + BrandName = BrandName, + Availability = (int)Availability, + BasicPack = (int)BasicPack, + SkuId = SkuId, + Increment1 = increateStr, + + CertificatePosition = (int)CertificatePosition, + PackType = (int)PackType, + MarkMessage = MarkMessage, + PositionType = (int)PositionType, + GoodsNumber = GoodsNumber, + SkuGoodsTitle = SkuTitle, + SkuCount = SkuCount, + NeedBar = IsNeedBarCode == Need.需要, + NeedCer = IsNeedCertificateModel == Need.需要, + SkuPurchaseSchemeId = SkuPurchaseSchemeId, + Brand = Brand, + PurchaseSkuSpecs = PurchaseSkuList.Select(p => new PurchaseSkuSpec + { + IsNeedCer = p.IsNeedCer, + PurchaseSkuId = p.PurchaseSkuId, + }).ToArray() + + //IsWorry = IsWorry + }; + if (IsNeedBarCode == Need.需要) + { + if (BarCodeModel == null || IsSetBarCode || BarCodeModel.Id <= 0) + { + MessageBox.Show("请设置条形码模板"); + //new TipsWindow("请设置条形码模板").Show(); + return; + } + createTaskModel.BarCodeId = BarCodeModel.Id; + } + if (IsNeedCertificateModel == Need.需要) + { + + if (purchaseSkuList.Any(p => p.IsNeedCer && p.CerDTO == null)) + { + MessageBox.Show("有未设置的合格证,请设置完所有的合格证再保存"); + return; + } + + var cerList = purchaseSkuList.Where(p => p.IsNeedCer).Select(p => p.CerDTO).Select(c => c.Id).Where(c => c > 0).ToList(); + if (purchaseSkuList.Count() <= 0 || cerList.Count <= 0) + { + MessageBox.Show("请设置合格证模板"); + return; + } + createTaskModel.CerId = string.Join(",", cerList);// + } + ApiResponse res = null; + + res = packPurchaseTaskService.UpdatePurchaseTask(createTaskModel); + + if (res.Success) + { + if (ReflashWindow != null) ReflashWindow();//刷新主界面 + + var win = obj as System.Windows.Window; + win.Close(); + return; + } + + MessageBox.Show(res.Msg); + } + #endregion + } +} diff --git a/BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs b/BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs index fc6eafed..92478d58 100644 --- a/BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs +++ b/BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs @@ -38,6 +38,113 @@ namespace BBWY.Client.ViewModels.PackTask //public RelayCommand SelectCmd => new RelayCommand(str => Growl.Info(str)); #region 属性绑定 + + private ObservableCollection selectExpressList = new ObservableCollection { + "物流单号","物流公司名称" + }; + + public ObservableCollection SelectExpressList { get => selectExpressList; set { Set(ref selectExpressList, value); } } + + + private ObservableCollection selectSkuList = new ObservableCollection { + "SKU","SPU" + }; + + public ObservableCollection SelectSkuList { get => selectSkuList; set { Set(ref selectSkuList, value); } } + + private ObservableCollection selectIdList = new ObservableCollection { + "任务ID","拳探订单号" + }; + + public ObservableCollection SelectIdList { get => selectIdList; set { Set(ref selectIdList, value); } } + + /// + /// 查询物流 + /// + private string selectExpress; + public string SelectExpress + { + get => selectExpress; + + + set + { + Set(ref selectExpress, value); + + OnSelectExpressChanged(SelectExpress); + } + } + + private void OnSelectExpressChanged(string SelectExpress) + { + if (SelectExpress == "物流单号") + { + SearchExpressName = null; + } + if (SelectExpress == "物流公司名称") + { + SearchWayBillNo = null; + } + + } + + + /// + /// 查询物流 + /// + private string selectTaskId= "任务ID"; + public string SelectTaskId + { + get => selectTaskId; + + + set + { + Set(ref selectTaskId, value); + + OnSelectTaskIdChanged(SelectTaskId); + } + } + + private void OnSelectTaskIdChanged(string SelectTaskId) + { + if (SelectTaskId == "任务ID") + { + searchOrderSn = null; + } + if (SelectTaskId == "拳探订单号") + { + SearchTaskId = null; + } + + } + /// + /// 查询sku + /// + private string selectSku; + public string SelectSku + { + get => selectSku; + set + { + Set(ref selectSku, value); + OnSelectSkuChanged(SelectSku); + } + } + private void OnSelectSkuChanged(string SelectSku) + { + if (SelectSku == "SKU") + { + SearchSpuId = null; + } + if (SelectSku == "SPU") + { + SearchSkuId = null; + } + + } + + /// /// 查询时间段 /// @@ -206,6 +313,20 @@ namespace BBWY.Client.ViewModels.PackTask private string searchSkuId; public string SearchSkuId { get => searchSkuId; set { Set(ref searchSkuId, value); } } + /// + /// 查询Spu + /// + private string searchSpuId; + public string SearchSpuId { get => searchSpuId; set { Set(ref searchSpuId, value); } } + + /// + /// 查询拳探订单号 + /// + private string searchOrderSn; + public string SearchOrderSn { get => searchOrderSn; set { Set(ref searchOrderSn, value); } } + + + private TaskState? taskState; /// /// 任务状态 @@ -332,6 +453,9 @@ namespace BBWY.Client.ViewModels.PackTask public GlobalContext globalContext; public WareHouseListViewModel(PackTaskService packTaskService, GlobalContext globalContext, SealBoxService sealBoxService) { + + + this.globalContext = globalContext; this.sealBoxService = sealBoxService; this.packTaskService = packTaskService; @@ -404,6 +528,10 @@ namespace BBWY.Client.ViewModels.PackTask LookLSOrderConfigureCommand = new RelayCommand(LookLSOrderConfigure); SubmitOverTimeMarkMsgCommand = new RelayCommand(SubmitOverTimeMarkMsg); + + + SelectSku = "SKU"; + SelectExpress = "物流单号"; } private void SubmitOverTimeMarkMsg(object param) @@ -414,7 +542,7 @@ namespace BBWY.Client.ViewModels.PackTask var markMsg = paramList[1]?.ToString(); - OverTimeTaskType overTimeTaskType= OverTimeTaskType.待验收; + OverTimeTaskType overTimeTaskType = OverTimeTaskType.待验收; switch (TaskState.Value) { case Models.TaskState.待验收: @@ -1092,7 +1220,7 @@ namespace BBWY.Client.ViewModels.PackTask if (datetime.TotalMilliseconds > 0) { item.IsWaitTransportOverTime = false; - item.WaitTransportRemainTime = OverTimeHelper.GetTimeString(datetime); + item.WaitTransportRemainTime = OverTimeHelper.GetTimeString(datetime); } else { @@ -1245,7 +1373,7 @@ namespace BBWY.Client.ViewModels.PackTask WareName = item.WareName, SealBoxId = item.SealBoxId, SealBoxPackOverTime = item.SealBoxPackOverTime, - SealBoxPackOverTimeMarkMsg = item.SealBoxPackOverTimeMarkMsg + SealBoxPackOverTimeMarkMsg = item.SealBoxPackOverTimeMarkMsg }); })); @@ -1274,7 +1402,7 @@ namespace BBWY.Client.ViewModels.PackTask else { item.IsSealBoxOverTime = true; - item.SealBoxRemainTime = OverTimeHelper.GetTimeString(datetime) ; + item.SealBoxRemainTime = OverTimeHelper.GetTimeString(datetime); } } @@ -1343,7 +1471,7 @@ namespace BBWY.Client.ViewModels.PackTask PackTaskList = new ObservableCollection();//初始化数据 - var datas = packTaskService.GetWareHouseList(SearchWayBillNo, SearchExpressName, SearchDepartment, SearchSkuId, SearchTaskId, this.TaskState, SearchShopName, + var datas = packTaskService.SearchTaskList(SearchWayBillNo, SearchExpressName, SearchDepartment, SearchSkuId, SearchTaskId, SearchSpuId, SearchOrderSn, this.TaskState, SearchShopName, PageIndex, PageSize); if (datas != null && datas.Data != null && datas.Success) { @@ -1367,7 +1495,6 @@ namespace BBWY.Client.ViewModels.PackTask SkuName = item.SkuName, SkuId = item.SkuId } }, - MarkMessage = item.MarkMessage, PackType = (PackType)item.PackType, TaskState = item.TaskState, PositionType = item.PositionType, @@ -1382,9 +1509,11 @@ namespace BBWY.Client.ViewModels.PackTask QualityCompletionOverTime = item.QualityCompletionOverTime, PackCompletionOverTime = item.PackCompletionOverTime, ShopName = item.ShopName, - QualityOverTimeMarkMsg = item.QualityOverTimeMarkMsg, - PackOverTimeMarkMsg = item.PackOverTimeMarkMsg - //ExpressOrderList = item.ExpressOrderList, + QualityOverTimeMarkMsg = item.QualityOverTimeMarkMsg, + PackOverTimeMarkMsg = item.PackOverTimeMarkMsg, + ShowMarkMessage = item.ShowMarkMessage, + SkuPurchaseSchemeId = item.SkuPurchaseSchemeId + }; if (!item.OrderId.IsNullOrEmpty() && !item.SkuId.IsNullOrEmpty()) @@ -1410,6 +1539,8 @@ namespace BBWY.Client.ViewModels.PackTask { data.BarCodeModel = item.BarCodeDTO; + if (data.BarCodeModel.LabelModel == BarcodeLabelModel.无型号模板) + data.BarCodeModel.LabelModel = BarcodeLabelModel.精简模板; } if (item.Cers != null) diff --git a/BBWY.Client/ViewModels/QualityTask/QualityViewModel.cs b/BBWY.Client/ViewModels/QualityTask/QualityViewModel.cs index 343430d9..6a0c9190 100644 --- a/BBWY.Client/ViewModels/QualityTask/QualityViewModel.cs +++ b/BBWY.Client/ViewModels/QualityTask/QualityViewModel.cs @@ -21,6 +21,8 @@ using System.Runtime.InteropServices.WindowsRuntime; using NPOI.Util; using BBWY.Controls; using WebSocketSharp; +using BBWY.Client.APIServices.QiKu; +using BarcodeLib; namespace BBWY.Client.ViewModels { @@ -105,47 +107,6 @@ namespace BBWY.Client.ViewModels }; public ObservableCollection FloorDragNumberList { get => floorDragNumberList; set { Set(ref floorDragNumberList, value); } } - - - - //private ObservableCollection preCompeteTimeDayList = new ObservableCollection - //{ - - //}; - //public ObservableCollection PreCompeteTimeDayList - //{ - // get => preCompeteTimeDayList; set - // { - - // Set(ref preCompeteTimeDayList, value); - - // } - //} - - - //private ObservableCollection preCompeteTimeHourList = new ObservableCollection { - - // }; - //public ObservableCollection PreCompeteTimeHourList { get => preCompeteTimeHourList; set { Set(ref preCompeteTimeHourList, value); } } - - //// - //public string preCompeteTimeDay; - //public string PreCompeteTimeDay - //{ - // get => preCompeteTimeDay; set - // { - - // Set(ref preCompeteTimeDay, value); - // PreCompeteTimeDayOnChanged();// - // } - //} - - - - //public string preCompeteTimeHour; - //public string PreCompeteTimeHour { get => preCompeteTimeHour; set { Set(ref preCompeteTimeHour, value); } } - - private ObservableCollection wareHourseList = new ObservableCollection { }; public ObservableCollection WareHourseList { get => wareHourseList; set { Set(ref wareHourseList, value); } } @@ -359,6 +320,15 @@ namespace BBWY.Client.ViewModels public string MarkMessage { get => markMessage; set { Set(ref markMessage, value); } } + /// + /// 注意事项(对接备注) + /// + private string showMarkMessage; + /// + /// 注意事项(对接备注) + /// + public string ShowMarkMessage { get => showMarkMessage; set { Set(ref showMarkMessage, value); } } + private ObservableCollection increateList; /// /// 增量耗材查询关键字 @@ -394,7 +364,7 @@ namespace BBWY.Client.ViewModels public ICommand SearchSkuCommand { get; set; } #endregion - public QualityViewModel(ProductService productService, GlobalContext globalContext, PackPurchaseTaskService packPurchaseTaskService, PurchaseService purchaseService, PackTaskService packTaskService) + public QualityViewModel(ProductService productService, GlobalContext globalContext, PackPurchaseTaskService packPurchaseTaskService, PurchaseService purchaseService, PackTaskService packTaskService, MarkMessageService markMessageService) { this.packPurchaseTaskService = packPurchaseTaskService; this.productService = productService; @@ -418,7 +388,7 @@ namespace BBWY.Client.ViewModels this.purchaseService = purchaseService; this.packTaskService = packTaskService; - + this.markMessageService = markMessageService; } @@ -498,80 +468,6 @@ namespace BBWY.Client.ViewModels request.CerId = string.Join(",", PurchaseSkuList.Where(p => p.IsNeedCer && p.CerDTO.Id > 0).Select(p => p.CerDTO.Id)); } - - //int hour = Convert.ToInt32(PreCompeteTimeHour.Replace("点前", "")); - - - //DateTime date = DateTime.Now; - - //switch (preCompeteTimeDay) - //{ - // case "今天": - // date = DateTime.Now; - // break; - // case "明天": - // date = DateTime.Now.AddDays(1); - // break; - // case "后天": - // date = DateTime.Now.AddDays(2); - // break; - // default: - // break; - //} - - ////date = Convert.ToDateTime(PreCompeteTimeDay); - - - //var competeTime = date.Date.AddHours(hour); - - - - //if (competeTime < DateTime.Now) - //{ - // MessageBox.Show($"预计完成时间不能小于当前时间,请重新选择预计完成时间"); - // return; - //} - - - //var now = DateTime.Now; - //if (now.Hour < 12) - //{ - // if (competeTime > now.AddDays(1).Date.AddHours(12)) - // { - // MessageBox.Show($"预计完成时间不能超过明天12点,请重新选择预计完成时间"); - // return; - // } - - - //} - //else if (now.Hour < 18) - //{ - // if (competeTime > now.AddDays(1).Date.AddHours(18)) - // { - // MessageBox.Show($"预计完成时间不能超过明天18点,请重新选择预计完成时间"); - // return; - // } - //} - //else if (now.Hour < 22) - //{ - // if (competeTime > now.AddDays(1).Date.AddHours(22)) - // { - // MessageBox.Show($"预计完成时间不能超过明天22点,请重新选择预计完成时间"); - // return; - // } - //} - //else - //{ - // if (competeTime > now.AddDays(2).Date.AddHours(12)) - // { - // MessageBox.Show($"预计完成时间不能超过后天12点,请重新选择预计完成时间"); - // return; - // } - //} - - //request.PreCompeteTime = competeTime; - - try { var competeRes = packPurchaseTaskService.CompeteQualityTask(request); @@ -588,10 +484,10 @@ namespace BBWY.Client.ViewModels BatchPrintWindow batchPrint = new BatchPrintWindow(); - if (BarCodeModel!=null) - { - BarCodeModel.ShopName = OriginShopName; - } + //if (BarCodeModel!=null) + //{ + // BarCodeModel.ShopName = OriginShopName; + //} batchPrint.SetData(GoodProductQuantity, PurchaseSkuList.Where(p => p.IsNeedCer && p.CerDTO.Id > 0).Select(p => p.CerDTO).ToArray() , BarCodeModel); @@ -615,94 +511,6 @@ namespace BBWY.Client.ViewModels } - //// "12点前","18点前","22点前" - //private void PreCompeteTimeDayOnChanged() - //{ - // var now = DateTime.Now; - // if (now.Hour < 12) - // { - // if (PreCompeteTimeDay=="今天") - // { - // PreCompeteTimeHourList.Clear(); - // PreCompeteTimeHourList.Add("12点前"); - // PreCompeteTimeHourList.Add("18点前"); - // PreCompeteTimeHourList.Add("22点前"); - // PreCompeteTimeHour = "12点前"; - // } - - - // if (PreCompeteTimeDay == "明天") - // { - // PreCompeteTimeHourList.Clear(); - // PreCompeteTimeHourList.Add("12点前"); - // PreCompeteTimeHour = "12点前"; - // } - - - // } - // else if (now.Hour < 18) - // { - // if (PreCompeteTimeDay == "今天") - // { - // PreCompeteTimeHourList.Clear(); - // PreCompeteTimeHourList.Add("18点前"); - // PreCompeteTimeHourList.Add("22点前"); - - // PreCompeteTimeHour = "18点前"; - // } - - - // if (PreCompeteTimeDay == "明天") - // { - // PreCompeteTimeHourList.Clear(); - // PreCompeteTimeHourList.Add("12点前"); - // PreCompeteTimeHourList.Add("18点前"); - // PreCompeteTimeHour = "12点前"; - // } - // } - // else if (now.Hour < 22) - // { - // if (PreCompeteTimeDay == "今天") - // { - // PreCompeteTimeHourList.Clear(); - // PreCompeteTimeHourList.Add("22点前"); - // PreCompeteTimeHour = "22点前"; - // } - - - // if (PreCompeteTimeDay == "明天") - // { - // PreCompeteTimeHourList.Clear(); - // PreCompeteTimeHourList.Add("12点前"); - // PreCompeteTimeHourList.Add("18点前"); - // PreCompeteTimeHourList.Add("22点前"); - // PreCompeteTimeHour = "12点前"; - // } - // } - // else - // { - // if (PreCompeteTimeDay == "明天") - // { - // PreCompeteTimeHourList.Clear(); - // PreCompeteTimeHourList.Add("12点前"); - // PreCompeteTimeHourList.Add("18点前"); - // PreCompeteTimeHourList.Add("22点前"); - // PreCompeteTimeHour = "12点前"; - // } - - // if (PreCompeteTimeDay == "后天") - // { - // PreCompeteTimeHourList.Clear(); - // PreCompeteTimeHourList.Add("12点前"); - // PreCompeteTimeHour = "12点前"; - // } - // } - - - - - - //} private void SetBarCode() @@ -714,19 +522,18 @@ namespace BBWY.Client.ViewModels if (BarCodeModel == null) { var resCode = packPurchaseTaskService.SearchBarCode(SkuId); - if (resCode == null||!resCode.Success) + if (resCode == null || !resCode.Success) { BarCodeModel = new BarCodeModel(); BarCodeModel.ProductNo = ProductNo; BarCodeModel.Brand = Brand; BarCodeModel.SkuId = SkuId; BarCodeModel.SkuName = SkuName; + BarCodeModel.ShopName = OriginShopName; } else { - - BarCodeModel = resCode.Data; - + BarCodeModel = resCode.Data; } } @@ -806,7 +613,7 @@ namespace BBWY.Client.ViewModels look.Show(); } - + MarkMessageService markMessageService; SaveType? saveType; /// @@ -814,8 +621,25 @@ namespace BBWY.Client.ViewModels /// public void SearchSku(PackTaskModel model) { + + OriginShopName = model.ShopName; - InitData(); + + FloorDragNumber = 0; + PurchaseSkuList = new ObservableCollection(); + WareHourseList = new ObservableCollection(); + + FloorDragNumberList = new ObservableCollection(); + + for (int i = 0; i < 30; i++) + { + App.Current.Dispatcher.Invoke((Action)(() => + { + + FloorDragNumberList.Add(i + 1); + })); + + } TaskId = model.TaskId; OrderId = model.OrderId; SkuId = model.SkuId; @@ -825,15 +649,11 @@ namespace BBWY.Client.ViewModels SkuCount = model.SkuCount; Brand = model.Brand; ProductNo = model.ProductNo; - MarkMessage = model.MarkMessage; PackType = model.PackType; GoodsNumber = model.GoodsNumber; SkuTitle = model.SkuTitle; BasicPack = model.BasicPack; CertificatePosition = model.CertificatePosition; - - - ArrivalQuantity = 0; GoodProductQuantity = 0; @@ -859,195 +679,145 @@ namespace BBWY.Client.ViewModels } - var packTaskRes = packPurchaseTaskService.GetQualityTask(model.TaskId); - - if (packTaskRes == null) - { - MessageBox.Show("网络异常!"); - return; - } - if (!packTaskRes.Success || packTaskRes.Data == null) + Task.Factory.StartNew(() => { - MessageBox.Show(packTaskRes.Msg); - return; - } + var resShow = markMessageService.ShowTaskMarkMessage(TaskId); + if (resShow != null && resShow.Success && resShow.Data != null) + { + ShowMarkMessage = string.Join("\r\n", resShow.Data.Select(d => d.ToString())); + } + var packTaskRes = packPurchaseTaskService.GetQualityTask(model.TaskId); - SkuPurchaseSchemeId = packTaskRes.Data.SkuPurchaseSchemeId; - saveType = packTaskRes.Data.SaveType; - if (saveType == null) - { - saveType = OrderId.IsNullOrEmpty() ? SaveType.C端 : SaveType.B端; - } - if (packTaskRes == null || !packTaskRes.Success) return; - BarCodeModel = packTaskRes.Data.BarCodeDTO; - IsNeedBarCode = packTaskRes.Data.IsNeedBar ? Need.需要 : Need.不需要; - IsSetBarCode = packTaskRes.Data.BarCodeDTO == null ? true : false; - IsNeedCertificateModel = packTaskRes.Data.IsNeedCer ? Need.需要 : Need.不需要; - if (packTaskRes.Data.WareHourses != null) - packTaskRes.Data.WareHourses.ToList().ForEach(w => + if (packTaskRes == null) { - WareHourseList.Add(w); - }); - WareHourseCount = WareHourseList.Count(); - if (packTaskRes.Data.PurchaseSkus != null) - { - - int goodsIndex = 0; - foreach (var item in packTaskRes.Data.PurchaseSkus) + MessageBox.Show("网络异常!"); + return; + } + if (!packTaskRes.Success || packTaskRes.Data == null) { - goodsIndex++; - if (item.CerDTO != null) item.CerDTO.GoodsNumberIndex = goodsIndex; - item.IsSetCertificate = true; - if (string.IsNullOrEmpty(item.PurchaseProductId)) - { - PurchaseSkuList.Add(item); continue; - } + MessageBox.Show(packTaskRes.Msg); + return; + } - var list = purchaseService.GetPurchaseSkuBasicInfo(item.PurchaseProductId); - if (list == null && !list.Success) - { - PurchaseSkuList.Add(item); continue; - } - PurchaseSkuItemBasicInfoResponse skuItem = null; - if (list.Data != null) skuItem = list.Data.ItemList.FirstOrDefault(f => f.PurchaseSkuId == item.PurchaseSkuId); - App.Current.Dispatcher.Invoke(new Action(() => + SkuPurchaseSchemeId = packTaskRes.Data.SkuPurchaseSchemeId; + saveType = packTaskRes.Data.SaveType; + if (saveType == null) + { + saveType = OrderId.IsNullOrEmpty() ? SaveType.C端 : SaveType.B端; + } + if (packTaskRes == null || !packTaskRes.Success) return; + BarCodeModel = packTaskRes.Data.BarCodeDTO; + IsNeedBarCode = packTaskRes.Data.IsNeedBar ? Need.需要 : Need.不需要; + IsSetBarCode = packTaskRes.Data.BarCodeDTO == null ? true : false; + IsNeedCertificateModel = packTaskRes.Data.IsNeedCer ? Need.需要 : Need.不需要; + if (packTaskRes.Data.WareHourses != null) + packTaskRes.Data.WareHourses.ToList().ForEach(w => { - PurchaseSkuList.Add(new PurchaseSku + App.Current.Dispatcher.Invoke(new Action(() => { - Logo = skuItem?.Logo, - Title = skuItem?.Title, - IsNeedCer = item.IsNeedCer, - PurchaseSkuId = item.PurchaseSkuId, - CerDTO = item.CerDTO, - IsSetCertificate = item.IsNeedCer, - }); - })); - //PurchaseSkuList.Add(item); - } - } - - - if (BarCodeModel==null) - { - //加载品牌品名数据 - var shopList = globalContext.User.ShopList; - var shop = shopList.FirstOrDefault(s => s.ShopName == model.ShopName); - if (shop != null) + WareHourseList.Add(w); + })); + + }); + WareHourseCount = WareHourseList.Count(); + if (packTaskRes.Data.PurchaseSkus != null) { - var skuResponse = productService.GetProductSkuList(string.Empty, SkuId, shop.Platform, shop.AppKey, shop.AppSecret, shop.AppToken); - if (skuResponse.Success) + int goodsIndex = 0; + foreach (var item in packTaskRes.Data.PurchaseSkus) { - if (skuResponse.Data.Count == 0) + goodsIndex++; + if (item.CerDTO != null) item.CerDTO.GoodsNumberIndex = goodsIndex; + item.IsSetCertificate = true; + if (string.IsNullOrEmpty(item.PurchaseProductId)) { - return; + App.Current.Dispatcher.Invoke(new Action(() => + { + PurchaseSkuList.Add(item); + })); + continue; } - Logo = skuResponse.Data[0].Logo.Replace("80x80", "200x200"); - SkuName = skuResponse.Data[0].Title; - SpuId = skuResponse.Data[0].ProductId; - var productApiResponse = productService.GetProductList(skuResponse.Data[0].ProductId, string.Empty, string.Empty, 1, - shop.Platform, shop.AppKey, shop.AppSecret, shop.AppToken); - if (productApiResponse.Success) + + var list = purchaseService.GetPurchaseSkuBasicInfo(item.PurchaseProductId); + if (list == null && !list.Success) { - if (productApiResponse.Data.Count == 0) + App.Current.Dispatcher.Invoke(new Action(() => { - return; - } + PurchaseSkuList.Add(item); + })); + continue; + } + PurchaseSkuItemBasicInfoResponse skuItem = null; + if (list.Data != null) skuItem = list.Data.ItemList.FirstOrDefault(f => f.PurchaseSkuId == item.PurchaseSkuId); - ProductNo = productApiResponse.Data.Items[0].ProductItemNum; - Brand = productApiResponse.Data.Items[0].BrandName; - } - + App.Current.Dispatcher.Invoke(new Action(() => + { + PurchaseSkuList.Add(new PurchaseSku + { + Logo = skuItem?.Logo, + Title = skuItem?.Title, + IsNeedCer = item.IsNeedCer, + PurchaseSkuId = item.PurchaseSkuId, + CerDTO = item.CerDTO, + IsSetCertificate = item.IsNeedCer, + }); + })); + //PurchaseSkuList.Add(item); } - else + } + if (BarCodeModel == null) + { + //加载品牌品名数据 + var shopList = globalContext.User.ShopList; + var shop = shopList.FirstOrDefault(s => s.ShopName == model.ShopName); + if (shop != null) { - App.Current.Dispatcher.Invoke(() => MessageBox.Show(skuResponse.Msg, "加载sku")); - return; - } + var skuResponse = productService.GetProductSkuList(string.Empty, SkuId, shop.Platform, shop.AppKey, shop.AppSecret, shop.AppToken); + if (skuResponse.Success) + { + if (skuResponse.Data.Count == 0) + { + return; + } + Logo = skuResponse.Data[0].Logo.Replace("80x80", "200x200"); + SkuName = skuResponse.Data[0].Title; + SpuId = skuResponse.Data[0].ProductId; + var productApiResponse = productService.GetProductList(skuResponse.Data[0].ProductId, string.Empty, string.Empty, 1, + shop.Platform, shop.AppKey, shop.AppSecret, shop.AppToken); + if (productApiResponse.Success) + { + if (productApiResponse.Data.Count == 0) + { + return; + } - } - } + ProductNo = productApiResponse.Data.Items[0].ProductItemNum; + Brand = productApiResponse.Data.Items[0].BrandName; + } + } + else + { + App.Current.Dispatcher.Invoke(() => MessageBox.Show(skuResponse.Msg, "加载sku")); + return; + } + } + } + }); } public Action ReflashWindow { get; set; } - public void InitData() - { - FloorDragNumber = 0; - PurchaseSkuList = new ObservableCollection(); - WareHourseList = new ObservableCollection(); - //PreCompeteTimeDayList = new ObservableCollection(); - FloorDragNumberList = new ObservableCollection(); - - for (int i = 0; i < 30; i++) - { - App.Current.Dispatcher.Invoke((Action)(() => - { - - FloorDragNumberList.Add(i + 1); - })); - - } - - //var nowTime = DateTime.Now; - //var hour = nowTime.Hour; - - - - //if (hour < 12) - //{ - // PreCompeteTimeDayList.Add("今天"); - // PreCompeteTimeDayList.Add("明天"); - - // PreCompeteTimeDay = "今天"; - - //} - //else if (hour < 18) - //{ - // PreCompeteTimeDayList.Add("今天"); - // PreCompeteTimeDayList.Add("明天"); - // PreCompeteTimeDay = "今天"; - - //} - //else if (hour < 22) - //{ - // PreCompeteTimeDayList.Add("今天"); - // PreCompeteTimeDayList.Add("明天"); - // PreCompeteTimeDay = "今天"; - - //} - //else - //{ - // PreCompeteTimeDayList.Add("明天"); - // PreCompeteTimeDayList.Add("后天"); - // PreCompeteTimeDay = "明天"; - //} - - - - - - IsSetBarCode = true; - SkuTitle = ""; - BrandName = ""; - GoodsNumber = 0; - PackType = PackType.单件; - BasicPack = BasicPack.快递袋; - CertificatePosition = CertificatePosition.无需合格证; - IsNeedBarCode = Need.需要; - IsNeedCertificateModel = Need.不需要; - } private void OpenSkuDetail(object param) { diff --git a/BBWY.Client/ViewModels/ViewModelLocator.cs b/BBWY.Client/ViewModels/ViewModelLocator.cs index 9d503d99..530defa4 100644 --- a/BBWY.Client/ViewModels/ViewModelLocator.cs +++ b/BBWY.Client/ViewModels/ViewModelLocator.cs @@ -337,6 +337,17 @@ namespace BBWY.Client.ViewModels } } + + public UpdatePurchaseTaskViewModel UpdatePurchaseTask + { + get + { + using var s = sp.CreateScope(); + return s.ServiceProvider.GetRequiredService(); + } + } + + //public ShopSealBoxListViewModel ShopSealBoxListVM //{ // get diff --git a/BBWY.Client/Views/FallWare/WareFallWareListControl.xaml b/BBWY.Client/Views/FallWare/WareFallWareListControl.xaml index 02e0bebe..d1b82ed4 100644 --- a/BBWY.Client/Views/FallWare/WareFallWareListControl.xaml +++ b/BBWY.Client/Views/FallWare/WareFallWareListControl.xaml @@ -124,7 +124,7 @@ - diff --git a/BBWY.Client/Views/PackTask/BarcodeControl.xaml b/BBWY.Client/Views/PackTask/BarcodeControl.xaml index eaf5ef5f..a34df80e 100644 --- a/BBWY.Client/Views/PackTask/BarcodeControl.xaml +++ b/BBWY.Client/Views/PackTask/BarcodeControl.xaml @@ -9,28 +9,27 @@ - - + + - + - + - + - + + + + + - + - - - - - @@ -43,6 +42,10 @@ + + + + @@ -51,10 +54,7 @@ - - - - + @@ -63,6 +63,10 @@ + + + + diff --git a/BBWY.Client/Views/PackTask/PublishTaskWindow.xaml b/BBWY.Client/Views/PackTask/PublishTaskWindow.xaml index 61300bf2..deb92a5b 100644 --- a/BBWY.Client/Views/PackTask/PublishTaskWindow.xaml +++ b/BBWY.Client/Views/PackTask/PublishTaskWindow.xaml @@ -34,7 +34,7 @@ - + @@ -121,8 +121,8 @@ - - + + @@ -141,25 +141,23 @@ - + - - - - - - - - - + + + + + + + + + @@ -235,7 +233,7 @@ - + @@ -243,7 +241,10 @@ @@ -252,6 +253,26 @@ + + + + + + + + + + + + + + + diff --git a/BBWY.Client/Views/PackTask/PublishTaskWindow.xaml.cs b/BBWY.Client/Views/PackTask/PublishTaskWindow.xaml.cs index d662157c..274420fc 100644 --- a/BBWY.Client/Views/PackTask/PublishTaskWindow.xaml.cs +++ b/BBWY.Client/Views/PackTask/PublishTaskWindow.xaml.cs @@ -12,6 +12,7 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; +using WebSocketSharp; namespace BBWY.Client.Views.PackTask { @@ -20,15 +21,34 @@ namespace BBWY.Client.Views.PackTask /// public partial class PublishTaskWindow : BWindow { - public PublishTaskWindow(Action ReflashTask, PackTaskModel model = null) + public PublishTaskWindow(Action ReflashTask, PackTaskModel model = null,SaveType saveType= SaveType.C端) { InitializeComponent(); var publicTaskViewModel = (PublishTaskViewModel)this.DataContext; + publicTaskViewModel.SaveType = saveType; if (publicTaskViewModel.ReflashWindow == null) publicTaskViewModel.ReflashWindow = ReflashTask; publicTaskViewModel.InitData(model); } + + private void BButton_Click(object sender, RoutedEventArgs e) + { + try + { + if (btn_showMarkMessage != null && !btn_showMarkMessage.Text.IsNullOrEmpty()) + { + btn_showMarkMessage.ScrollToEnd(); + } + } + catch + { + + + } + + + } } } diff --git a/BBWY.Client/Views/PackTask/SetBarCode.xaml b/BBWY.Client/Views/PackTask/SetBarCode.xaml index 8dc050ee..48cc8274 100644 --- a/BBWY.Client/Views/PackTask/SetBarCode.xaml +++ b/BBWY.Client/Views/PackTask/SetBarCode.xaml @@ -8,7 +8,7 @@ mc:Ignorable="d" Style="{StaticResource bwstyle}" xmlns:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls" - Height="651" Width="577" + Height="380" Width="577" xmlns:b="http://schemas.microsoft.com/xaml/behaviors" xmlns:ctr="clr-namespace:BBWY.Client.Converters" xmlns:cmodel="clr-namespace:BBWY.Client.Models" @@ -31,49 +31,44 @@ - - - - + - - + + - + + + - + - + - + - + + + + + - + - - - - - - - - - + @@ -86,6 +81,10 @@ + + + + @@ -99,15 +98,12 @@ - - + diff --git a/BBWY.Client/Views/PackTask/SetBarCode.xaml.cs b/BBWY.Client/Views/PackTask/SetBarCode.xaml.cs index cea59e15..323d1b2d 100644 --- a/BBWY.Client/Views/PackTask/SetBarCode.xaml.cs +++ b/BBWY.Client/Views/PackTask/SetBarCode.xaml.cs @@ -60,7 +60,8 @@ namespace BBWY.Client.Views.PackTask ProductNo = BarCodeModel.ProductNo, SkuId = BarCodeModel.SkuId, SkuName = BarCodeModel.SkuName, - LabelModel = BarCodeModel.LabelModel + LabelModel = BarCodeModel.LabelModel, + ShopName = BarCodeModel.ShopName, }); if (resData == null) diff --git a/BBWY.Client/Views/PackTask/SetCerWindow.xaml b/BBWY.Client/Views/PackTask/SetCerWindow.xaml index 188a1a20..95af9541 100644 --- a/BBWY.Client/Views/PackTask/SetCerWindow.xaml +++ b/BBWY.Client/Views/PackTask/SetCerWindow.xaml @@ -51,7 +51,7 @@ - + @@ -63,7 +63,7 @@ - + diff --git a/BBWY.Client/Views/PackTask/SetCerWindow.xaml.cs b/BBWY.Client/Views/PackTask/SetCerWindow.xaml.cs index d839e257..87bf3c88 100644 --- a/BBWY.Client/Views/PackTask/SetCerWindow.xaml.cs +++ b/BBWY.Client/Views/PackTask/SetCerWindow.xaml.cs @@ -33,7 +33,7 @@ namespace BBWY.Client.Views.PackTask InitializeComponent(); } - public void LoadData(CertificateModel[] CertificateModel, PackTaskService packTaskService, CertificateModel SpuCertificateModel, bool IsSetSpuCertificate) + public void LoadData(CertificateModel[] CertificateModel, PackTaskService packTaskService, CertificateModel SpuCertificateModel, bool IsSetSpuCertificate,SaveType saveType) { this.CertificateModel = CertificateModel.Copy(); this.SpuCertificateModel = SpuCertificateModel.Copy(); @@ -51,9 +51,12 @@ namespace BBWY.Client.Views.PackTask }); } + this. saveType = saveType; this.DataContext = this; } + + public SaveType saveType; public bool IsSetSpuCertificate { get; set; } public PackTaskService packTaskService { get; set; } public CertificateModel[] CertificateModel { get; set; } @@ -114,7 +117,7 @@ namespace BBWY.Client.Views.PackTask ApplyAge = item.CertificateModel.ApplyAge, GoodsNumber = item.CertificateModel.GoodsNumber, ProduceDate = item.CertificateModel.ProduceDate, - SaveType = SaveType.C端, + SaveType = saveType, }); @@ -187,33 +190,77 @@ namespace BBWY.Client.Views.PackTask cer.CertificateModel.ProductShop = SpuCertificateModel.ProductShop; cer.CertificateModel.ApplyAge = SpuCertificateModel.ApplyAge; cer.CertificateModel.ProduceDate = SpuCertificateModel.ProduceDate; + } private void add_goodsnum_Click(object sender, RoutedEventArgs e) { - int num = 0; - p: - num++; - int goodsNumber = num; - var gncer = GoodsNumberCerList.SingleOrDefault(g => g.CertificateModel.GoodsNumber == goodsNumber); - if (gncer != null) goto p; - GoodsNumberCerList.Add(new GoodsNumberCer + + if (saveType== SaveType.C端) { - CertificateModel = new CertificateModel + int num = 0; + p: + num++; + int goodsNumber = num; + var gncer = GoodsNumberCerList.SingleOrDefault(g => g.CertificateModel.GoodsNumber == goodsNumber); + if (gncer != null) goto p; + GoodsNumberCerList.Add(new GoodsNumberCer { - GoodsNumber = goodsNumber, - BrandName = CertificateModel[0].BrandName, - Brand = CertificateModel[0].Brand, - SkuId = CertificateModel[0].SkuId, - ProductNo = CertificateModel[0].ProductNo, - SpuId = CertificateModel[0].SkuId, + CertificateModel = new CertificateModel + { + GoodsNumber = goodsNumber, + BrandName = CertificateModel[0].BrandName, + Brand = CertificateModel[0].Brand, + SkuId = CertificateModel[0].SkuId, + ProductNo = CertificateModel[0].ProductNo, + SpuId = CertificateModel[0].SkuId, + GoodsNumberIndex = GoodsNumberCerList.Count + 1 + + } + }); + tab.SelectedIndex = GoodsNumberCerList.Count - 1; + this.UpdateLayout(); + } + + if (saveType == SaveType.B端) + { + + p: + + long goodsNumber = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); + var gncer = GoodsNumberCerList.SingleOrDefault(g => g.CertificateModel.GoodsNumber == goodsNumber); + if (gncer != null) goto p; + GoodsNumberCerList.Add(new GoodsNumberCer + { + CertificateModel = new CertificateModel + { + GoodsNumber = goodsNumber, + BrandName = CertificateModel[0].BrandName, + Brand = CertificateModel[0].Brand, + SkuId = CertificateModel[0].SkuId, + ProductNo = CertificateModel[0].ProductNo, + SpuId = CertificateModel[0].SkuId, + + + } + }); + + int index = 0; + foreach (var item in GoodsNumberCerList) + { + index++; + + item.CertificateModel.GoodsNumberIndex = index; } - }); - tab.SelectedIndex = GoodsNumberCerList.Count - 1; - this.UpdateLayout(); + + tab.SelectedIndex = GoodsNumberCerList.Count - 1; + + this.UpdateLayout(); + } + } @@ -227,7 +274,24 @@ namespace BBWY.Client.Views.PackTask if (select != null) selectCer = select.CertificateModel.GoodsNumber; } + try + { + int index = 0; + foreach (var item in GoodsNumberCerList) + { + index++; + item.CertificateModel.GoodsNumberIndex = index; + } + } + catch (Exception) + { + + + } } + + + } public class GoodsNumberCer diff --git a/BBWY.Client/Views/PackTask/ShopWaitPackageControl.xaml b/BBWY.Client/Views/PackTask/ShopWaitPackageControl.xaml index 9d346f7b..d0238fc5 100644 --- a/BBWY.Client/Views/PackTask/ShopWaitPackageControl.xaml +++ b/BBWY.Client/Views/PackTask/ShopWaitPackageControl.xaml @@ -47,10 +47,11 @@ - - - - + + + + + + + + + + + + diff --git a/BBWY.Client/Views/PackTask/TaskList.xaml b/BBWY.Client/Views/PackTask/TaskList.xaml index a990f555..6b74ef48 100644 --- a/BBWY.Client/Views/PackTask/TaskList.xaml +++ b/BBWY.Client/Views/PackTask/TaskList.xaml @@ -48,10 +48,6 @@ - - - - @@ -126,7 +122,7 @@ /> - + @@ -141,9 +137,25 @@ --> + + + + + + + + + + + +