From cde19e180a382da1c23394cd35d10d4956749715 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Tue, 5 Aug 2025 17:20:56 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=BE=97SKU=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=E7=AB=99=E5=88=86=E9=A1=B5=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/common/util/date/DateUtils.java | 36 +++++++ .../product/controller/SkuController.java | 8 ++ .../com/tashow/cloud/product/dto/SkuDO.java | 5 +- .../cloud/product/mapper/SkuMapper.java | 9 +- .../cloud/product/service/SkuService.java | 4 + .../product/service/impl/SkuServiceImpl.java | 14 +++ .../cloud/product/vo/sku/SkuPageReqVO.java | 98 +------------------ .../cloud/product/vo/sku/SkuRecycleBinVO.java | 31 ++++++ .../resources/mapper/product/SkuMapper.xml | 6 ++ 9 files changed, 112 insertions(+), 99 deletions(-) create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java diff --git a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/date/DateUtils.java b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/date/DateUtils.java index ffe5af9..154dad4 100644 --- a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/date/DateUtils.java +++ b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/date/DateUtils.java @@ -3,6 +3,7 @@ package com.tashow.cloud.common.util.date; import cn.hutool.core.date.LocalDateTimeUtil; import java.time.*; +import java.time.temporal.ChronoUnit; import java.util.Calendar; import java.util.Date; @@ -27,6 +28,9 @@ public class DateUtils { public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; + + // 默认数据保留天数 + private static final long RETENTION_DAYS = 90; /** * 将 LocalDateTime 转换成 Date * @@ -146,4 +150,36 @@ public class DateUtils { return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now().minusDays(1)); } + + /** + * 根据删除时间,计算还剩多少天被彻底删除(默认保留 90 天) + * + * @param deleteTime 删除时间 + * @return 剩余天数(>=0),0 表示已过期 + */ + public static long getRemainingDays(Date deleteTime) { + if (deleteTime == null) { + throw new IllegalArgumentException("删除时间不能为 null"); + } + + // 将 Date 转换为 LocalDateTime + LocalDateTime deleteDateTime = deleteTime.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + + // 当前时间 + LocalDateTime now = LocalDateTime.now(); + + // 到期时间 = 删除时间 + 保留天数 + LocalDateTime expireTime = deleteDateTime.plusDays(RETENTION_DAYS); + + // 如果当前时间已经超过到期时间,剩余天数为 0 + if (now.isAfter(expireTime)) { + return 0; + } + + // 计算剩余天数(向下取整,不进位) + return ChronoUnit.DAYS.between(now, expireTime); + } + } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java index 6bce828..32ee534 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java @@ -9,6 +9,7 @@ import com.tashow.cloud.product.service.ProdExtendService; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.SkuService; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.product.vo.prod.ProdServiceVO; import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO; import com.tashow.cloud.product.vo.sku.*; @@ -150,6 +151,13 @@ public class SkuController { return success(BeanUtils.toBean(sku, SkuRespVO.class)); } + @PermitAll + @GetMapping("/getSkuRecycleBinPageList") + @Operation(summary = "获得SKU回收站分页列表") + public CommonResult> getSkuRecycleBinPageList(@Valid SkuPageReqVO pageReqVO) { + PageResult pageResult = skuService.getSkuRecycleBinPageList(pageReqVO); + return success(pageResult); + } @PostMapping("/createSkuExtend") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java index a4dfb15..b879676 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java @@ -163,5 +163,8 @@ public class SkuDO extends BaseDO { @TableField(exist=false) private Integer isExist; - + /** + * 删除时间 + */ + private LocalDateTime delete_time; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java index f8042e0..43b2f10 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java @@ -2,11 +2,18 @@ package com.tashow.cloud.product.mapper; import java.util.*; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdDO; import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.product.vo.sku.SkuRecycleBinVO; +import io.swagger.v3.oas.annotations.media.Schema; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 单品SKU Mapper @@ -16,5 +23,5 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SkuMapper extends BaseMapperX { - + IPage getSkuRecycleBinPageList(Page page, @Param("prodId") Long prodId, @Param("properties")String properties); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index 7a28a9f..b2e49f0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -74,6 +74,10 @@ public interface SkuService { */ SkuDO getSku(Long id); + + + PageResult getSkuRecycleBinPageList(SkuPageReqVO pageReqVO); + /** * 获得单品SKU分页 * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index 878dd72..85e988d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -3,12 +3,16 @@ package com.tashow.cloud.product.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.tashow.cloud.common.util.date.DateUtils; +import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils; import com.tashow.cloud.product.dto.*; import com.tashow.cloud.product.mapper.*; import com.tashow.cloud.product.service.ProdExtendService; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.SkuService; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.product.vo.sku.*; import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; @@ -457,6 +461,16 @@ public class SkuServiceImpl implements SkuService { return skuMapper.selectById(id); } + @Override + public PageResult getSkuRecycleBinPageList(SkuPageReqVO pageReqVO){ + IPage prodPageList = skuMapper.getSkuRecycleBinPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getProperties()); + for(SkuRecycleBinVO prodPage : prodPageList.getRecords()){ + prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); + } + return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + } + + @Override public PageResult getSkuPage(SkuPageReqVO pageReqVO) { return null; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java index deedda8..ad97d4b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java @@ -19,103 +19,7 @@ public class SkuPageReqVO extends PageParam { @Schema(description = "商品ID", example = "18784") private Long prodId; - @Schema(description = "销售属性组合字符串 格式是p1:v1;p2:v2") + @Schema(description = "销售属性组合字符串") private String properties; - @Schema(description = "别名") - private String alias; - - @Schema(description = "当前价格", example = "32405") - private BigDecimal price; - - /** - * 基准价 - */ - private BigDecimal basePrice; - - @Schema(description = "最低价格", example = "5040") - private BigDecimal minPrice; - - @Schema(description = "最高价格", example = "11547") - private BigDecimal maxPrice; - - @Schema(description = "成本价", example = "28062") - private BigDecimal originalPrice; - - @Schema(description = "市场价", example = "11547") - private BigDecimal marketPrice; - - @Schema(description = "单位") - private String unit; - - @Schema(description = "0:主服务1:待定", example = "1") - private Integer type; - - @Schema(description = "概述") - private String overview; - - @Schema(description = "库存") - private Integer stocks; - - @Schema(description = "预警库存") - private Integer warnStocks; - - @Schema(description = "库存扣款时机0:付款扣1:下单扣", example = "1") - private Boolean stocksType; - - @Schema(description = "sku编码") - private String skuCode; - - @Schema(description = "商品条形码", example = "14390") - private String modelId; - - @Schema(description = "sku图片") - private String pic; - - @Schema(description = "sku名称", example = "张三") - private String skuName; - - @Schema(description = "商品名称", example = "芋艿") - private String prodName; - - @Schema(description = "版本号") - private Integer version; - - @Schema(description = "商品重量") - private Double weight; - - @Schema(description = "商品体积") - private Double volume; - - @Schema(description = "0 禁用 1 启用", example = "1") - private Integer status; - - @Schema(description = "0 正常 1 已被删除") - private Integer isDelete; - - @Schema(description = "最小购买数量") - private Integer moq; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - /** - * 是否上下架0下架1上架 - */ - private Integer isShelf; - - /** - * 是否默认规则0否1是 - */ - private Integer isSpecs; - - - /** - * 服务内容 - */ - private String serviceContent; - /** - * 规格id 多个用逗号分隔(1,2,3) - */ - private String propIds; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java new file mode 100644 index 0000000..9b0008b --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java @@ -0,0 +1,31 @@ +package com.tashow.cloud.product.vo.sku; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.tashow.cloud.product.dto.ProdPropDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +@Data +public class SkuRecycleBinVO { + @Schema(description = "单品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32230") + private Long skuId; + + /** + * 是否显示失效规格值 0否1是 + */ + private String properties; + + /** + * 还剩多少天 + */ + private Long remainingDays; + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date deleteTime; +} diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml index cd6f22a..4d3670f 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml @@ -9,4 +9,10 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + \ No newline at end of file