获得SKU回收站分页列表

This commit is contained in:
xuelijun
2025-08-05 17:20:56 +08:00
parent 360c497c49
commit cde19e180a
9 changed files with 112 additions and 99 deletions

View File

@@ -3,6 +3,7 @@ package com.tashow.cloud.common.util.date;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import java.time.*; import java.time.*;
import java.time.temporal.ChronoUnit;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; 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"; 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 * 将 LocalDateTime 转换成 Date
* *
@@ -146,4 +150,36 @@ public class DateUtils {
return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now().minusDays(1)); return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now().minusDays(1));
} }
/**
* 根据删除时间,计算还剩多少天被彻底删除(默认保留 90 天)
*
* @param deleteTime 删除时间
* @return 剩余天数(>=00 表示已过期
*/
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);
}
} }

View File

@@ -9,6 +9,7 @@ import com.tashow.cloud.product.service.ProdExtendService;
import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropService;
import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.ProdPropValueService;
import com.tashow.cloud.product.service.SkuService; 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.prod.ProdServiceVO;
import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO; import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO;
import com.tashow.cloud.product.vo.sku.*; import com.tashow.cloud.product.vo.sku.*;
@@ -150,6 +151,13 @@ public class SkuController {
return success(BeanUtils.toBean(sku, SkuRespVO.class)); return success(BeanUtils.toBean(sku, SkuRespVO.class));
} }
@PermitAll
@GetMapping("/getSkuRecycleBinPageList")
@Operation(summary = "获得SKU回收站分页列表")
public CommonResult<PageResult<SkuRecycleBinVO>> getSkuRecycleBinPageList(@Valid SkuPageReqVO pageReqVO) {
PageResult<SkuRecycleBinVO> pageResult = skuService.getSkuRecycleBinPageList(pageReqVO);
return success(pageResult);
}
@PostMapping("/createSkuExtend") @PostMapping("/createSkuExtend")

View File

@@ -163,5 +163,8 @@ public class SkuDO extends BaseDO {
@TableField(exist=false) @TableField(exist=false)
private Integer isExist; private Integer isExist;
/**
* 删除时间
*/
private LocalDateTime delete_time;
} }

View File

@@ -2,11 +2,18 @@ package com.tashow.cloud.product.mapper;
import java.util.*; 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.common.pojo.PageResult;
import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX;
import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; 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.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.Mapper;
import org.apache.ibatis.annotations.Param;
/** /**
* 单品SKU Mapper * 单品SKU Mapper
@@ -16,5 +23,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface SkuMapper extends BaseMapperX<SkuDO> { public interface SkuMapper extends BaseMapperX<SkuDO> {
IPage<SkuRecycleBinVO> getSkuRecycleBinPageList(Page<?> page, @Param("prodId") Long prodId, @Param("properties")String properties);
} }

View File

@@ -74,6 +74,10 @@ public interface SkuService {
*/ */
SkuDO getSku(Long id); SkuDO getSku(Long id);
PageResult<SkuRecycleBinVO> getSkuRecycleBinPageList(SkuPageReqVO pageReqVO);
/** /**
* 获得单品SKU分页 * 获得单品SKU分页
* *

View File

@@ -3,12 +3,16 @@ package com.tashow.cloud.product.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.dto.*;
import com.tashow.cloud.product.mapper.*; import com.tashow.cloud.product.mapper.*;
import com.tashow.cloud.product.service.ProdExtendService; import com.tashow.cloud.product.service.ProdExtendService;
import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropService;
import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.ProdPropValueService;
import com.tashow.cloud.product.service.SkuService; 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.product.vo.sku.*;
import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.BaseEnum;
import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import com.tashow.cloud.productapi.enums.ErrorCodeConstants;
@@ -457,6 +461,16 @@ public class SkuServiceImpl implements SkuService {
return skuMapper.selectById(id); return skuMapper.selectById(id);
} }
@Override
public PageResult<SkuRecycleBinVO> getSkuRecycleBinPageList(SkuPageReqVO pageReqVO){
IPage<SkuRecycleBinVO> 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 @Override
public PageResult<SkuDO> getSkuPage(SkuPageReqVO pageReqVO) { public PageResult<SkuDO> getSkuPage(SkuPageReqVO pageReqVO) {
return null; return null;

View File

@@ -19,103 +19,7 @@ public class SkuPageReqVO extends PageParam {
@Schema(description = "商品ID", example = "18784") @Schema(description = "商品ID", example = "18784")
private Long prodId; private Long prodId;
@Schema(description = "销售属性组合字符串 格式是p1:v1;p2:v2") @Schema(description = "销售属性组合字符串")
private String properties; 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;
} }

View File

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

View File

@@ -9,4 +9,10 @@
文档可见https://www.iocoder.cn/MyBatis/x-plugins/ 文档可见https://www.iocoder.cn/MyBatis/x-plugins/
--> -->
<select id="getSkuRecycleBinPageList" resultType="com.tashow.cloud.product.vo.sku.SkuRecycleBinVO" >
select sku_id, properties, delete_time from tz_sku where prod_id = #{prodId} and deleted = 1
<if test="properties != null and properties != ''">
and properties like concat('%', #{properties}, '%')
</if>
</select>
</mapper> </mapper>