Merge remote-tracking branch 'origin/master'

This commit is contained in:
张松 2025-03-20 16:59:06 +08:00
commit 919d3190f3
3 changed files with 87 additions and 1 deletions

View File

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

View File

@ -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;
/**
* 商品列表
*/

View File

@ -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<ProductMapper, Product> imp
@Override
@Cacheable(value = CacheConstant.USER_CLIENT_GROUPS_PRODUCT, key = "#shopId", unless = "#result.isEmpty()")
public List<ShopGroupProductVo> queryGroupProductList(Long shopId) {
List<ShopGroupProductVo> 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<ShopGroupProductVo> 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<ShopProductVo> 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<ProductMapper, Product> 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<ProductMapper, Product> 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();
}
/**
* 获取当前日期是星期几的英文名称
*