刷新可售时间

This commit is contained in:
Tankaikai 2025-04-07 16:18:38 +08:00
parent a390f730c1
commit cf35e36fbc
7 changed files with 112 additions and 10 deletions

View File

@ -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<List<ShopProductVo>> queryHotsProductList() {
Long shopId = StpKit.USER.getShopId(0L);
List<ShopProductVo> 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<Long, Integer> 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);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<Product> {
/**
* 用户端获取分组商品
*
* @param shopId 店铺ID
* @return 分组商品
*/
@ -35,6 +38,7 @@ public interface UProductService extends IService<Product> {
/**
* 用户端获取商品详情
*
* @param id 商品ID
* @return 商品详情
*/
@ -42,6 +46,7 @@ public interface UProductService extends IService<Product> {
/**
* 用户端获取商品SKU详情
*
* @param param 商品SKU查询参数
* @return 商品详情
*/
@ -49,21 +54,44 @@ public interface UProductService extends IService<Product> {
/**
* 刷新商品库存
*
* @param shopId 店铺id
*/
Map<Long, Integer> findShopProductStock(Long shopId);
/**
* 刷新商品库存
* @param shopId 店铺id
*
* @param shopId 店铺id
* @param productList 商品列表
*/
void refreshProductStock(Long shopId,List<ShopProductVo> productList);
void refreshProductStock(Long shopId, List<ShopProductVo> productList);
/**
* 刷新商品库存
*
* @param productStock 商品库存
* @param productList 商品列表
* @param productList 商品列表
*/
void refreshProductStock(Map<Long, Integer> productStock,List<ShopProductVo> productList);
void refreshProductStock(Map<Long, Integer> productStock, List<ShopProductVo> 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);
}

View File

@ -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;
}

View File

@ -71,6 +71,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> 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();
@ -425,6 +426,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
.eq(Product::getId, id)
.eq(Product::getShopId, shopId)
.update();
prodGroupRelationMapper.deleteByQuery(query().eq(ProdGroupRelation::getProductId, id).eq(ProdGroup::getShopId, shopId));
}
@Override

View File

@ -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<ProductMapper, Product> imp
public List<ShopProductVo> queryHotsProductList(Long shopId) {
List<ShopProductVo> 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<ProdSkuDTO> skuList = prodSkuMapper.selectListByQueryAs(query()
.eq(ProdSku::getProductId, item.getId())
.eq(ProdSku::getIsGrounding, YesNoEnum.YES.value())
@ -80,7 +82,7 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
.orderBy(ProdGroup::getSort, true), ShopGroupProductVo.class);
List<ShopProductVo> 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<ProdSkuDTO> skuList = prodSkuMapper.selectListByQueryAs(query()
.eq(ProdSku::getProductId, item.getId())
.eq(ProdSku::getIsGrounding, YesNoEnum.YES.value())
@ -107,9 +109,8 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> 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<ProductMapper, Product> 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<ProductMapper, Product> 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();
}