diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/param/ProductModifyStockParam.java b/cash-common/cash-common-service/src/main/java/com/czg/product/param/ProductModifyStockParam.java new file mode 100644 index 00000000..c1834243 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/param/ProductModifyStockParam.java @@ -0,0 +1,42 @@ +package com.czg.product.param; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.czg.validator.group.DefaultGroup; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 商品修改库存 + * + * @author Tankaikai tankaikai@aliyun.com + * @since 1.0 2025-02-16 + */ +@Data +public class ProductModifyStockParam implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @NotNull(message = "ID不能为空", groups = DefaultGroup.class) + private Long id; + /** + * 库存数量 + */ + @NotNull(message = "库存数量不能为空", groups = DefaultGroup.class) + @Min(value = 0, message = "库存数量不能小于0", groups = DefaultGroup.class) + @Max(value = Integer.MAX_VALUE, message = "库存数量不能大于" + Integer.MAX_VALUE, groups = DefaultGroup.class) + private Integer stockNumber; + /** + * 店铺id + */ + @JSONField(serialize = false) + private Long shopId; +} \ No newline at end of file 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 index 38ac9209..253c8491 100644 --- 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 @@ -1,9 +1,11 @@ package com.czg.product.vo; +import com.alibaba.fastjson2.annotation.JSONField; import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.time.LocalTime; import java.util.List; /** @@ -26,6 +28,21 @@ public class ShopGroupProductVo implements Serializable { * 分组名称 */ private String name; + /** + * 开启时间管控 0:否;1:是 + */ + @JSONField(serialize = false) + private Integer useTime; + /** + * 售卖开始时间 + */ + @JSONField(serialize = false) + private LocalTime saleStartTime; + /** + * 售卖结束时间 + */ + @JSONField(serialize = false) + private LocalTime saleEndTime; /** * 商品列表 */ 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 74e29b6e..cb27750c 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 @@ -1,6 +1,7 @@ package com.czg.service.product.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.czg.constant.CacheConstant; @@ -72,7 +73,7 @@ public class UProductServiceImpl extends ServiceImpl imp @Override @Cacheable(value = CacheConstant.USER_CLIENT_GROUPS_PRODUCT, key = "#shopId", unless = "#result.isEmpty()") public List queryGroupProductList(Long shopId) { - 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 groupList = prodGroupMapper.selectListByQueryAs(query().select(ProdGroup::getId, ProdGroup::getName, ProdGroup::getUseTime, ProdGroup::getSaleStartTime, ProdGroup::getSaleEndTime).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())); @@ -96,6 +97,10 @@ 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); + }); group.setProductList(productList); } return groupList.stream().filter(group -> CollUtil.isNotEmpty(group.getProductList())).toList(); @@ -154,6 +159,28 @@ public class UProductServiceImpl extends ServiceImpl imp return YesNoEnum.NO.value(); } + /** + * 计算是否在可售时间内 + * + * @param useTime 开启时间管控 0:否;1:是 + * @param startTime 起售时间 + * @param endTime 停售时间 + * @return 是否可售时间 1-是,0-否 + */ + private Integer calcIsSaleTime(Integer useTime, LocalTime startTime, LocalTime endTime) { + if (NumberUtil.nullToZero(useTime) == 0) { + return YesNoEnum.NO.value(); + } + if (ObjUtil.isNull(startTime) || ObjUtil.isNull(endTime)) { + return YesNoEnum.NO.value(); + } + LocalTime now = LocalTime.now().withNano(0); + if (now.isAfter(startTime) && now.isBefore(endTime)) { + return YesNoEnum.YES.value(); + } + return YesNoEnum.NO.value(); + } + /** * 获取当前日期是星期几的英文名称 *