From b0dbb0e0cc4b18b906dfc328289571dd52439afc Mon Sep 17 00:00:00 2001 From: "506583276@qq.com" <506583276@qq.com> Date: Wed, 17 May 2023 23:20:43 +0800 Subject: [PATCH] 1 --- .../APIServices/PackPurchaseTaskService.cs | 123 +++ BBWYB.Client/APIServices/ProductService.cs | 40 + BBWYB.Client/APIServices/PurchaseService.cs | 14 + BBWYB.Client/APIServices/ShopService.cs | 14 + BBWYB.Client/App.xaml | 1 + BBWYB.Client/App.xaml.cs | 2 + BBWYB.Client/BBWYB.Client.csproj | 8 +- BBWYB.Client/GlobalContext.cs | 2 + .../PackPurchaseTask/BarCodeRequest.cs | 43 + .../Request/PackPurchaseTask/CerRequest.cs | 79 ++ .../UpdatePurchaseTaskRequest.cs | 141 ++++ .../APIModel/Response/Order/OrderResponse.cs | 3 + .../PackPurchaseTask/ConfigPackResponse.cs | 101 +++ .../PackPurchaseTask/ProductSkuResponse.cs | 136 ++++ .../APIModel/Response/PurchaseSkuResponse.cs | 59 ++ BBWYB.Client/Models/Enums.cs | 112 ++- BBWYB.Client/Models/Order/Order.cs | 6 +- .../Models/PackPurchaseTask/BarCodeModel.cs | 70 ++ .../PackPurchaseTask/CertificateModel.cs | 162 ++++ .../Models/PackPurchaseTask/IncreateModel.cs | 23 + .../Models/PackPurchaseTask/PurchaseSku.cs | 68 ++ BBWYB.Client/Models/Product/Product.cs | 6 + BBWYB.Client/Models/Product/ProductSku.cs | 2 + BBWYB.Client/Resources/Images/3c.png | Bin 0 -> 92486 bytes BBWYB.Client/Resources/Images/barcode.png | Bin 0 -> 2861 bytes BBWYB.Client/Resources/Themes/Color.xaml | 1 + BBWYB.Client/ViewModels/MainViewModel.cs | 21 +- .../ViewModels/Order/OrderViewModel.cs | 19 +- .../UpdatePurchaseTaskViewModel.cs | 753 ++++++++++++++++++ BBWYB.Client/ViewModels/ViewModelLocator.cs | 12 +- BBWYB.Client/Views/Order/OrderList.xaml | 76 +- .../Views/PackPurchaseTask/CerControl.xaml | 162 ++++ .../Views/PackPurchaseTask/CerControl.xaml.cs | 47 ++ .../PackPurchaseTask/LookBarCodeWindow.xaml | 102 +++ .../LookBarCodeWindow.xaml.cs | 33 + .../Views/PackPurchaseTask/LookCerWindow.xaml | 35 + .../PackPurchaseTask/LookCerWindow.xaml.cs | 37 + .../PackPurchaseTask/SetBarCodeWindow.xaml | 139 ++++ .../PackPurchaseTask/SetBarCodeWindow.xaml.cs | 96 +++ .../Views/PackPurchaseTask/SetCerControl.xaml | 184 +++++ .../PackPurchaseTask/SetCerControl.xaml.cs | 82 ++ .../Views/PackPurchaseTask/SetCerWindow.xaml | 62 ++ .../PackPurchaseTask/SetCerWindow.xaml.cs | 139 ++++ .../Views/PackPurchaseTask/TipsWindow.xaml | 38 + .../Views/PackPurchaseTask/TipsWindow.xaml.cs | 47 ++ .../UpdatePurchaseTaskWindow.xaml | 350 ++++++++ .../UpdatePurchaseTaskWindow.xaml.cs | 37 + BBWYB.Client/appsettings.json | 10 +- .../Controllers/OrderController.cs | 2 + .../Properties/launchSettings.json | 2 +- BBWYB.Server.Business/Order/OrderBusiness.cs | 9 +- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 3 +- BBWYB.Server.Model/Db/Order/Order.cs | 6 +- .../OrderPurchaseRelationInfo.cs | 40 + .../Db/PurchaseScheme/PurchaseScheme.cs | 4 +- .../Dto/Request/Order/QueryOrderRequest.cs | 2 + .../Dto/Response/Order/OrderResponse.cs | 5 + .../PurchaseScheme/PurchaseSchemeResponse.cs | 6 +- BBWYB.Server.Model/Enums.cs | 9 +- 59 files changed, 3759 insertions(+), 26 deletions(-) create mode 100644 BBWYB.Client/APIServices/PackPurchaseTaskService.cs create mode 100644 BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/BarCodeRequest.cs create mode 100644 BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/CerRequest.cs create mode 100644 BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/UpdatePurchaseTaskRequest.cs create mode 100644 BBWYB.Client/Models/APIModel/Response/PackPurchaseTask/ConfigPackResponse.cs create mode 100644 BBWYB.Client/Models/APIModel/Response/PackPurchaseTask/ProductSkuResponse.cs create mode 100644 BBWYB.Client/Models/APIModel/Response/PurchaseSkuResponse.cs create mode 100644 BBWYB.Client/Models/PackPurchaseTask/BarCodeModel.cs create mode 100644 BBWYB.Client/Models/PackPurchaseTask/CertificateModel.cs create mode 100644 BBWYB.Client/Models/PackPurchaseTask/IncreateModel.cs create mode 100644 BBWYB.Client/Models/PackPurchaseTask/PurchaseSku.cs create mode 100644 BBWYB.Client/Resources/Images/3c.png create mode 100644 BBWYB.Client/Resources/Images/barcode.png create mode 100644 BBWYB.Client/ViewModels/PackPurchaseTask/UpdatePurchaseTaskViewModel.cs create mode 100644 BBWYB.Client/Views/PackPurchaseTask/CerControl.xaml create mode 100644 BBWYB.Client/Views/PackPurchaseTask/CerControl.xaml.cs create mode 100644 BBWYB.Client/Views/PackPurchaseTask/LookBarCodeWindow.xaml create mode 100644 BBWYB.Client/Views/PackPurchaseTask/LookBarCodeWindow.xaml.cs create mode 100644 BBWYB.Client/Views/PackPurchaseTask/LookCerWindow.xaml create mode 100644 BBWYB.Client/Views/PackPurchaseTask/LookCerWindow.xaml.cs create mode 100644 BBWYB.Client/Views/PackPurchaseTask/SetBarCodeWindow.xaml create mode 100644 BBWYB.Client/Views/PackPurchaseTask/SetBarCodeWindow.xaml.cs create mode 100644 BBWYB.Client/Views/PackPurchaseTask/SetCerControl.xaml create mode 100644 BBWYB.Client/Views/PackPurchaseTask/SetCerControl.xaml.cs create mode 100644 BBWYB.Client/Views/PackPurchaseTask/SetCerWindow.xaml create mode 100644 BBWYB.Client/Views/PackPurchaseTask/SetCerWindow.xaml.cs create mode 100644 BBWYB.Client/Views/PackPurchaseTask/TipsWindow.xaml create mode 100644 BBWYB.Client/Views/PackPurchaseTask/TipsWindow.xaml.cs create mode 100644 BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml create mode 100644 BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml.cs create mode 100644 BBWYB.Server.Model/Db/PurchaseScheme/OrderPurchaseRelationInfo.cs diff --git a/BBWYB.Client/APIServices/PackPurchaseTaskService.cs b/BBWYB.Client/APIServices/PackPurchaseTaskService.cs new file mode 100644 index 0000000..b70269d --- /dev/null +++ b/BBWYB.Client/APIServices/PackPurchaseTaskService.cs @@ -0,0 +1,123 @@ +using BBWYB.Client.Models; +using BBWYB.Client.Models.APIModel; +using BBWYB.Common.Http; +using BBWYB.Common.Models; +using Microsoft.Extensions.Logging.Abstractions; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.APIServices +{ + public class PackPurchaseTaskService : BaseApiService, IDenpendency + { + public PackPurchaseTaskService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext) + { + } + /// + /// + /// + /// 店铺Id(采购方) + /// 来源店铺的skuid + /// 店铺来源 + /// 下单数量 + /// 下单人 + /// 订单id + /// 采购平台 + /// 分箱明细 + /// + /// + public ApiResponse PublicPurchaseTask(string shopId,string skuId, string originShopName, + int skuCount, string userName, string orderId, Platform Platform, + WareHourseDTO[] WareHourses, + string MarkMessage) + { + return SendRequest(globalContext.QKApiHost, "api/PackPurchaseTask/PublicPurchaseTask", new + { + shopId, + skuId, + originShopName, + skuCount, + userName, + orderId, + Platform, + WareHourses, + MarkMessage + }, null, HttpMethod.Post); + } + + public ApiResponse UpdatePurchaseTask(UpdatePurchaseTaskRequest updatePurchaseTaskRequest) + { + return SendRequest(globalContext.QKApiHost, "api/PackPurchaseTask/UpdatePurchaseTask", updatePurchaseTaskRequest, null, HttpMethod.Post); + } + + public ApiResponse GetConfigPack(string skuId, string skuPurchaseSchemeId) + { + return SendRequest(globalContext.QKApiHost, "api/PackPurchaseTask/GetConfigPack", new { + skuId, + skuPurchaseSchemeId + } + , null, HttpMethod.Post); + } + /// + /// + /// + /// + /// + /// 到货情况(物流状态)(已到货 = 0,部分到货 = 1,未到货 = 2) + /// + public ApiResponse UpdateAvailabilityState(string orderId, string skuId, int availability) + { + return SendRequest(globalContext.QKApiHost, "api/PackPurchaseTask/UpdatePurchaseTask", new { + orderId, + skuId, + availability + }, null, HttpMethod.Post); + } + + public ApiResponse SaveBarCode(BarCodeRequest barCodeModel) + { + return SendRequest(globalContext.QKApiHost, "api/PackTask/CommitBarCode", barCodeModel + , null, HttpMethod.Post); + } + + public ApiResponse SaveCer(CerRequest cerRequest) + { + return SendRequest(globalContext.QKApiHost, "api/Certificate/CommitSkuCer", cerRequest + , null, HttpMethod.Post); + } + + + public ApiResponse GetProductSku(string skuId) + { + + return SendRequest(globalContext.QKApiHost, $"api/PackTask/SearchProduct?skuId={skuId}&ShopId={globalContext.User.Shop.ShopId}", null, null, HttpMethod.Get); + // HttpClientHelper helper = new HttpClientHelper(globalContext.QKApiHost); + + //string url = $"{globalContext.QKApiHost}/api/PackTask/SearchProduct?skuId={skuId}&ShopId={globalContext.User.Shop.ShopId}"; + //var data = helper.Get(url); + + //return JsonConvert.DeserializeObject>(data); + } + + } + public class WareHourseDTO + { + + public string WareId { get; set; } + /// + /// 仓库名称 + /// + public string WareName { get; set; } + /// + /// 数量 + /// + public int Count { get; set; } + } + +} diff --git a/BBWYB.Client/APIServices/ProductService.cs b/BBWYB.Client/APIServices/ProductService.cs index 8f2f133..6bb7947 100644 --- a/BBWYB.Client/APIServices/ProductService.cs +++ b/BBWYB.Client/APIServices/ProductService.cs @@ -45,5 +45,45 @@ namespace BBWYB.Client.APIServices null, HttpMethod.Post); } + + + public ApiResponse GetProductList(string spu, string productName, string productItem, int pageIndex, Platform platform, string appKey, string appSecret, string appToken) + { + return SendRequest(globalContext.BBWYCApiHost, + "api/product/GetProductList", + new + { + Spu = spu, + ProductName = productName, + ProductItem = productItem, + PageIndex = pageIndex, + Platform = platform, + AppKey = appKey, + AppSecret = appSecret, + AppToken = appToken + }, + null, + HttpMethod.Post); + } + + public ApiResponse> GetProductSkuList(string spu, string sku, Platform platform, string appKey, string appSecret, string appToken) + { + return SendRequest>(globalContext.BBWYCApiHost, + "api/product/GetProductSkuList", + new + { + Spu = spu, + Sku = sku, + Platform = platform, + AppKey = appKey, + AppSecret = appSecret, + AppToken = appToken + }, + null, + HttpMethod.Post); + } + // } + + } diff --git a/BBWYB.Client/APIServices/PurchaseService.cs b/BBWYB.Client/APIServices/PurchaseService.cs index 49e2ccc..5473b54 100644 --- a/BBWYB.Client/APIServices/PurchaseService.cs +++ b/BBWYB.Client/APIServices/PurchaseService.cs @@ -1,4 +1,5 @@ using BBWYB.Client.Models; +using BBWYB.Client.Models.APIModel; using BBWYB.Common.Http; using BBWYB.Common.Models; using System.Collections.Generic; @@ -80,5 +81,18 @@ namespace BBWYB.Client.APIServices { return SendRequest(globalContext.BBWYApiHost, $"api/purchasescheme/DeletePurchaseScheme/{schemeId}", null, null, HttpMethod.Delete); } + //Api/PurchaseScheme/GetPurchaseSkuBasicInfo + + public ApiResponse GetPurchaseSkuBasicInfo(string purchaseProductId, Platform platform= Platform.阿里巴巴,int priceMode=0,int firstApiMode=0) + { + + + return SendRequest("http://bbwyb.qiyue666.com", $"Api/PurchaseScheme/GetPurchaseSkuBasicInfo", new { + purchaseProductId, + platform, + priceMode, + firstApiMode + }, null, HttpMethod.Post); + } } } diff --git a/BBWYB.Client/APIServices/ShopService.cs b/BBWYB.Client/APIServices/ShopService.cs index 170588c..5dd87ca 100644 --- a/BBWYB.Client/APIServices/ShopService.cs +++ b/BBWYB.Client/APIServices/ShopService.cs @@ -1,6 +1,7 @@ using BBWYB.Client.Models; using BBWYB.Common.Http; using BBWYB.Common.Models; +using System.Collections.Generic; using System.Net.Http; namespace BBWYB.Client.APIServices @@ -23,5 +24,18 @@ namespace BBWYB.Client.APIServices purchaseAccount.PurchasePlatformId }, null, HttpMethod.Post); } + + /// + /// 获取部门及下属店铺 + /// + /// + public ApiResponse> GetDepartmentList() + { + return SendRequest>(globalContext.BBWYCApiHost, "api/vender/GetDeparmentList", null, + new Dictionary() + { + { "bbwyTempKey", "21jfhayu27q" } + }, HttpMethod.Get); + } } } diff --git a/BBWYB.Client/App.xaml b/BBWYB.Client/App.xaml index 7e71157..5939b16 100644 --- a/BBWYB.Client/App.xaml +++ b/BBWYB.Client/App.xaml @@ -6,6 +6,7 @@ xmlns:ctr="clr-namespace:BBWYB.Client.Converters" StartupUri="/Views/MainWindow.xaml" ShutdownMode="OnExplicitShutdown"> + diff --git a/BBWYB.Client/App.xaml.cs b/BBWYB.Client/App.xaml.cs index 1b0f3e3..dcd5ecf 100644 --- a/BBWYB.Client/App.xaml.cs +++ b/BBWYB.Client/App.xaml.cs @@ -60,7 +60,9 @@ namespace BBWYB.Client var builder = new ConfigurationBuilder().SetBasePath(applicationPath).AddJsonFile("appsettings.json", false, true); Configuration = builder.Build(); gl.BBWYApiHost = Configuration.GetSection("BBWYApiHost").Value; + gl.BBWYCApiHost = Configuration.GetSection("BBWYCApiHost").Value; gl.MDSApiHost = Configuration.GetSection("MDSApiHost").Value; + gl.QKApiHost = Configuration.GetSection("QKApiHost").Value; IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddHttpClient(); diff --git a/BBWYB.Client/BBWYB.Client.csproj b/BBWYB.Client/BBWYB.Client.csproj index 1cbe17b..ead26f7 100644 --- a/BBWYB.Client/BBWYB.Client.csproj +++ b/BBWYB.Client/BBWYB.Client.csproj @@ -3,13 +3,16 @@ WinExe net6.0-windows - enable + + true Resources\Images\bbwylogo.ico + + @@ -27,6 +30,7 @@ + @@ -42,6 +46,8 @@ + + diff --git a/BBWYB.Client/GlobalContext.cs b/BBWYB.Client/GlobalContext.cs index eac8ac1..6936397 100644 --- a/BBWYB.Client/GlobalContext.cs +++ b/BBWYB.Client/GlobalContext.cs @@ -27,6 +27,8 @@ namespace BBWYB.Client public string BBWYApiHost { get; set; } public string MDSApiHost { get; set; } + public string BBWYCApiHost { get; set; } + public string QKApiHost { get; set; } #endregion } } \ No newline at end of file diff --git a/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/BarCodeRequest.cs b/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/BarCodeRequest.cs new file mode 100644 index 0000000..b625e19 --- /dev/null +++ b/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/BarCodeRequest.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models.APIModel +{ + public class BarCodeRequest + { + + /// + /// 品牌 + /// + public string Brand { get; set; } + + /// + /// 品名 + /// + public string BrandName { get; set; } + + /// + /// 货号 + /// + public string ProductNo { get; set; } + + /// + /// sku名称 + /// + public string SkuName { get; set; } + + /// + /// skuId(条形码号=POP+SkuId) + /// + public string SkuId { get; set; } + + /// + /// 条形码模板 + /// + public BarcodeLabelModel LabelModel { get; set; } + + } +} diff --git a/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/CerRequest.cs b/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/CerRequest.cs new file mode 100644 index 0000000..574acf8 --- /dev/null +++ b/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/CerRequest.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models.APIModel +{ + public class CerRequest + { + + public string SpuId { get; set; } + /// + /// skuid + /// + public string SkuId { get; set; } + + /// + /// 品牌 + /// + public string Brand { get; set; } + + /// + /// 品名 + /// + public string BrandName { get; set; } + + /// + /// 材质 + /// + public string Shader { get; set; } + + /// + /// 执行标准 + /// + public string ExcuteStander { get; set; } + + /// + /// 生产商 + /// + public string ProductShop { get; set; } + + /// + /// 地址 + /// + public string ProductAdress { get; set; } + + /// + /// 型号(货号) + /// + public string ProductNo { get; set; } + + /// + /// 是否含3cLogo(0是 ,1否) + /// + public int IsLogo { get; set; } + + /// + /// 工厂编号 + /// + public string FactoryNumber { get; set; } + + /// + /// 合格证模板 + /// + public int LabelModel { get; set; } + + /// + /// 适用年龄 + /// + public string ApplyAge { get; set; } + + public int GoodsNumber { get; set; } + + public string ProduceDate { get; set; } + + public string PurchaseSkuId { get; set; } + } +} diff --git a/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/UpdatePurchaseTaskRequest.cs b/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/UpdatePurchaseTaskRequest.cs new file mode 100644 index 0000000..d118e80 --- /dev/null +++ b/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/UpdatePurchaseTaskRequest.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models.APIModel +{ + /// + /// 修改采购单任务 + /// + public class UpdatePurchaseTaskRequest + { + + /// + /// sku数量 + /// + public int SkuCount { get; set; } + /// + /// 到货情况(已到货 = 0,部分到货 = 1,未到货 = 2) + /// + public int Availability { get; set; } + /// + /// 落仓(本地仓=0,齐越仓=1,京东仓=2) + /// + public int PositionType { get; set; } + + /// + /// 打包类型(单件=0,多件=1) + /// + public int PackType { get; set; } + /// + /// 配件数量 + /// + public int GoodsNumber { get; set; } + /// + /// sku配件名称 + /// + public string SkuGoodsTitle { get; set; } + /// + /// 基础包装(快递袋=0,纸箱=1,麻袋=2) + /// + public int BasicPack { get; set; } + /// + /// 增量耗材 + /// + public string Increment1 { get; set; } + + /// + /// 注意事项 + /// + public string MarkMessage { get; set; } + + /// + ///条形码Id + /// + public long? BarCodeId { get; set; } + + /// + /// 合格证Id 格式: id,id 186,187 + /// + public string CerId { get; set; } + /// + /// 是否需要条形码 + /// + public bool? NeedBar { get; set; } + /// + /// 是否需要合格证 + /// + public bool? NeedCer { get; set; } + /// + /// 合格证位置 + /// + public int? CertificatePosition { get; set; } + + /// + /// 加急 + /// + public int IsWorry { get; set; } + + /// + /// 拳探订单id + /// + public string OrderId { get; set; } + + /// + /// skuId + /// + public string SkuId { get; set; } + + #region 更新数据 + /// + /// 品名 + /// + public string BrandName { get; set; } + /// + /// 货号 + /// + public string ProductNo { get; set; } + + /// + /// 图 + /// + public string Logo { get; set; } + + /// + /// 名称 + /// + public string SkuName { get; set; } + /// + /// 品牌 + /// + public string Brand { get; set; } + #endregion + + /// + /// 采购方案id + /// + public string SkuPurchaseSchemeId { get; set; } + + /// + /// 保存 配置商品合格证状态配置信息 + /// + public PurchaseSkuSpec[] PurchaseSkuSpecs { get; set; } + } + + /// + /// 配置商品合格证状态 + /// + public class PurchaseSkuSpec + { + /// + /// 商品配件id + /// + public string PurchaseSkuId { get; set; } + /// + /// 合格证配置状态 + /// + public bool IsNeedCer { get; set; } + } +} diff --git a/BBWYB.Client/Models/APIModel/Response/Order/OrderResponse.cs b/BBWYB.Client/Models/APIModel/Response/Order/OrderResponse.cs index 0547981..b78c6b3 100644 --- a/BBWYB.Client/Models/APIModel/Response/Order/OrderResponse.cs +++ b/BBWYB.Client/Models/APIModel/Response/Order/OrderResponse.cs @@ -148,6 +148,9 @@ namespace BBWYB.Client.Models /// 订单成本明细列表 /// public IList OrderCostDetailList { get; set; } + + + public PackConfigState? PackConfigState { get; set; } } public class OrderListResponse diff --git a/BBWYB.Client/Models/APIModel/Response/PackPurchaseTask/ConfigPackResponse.cs b/BBWYB.Client/Models/APIModel/Response/PackPurchaseTask/ConfigPackResponse.cs new file mode 100644 index 0000000..b2be897 --- /dev/null +++ b/BBWYB.Client/Models/APIModel/Response/PackPurchaseTask/ConfigPackResponse.cs @@ -0,0 +1,101 @@ +using BBWYB.Client.Models.PackPurchaseTask; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models.APIModel +{ + /// + /// 配置打包信息数据 + /// + public class ConfigPackResponse + { + /// + /// 货号品名 + /// + public string BrandName { get; set; } + /// + /// 组合类型(单件=0,多件=1) + /// + public int PackType { get; set; } + + + /// + /// 基础包装(快递袋=0,纸箱=1,麻袋=2) + /// + public int BasicPack { get; set; } + + /// + /// 增量耗材 + /// + public string Increment1 { get; set; } + + /// + /// 合格证位置(外部包装=0,产品包装=1) + /// + public int? CertificatePosition { get; set; } + + /// + /// sku配件商品名称 + /// + public string SkuGoodsTitle { get; set; } + + /// + /// 配件数量 + /// + public int GoodsNumber { get; set; } + /// + /// 是否需要条形码 + /// + public bool? NeedBar { get; set; } + /// + /// 是否需要合格证 + /// + public bool? NeedCer { get; set; } + /// + /// 配件列表 + /// + public PurchaseSku[] PurchaseSkus { get; set; } + + /// + /// 条形码 + /// + public BarCodeModel BarCode { get; set; } + + public PackConfig PackConfig { get; set; } + } + /// + /// 配件sku + /// + public class PurchaseSku + { + /// + /// 配件图 + /// + public string Logo { get; set; } + /// + /// 配件商品Id + /// + public string PurchaseSkuId { get; set; } + + /// + /// 配件商品spuId + /// + public string PurchaseProductId { get; set; } + /// + /// 配件名称 + /// + public string Title { get; set; } + /// + /// 是否需要配置合格证 + /// + public bool IsNeedCer { get; set; } + + /// + /// 合格证配置信息 + /// + public CertificateModel CerDTO { get; set; } + } +} diff --git a/BBWYB.Client/Models/APIModel/Response/PackPurchaseTask/ProductSkuResponse.cs b/BBWYB.Client/Models/APIModel/Response/PackPurchaseTask/ProductSkuResponse.cs new file mode 100644 index 0000000..a710ba6 --- /dev/null +++ b/BBWYB.Client/Models/APIModel/Response/PackPurchaseTask/ProductSkuResponse.cs @@ -0,0 +1,136 @@ +using BBWYB.Client.Models.PackPurchaseTask; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models.APIModel +{ + public class ProductSkuResponse + { + /// + /// skuId + /// + public string Id { get; set; } + + /// + /// 图片链接 + /// + public string Logo { get; set; } + /// + /// SKU标题 + /// + public string Title { get; set; } + + /// + /// 品名 + /// + public string BrandName { get; set; } + + /// + /// 商品id + /// + public long ShopId { get; set; } + + /// + /// 货号 + /// + public string ProductItemNum { get; set; } + /// + /// spuId + /// + public string ProductId { get; set; } + + + public PackConfig PackConfig { get; set; } + + + public BarCodeModel BarCodeModel { get; set; } + + + /// + /// 合格证信息 + /// + public CertificateModel[] Cers { get; set; } + /// + /// 合格证信息 + /// + public CertificateModel SpuCertificate { get; set; } + + } + public class PackConfig + { + + + /// + /// skuid + /// + [Key] + public string SkuId { get; set; } + + /// + /// 货号品名(手写上传) + /// + public string BrandName { get; set; } + + + /// + /// 组合类型(单件=0,多件=1) + /// + public int PackType { get; set; } + + + /// + /// 基础包装(快递袋=0,纸箱=1,麻袋=2) + /// + public int BasicPack { get; set; } + + /// + /// 增量1() + /// + public string Increment1 { get; set; } + + /// + /// 条形码id + /// + public long? BarcodeId { get; set; } + + /// + /// 合格证 + /// + public string CertificateId { get; set; } + + /// + /// 合格证位置(外部包装=0,产品包装=1) + /// + public int? CertificatePosition { get; set; } + + /// + /// sku配件名称 + /// + public string SkuGoodsTitle { get; set; } + + /// + /// 配件数 + /// + public int GoodsNumber { get; set; } + + + /// + /// 注意事项(对接备注) + /// + public string MarkMessage { get; set; } + /// + /// 到货情况(待收货=2,部分收货=1,已到货=0) + /// + public int Availability { get; set; } + + + public bool NeedBar { get; set; } + + public bool NeedCer { get; set; } + } + +} diff --git a/BBWYB.Client/Models/APIModel/Response/PurchaseSkuResponse.cs b/BBWYB.Client/Models/APIModel/Response/PurchaseSkuResponse.cs new file mode 100644 index 0000000..2521073 --- /dev/null +++ b/BBWYB.Client/Models/APIModel/Response/PurchaseSkuResponse.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models.APIModel +{ + + + /// + /// 采购Sku基础信息对象 + /// + public class PurchaseSkuBasicInfoResponse + { + /// + /// 采购SKU基础信息列表 + /// + public IList ItemList { get; set; } + + /// + /// 采购商 + /// + public Purchaser Purchaser { get; set; } + } + + /// + /// 采购Sku基础信息对象 + /// + public class PurchaseSkuItemBasicInfoResponse + { + /// + /// 采购SPU + /// + public string PurchaseProductId { get; set; } + + /// + /// 采购SKU + /// + public string PurchaseSkuId { get; set; } + + /// + /// 采购SPEC 1688独有属性 下单需要 + /// + public string PurchaseSkuSpecId { get; set; } + + /// + /// SKU标题 + /// + public string Title { get; set; } + + public string Logo { get; set; } + + /// + /// 单价 + /// + public decimal Price { get; set; } + } +} diff --git a/BBWYB.Client/Models/Enums.cs b/BBWYB.Client/Models/Enums.cs index 51453eb..2b89113 100644 --- a/BBWYB.Client/Models/Enums.cs +++ b/BBWYB.Client/Models/Enums.cs @@ -94,7 +94,8 @@ 锁定 = 5, 已取消 = 6, 暂停 = 7, - 已退款 = 8 + 已退款 = 8, + 待配置 = 101, } /// @@ -211,4 +212,113 @@ { 初级策略, 中级策略, 高级策略 } + + + /// + /// 条形码模板 + /// + public enum BarcodeLabelModel + { + /// + /// 标准模板 + /// + 标准模板 = 0, + /// + /// 精简模板 + /// + 精简模板 = 1, + /// + /// 无型号模板 + /// + 无型号模板 = 2 + } + /// + /// 合格证模板 + /// + public enum CertificateLabelModel + { + 标准无3c = 0, + 标准有3c = 1, + 无型号 = 2, + 适用年龄 = 3 + } + + /// + /// 加急 + /// + public enum Worry + { + 否 = 0, + 是 = 1 + } + /// + /// 任务状态 + /// + public enum TaskStateType + { + 未完成 = 0, + 已完成 = 1 + + } + public enum Need + { + 不需要 = 0, + 需要 = 1 + } + /// + /// 落仓 + /// + public enum PositionType + { + 商家仓 = 0, + 齐越仓 = 1, + 京东仓 = 2, + 聚水潭仓 = 3 + } + /// + /// 快递到货情况 + /// + public enum TaskState + { + 已到货 = 0, + 部分到货 = 1, + 未到货 = 2 + + } + /// + /// 打包类型 + /// + public enum PackType + { + 单件 = 0, + 多件 = 1 + } + /// + /// 基础包装 + /// + public enum BasicPack + { + 快递袋 = 0, + 纸箱 = 1, + 麻袋 = 2 + } + + /// + /// 合格证包装位置 + /// + public enum CertificatePosition + { + 外部包装 = 0, + 产品包装 = 1, + 无 = 2 + } + public enum PackConfigState + { + 待配置 = 0, + 已配置 = 1 + } + public enum PackCerState { + 合格证信息=0,无需合格证=1 + + } } diff --git a/BBWYB.Client/Models/Order/Order.cs b/BBWYB.Client/Models/Order/Order.cs index e73d727..471695c 100644 --- a/BBWYB.Client/Models/Order/Order.cs +++ b/BBWYB.Client/Models/Order/Order.cs @@ -140,6 +140,11 @@ namespace BBWYB.Client.Models /// public OrderCost OrderCost { get; set; } + /// + /// 配置状态 + /// + public PackConfigState? PackConfigState { get; set; } + public IList OrderPurchaseInfoList { get; set; } public IList ItemList { get; set; } @@ -148,7 +153,6 @@ namespace BBWYB.Client.Models /// 订单成本明细列表 /// public IList OrderCostDetailList { get; set; } - /// /// 订单成本明细分组列表 /// diff --git a/BBWYB.Client/Models/PackPurchaseTask/BarCodeModel.cs b/BBWYB.Client/Models/PackPurchaseTask/BarCodeModel.cs new file mode 100644 index 0000000..d3d19c9 --- /dev/null +++ b/BBWYB.Client/Models/PackPurchaseTask/BarCodeModel.cs @@ -0,0 +1,70 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models.PackPurchaseTask +{ + /// + /// 条形码 + /// + public class BarCodeModel : ObservableObject + { + + /// + /// 条形码id + /// + public long Id { get; set; } + + + private string brand; + /// + /// 品牌 + /// + public string Brand { get => brand; set { SetProperty(ref brand, value); } } + + private string brandName; + /// + /// 品名 + /// + public string BrandName { get => brandName; set { SetProperty(ref brandName, value); } } + + + private string producNo; + /// + /// 货号 + /// + public string ProductNo { get => producNo; set { SetProperty(ref producNo, value); } } + + private string skuName; + /// + /// sku名称 + /// + public string SkuName { get => skuName; set { SetProperty(ref skuName, value); } } + + + private string skuId; + /// + /// skuId(条形码号=POP+SkuId) + /// + public string SkuId { get => skuId; set { SetProperty(ref skuId, value); } } + + + private string modelNo; + /// + /// 型号 + /// + public string ModelNo { get => modelNo; set { SetProperty(ref modelNo, value); } } + + + + + private BarcodeLabelModel labelModel = BarcodeLabelModel.精简模板; + /// + /// 模板标签 + /// + public BarcodeLabelModel LabelModel { get => labelModel; set { SetProperty (ref labelModel, value); } } + } +} diff --git a/BBWYB.Client/Models/PackPurchaseTask/CertificateModel.cs b/BBWYB.Client/Models/PackPurchaseTask/CertificateModel.cs new file mode 100644 index 0000000..1db59f8 --- /dev/null +++ b/BBWYB.Client/Models/PackPurchaseTask/CertificateModel.cs @@ -0,0 +1,162 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models.PackPurchaseTask +{ + /// + /// 合格证 + /// + public class CertificateModel : ObservableObject + { + /// + /// 合格证id + /// + public long Id { get; set; } + + public string PurchaseSkuId { get; set; } + + /// + /// skuid + /// + public string SkuId { get; set; } + + + private string spuId; + /// + /// 品牌 + /// + public string SpuId { get => spuId; set { SetProperty (ref spuId, value); } } + + + private string brand; + /// + /// 品牌 + /// + public string Brand { get => brand; set { SetProperty(ref brand, value); } } + + + private string brandName; + /// + /// 品名 + /// + public string BrandName { get => brandName; set { SetProperty(ref brandName, value); } } + + private string shader; + /// + /// 材质 + /// + public string Shader { get => shader; set { SetProperty(ref shader, value); } } + + private string excuteStander; + /// + /// 执行标准 + /// + public string ExcuteStander + { + get => excuteStander; set + { + SetProperty(ref excuteStander, value); + GetExcuteStanderFormat(); + } + } + + + private string excuteStanderFormat; + /// + /// 执行标准 (,=>换行) + /// + public string ExcuteStanderFormat { get => excuteStanderFormat; set { SetProperty(ref excuteStanderFormat, value); } } + + private string productShop; + /// + /// 生产商 + /// + public string ProductShop { get => productShop; set { SetProperty(ref productShop, value); } } + + private string productAdress; + /// + /// 地址 + /// + public string ProductAdress { get => productAdress; set { SetProperty(ref productAdress, value); } } + + private string productNo; + /// + /// 型号(货号) + /// + public string ProductNo { get => productNo; set { SetProperty(ref productNo, value); } } + + ///// + ///// 生产日期 + ///// + //public DateTime ProductDate { get; set; } + + /// + /// 经销商 + /// + public string Reseller { get; set; } + + private int isLogo; + /// + /// 是否含3cLogo(0没有 ,1有) + /// + public int IsLogo { get => isLogo; set { SetProperty(ref isLogo, value); } } + + private string factoryNumber; + /// + /// 工厂编号 + /// + public string FactoryNumber { get => factoryNumber; set { SetProperty(ref factoryNumber, value); } } + private string applyAge; + /// + /// 适用年龄 + /// + public string ApplyAge { get => applyAge; set { SetProperty(ref applyAge, value); } } + + + private CertificateLabelModel labelModel; + public CertificateLabelModel LabelModel { get => labelModel; set { SetProperty(ref labelModel, value); } } + + void GetExcuteStanderFormat() + { + StringBuilder sb = new StringBuilder(); + if (!string.IsNullOrEmpty(ExcuteStander)) + if (this.ExcuteStander.Contains(",") || this.ExcuteStander.Contains(","))//有逗号就拆分 + { + var excutes = this.ExcuteStander.Split(new string[] { ",", "," }, StringSplitOptions.RemoveEmptyEntries); + for (int i = 0; i < excutes.Length; i++) + { + if (i % 2 == 0 && i > 0)//间隔两个换行 + { + sb.Append("\r\n"); + } + sb.Append(excutes[i]).Append(" "); + } + sb.Remove(sb.Length - 3, 3); + this.ExcuteStanderFormat = sb.ToString(); + return; + } + this.ExcuteStanderFormat = ExcuteStander; + } + + + + + + private int goodsNumber = 1; + /// + /// 配件序号 + /// + public int GoodsNumber { get => goodsNumber; set { SetProperty(ref goodsNumber, value); } } + + private string produceDate; + /// + /// 生产日期 + /// + public string ProduceDate { get => produceDate; set { SetProperty(ref produceDate, value); } } + + } +} diff --git a/BBWYB.Client/Models/PackPurchaseTask/IncreateModel.cs b/BBWYB.Client/Models/PackPurchaseTask/IncreateModel.cs new file mode 100644 index 0000000..01baf35 --- /dev/null +++ b/BBWYB.Client/Models/PackPurchaseTask/IncreateModel.cs @@ -0,0 +1,23 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models +{ + public class IncreateModel : ObservableObject + { + private string increateName; + public string IncreateName { get => increateName; set { SetProperty(ref increateName, value); } } + private bool isSelected; + public bool IsSelected { get => isSelected; set { SetProperty(ref isSelected, value); } } + + public override string ToString() + { + return IncreateName; + } + + } +} diff --git a/BBWYB.Client/Models/PackPurchaseTask/PurchaseSku.cs b/BBWYB.Client/Models/PackPurchaseTask/PurchaseSku.cs new file mode 100644 index 0000000..3895817 --- /dev/null +++ b/BBWYB.Client/Models/PackPurchaseTask/PurchaseSku.cs @@ -0,0 +1,68 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BBWYB.Client.Models.PackPurchaseTask +{ + /// + /// 配件sku + /// + public class PurchaseSku:ObservableObject + { + + /// + /// 配件图 + /// + private string logo; + /// + /// 配件商品Id + /// + private string purchaseSkuId; + /// + /// 配件名称 + /// + private string title; + /// + /// 是否需要配置合格证 + /// + private bool isNeedCer; + /// + /// 配件图 + /// + public string Logo { get=>logo; set { SetProperty(ref logo, value); } } + /// + /// 配件商品Id + /// + public string PurchaseSkuId { get => purchaseSkuId; set { SetProperty(ref purchaseSkuId, value); } } + /// + /// 配件名称 + /// + public string Title { get => title; set { SetProperty(ref title, value); } } + /// + /// 是否需要配置合格证 + /// + public bool IsNeedCer { get => isNeedCer; set { SetProperty(ref isNeedCer, value); } } + /// + /// 合格证配置信息 + /// + public CertificateModel CerDTO { get ; set ; } + + private bool isSetCertificate; + /// + /// 设置显示(合格证) + /// + public bool IsSetCertificate + { + get => isSetCertificate; set + { + + SetProperty(ref isSetCertificate, value); + //IsNeedCertificateModel = IsSetCertificate ? Need.不需要 : Need.需要; + } + } + + } +} diff --git a/BBWYB.Client/Models/Product/Product.cs b/BBWYB.Client/Models/Product/Product.cs index d66bc47..7010309 100644 --- a/BBWYB.Client/Models/Product/Product.cs +++ b/BBWYB.Client/Models/Product/Product.cs @@ -12,6 +12,12 @@ namespace BBWYB.Client.Models PurchasePlatformList = new List(); } + /// + /// 品牌 + /// + public string BrandName { get; set; } + + private Platform selectedPurchasePlatformModel; /// diff --git a/BBWYB.Client/Models/Product/ProductSku.cs b/BBWYB.Client/Models/Product/ProductSku.cs index 3cd1590..07febc3 100644 --- a/BBWYB.Client/Models/Product/ProductSku.cs +++ b/BBWYB.Client/Models/Product/ProductSku.cs @@ -1,4 +1,5 @@ using CommunityToolkit.Mvvm.ComponentModel; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -21,6 +22,7 @@ namespace BBWYB.Client.Models public string Logo { get; set; } + /// /// 采购方案 /// diff --git a/BBWYB.Client/Resources/Images/3c.png b/BBWYB.Client/Resources/Images/3c.png new file mode 100644 index 0000000000000000000000000000000000000000..517f9270b0bcf39e9507de8d7ede342c591d0e8b GIT binary patch literal 92486 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

a+fsB)%? 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 L0M9yFM8P+EQ?aI^Cro+p66Vdbhz~# zzby6ewT-JoHmXQ=q#s%iu-)@g?MvCTXyf0E2_CuE%O$56$RRd^sK+ zTETu~o>Fy42yC9NytK1|NA9R7<(1^55FVwk&wcBa_l>#7)5Bj9$B0(XlwhpM%q>^} z8%u82;7w4`*SglEEnq{mx_p^+{te7Q`->tdc&Ug4W+~Wb(blx^^m-*>zGm~Fe217| zse!!R#RN7ag*`pQH|8DK)Uwt<)XW%MtQ0c@t(^k$e9{q~?>gAMgS&^(f}#1QTXvg+ zeONPNb)7~QpADjkl5QyoGJf5RRURSWa87nSS@==St|O!MwVD{p0iR zGa@(5_90d1>OqFLkFo z_NN+OVRrf?^sUuxBFuV6o|L2$YuRYP&;WgSMx? zKJDy<$$=N=lIJX@TwlSV+pChtdjDV!#zJsyto*6(pth&Beht_>(ci3F!H+c8Dgw;g ztGN$p%3bmODu2Am^eG|xFHJUKu1j{Vz?t1-#XjeKJmvHo9j%EFQerr}YNDhr zY30S>oT)jYUtbWW*sFQ=yGKwZ6>sXHAEa3SE^u!29UOn(SYMx@P*W4KGs-f;B zMw&Q&oGDHz^ZMPi+ZfUg7-KyxV6l)O)#Y2G8hRB)$Xy+q^^R`8OX#Fce0WAza#neg ztE-stUDaH5Em8p&)UQg;k&zlG10NI9S~Q&k+RnMcm7WpZ9z>`th@&VQLeAoIy}`NE z_~D^dm=n9jqRrTO5vvR@3gTdTVjhZ!PMINKcGznT8aIZ{&^u;;v2j-&&AEnyxpdSM zcSl^|0o3Zukc!2)aaUW2aL*rwa$D?XT<&H}&N84%cyTpsb(Z7SFWd%Dnb-VK42r9* z1MWUGb5G`F$1ul*4Ht5_P&NxMW#MyJ_zyob1@y{sPi$*zI|>iUiiOkncwBB>kgQL_3P1picm{KI;)kZ((3*WLL!06|&6rA> zz$tR}q33_5@V2OiDluXwM@7l{z5;qnL)vVWFgM*Hrs<{^wNm+#yBDtC=2hsjpQ3w> zrED@)?TVrFB5tL)!P7C1+}XEumOT|qR5J&jqoJla&RmsYLZ=k9SLf%XJD>++=a~pB v4eIs{P_Q9_8UO&};G+L!^3!zwR`INpkaNb#YrJ6?QCxsTIE=5xoyzzZPS^w) literal 0 HcmV?d00001 diff --git a/BBWYB.Client/Resources/Themes/Color.xaml b/BBWYB.Client/Resources/Themes/Color.xaml index e537f37..59e2910 100644 --- a/BBWYB.Client/Resources/Themes/Color.xaml +++ b/BBWYB.Client/Resources/Themes/Color.xaml @@ -22,6 +22,7 @@ + diff --git a/BBWYB.Client/ViewModels/MainViewModel.cs b/BBWYB.Client/ViewModels/MainViewModel.cs index d0b23d5..653e24f 100644 --- a/BBWYB.Client/ViewModels/MainViewModel.cs +++ b/BBWYB.Client/ViewModels/MainViewModel.cs @@ -22,7 +22,7 @@ namespace BBWYB.Client.ViewModels private MenuModel selectedMenuModel; private bool showShopChoosePanel; - + ShopService shopService; public GlobalContext GlobalContext { get; set; } public IList MenuList { get; set; } @@ -46,7 +46,6 @@ namespace BBWYB.Client.ViewModels } } } - ///

/// 是否显示店铺选择列表 /// @@ -63,7 +62,8 @@ namespace BBWYB.Client.ViewModels #region Methods public MainViewModel(GlobalContext globalContext, - MdsApiService mdsApiService) + MdsApiService mdsApiService, + ShopService shopService) { this.mdsApiService = mdsApiService; @@ -77,7 +77,7 @@ namespace BBWYB.Client.ViewModels }; Task.Factory.StartNew(Login); - + this.shopService = shopService; } @@ -139,6 +139,19 @@ namespace BBWYB.Client.ViewModels //if (GlobalContext.User.TeamName == "刷单组") // return; + var res = shopService.GetDepartmentList(); + if (!res.Success) + throw new Exception(res.Msg); + var allDepartmentList = res.Data.Map>(); + + //if (GlobalContext.User.TeamName == "刷单组") + //{ + var shopList = new List(); + foreach (var d in allDepartmentList) + shopList.AddRange(d.ShopList); + GlobalContext.User.ShopList = shopList; + + IList departmentList = null; var response = mdsApiService.GetShopDetailList(); diff --git a/BBWYB.Client/ViewModels/Order/OrderViewModel.cs b/BBWYB.Client/ViewModels/Order/OrderViewModel.cs index 8016484..1a54548 100644 --- a/BBWYB.Client/ViewModels/Order/OrderViewModel.cs +++ b/BBWYB.Client/ViewModels/Order/OrderViewModel.cs @@ -1,6 +1,7 @@ using BBWYB.Client.APIServices; using BBWYB.Client.Models; using BBWYB.Client.Views.Order; +using BBWYB.Client.Views.PackPurchaseTaska; using BBWYB.Common.Extensions; using BBWYB.Common.Models; using CommunityToolkit.Mvvm.Input; @@ -64,7 +65,7 @@ namespace BBWYB.Client.ViewModels public ICommand EditPriceCommand { get; set; } - + public ICommand EditPackConfigCommand { get; set; } public OrderViewModel(GlobalContext globalContext, OrderService orderService) { @@ -89,6 +90,7 @@ namespace BBWYB.Client.ViewModels OnlinePurchaseCommand = new RelayCommand(OnlinePurchase); CancelOrderCommand = new RelayCommand(CancelOrder); EditPriceCommand = new RelayCommand(OpenEditPrice); + EditPackConfigCommand = new RelayCommand(EditPackConfig); PageIndex = 1; PageSize = 10; EndDate = DateTime.Now; @@ -98,6 +100,21 @@ namespace BBWYB.Client.ViewModels Task.Factory.StartNew(() => LoadOrder(PageIndex)); } + private void EditPackConfig(Order order) + { + ViewModelLocator view = new (); + var updatePackTask = view.UpdatePurchaseTask; + updatePackTask.Test(order); + UpdatePurchaseTaskWindow packTask = new(); + + packTask.ShowDialog(); + + } + + /// + /// + /// + /// private void LoadOrder(int pageIndex) { IsLoading = true; diff --git a/BBWYB.Client/ViewModels/PackPurchaseTask/UpdatePurchaseTaskViewModel.cs b/BBWYB.Client/ViewModels/PackPurchaseTask/UpdatePurchaseTaskViewModel.cs new file mode 100644 index 0000000..3b4746a --- /dev/null +++ b/BBWYB.Client/ViewModels/PackPurchaseTask/UpdatePurchaseTaskViewModel.cs @@ -0,0 +1,753 @@ +using BBWYB.Client.APIServices; +using BBWYB.Client.Models; +using BBWYB.Common.Models; +using CommunityToolkit.Mvvm.Input; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; +using System.Windows; +using BBWYB.Client.Models.PackPurchaseTask; +using BBWYB.Client.Views.PackPurchaseTask; +using BBWYB.Client.Models.APIModel; + +namespace BBWYB.Client.ViewModels +{ + public class UpdatePurchaseTaskViewModel : BaseVM, IDenpendency + { + + #region 属性 + + private ObservableCollection purchaseSkuList; + public ObservableCollection PurchaseSkuList { get => purchaseSkuList; set { SetProperty(ref purchaseSkuList, value); } } + + private string searchSkuId; + public string SearchSkuId { get => searchSkuId; set { SetProperty(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 { SetProperty(ref worryList, value); } } + + private ObservableCollection positionTypeList = new ObservableCollection { + "商家仓","齐越仓", "京东仓","聚水潭仓"}; + public ObservableCollection PositionTypeList { get => positionTypeList; set { SetProperty(ref positionTypeList, value); } } + + private ObservableCollection packTypeList = new ObservableCollection { + "单件","多件" + }; + public ObservableCollection PackTypeList { get => packTypeList; set { SetProperty(ref packTypeList, value); } } + + private ObservableCollection basicPackList = new ObservableCollection { + "快递袋","纸箱","麻袋" + }; + public ObservableCollection BasicPackList { get => basicPackList; set { SetProperty(ref basicPackList, value); } } + + private ObservableCollection isNeedBarCodeList = new ObservableCollection { + "需要", "不需要" }; + public ObservableCollection IsNeedBarCodeList { get => isNeedBarCodeList; set { SetProperty(ref isNeedBarCodeList, value); } } + + private ObservableCollection isNeedCerList = new ObservableCollection { + "需要", "不需要" }; + public ObservableCollection IsNeedCerList { get => isNeedCerList; set { SetProperty(ref isNeedCerList, value); } } + + + private ObservableCollection certificatePositionList = new ObservableCollection { + "无","外部包装","产品包装" + }; + public ObservableCollection CertificatePositionList { get => certificatePositionList; set { SetProperty(ref certificatePositionList, value); } } + + private ObservableCollection availabilityList = new ObservableCollection { + "已到货","部分到货","未到货" + }; + public ObservableCollection AvailabilityList { get => availabilityList; set { SetProperty(ref availabilityList, value); } } + + private int skuCount; + /// + /// Sku任务数 + /// + public int SkuCount { get => skuCount; set { SetProperty(ref skuCount, value); } } + + private string skuId; + /// + /// Sku + /// + public string SkuId { get => skuId; set { SetProperty(ref skuId, value); } } + + + + public string OrderId { get; set; } + + private string logo; + /// + /// 店铺Sku图链接 + /// + public string Logo { get => logo; set { SetProperty(ref logo, value); } } + + private string skuName; + /// + /// 采购Sku名称 + /// + public string SkuName { get => skuName; set { SetProperty(ref skuName, value); } } + + private string brand; + /// + /// 品牌 + /// + public string Brand { get => brand; set { SetProperty(ref brand, value); } } + + + private string productNo; + /// + /// 货号 + /// + public string ProductNo { get => productNo; set { SetProperty(ref productNo, value); } } + + private string brandName; + /// + /// 品名(手写上传) + /// + public string BrandName { get => brandName; set { SetProperty(ref brandName, value); } } + + + private int goodsNumber; + /// + /// 配件数 + /// + public int GoodsNumber { get => goodsNumber; set { SetProperty(ref goodsNumber, value); } } + private Worry isWorry; + /// + /// 是否加急 + /// + public Worry IsWorry { get => isWorry; set { SetProperty(ref isWorry, value); } } + + private TaskState availability; + /// + /// 到货情况(待收货=0,部分收货=1,已到货=2) + /// + public TaskState Availability { get => availability; set { SetProperty(ref availability, value); } } + + private PackType packType; + /// + /// 打包类型(单件=0,多件=1) + /// + public PackType PackType { get => packType; set { SetProperty(ref packType, value); } } + + private BasicPack basicPack; + /// + /// 基础包装(快递袋=0,纸箱=1,麻袋=2) + /// + public BasicPack BasicPack { get => basicPack; set { SetProperty(ref basicPack, value); } } + + private PositionType positionType; + /// + /// 落仓(商家仓=0,齐越仓=1,京东仓=2,聚水潭仓=3) + /// + public PositionType PositionType { get => positionType; set { SetProperty(ref positionType, value); } } + + private string skuTitle; + /// + /// sku配件商品名称 + /// + public string SkuTitle { get => skuTitle; set { SetProperty(ref skuTitle, value); } } + + private Need isNeedBarCode; + /// + /// 是否需要合格证 + /// + public Need IsNeedBarCode { get => isNeedBarCode; set { SetProperty(ref isNeedBarCode, value); } } + + + private Need isNeedCertificateModel; + /// + /// 是否需要条形码 + /// + public Need IsNeedCertificateModel { get => isNeedCertificateModel; set { SetProperty(ref isNeedCertificateModel, value); } } + + + private BarCodeModel barCodeModel; + /// + /// 条形码 + /// + public BarCodeModel BarCodeModel { get => barCodeModel; set { SetProperty(ref barCodeModel, value); } } + + + private bool isSetBarCode; + /// + /// 设置显示(条形码) + /// + public bool IsSetBarCode + { + get => isSetBarCode; + set + { + + SetProperty(ref isSetBarCode, value); + // IsNeedBarCode = IsSetBarCode ? Need.不需要 : Need.需要; + } + } + + private bool isSetCertificate; + /// + /// 设置显示(合格证) + /// + public bool IsSetCertificate + { + get => isSetCertificate; set + { + + SetProperty(ref isSetCertificate, value); + //IsNeedCertificateModel = IsSetCertificate ? Need.不需要 : Need.需要; + } + } + private string setSpuCerStatus; + + public string SetSpuCerStatus { get => setSpuCerStatus; set { SetProperty(ref setSpuCerStatus, value); } } + private bool isSetSpuCertificate = true; + + + /// + /// 设置spu显示(合格证) + /// + public bool IsSetSpuCertificate + { + get => isSetSpuCertificate; set + { + + SetProperty(ref isSetSpuCertificate, value); + SetSpuCerStatus = IsSetSpuCertificate ? "设置spu模板" : "修改spu模板"; + } + } + + + private string saveTask; + + /// + /// 设置显示(合格证) + /// + public string SaveTask { get => saveTask; set { SetProperty(ref saveTask, value); } } + + + private string spuId; + /// + /// 合格证 + /// + public string SpuId { get => spuId; set { SetProperty(ref spuId, value); } } + + private CertificateModel spuCertificateModel; + /// + /// spu合格证 + /// + public CertificateModel SpuCertificateModel { get => spuCertificateModel; set { SetProperty(ref spuCertificateModel, value); } } + + + + private CertificateModel certificateModel; + /// + /// 合格证 + /// + public CertificateModel CertificateModel { get => certificateModel; set { SetProperty(ref certificateModel, value); } } + + /// + /// 合格证位置(外部包装=0,产品包装=1) + /// + private CertificatePosition certificatePosition; + /// + /// 合格证位置(外部包装=0,产品包装=1) + /// + public CertificatePosition CertificatePosition { get => certificatePosition; set { SetProperty(ref certificatePosition, value); } } + + /// + /// 注意事项(对接备注) + /// + private string markMessage; + /// + /// 注意事项(对接备注) + /// + public string MarkMessage { get => markMessage; set { SetProperty(ref markMessage, value); } } + + + private ObservableCollection increateList; + /// + /// 增量耗材查询关键字 + /// + public ObservableCollection IncreateList { get => increateList; set { SetProperty(ref increateList, value); } } + string[] increates = new string[] { "气泡纸", "气泡袋", "POP袋", "折纸箱", "气泡纸封边", "彩盒", "剪胶", "剪彩带", "快递袋", "收纳盒", "纸箱子", "装纸箱", "封边", "胶带", "折彩盒" }; + + PackPurchaseTaskService packPurchaseTaskService; + + ProductService productService; + GlobalContext globalContext; + private bool isLoading = false; + public bool IsLoading { get => isLoading; set { SetProperty(ref isLoading, value); } } + #endregion + + public UpdatePurchaseTaskViewModel(ProductService productService, GlobalContext globalContext, PackPurchaseTaskService packPurchaseTaskService, PurchaseService purchaseService) + { + 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); + SearchSkuCommand = new RelayCommand(SearchSku); + IncreateList = new ObservableCollection(); + foreach (var item in increates) + { + IncreateList.Add(new IncreateModel + { + IncreateName = item, + IsSelected = false + }); + } + + this.purchaseService = purchaseService; +#if DEBUG + + //Test(); +#endif + } + PurchaseService purchaseService; + public string OriginShopName { get; set; } + public string SkuPurchaseSchemeId { get; set; } + public Platform Platform { get; set; } + public string ShopId { get; set; } + + public string UserName { get; set; } + public void Test(Order order) + { + SearchSku(order); + + + } + + #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; } + + 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, packPurchaseTaskService); + setBarCodeWindow.SaveResult = b => + { + BarCodeModel = b; + IsSetBarCode = false; + IsNeedBarCode = Need.需要; + }; + setBarCodeWindow.Show(); + } + + /// + /// 设置合格证 + /// + private void SetCertificate(Models.PackPurchaseTask.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; + + SetCerWindow setCerWindow = new SetCerWindow(); + setCerWindow.LoadData(model.IsNeedCer,model.CerDTO, packPurchaseTaskService, spuCertificateModel, IsSetSpuCertificate); + 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) + { + LookCerWindow lookCerWindow = new LookCerWindow(PurchaseSkuList.SingleOrDefault(p => p.PurchaseSkuId == id).CerDTO); + lookCerWindow.Show(); + } + /// + /// 查看条形码 + /// + private void LookBar() + { + LookBarCodeWindow look = new LookBarCodeWindow(); + look.SetData(BarCodeModel); + look.Show(); + } + + /// + /// 搜索 skuId(todo:) + /// + public void SearchSku(object obj) + { + + Order order = (Order)obj; + + SkuId = order.SourceSku; + OrderId = order.Id; + SkuPurchaseSchemeId = "416647656341573"; + OriginShopName = order.SourceShopName; + //string PurchaseProductId = "687352811674"; + Platform = order.Platform; + ShopId = "11"; + UserName = order.BuyerAccount; + var shopList = globalContext.User.ShopList; + var shop = shopList.SingleOrDefault(s => s.ShopName == OriginShopName); + Logo = order.ItemList[0].Logo; + SkuName = order.ItemList[0].Title; + if (string.IsNullOrEmpty(SkuId)) + return; + + 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; + } + 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; + } + + ProductNo = productApiResponse.Data.Items[0].ProductItemNum; + Brand = productApiResponse.Data.Items[0].BrandName; + + } + var productSku = packPurchaseTaskService.GetConfigPack(SkuId, SkuPurchaseSchemeId); + if (productSku == null || !productSku.Success || productSku.Data == null) + return; + BrandName = productSku.Data.BrandName; + + 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); + App.Current.Dispatcher.Invoke(new Action(() => { + PurchaseSkuList.Add(new Models.PackPurchaseTask.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; + 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.NeedCer; + + bool isSelected = false; + foreach (var item in increates) + { + isSelected = false; + if (increateDatas.Contains(item)) + { + isSelected = true; + } + App.Current.Dispatcher.Invoke(() => + { + IncreateList.Add(new IncreateModel + { + IncreateName = item, + IsSelected = isSelected + }); + }); + } + + } + } + else + { + + App.Current.Dispatcher.Invoke(() => MessageBox.Show(skuResponse.Msg, "加载sku")); + return; + } + + //加载配置文件 + } + + //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() + { + + //IncreateList = new ObservableCollection(); + //SpuId = string.Empty; + + //SaveTask = "保存"; + //Logo = model.ItemList[0].Logo; + //SearchSkuId = model.SkuId; + //SkuId = model.SkuId; + //SkuCount = model.SkuCount; + //SkuName = model.ItemList[0].SkuName; + //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; + //CertificateModel = model.CertificateModel; + //SkuTitle = model.SkuTitle; + //GoodsNumber = model.GoodsNumber; + //Availability = model.Availability; + //IsWorry = model.IsWorry; + //PositionType = model.PositionType; + //PackType = model.PackType; + //BasicPack = model.BasicPack; + //IsNeedBarCode = model.BarCodeModel == null ? Need.不需要 : Need.需要; + //IsNeedCertificateModel = model.CertificateModel == null ? Need.不需要 : Need.需要; + //CertificatePosition = model.CertificatePosition; + //TaskId = model.TaskId; + //string[] increateDatas = model.Increment1.Split(','); + + //bool isTrue = false; + //foreach (var item in increates) + //{ + // isTrue = false; + // if (increateDatas.Contains(item)) + // { + // isTrue = true; + // } + // App.Current.Dispatcher.Invoke(() => + // { + // IncreateList.Add(new IncreateModel + // { + // IncreateName = item, + // IsSelected = isTrue + // }); + // }); + //} + // SearchSku(SkuId); + + } + 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, + SkuName = SkuName, + OrderId = OrderId, + BrandName = BrandName, + Availability = (int)Availability, + BasicPack = (int)BasicPack, + SkuId = SkuId, + //CreateTime = DateTime.Now, + Increment1 = increateStr, + //Increment2 = (int)Increment2, + 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) + { + new TipsWindow("请设置条形码模板").Show(); + return; + } + createTaskModel.BarCodeId = BarCodeModel.Id; + } + if (IsNeedCertificateModel == Need.需要) + { + 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) + { + new TipsWindow("请设置合格证模板").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(); + } + } + #endregion + } +} diff --git a/BBWYB.Client/ViewModels/ViewModelLocator.cs b/BBWYB.Client/ViewModels/ViewModelLocator.cs index 16d3362..fe4ff35 100644 --- a/BBWYB.Client/ViewModels/ViewModelLocator.cs +++ b/BBWYB.Client/ViewModels/ViewModelLocator.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; + +using Microsoft.Extensions.DependencyInjection; using System; namespace BBWYB.Client.ViewModels @@ -108,5 +109,14 @@ namespace BBWYB.Client.ViewModels } } } + + public UpdatePurchaseTaskViewModel UpdatePurchaseTask + { + get + { + using var s = sp.CreateScope(); + return s.ServiceProvider.GetRequiredService(); + } + } } } diff --git a/BBWYB.Client/Views/Order/OrderList.xaml b/BBWYB.Client/Views/Order/OrderList.xaml index a3c40b5..c54fec7 100644 --- a/BBWYB.Client/Views/Order/OrderList.xaml +++ b/BBWYB.Client/Views/Order/OrderList.xaml @@ -159,6 +159,19 @@ + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -686,7 +754,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWYB.Client/Views/PackPurchaseTask/CerControl.xaml.cs b/BBWYB.Client/Views/PackPurchaseTask/CerControl.xaml.cs new file mode 100644 index 0000000..0060c0b --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/CerControl.xaml.cs @@ -0,0 +1,47 @@ +using BBWYB.Client.Models.PackPurchaseTask; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace BBWYB.Client.Views.PackPurchaseTask +{ + /// + /// CerControl.xaml 的交互逻辑 + /// + public partial class CerControl : UserControl + { + public CerControl() + { + InitializeComponent(); + } + + /// + /// + /// + public CertificateModel model + { + get { return (CertificateModel)GetValue(modelProperty); } + set + { + SetValue(modelProperty, value); + } + } + public static readonly DependencyProperty modelProperty = + DependencyProperty.Register("model", typeof(CertificateModel), typeof(CerControl), new PropertyMetadata(ChangedProperty)); + + private static void ChangedProperty(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + } + } +} diff --git a/BBWYB.Client/Views/PackPurchaseTask/LookBarCodeWindow.xaml b/BBWYB.Client/Views/PackPurchaseTask/LookBarCodeWindow.xaml new file mode 100644 index 0000000..d48a0ca --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/LookBarCodeWindow.xaml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWYB.Client/Views/PackPurchaseTask/LookBarCodeWindow.xaml.cs b/BBWYB.Client/Views/PackPurchaseTask/LookBarCodeWindow.xaml.cs new file mode 100644 index 0000000..ba3bb1e --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/LookBarCodeWindow.xaml.cs @@ -0,0 +1,33 @@ +using BBWYB.Client.Models.PackPurchaseTask; +using SJ.Controls; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace BBWYB.Client.Views.PackPurchaseTask +{ + /// + /// LookBarCodeWindow.xaml 的交互逻辑 + /// + public partial class LookBarCodeWindow : BWindow + { + public LookBarCodeWindow() + { + InitializeComponent(); + } + public void SetData(BarCodeModel BarCodeModel) + { + this.DataContext = BarCodeModel; + } + } +} diff --git a/BBWYB.Client/Views/PackPurchaseTask/LookCerWindow.xaml b/BBWYB.Client/Views/PackPurchaseTask/LookCerWindow.xaml new file mode 100644 index 0000000..8193012 --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/LookCerWindow.xaml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + diff --git a/BBWYB.Client/Views/PackPurchaseTask/LookCerWindow.xaml.cs b/BBWYB.Client/Views/PackPurchaseTask/LookCerWindow.xaml.cs new file mode 100644 index 0000000..99a046b --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/LookCerWindow.xaml.cs @@ -0,0 +1,37 @@ +using BBWYB.Client.Extensions; +using BBWYB.Client.Models.PackPurchaseTask; +using SJ.Controls; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace BBWYB.Client.Views.PackPurchaseTask +{ + /// + /// LookCerWindow.xaml 的交互逻辑 + /// + public partial class LookCerWindow : BWindow + { + public LookCerWindow(CertificateModel certificate) + { + CertificateModel= certificate.Copy(); + InitializeComponent(); + this.DataContext = this; + } + + + + public CertificateModel CertificateModel { get; set; } + } +} diff --git a/BBWYB.Client/Views/PackPurchaseTask/SetBarCodeWindow.xaml b/BBWYB.Client/Views/PackPurchaseTask/SetBarCodeWindow.xaml new file mode 100644 index 0000000..70d6113 --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/SetBarCodeWindow.xaml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BBWYB.Client/Views/PackPurchaseTask/SetBarCodeWindow.xaml.cs b/BBWYB.Client/Views/PackPurchaseTask/SetBarCodeWindow.xaml.cs new file mode 100644 index 0000000..b24bfba --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/SetBarCodeWindow.xaml.cs @@ -0,0 +1,96 @@ +using BBWYB.Client.Models.PackPurchaseTask; +using BBWYB.Client.Models; +using CommunityToolkit.Mvvm.Input; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; +using SJ.Controls; +using BBWYB.Client.APIServices; +using BBWYB.Client.Models.APIModel; + +namespace BBWYB.Client.Views.PackPurchaseTask +{ + /// + /// SetBarCode.xaml 的交互逻辑 + /// + public partial class SetBarCodeWindow : BWindow + { + public SetBarCodeWindow() + { + InitializeComponent(); + BarLabelCheckCommand = new RelayCommand(BarLabelCheck); + } + public void LoadData(BarCodeModel barCodeModel, PackPurchaseTaskService PackTaskService) + { + BarCodeModel = barCodeModel; packTaskService = PackTaskService; + this.DataContext = this; + } + + public BarCodeModel BarCodeModel { get; set; } + public PackPurchaseTaskService packTaskService { get; set; } + public Action SaveResult { get; set; } + + + + + private void BButton_Click(object sender, RoutedEventArgs e) + { + if (BarCodeModel.LabelModel == BarcodeLabelModel.标准模板)//标准版 判断数据是否异常 + { + if (string.IsNullOrEmpty(BarCodeModel.ProductNo) || BarCodeModel.ProductNo == "待填写") + { + TipsWindow tips = new TipsWindow("该SKU无货号信息,将影响条形码打印\r\n请先设置好货号信息或调整打印模板类型"); + tips.Show(); + return; + } + } + + //保存到服务器中 返回id + var resData = packTaskService.SaveBarCode(new BarCodeRequest + { + Brand = BarCodeModel.Brand, + BrandName = BarCodeModel.BrandName, + ProductNo = BarCodeModel.ProductNo, + SkuId = BarCodeModel.SkuId, + SkuName = BarCodeModel.SkuName, + LabelModel = BarCodeModel.LabelModel + + }); + if (resData == null || !resData.Success) + { + return; + } + + BarCodeModel.Id = resData.Data; + if (SaveResult != null) + SaveResult(BarCodeModel); + + this.Close(); + } + + public ICommand BarLabelCheckCommand { get; set; } + public void BarLabelCheck(BarcodeLabelModel labelModel) + { + if (labelModel == BarcodeLabelModel.标准模板)//标准版 判断数据是否异常 + { + if (string.IsNullOrEmpty(BarCodeModel.ProductNo) || BarCodeModel.ProductNo == "待填写") + { + TipsWindow tips = new TipsWindow("该SKU无货号信息,将影响条形码打印\r\n请先设置好货号信息或调整打印模板类型"); + tips.ShowDialog(); + } + } + + + } + } +} diff --git a/BBWYB.Client/Views/PackPurchaseTask/SetCerControl.xaml b/BBWYB.Client/Views/PackPurchaseTask/SetCerControl.xaml new file mode 100644 index 0000000..ab6904c --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/SetCerControl.xaml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWYB.Client/Views/PackPurchaseTask/SetCerControl.xaml.cs b/BBWYB.Client/Views/PackPurchaseTask/SetCerControl.xaml.cs new file mode 100644 index 0000000..a16dda1 --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/SetCerControl.xaml.cs @@ -0,0 +1,82 @@ +using BBWYB.Client.Models.PackPurchaseTask; +using BBWYB.Client.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace BBWYB.Client.Views.PackPurchaseTask +{ + /// + /// SetCerControl.xaml 的交互逻辑 + /// + public partial class SetCerControl : UserControl + { + public SetCerControl() + { + InitializeComponent(); + } + + public CertificateModel model + { + get + { + return (CertificateModel)GetValue(modelProperty); + + } + set + { + SetValue(modelProperty, value); + NotifyPropertyChanged("CertificateModel"); + } + } + + + public static readonly DependencyProperty modelProperty = + DependencyProperty.Register("model", typeof(CertificateModel), typeof(SetCerControl), new PropertyMetadata(ChangedProperty)); + + public event PropertyChangedEventHandler PropertyChanged; + protected virtual void NotifyPropertyChanged(string propertyName) + { + if (this.PropertyChanged != null) + { + this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + } + + + private static void ChangedProperty(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var control = d as SetCerControl; + var newValue = e.NewValue as CertificateModel; + if (control != null && newValue != null) + { + control.model = newValue; + } + } + + private void RadioButton_Checked(object sender, RoutedEventArgs e) + { + var rabtn = sender as RadioButton; + if (rabtn != null && rabtn.CommandParameter != null) + { + var labModel = Enum.Parse(rabtn.CommandParameter.ToString()); + model.LabelModel = labModel; + model.IsLogo = labModel == CertificateLabelModel.标准有3c ? 1 : 0; + } + + var data = e.Source as string; + } + } +} diff --git a/BBWYB.Client/Views/PackPurchaseTask/SetCerWindow.xaml b/BBWYB.Client/Views/PackPurchaseTask/SetCerWindow.xaml new file mode 100644 index 0000000..62845cf --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/SetCerWindow.xaml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWYB.Client/Views/PackPurchaseTask/SetCerWindow.xaml.cs b/BBWYB.Client/Views/PackPurchaseTask/SetCerWindow.xaml.cs new file mode 100644 index 0000000..3a8204e --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/SetCerWindow.xaml.cs @@ -0,0 +1,139 @@ +using BBWYB.Client.APIServices; +using BBWYB.Client.Extensions; +using BBWYB.Client.Models; +using BBWYB.Client.Models.APIModel; +using BBWYB.Client.Models.PackPurchaseTask; +using CommunityToolkit.Mvvm.Input; +using SJ.Controls; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace BBWYB.Client.Views.PackPurchaseTask +{ + /// + /// SetCerWindow.xaml 的交互逻辑 + /// + public partial class SetCerWindow : BWindow + { + public SetCerWindow() + { + InitializeComponent(); + SetPackCerStateCommand = new RelayCommand(SetPackCerState); + } + + private void SetPackCerState(PackCerState obj) + { + PackCerState = obj; + } + + public void LoadData( bool isNeedCer,CertificateModel CertificateModel, PackPurchaseTaskService packTaskService, CertificateModel SpuCertificateModel, bool IsSetSpuCertificate) + { + this.CertificateModel = CertificateModel.Copy(); + this.packTaskService = packTaskService; + PackCerState = isNeedCer ? PackCerState.合格证信息 : PackCerState.无需合格证; + this.DataContext = this; + } + + public ICommand SetPackCerStateCommand { get; set; } + //public PackCerState PackCerState { get; set; } + + + public PackCerState PackCerState + { + get + { + return (PackCerState)GetValue(PackCerStateProperty); + + } + set + { + SetValue(PackCerStateProperty, value); + + } + } + + + public static readonly DependencyProperty PackCerStateProperty = + DependencyProperty.Register("PackCerState", typeof(PackCerState), typeof(SetCerWindow)); + + public bool IsSetSpuCertificate { get; set; } + public PackPurchaseTaskService packTaskService { get; set; } + public CertificateModel CertificateModel { get; set; } + public CertificateModel SpuCertificateModel { get; set; } + + public Action SaveResult { get; set; } + + + private void save_btn_Click(object sender, RoutedEventArgs e) + { + + + if (string.IsNullOrEmpty(CertificateModel.ExcuteStander) + || string.IsNullOrEmpty(CertificateModel.Shader) || string.IsNullOrEmpty(CertificateModel.BrandName) + || string.IsNullOrEmpty(CertificateModel.Brand) || string.IsNullOrEmpty(CertificateModel.ProductShop) + || string.IsNullOrEmpty(CertificateModel.ProductAdress)) + { + //new TipsWindow("参数出错!请重新填写!").Show(); + return; + } + var standers = CertificateModel.ExcuteStander.Split(',', StringSplitOptions.RemoveEmptyEntries); + + var resData = packTaskService.SaveCer(new CerRequest + { + Brand = CertificateModel.Brand, + BrandName = CertificateModel.BrandName, + ProductNo = CertificateModel.ProductNo, + SkuId = CertificateModel.SkuId, + ExcuteStander = CertificateModel.ExcuteStander, + LabelModel = (int)CertificateModel.LabelModel, + FactoryNumber = CertificateModel.FactoryNumber, + IsLogo = CertificateModel.IsLogo, + ProductAdress = CertificateModel.ProductAdress, + ProductShop = CertificateModel.ProductShop, + Shader = CertificateModel.Shader, + ApplyAge = CertificateModel.ApplyAge, + GoodsNumber = CertificateModel.GoodsNumber, + ProduceDate = CertificateModel.ProduceDate, + PurchaseSkuId = CertificateModel.PurchaseSkuId + + }); + if (resData == null || !resData.Success) + { + + return; + } + + CertificateModel.Id = resData.Data; + if (SaveResult != null) SaveResult(CertificateModel, PackCerState); + + + + this.Close(); + } + + + + } + + public class GoodsNumberCer + { + /// + /// 配件序号 + /// + // public int GoodsNumber { get; set; } + public CertificateModel CertificateModel { get; set; } + } +} diff --git a/BBWYB.Client/Views/PackPurchaseTask/TipsWindow.xaml b/BBWYB.Client/Views/PackPurchaseTask/TipsWindow.xaml new file mode 100644 index 0000000..18f7ab7 --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/TipsWindow.xaml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BBWYB.Client/Views/PackPurchaseTask/TipsWindow.xaml.cs b/BBWYB.Client/Views/PackPurchaseTask/TipsWindow.xaml.cs new file mode 100644 index 0000000..0610aed --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/TipsWindow.xaml.cs @@ -0,0 +1,47 @@ +using SJ.Controls; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; +using System.Windows.Threading; + +namespace BBWYB.Client.Views.PackPurchaseTask +{ + /// + /// TipsWindow.xaml 的交互逻辑 + /// + public partial class TipsWindow : BWindow + { + private DispatcherTimer timer; + public TipsWindow(string Content, int waitTime = 2) + { + InitializeComponent(); + tbContent.Text = Content; + this.WindowStartupLocation = WindowStartupLocation.CenterScreen; + timer = new DispatcherTimer(); + timer.Interval = TimeSpan.FromSeconds(waitTime); + timer.Tick += OnTimerTick; + timer.Start(); + + } + + private void OnTimerTick(object sender, EventArgs e) + { + timer.Stop(); + Close(); + } + private void BButton_Click(object sender, RoutedEventArgs e) + { + this.Close(); + } + } +} diff --git a/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml b/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml new file mode 100644 index 0000000..d0b228a --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml @@ -0,0 +1,350 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml.cs b/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml.cs new file mode 100644 index 0000000..0dbd6bd --- /dev/null +++ b/BBWYB.Client/Views/PackPurchaseTask/UpdatePurchaseTaskWindow.xaml.cs @@ -0,0 +1,37 @@ +using SJ.Controls; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace BBWYB.Client.Views.PackPurchaseTaska +{ + /// + /// UpdatePurchaseTaskWindow.xaml 的交互逻辑 + /// + public partial class UpdatePurchaseTaskWindow : BWindow + { + public UpdatePurchaseTaskWindow() + { + InitializeComponent(); + this.Loaded += UpdatePurchaseTaskWindow_Loaded; + } + + private void UpdatePurchaseTaskWindow_Loaded(object sender, RoutedEventArgs e) + { + + + + + } + } +} diff --git a/BBWYB.Client/appsettings.json b/BBWYB.Client/appsettings.json index 0d8a671..b06d195 100644 --- a/BBWYB.Client/appsettings.json +++ b/BBWYB.Client/appsettings.json @@ -1,5 +1,9 @@ { - //"BBWYApiHost": "http://localhost:5000", - "BBWYApiHost": "http://bbwyb.qiyue666.com", - "MDSApiHost": "http://mdsapi.qiyue666.com" + "BBWYApiHost": "http://localhost:5000", + //"BBWYApiHost": "http://bbwyb.qiyue666.com", + "MDSApiHost": "http://mdsapi.qiyue666.com", + "BBWYCApiHost": "http://bbwytest.qiyue666.com", + "QKApiHost": "http://localhost:8080" + //"QKApiHost": "http://qiku.qiyue666.com" + } \ No newline at end of file diff --git a/BBWYB.Server.API/Controllers/OrderController.cs b/BBWYB.Server.API/Controllers/OrderController.cs index b596368..917d137 100644 --- a/BBWYB.Server.API/Controllers/OrderController.cs +++ b/BBWYB.Server.API/Controllers/OrderController.cs @@ -28,6 +28,8 @@ namespace BBWYB.Server.API.Controllers return orderBusiness.GetOrderList(request); } + + /// /// 出库 /// diff --git a/BBWYB.Server.API/Properties/launchSettings.json b/BBWYB.Server.API/Properties/launchSettings.json index 38e19b3..38704b3 100644 --- a/BBWYB.Server.API/Properties/launchSettings.json +++ b/BBWYB.Server.API/Properties/launchSettings.json @@ -14,7 +14,7 @@ "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", - "applicationUrl": "https://localhost:7256;http://localhost:5256", + "applicationUrl": "http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index fb2cac8..0a438ce 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -52,12 +52,14 @@ namespace BBWYB.Server.Business select = select.Where((o, ocs, oct) => childSelect.Where(opi => opi.OrderId == o.Id).Any()); } - select = select.WhereIf(request.OrderState != null, (o, ocs, oct) => o.OrderState == request.OrderState) + select = select.WhereIf(request.OrderState != null && request.OrderState != Enums.OrderState.待配置, (o, ocs, oct) => o.OrderState == request.OrderState) + .WhereIf(request.OrderState == Enums.OrderState.待配置, (o, ocs, oct) => o.PackConfigState != null&&o.OrderState!=Enums.OrderState.已取消) .WhereIf(request.StartDate != null, (o, ocs, oct) => o.StartTime >= request.StartDate) .WhereIf(request.EndDate != null, (o, ocs, oct) => o.StartTime <= request.EndDate) .WhereIf(!string.IsNullOrEmpty(request.ClientOrderId), (o, ocs, oct) => o.ClientOrderId == request.ClientOrderId) .WhereIf(!string.IsNullOrEmpty(request.SourceShopName), (o, ocs, oct) => o.SourceShopName == request.SourceShopName) .WhereIf(!string.IsNullOrEmpty(request.SourceSku), (o, ocs, oct) => o.SourceSku.Contains(request.SourceSku)); + } select = select.WhereIf(request.ShopId != null, (o, ocs, oct) => o.ShopId == request.ShopId); @@ -111,7 +113,8 @@ namespace BBWYB.Server.Business PlatformCommissionRatio = oct.PlatformCommissionRatio, Profit = oct.Profit, PurchaseAmount = oct.PurchaseAmount, - IsManualEdited = oct.IsManualEdited + IsManualEdited = oct.IsManualEdited, + PackConfigState= o.PackConfigState, }; } @@ -154,7 +157,7 @@ namespace BBWYB.Server.Business order.OrderPurchaseInfoList = orderPurchaseInfoList.Where(op => op.OrderId == order.Id).ToList(); foreach (var purchaseOrder in order.OrderPurchaseInfoList) { - purchaseOrder.ExpressState = orderPurchaseSkuInfoList.FirstOrDefault(x => !string.IsNullOrEmpty(x.ExpressState) && + purchaseOrder.ExpressState = orderPurchaseSkuInfoList.FirstOrDefault(x => !string.IsNullOrEmpty(x.ExpressState) && x.PurchaseOrderId == purchaseOrder.PurchaseOrderId)?.ExpressState; } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index f7e793f..6c9a1b9 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -1,6 +1,7 @@ using BBWYB.Common.Extensions; using BBWYB.Common.Log; using BBWYB.Common.Models; +using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using Yitter.IdGenerator; @@ -90,7 +91,7 @@ namespace BBWYB.Server.Business //ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList); deletePurchaseSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id)); - var editPurchaseSchemeList = batchCURDSchemeRequest.EditPurchaseSchemeList.Map>(); + var editPurchaseSchemeList = batchCURDSchemeRequest.EditPurchaseSchemeList.Map>(); foreach (var scheme in editPurchaseSchemeList) { foreach (var purchaseProduct in scheme.PurchaseSchemeProductList) diff --git a/BBWYB.Server.Model/Db/Order/Order.cs b/BBWYB.Server.Model/Db/Order/Order.cs index c99fd79..e4fb543 100644 --- a/BBWYB.Server.Model/Db/Order/Order.cs +++ b/BBWYB.Server.Model/Db/Order/Order.cs @@ -1,4 +1,5 @@ using FreeSql.DataAnnotations; +using static BBWYB.Server.Model.Enums; namespace BBWYB.Server.Model.Db { @@ -223,6 +224,9 @@ namespace BBWYB.Server.Model.Db public string Town { get; set; } #endregion - } + [Column(DbType = "int(1)", MapType = typeof(int?))] + public PackConfigState? PackConfigState { get; set; } + +} } diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/OrderPurchaseRelationInfo.cs b/BBWYB.Server.Model/Db/PurchaseScheme/OrderPurchaseRelationInfo.cs new file mode 100644 index 0000000..629c939 --- /dev/null +++ b/BBWYB.Server.Model/Db/PurchaseScheme/OrderPurchaseRelationInfo.cs @@ -0,0 +1,40 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace BBWYB.Server.Model.Db.PurchaseScheme +{ + [Table(Name = "orderpurchaserelationinfo", DisableSyncStructure = true)] + public class OrderPurchaseRelationInfo + { + [Column( IsPrimary = true)] + public long Id { get; set; } + + /// + /// 采购单Id + /// + public string PurchaseOrderId { get; set; } + /// + /// 订单Id + /// + public string OrderId { get; set; } + + /// + /// 采购方案Id + /// + public string SchemeId { get; set; } + /// + /// 采购spu + /// + public string PurchaseProductId { get; set; } + /// + /// 采购sku + /// + public string PurchaseSkuId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index 0a3366a..3b1ae95 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -1,7 +1,9 @@ + +using BBWYB.Server.Model.Db; using FreeSql.DataAnnotations; using System; using System.Collections.Generic; -namespace BBWYB.Server.Model.Db +namespace BBWYB.Server.Model { /// diff --git a/BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs b/BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs index 42b0be1..f1c73ff 100644 --- a/BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs @@ -62,5 +62,7 @@ /// 来源Sku /// public string SourceSku { get; set; } + + } } diff --git a/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs b/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs index 010eba0..be040ab 100644 --- a/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs @@ -138,6 +138,11 @@ /// 订单成本明细列表 /// public IList OrderCostDetailList { get; set; } + + /// + /// 打包状态 + /// + public Enums.PackConfigState? PackConfigState { get; set; } } public class OrderListResponse diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs index 582c034..30bbb75 100644 --- a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs @@ -1,8 +1,10 @@ -using System.Collections.Generic; + + +using BBWYB.Server.Model.Db; namespace BBWYB.Server.Model.Dto { - public class PurchaseSchemeResponse : Model.Db.PurchaseScheme + public class PurchaseSchemeResponse : PurchaseScheme { public string PurchaserName { get; set; } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index 4089b7c..69e6ec5 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -84,7 +84,8 @@ 已取消 = 6, 暂停 = 7, 已退款 = 8, - Unknow = 100 + Unknow = 100, + 待配置 = 101, } /// @@ -265,5 +266,11 @@ Spider = 0, OneBound = 1 } + + public enum PackConfigState + { + 待配置 = 0, + 已配置 = 1 + } } }