From 1490bf0cdb305b18eb60a0d52860dd789b7616a6 Mon Sep 17 00:00:00 2001 From: Tankaikai Date: Tue, 25 Mar 2025 10:05:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=97=E9=93=BA=E7=AB=AF=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=98=AF=E5=90=A6=E5=8F=AF=E5=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/czg/product/dto/ProductDTO.java | 5 ++- .../service/impl/ProductServiceImpl.java | 44 +++++++++++++++++-- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductDTO.java index da7273acf..63e345a63 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ProductDTO.java @@ -227,11 +227,14 @@ public class ProductDTO implements Serializable { * 耗材信息 */ private String consName; - /** * 商品销售状态 sold_out=已售罄 on_sale=在售中 off_sale=已下架 */ private String status; + /** + * 是否可售时间 1-是 0-否 + */ + private Integer isSaleTime; public Object getImages() { return JSON.parseArray(Convert.toStr(images, "[]")); diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java index 48c8e928d..252b791e1 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java @@ -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 impl private void buildProductExtInfo(List records) { records.forEach(record -> { + record.setIsSaleTime(calcIsSaleTime(record.getDays(), record.getStartTime(), record.getEndTime())); List skuList = prodSkuMapper.selectListByQueryAs(query().eq(ProdSku::getProductId, record.getId()).eq(ProdSku::getIsDel, DeleteEnum.NORMAL.value()), ProdSkuDTO.class); if (CollUtil.isNotEmpty(skuList)) { Optional lowPriceIsPresent = skuList.stream().map(obj -> NumberUtil.nullToZero(obj.getSalePrice())).min(BigDecimal::compareTo); @@ -161,6 +163,40 @@ public class ProductServiceImpl extends ServiceImpl 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 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();