刷新可售时间
This commit is contained in:
parent
a390f730c1
commit
cf35e36fbc
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue