店铺端当前时间是否可售

This commit is contained in:
Tankaikai
2025-03-25 10:05:57 +08:00
parent f070871c8e
commit 1490bf0cdb
2 changed files with 44 additions and 5 deletions

View File

@@ -38,10 +38,11 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.TextStyle;
import java.util.*;
import static com.czg.product.entity.table.ProductTableDef.PRODUCT;
import static com.czg.product.entity.table.ShopProdCategoryTableDef.SHOP_PROD_CATEGORY;
@@ -124,6 +125,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
private void buildProductExtInfo(List<ProductDTO> records) {
records.forEach(record -> {
record.setIsSaleTime(calcIsSaleTime(record.getDays(), record.getStartTime(), record.getEndTime()));
List<ProdSkuDTO> skuList = prodSkuMapper.selectListByQueryAs(query().eq(ProdSku::getProductId, record.getId()).eq(ProdSku::getIsDel, DeleteEnum.NORMAL.value()), ProdSkuDTO.class);
if (CollUtil.isNotEmpty(skuList)) {
Optional<BigDecimal> lowPriceIsPresent = skuList.stream().map(obj -> NumberUtil.nullToZero(obj.getSalePrice())).min(BigDecimal::compareTo);
@@ -161,6 +163,40 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
return records;
}
/**
* 计算是否在可售时间内
*
* @param days 星期几,例如 "Monday,Tuesday"
* @param startTime 起售时间
* @param endTime 停售时间
* @return 是否可售时间 1-是0-否
*/
private Integer calcIsSaleTime(String days, LocalTime startTime, LocalTime endTime) {
if (StrUtil.isBlank(days) || ObjUtil.isNull(startTime) || ObjUtil.isNull(endTime)) {
return YesNoEnum.NO.value();
}
String today = getWeekDayEnName();
List<String> dayList = StrUtil.split(days, ",");
LocalTime now = LocalTime.now().withNano(0);
if (CollUtil.contains(dayList, today) && now.isAfter(startTime) && now.isBefore(endTime)) {
return YesNoEnum.YES.value();
}
return YesNoEnum.NO.value();
}
/**
* 获取当前日期是星期几的英文名称
*
* @return 星期几的英文名称,例如 "Monday" 或 "Friday"
*/
private String getWeekDayEnName() {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取当前日期是星期几,返回一个 DayOfWeek 枚举类型的实例
DayOfWeek dayOfWeek = currentDate.getDayOfWeek();
return dayOfWeek.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
}
@Override
public ProductDTO getProductById(Long id) {
ProductDTO param = new ProductDTO();