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 68961190..b2608d21 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 @@ -1,5 +1,7 @@ package com.czg.controller.user; +import com.czg.product.dto.GroupIsSaleTimeDTO; +import com.czg.product.dto.ProdIsSaleTimeDTO; import com.czg.product.param.ShopProductSkuParam; import com.czg.product.service.UProductService; import com.czg.product.vo.ShopGroupProductVo; @@ -40,6 +42,10 @@ public class UProductController { public CzgResult> queryHotsProductList() { Long shopId = StpKit.USER.getShopId(0L); List list = uProductService.queryHotsProductList(shopId); + list.forEach(prod -> { + ProdIsSaleTimeDTO prodSaleTime = prod.getProdIsSaleTimeDTO(); + prod.setIsSaleTime(uProductService.calcIsSaleTime(prodSaleTime.getDays(), prodSaleTime.getStartTime(), prodSaleTime.getEndTime())); + }); uProductService.refreshProductStock(shopId, list); return CzgResult.success(list); } @@ -54,6 +60,12 @@ public class UProductController { Map productStock = uProductService.findShopProductStock(shopId); list.forEach(item -> { uProductService.refreshProductStock(productStock, item.getProductList()); + item.getProductList().forEach(prod -> { + ProdIsSaleTimeDTO prodSaleTime = prod.getProdIsSaleTimeDTO(); + prod.setIsSaleTime(uProductService.calcIsSaleTime(prodSaleTime.getDays(), prodSaleTime.getStartTime(), prodSaleTime.getEndTime())); + GroupIsSaleTimeDTO groupSaleTime = prod.getGroupIsSaleTimeDTO(); + prod.setIsSaleTime(uProductService.calcIsSaleTime(groupSaleTime.getUseTime(), groupSaleTime.getStartTime(), groupSaleTime.getEndTime())); + }); }); return CzgResult.success(list); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/GroupIsSaleTimeDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/GroupIsSaleTimeDTO.java new file mode 100644 index 00000000..75bd505a --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/GroupIsSaleTimeDTO.java @@ -0,0 +1,25 @@ +package com.czg.product.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalTime; + +/** + * 分组可售时间管控 + * @author tankaikai + * @since 2025-04-07 16:04 + */ +@Data +@AllArgsConstructor +public class GroupIsSaleTimeDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Integer useTime; + private LocalTime startTime; + private LocalTime endTime; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProdIsSaleTimeDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProdIsSaleTimeDTO.java new file mode 100644 index 00000000..3b639139 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProdIsSaleTimeDTO.java @@ -0,0 +1,24 @@ +package com.czg.product.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalTime; + +/** + * 商品可售时间管控 + * @author tankaikai + * @since 2025-04-07 16:03 + */ +@Data +@AllArgsConstructor +public class ProdIsSaleTimeDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private String days; + private LocalTime startTime; + private LocalTime endTime; +} 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 7f8b45dc..65322276 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 @@ -8,11 +8,13 @@ import com.czg.product.vo.ShopProductSkuInfoVo; import com.czg.product.vo.ShopProductVo; import com.mybatisflex.core.service.IService; +import java.time.LocalTime; import java.util.List; import java.util.Map; /** * 用户端商品Service + * * @author tankaikai * @since 2025-02-17 14:57 */ @@ -28,6 +30,7 @@ public interface UProductService extends IService { /** * 用户端获取分组商品 + * * @param shopId 店铺ID * @return 分组商品 */ @@ -35,6 +38,7 @@ public interface UProductService extends IService { /** * 用户端获取商品详情 + * * @param id 商品ID * @return 商品详情 */ @@ -42,6 +46,7 @@ public interface UProductService extends IService { /** * 用户端获取商品SKU详情 + * * @param param 商品SKU查询参数 * @return 商品详情 */ @@ -49,21 +54,44 @@ public interface UProductService extends IService { /** * 刷新商品库存 + * * @param shopId 店铺id */ Map findShopProductStock(Long shopId); /** * 刷新商品库存 - * @param shopId 店铺id + * + * @param shopId 店铺id * @param productList 商品列表 */ - void refreshProductStock(Long shopId,List productList); + void refreshProductStock(Long shopId, List productList); /** * 刷新商品库存 + * * @param productStock 商品库存 - * @param productList 商品列表 + * @param productList 商品列表 */ - void refreshProductStock(Map productStock,List productList); + void refreshProductStock(Map productStock, List productList); + + /** + * 分组计算是否在可售时间内 + * + * @param useTime 开启时间管控 0:否;1:是 + * @param startTime 起售时间 + * @param endTime 停售时间 + * @return 是否可售时间 1-是,0-否 + */ + Integer calcIsSaleTime(Integer useTime, LocalTime startTime, LocalTime endTime); + + /** + * 商品计算是否在可售时间内 + * + * @param days 星期几,例如 "Monday,Tuesday" + * @param startTime 起售时间 + * @param endTime 停售时间 + * @return 是否可售时间 1-是,0-否 + */ + Integer calcIsSaleTime(String days, LocalTime startTime, LocalTime endTime); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java index ef56c0fd..cce763c2 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java @@ -1,6 +1,8 @@ package com.czg.product.vo; import com.alibaba.fastjson2.annotation.JSONField; +import com.czg.product.dto.GroupIsSaleTimeDTO; +import com.czg.product.dto.ProdIsSaleTimeDTO; import com.czg.product.dto.ProdSkuDTO; import lombok.Data; @@ -113,4 +115,10 @@ public class ShopProductVo implements Serializable { * 销量 */ private BigDecimal salesVolume; + + @JSONField(serialize = false) + private ProdIsSaleTimeDTO prodIsSaleTimeDTO; + + @JSONField(serialize = false) + private GroupIsSaleTimeDTO groupIsSaleTimeDTO; } diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java index b2f8268b..42c95c73 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java @@ -72,6 +72,7 @@ public class ProductServiceImpl extends ServiceImpl impl private final ProductStockFlowService productStockFlowService; private final ConsStockFlowService consStockFlowService; private final SensitiveOperationService sensitiveOperationService; + private final ProdGroupRelationMapper prodGroupRelationMapper; private QueryWrapper buildQueryWrapper(ProductDTO param) { QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper(); @@ -426,6 +427,7 @@ public class ProductServiceImpl extends ServiceImpl impl .eq(Product::getId, id) .eq(Product::getShopId, shopId) .update(); + prodGroupRelationMapper.deleteByQuery(query().eq(ProdGroupRelation::getProductId, id).eq(ProdGroup::getShopId, shopId)); } @Override 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 2ec7b86c..1ec980fb 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 @@ -10,7 +10,9 @@ import com.czg.enums.DeleteEnum; import com.czg.enums.StatusEnum; import com.czg.enums.YesNoEnum; import com.czg.exception.CzgException; +import com.czg.product.dto.GroupIsSaleTimeDTO; import com.czg.product.dto.ProdGroupRelationDTO; +import com.czg.product.dto.ProdIsSaleTimeDTO; import com.czg.product.dto.ProdSkuDTO; import com.czg.product.entity.ProdGroup; import com.czg.product.entity.ProdGroupRelation; @@ -61,7 +63,7 @@ public class UProductServiceImpl extends ServiceImpl imp public List queryHotsProductList(Long shopId) { List list = productMapper.selectHotsProductList(shopId); list.forEach(item -> { - item.setIsSaleTime(calcIsSaleTime(item.getDays(), item.getStartTime(), item.getEndTime())); + item.setProdIsSaleTimeDTO(new ProdIsSaleTimeDTO(item.getDays(), item.getStartTime(), item.getEndTime())); List skuList = prodSkuMapper.selectListByQueryAs(query() .eq(ProdSku::getProductId, item.getId()) .eq(ProdSku::getIsGrounding, YesNoEnum.YES.value()) @@ -80,7 +82,7 @@ public class UProductServiceImpl extends ServiceImpl imp .orderBy(ProdGroup::getSort, true), ShopGroupProductVo.class); List productAllList = productMapper.selectGroupProductList(shopId); productAllList.forEach(item -> { - item.setIsSaleTime(calcIsSaleTime(item.getDays(), item.getStartTime(), item.getEndTime())); + item.setProdIsSaleTimeDTO(new ProdIsSaleTimeDTO(item.getDays(), item.getStartTime(), item.getEndTime())); List skuList = prodSkuMapper.selectListByQueryAs(query() .eq(ProdSku::getProductId, item.getId()) .eq(ProdSku::getIsGrounding, YesNoEnum.YES.value()) @@ -107,9 +109,8 @@ public class UProductServiceImpl extends ServiceImpl imp productList.add(product); } } - Integer isSaleTime = calcIsSaleTime(group.getUseTime(), group.getSaleStartTime(), group.getSaleEndTime()); productList.parallelStream().forEach(product -> { - product.setIsSaleTime(isSaleTime); + product.setGroupIsSaleTimeDTO(new GroupIsSaleTimeDTO(group.getUseTime(), group.getSaleStartTime(), group.getSaleEndTime())); }); // 1-价格从高到低; 2-价格从低到高; 3-销量由高到低;4-销量由低到高; @@ -198,7 +199,8 @@ public class UProductServiceImpl extends ServiceImpl imp * @param endTime 停售时间 * @return 是否可售时间 1-是,0-否 */ - private Integer calcIsSaleTime(String days, LocalTime startTime, LocalTime endTime) { + @Override + public Integer calcIsSaleTime(String days, LocalTime startTime, LocalTime endTime) { if (StrUtil.isBlank(days) || ObjUtil.isNull(startTime) || ObjUtil.isNull(endTime)) { return YesNoEnum.NO.value(); } @@ -219,7 +221,8 @@ public class UProductServiceImpl extends ServiceImpl imp * @param endTime 停售时间 * @return 是否可售时间 1-是,0-否 */ - private Integer calcIsSaleTime(Integer useTime, LocalTime startTime, LocalTime endTime) { + @Override + public Integer calcIsSaleTime(Integer useTime, LocalTime startTime, LocalTime endTime) { if (NumberUtil.nullToZero(useTime) == 0) { return YesNoEnum.YES.value(); }