From 45e91293773847fdb650673ca0910cbe9dc149a3 Mon Sep 17 00:00:00 2001 From: Tankaikai Date: Wed, 19 Feb 2025 17:13:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E6=A8=A1=E5=9D=97=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/user/UProductController.java | 19 ++++-- .../czg/product/service/UProductService.java | 7 ++- .../czg/product/vo/ShopGroupProductVo.java | 33 ++++++++++ ...{HotsProductVo.java => ShopProductVo.java} | 2 +- .../service/product/mapper/ProductMapper.java | 17 ++--- .../service/impl/UProductServiceImpl.java | 36 +++++++++-- .../main/resources/mapper/ProductMapper.xml | 63 ++++++++++++------- 7 files changed, 134 insertions(+), 43 deletions(-) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopGroupProductVo.java rename cash-common/cash-common-service/src/main/java/com/czg/product/vo/{HotsProductVo.java => ShopProductVo.java} (97%) diff --git a/cash-api/product-server/src/main/java/com/czg/controller/user/UProductController.java b/cash-api/product-server/src/main/java/com/czg/controller/user/UProductController.java index 976de3e8..cd10349b 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/user/UProductController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/user/UProductController.java @@ -3,8 +3,9 @@ package com.czg.controller.user; import com.czg.log.annotation.OperationLog; import com.czg.product.param.MiniHomeProductParam; import com.czg.product.service.UProductService; -import com.czg.product.vo.HotsProductVo; import com.czg.product.vo.MiniAppHomeProductVo; +import com.czg.product.vo.ShopGroupProductVo; +import com.czg.product.vo.ShopProductVo; import com.czg.resp.CzgResult; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -38,12 +39,22 @@ public class UProductController { } /** - * 小程序点餐-热销商品查询 + * 小程序点餐-热销商品列表 */ @GetMapping("/miniApp/hots/query") @OperationLog("小程序点餐-热销商品列表") - public CzgResult> queryProductForMiniAppHome() { - List list = uProductService.queryHotsProductList(); + public CzgResult> queryHotsProductList() { + List list = uProductService.queryHotsProductList(); + return CzgResult.success(list); + } + + /** + * 小程序点餐-分组商品列表 + */ + @GetMapping("/miniApp/group/query") + @OperationLog("小程序点餐-分组商品列表") + public CzgResult> queryGroupProductList() { + List list = uProductService.queryGroupProductList(); return CzgResult.success(list); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/UProductService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/UProductService.java index b19cb97c..e247d35e 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/UProductService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/UProductService.java @@ -2,8 +2,9 @@ package com.czg.product.service; import com.czg.product.entity.Product; import com.czg.product.param.MiniHomeProductParam; -import com.czg.product.vo.HotsProductVo; import com.czg.product.vo.MiniAppHomeProductVo; +import com.czg.product.vo.ShopGroupProductVo; +import com.czg.product.vo.ShopProductVo; import com.mybatisflex.core.service.IService; import java.util.List; @@ -17,5 +18,7 @@ public interface UProductService extends IService { MiniAppHomeProductVo queryProductForMiniAppHome(MiniHomeProductParam param); - List queryHotsProductList(); + List queryHotsProductList(); + + List queryGroupProductList(); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopGroupProductVo.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopGroupProductVo.java new file mode 100644 index 00000000..38ac9209 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopGroupProductVo.java @@ -0,0 +1,33 @@ +package com.czg.product.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * 分组商品 + * + * @author tankaikai + * @since 2025-02-19 15:39 + */ +@Data +public class ShopGroupProductVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 分组id + */ + private Long id; + /** + * 分组名称 + */ + private String name; + /** + * 商品列表 + */ + private List productList; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/HotsProductVo.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java similarity index 97% rename from cash-common/cash-common-service/src/main/java/com/czg/product/vo/HotsProductVo.java rename to cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java index 0ebca6f2..b34e989a 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/HotsProductVo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java @@ -15,7 +15,7 @@ import java.time.LocalTime; * @since 2025-02-19 09:23 */ @Data -public class HotsProductVo implements Serializable { +public class ShopProductVo implements Serializable { @Serial private static final long serialVersionUID = 1L; diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ProductMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ProductMapper.java index 8db3f318..c2d73c45 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ProductMapper.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ProductMapper.java @@ -1,7 +1,7 @@ package com.czg.service.product.mapper; import com.czg.product.entity.Product; -import com.czg.product.vo.HotsProductVo; +import com.czg.product.vo.ShopProductVo; import com.mybatisflex.core.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -9,14 +9,15 @@ import org.apache.ibatis.annotations.Param; import java.util.List; /** -* 商品 -* -* @author Tankaikai tankaikai@aliyun.com -* @since 1.0 2025-02-16 -*/ + * 商品 + * + * @author Tankaikai tankaikai@aliyun.com + * @since 1.0 2025-02-16 + */ @Mapper public interface ProductMapper extends BaseMapper { - List queryHotsProductList(@Param("shopId") Long shopId); - + List selectHotsProductList(@Param("shopId") Long shopId); + + List selectGroupProductList(@Param("shopId") Long shopId); } \ No newline at end of file diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/UProductServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/UProductServiceImpl.java index c59583dd..b3607945 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/UProductServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/UProductServiceImpl.java @@ -14,10 +14,7 @@ import com.czg.product.entity.ProdSku; import com.czg.product.entity.Product; import com.czg.product.param.MiniHomeProductParam; import com.czg.product.service.UProductService; -import com.czg.product.vo.HotsProductVo; -import com.czg.product.vo.MiniAppHomeProdGroupVo; -import com.czg.product.vo.MiniAppHomeProductInfoVo; -import com.czg.product.vo.MiniAppHomeProductVo; +import com.czg.product.vo.*; import com.czg.sa.StpKit; import com.czg.service.product.mapper.ProdGroupMapper; import com.czg.service.product.mapper.ProdGroupRelationMapper; @@ -164,15 +161,42 @@ public class UProductServiceImpl extends ServiceImpl imp } @Override - public List queryHotsProductList() { + public List queryHotsProductList() { Long shopId = StpKit.USER.getShopId(0L); - List list = productMapper.queryHotsProductList(shopId); + List list = productMapper.selectHotsProductList(shopId); list.forEach(item -> { item.setIsSaleTime(calcIsSaleTime(item.getDays(), item.getStartTime(), item.getEndTime())); }); return list; } + @Override + public List queryGroupProductList() { + Long shopId = StpKit.USER.getShopId(0L); + List groupList = prodGroupMapper.selectListByQueryAs(query().select(ProdGroup::getId, ProdGroup::getName).eq(ProdGroup::getShopId, shopId).eq(ProdGroup::getStatus, StatusEnum.ENABLED.value()).orderBy(ProdGroup::getSort, true), ShopGroupProductVo.class); + List productAllList = productMapper.selectGroupProductList(shopId); + productAllList.forEach(item -> { + item.setIsSaleTime(calcIsSaleTime(item.getDays(), item.getStartTime(), item.getEndTime())); + }); + Map productKv = productAllList.stream().collect(Collectors.toMap(ShopProductVo::getId, shopProductVo -> shopProductVo)); + for (ShopGroupProductVo group : groupList) { + List productIdList = prodGroupRelationMapper.selectListByQueryAs(query().select(ProdGroupRelation::getProductId).eq(ProdGroupRelation::getProdGroupId, group.getId()), Long.class); + if (CollUtil.isEmpty(productIdList)) { + group.setProductList(List.of()); + continue; + } + List productList = new ArrayList<>(); + for (Long productId : productIdList) { + ShopProductVo product = productKv.get(productId); + if (product != null) { + productList.add(product); + } + } + group.setProductList(productList); + } + return groupList.stream().filter(group -> CollUtil.isNotEmpty(group.getProductList())).toList(); + } + /** * 计算是否在可售时间内 * diff --git a/cash-service/product-service/src/main/resources/mapper/ProductMapper.xml b/cash-service/product-service/src/main/resources/mapper/ProductMapper.xml index 1dd1628d..349fc070 100644 --- a/cash-service/product-service/src/main/resources/mapper/ProductMapper.xml +++ b/cash-service/product-service/src/main/resources/mapper/ProductMapper.xml @@ -2,34 +2,53 @@ - - + and t1.is_del = 0 and t1.is_sale = 1 and t1.is_hot = 1 + and t2.sale_price is not null + and t1.shop_id = #{shopId} + + order by t1.sort desc,t1.id desc + +