From ec2fe4443eb54aef69976ba9f3996e73ded99b14 Mon Sep 17 00:00:00 2001
From: shanji <18996038927@163.com>
Date: Fri, 22 Dec 2023 02:36:02 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86=E5=90=8D?=
=?UTF-8?q?=E7=A7=B0=E5=92=8C=E4=BA=A7=E5=9C=B0=E6=90=9C=E7=B4=A2=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Controllers/PurchaserController.cs | 22 ++++++++++
.../Purchaser/PurchaserBusiness.cs | 41 ++++++++++++++++++-
.../Purchaser/QueryPurchaserRequest.cs | 10 +++--
3 files changed, 69 insertions(+), 4 deletions(-)
diff --git a/BBWYB.Server.API/Controllers/PurchaserController.cs b/BBWYB.Server.API/Controllers/PurchaserController.cs
index e24c5dd..0bc88a4 100644
--- a/BBWYB.Server.API/Controllers/PurchaserController.cs
+++ b/BBWYB.Server.API/Controllers/PurchaserController.cs
@@ -14,6 +14,28 @@ namespace BBWYB.Server.API.Controllers
this.purchaserBusiness = purchaserBusiness;
}
+ ///
+ /// 根据关键词搜索采购商名称列表
+ ///
+ ///
+ ///
+ [HttpGet("{keywords}")]
+ public ListResponse QueryPurchaserNameList([FromRoute] string keywords)
+ {
+ return purchaserBusiness.QueryPurchaserNameList(keywords);
+ }
+
+ ///
+ /// 根据关键词搜索采购商产地列表
+ ///
+ ///
+ ///
+ [HttpGet("{keywords}")]
+ public ListResponse QueryPurchaserLocationList([FromRoute] string keywords)
+ {
+ return purchaserBusiness.QueryPurchaserLocationList(keywords);
+ }
+
///
/// 查询采购商列表
///
diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs
index 568ea12..21d9853 100644
--- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs
+++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs
@@ -14,9 +14,48 @@ namespace BBWYB.Server.Business
}
+ public ListResponse QueryPurchaserNameList(string keywords)
+ {
+ if (string.IsNullOrEmpty(keywords))
+ throw new BusinessException("关键字不能为空");
+ var list = fsql.Select().Where(p => p.Name.Contains(keywords)).Distinct().ToList(x => x.Name);
+ return new ListResponse { Items = list, TotalCount = list.Count() };
+ }
+
+ public ListResponse QueryPurchaserLocationList(string keywords)
+ {
+ if (string.IsNullOrEmpty(keywords))
+ throw new BusinessException("关键字不能为空");
+ var list = fsql.Select().Where(p => p.Location.Contains(keywords)).Distinct().ToList(x => x.Location);
+ return new ListResponse { Items = list, TotalCount = list.Count() };
+ }
+
public ListResponse QueryPurchaserList(QueryPurchaserRequest request)
{
- return new ListResponse();
+ if (request.PageSize > 20)
+ request.PageSize = 20;
+ var purchaserList = fsql.Select()
+ .WhereIf(!string.IsNullOrEmpty(request.Spu), p => fsql.Select()
+ .Where(psp1 => psp1.PurchaserId == p.Id &&
+ psp1.ProductId == request.Spu)
+ .Any())
+ .WhereIf(!string.IsNullOrEmpty(request.Sku), p => fsql.Select()
+ .Where(psp2 => psp2.PurchaserId == p.Id &&
+ psp2.SkuId == request.Sku)
+ .Any())
+ .WhereIf(request.PurchaserNameList != null && request.PurchaserNameList.Count() > 0, p => request.PurchaserNameList.Contains(p.Name))
+ .WhereIf(request.CategoryIdList != null && request.CategoryIdList.Count() > 0, p => fsql.Select()
+ .Where(per => per.PurchaserId == p.Id &&
+ request.CategoryIdList.Contains(per.ExtendedInfoId.Value)).Any())
+ .WhereIf(request.LocationList != null && request.LocationList.Count() > 0, p => request.LocationList.Contains(p.Location))
+ .Page(request.PageIndex, request.PageSize)
+ .Count(out var count)
+ .ToList();
+ return new ListResponse()
+ {
+ Items = purchaserList,
+ TotalCount = count
+ };
}
public ListResponse QueryPurchaserCategoryList(QueryPurchaserExtendedRequest request)
diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs
index b8f6361..080d820 100644
--- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs
+++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs
@@ -9,7 +9,7 @@
///
/// 采购商Id集合
///
- public List PurchaserIdList { get; set; }
+ public List PurchaserNameList { get; set; }
///
/// 主营类目Id集合
@@ -17,15 +17,19 @@
public List CategoryIdList { get; set; }
///
- /// 供应商产地
+ /// 供应商产地集合
///
- public string Location { get; set; }
+ public List LocationList { get; set; }
+
///
/// 页码 从1开始
///
public int PageIndex { get; set; }
+ ///
+ /// 页记录数 最大20
+ ///
public int PageSize { get; set; }
}
}
From 3a424c316881147a82525a1df191f4fb34cfb4e8 Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Fri, 22 Dec 2023 16:22:22 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=87=87=E8=B4=AD?=
=?UTF-8?q?=E5=95=86=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Purchaser/PurchaserBusiness.cs | 143 ++++++++++++++++++
.../Purchaser/QueryPurchaserRequest.cs | 2 +
2 files changed, 145 insertions(+)
diff --git a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs
index 21d9853..d8392a9 100644
--- a/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs
+++ b/BBWYB.Server.Business/Purchaser/PurchaserBusiness.cs
@@ -51,6 +51,149 @@ namespace BBWYB.Server.Business
.Page(request.PageIndex, request.PageSize)
.Count(out var count)
.ToList();
+
+ var purchaserIdList = purchaserList.Select(p => p.Id).ToList();
+
+ #region 查询SPU绑定数/SKU绑定数
+ var bindList = fsql.Select()
+ .InnerJoin((psp, psc) => psp.SkuPurchaseSchemeId == psc.Id)
+ .Where((psp, psc) => psc.ShopId == request.ShopId && purchaserIdList.Contains(psp.PurchaserId))
+ .GroupBy((psp, psc) => new { psp.PurchaserId, psp.ProductId, psp.SkuId })
+ .ToList(g => new
+ {
+ g.Key.PurchaserId,
+ g.Key.ProductId,
+ g.Key.SkuId
+ });
+ #endregion
+
+ #region 查询SPU采购数/SKU采购数
+ var purchasedList = fsql.Select()
+ .InnerJoin((spr, ps) => spr.SkuId == ps.Id)
+ .Where((spr, ps) => ps.ShopId == request.ShopId && purchaserIdList.Contains(spr.PurchaserId))
+ .GroupBy((spr, ps) => new { spr.PurchaserId, spr.SkuId, ps.ProductId })
+ .ToList(g => new
+ {
+ g.Key.PurchaserId,
+ g.Key.ProductId,
+ g.Key.SkuId
+ });
+
+ #endregion
+
+ #region 查询订单数
+ var poList = fsql.Select()
+ .InnerJoin((opi, o) => opi.OrderId == o.Id)
+ .Where((opi, o) => opi.ShopId == request.ShopId &&
+ opi.IsEnabled == true &&
+ o.OrderState != Enums.OrderState.已取消 &&
+ purchaserIdList.Contains(opi.PurchaserId))
+ .GroupBy((opi, o) => opi.PurchaserId)
+ .ToList(g => new
+ {
+ PurchaserId = g.Key,
+ Count = g.Count()
+ });
+
+ #endregion
+
+ #region 查询采购金额
+ var purchaseAmountList = fsql.Select()
+ .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == o.Id)
+ .InnerJoin((ocd, o, ori, opi) => ocd.OrderId == ori.OrderId && ocd.SkuId == ori.BelongSkuId)
+ .InnerJoin((ocd, o, ori, opi) => ori.OrderId == opi.OrderId)
+ .Where((ocd, o, ori, opi) => o.ShopId == request.ShopId &&
+ o.OrderState != Enums.OrderState.已取消 &&
+ ocd.IsEnabled == true &&
+ opi.IsEnabled == true &&
+ purchaserIdList.Contains(opi.PurchaserId))
+ .GroupBy((ocd, o, ori, opi) => opi.PurchaserId)
+ .ToList(g => new
+ {
+ PurchaserId = g.Key,
+ PurchaseAmount = g.Sum(g.Value.Item1.SkuAmount) + g.Sum(g.Value.Item1.PurchaseFreight)
+ });
+ #endregion
+
+ #region 查询最近采购时间
+ var recentPurchaseTimeList = fsql.Select()
+ .InnerJoin((opi1, o) => o.OrderState != Enums.OrderState.已取消)
+ .Where((opi1, o) => opi1.ShopId == request.ShopId &&
+ purchaserIdList.Contains(opi1.PurchaserId) &&
+ opi1.IsEnabled == true)
+ .GroupBy((opi1, o) => opi1.PurchaserId)
+ .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id) })
+ .From()
+ .InnerJoin((opi1, opi2) => opi1.MaxId == opi2.Id)
+ .ToList((opi1, opi2) => new
+ {
+ opi2.PurchaserId,
+ opi2.CreateTime
+ });
+ #endregion
+
+ #region 查询标签/主营类目
+ var purchaserExtendInfoList = fsql.Select()
+ .InnerJoin((pei, per) => pei.Id == per.ExtendedInfoId)
+ .Where((pei, per) => purchaserIdList.Contains(per.PurchaserId))
+ .ToList((pei, per) => new
+ {
+ pei.Id,
+ pei.Name,
+ pei.Type,
+ per.PurchaserId
+ });
+ #endregion
+
+ foreach (var purchaser in purchaserList)
+ {
+ #region SPU绑定数/SKU绑定数
+ var currentBindList = bindList.Where(x => x.PurchaserId == purchaser.Id).ToList();
+ purchaser.BindingSpuCount = currentBindList.Select(x => x.ProductId).Distinct().Count();
+ purchaser.BindingSkuCount = currentBindList.Select(x => x.SkuId).Count();
+ #endregion
+
+ #region SPU采购数/SKU采购数
+ var currentPurchasedList = purchasedList.Where(x => x.PurchaserId == purchaser.Id).ToList();
+ purchaser.PurchasedSpuCount = currentPurchasedList.Select(x => x.ProductId).Distinct().Count();
+ purchaser.PurchasedSkuCount = currentPurchasedList.Select(x => x.SkuId).Count();
+ #endregion
+
+ #region 订单数
+ var currentOpiList = poList.Where(x => x.PurchaserId == purchaser.Id).ToList();
+ purchaser.PurchaseOrderCount = currentOpiList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.Count ?? 0;
+ #endregion
+
+ #region 采购金额
+ var currentOpiAmountList = purchaseAmountList.Where(x => x.PurchaserId == purchaser.Id).ToList();
+ purchaser.PurchaseAmount = currentOpiAmountList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.PurchaseAmount ?? 0;
+ #endregion
+
+ #region 最近采购时间
+ var currentRecentPurchaseTimeList = recentPurchaseTimeList.Where(x => x.PurchaserId == purchaser.Id).ToList();
+ purchaser.LastPurchaseTime = currentRecentPurchaseTimeList.FirstOrDefault(x => x.PurchaserId == purchaser.Id)?.CreateTime;
+ #endregion
+
+ #region 主营类目/标签
+ var currentExtendInfoList = purchaserExtendInfoList.Where(x => x.PurchaserId == purchaser.Id).ToList();
+ purchaser.CategoryList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.主营类目)
+ .Select(x => new PurchaserExtendedInfoResponse()
+ {
+ Id = x.Id,
+ Name = x.Name,
+ Type = x.Type
+ }).ToList();
+
+ purchaser.TagList = currentExtendInfoList.Where(x => x.Type == Enums.PurchaserBasicInfoType.标签)
+ .Select(x => new PurchaserExtendedInfoResponse()
+ {
+ Id = x.Id,
+ Name = x.Name,
+ Type = x.Type
+ }).ToList();
+ #endregion
+ }
+
return new ListResponse()
{
Items = purchaserList,
diff --git a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs
index 080d820..7c17296 100644
--- a/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs
+++ b/BBWYB.Server.Model/Dto/Request/Purchaser/QueryPurchaserRequest.cs
@@ -2,6 +2,8 @@
{
public class QueryPurchaserRequest
{
+ public long ShopId { get; set; }
+
public string Spu { get; set; }
public string Sku { get; set; }