code review 各种活动

This commit is contained in:
zhijiantianya@gmail.com
2023-08-07 19:30:26 +08:00
parent 0219e6d907
commit ba59ec85e0
23 changed files with 87 additions and 161 deletions

View File

@@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.promotion.api.combination;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateReqDTO;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateStatusReqDTO;
import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
import cn.iocoder.yudao.module.promotion.service.combination.CombinationRecordService;
import org.springframework.stereotype.Service;
@@ -20,17 +20,17 @@ public class CombinationRecordApiImpl implements CombinationRecordApi {
private CombinationRecordService recordService;
@Override
public void createRecord(CombinationRecordCreateReqDTO reqDTO) {
public void createCombinationRecord(CombinationRecordCreateReqDTO reqDTO) {
recordService.createCombinationRecord(reqDTO);
}
@Override
public boolean isRecordSuccess(Long userId, Long orderId) {
public boolean isCombinationRecordSuccess(Long userId, Long orderId) {
return CombinationRecordStatusEnum.isSuccess(recordService.getCombinationRecord(userId, orderId).getStatus());
}
@Override
public void updateRecordStatus(CombinationRecordUpdateReqDTO reqDTO) {
public void updateCombinationRecordStatus(CombinationRecordUpdateStatusReqDTO reqDTO) {
if (null == reqDTO.getStartTime()) {
recordService.updateCombinationRecordStatusByUserIdAndOrderId(reqDTO);
} else {

View File

@@ -17,6 +17,8 @@ import java.util.List;
@ToString(callSuper = true)
public class BargainActivityRespVO extends BargainActivityBaseVO {
// TODO @puhui999example 补全
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "618大促")
private String spuName;

View File

@@ -5,6 +5,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
// TODO @puhui999是不是应该把 BargainProductCreateReqVO 和 BargainProductUpdateReqVO 合并在一起哈。就是一个 SaveReqVO
@Schema(description = "管理后台 - 砍价商品创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)

View File

@@ -1,47 +0,0 @@
package cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.product;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 砍价商品分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BargainProductPageReqVO extends PageParam {
@Schema(description = "砍价活动编号", example = "6829")
private Long activityId;
@Schema(description = "商品 SPU 编号", example = "18731")
private Long spuId;
@Schema(description = "商品 SKU 编号", example = "31675")
private Long skuId;
@Schema(description = "砍价商品状态", example = "2")
private Integer activityStatus;
@Schema(description = "活动开始时间点")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] activityStartTime;
@Schema(description = "活动结束时间点")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] activityEndTime;
@Schema(description = "砍价价格,单位分", example = "27682")
private Integer activePrice;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@@ -65,6 +65,7 @@ public interface BargainActivityConvert {
List<BargainProductRespVO> convertList2(List<BargainProductDO> productDOs);
// TODO @puhui999参数改成 activity、product 会不会干净一点哈
@Mappings({
@Mapping(target = "id", ignore = true),
@Mapping(target = "activityId", source = "activityDO.id"),
@@ -90,6 +91,4 @@ public interface BargainActivityConvert {
.setActivityStatus(activity.getStatus()));
}
//BargainRecordDO convert(BargainRecordCreateReqDTO reqDTO);
}

View File

@@ -67,6 +67,7 @@ public interface CombinationActivityConvert {
List<CombinationProductRespVO> convertList2(List<CombinationProductDO> productDOs);
// TODO @puhui999参数改成 activity、product 会不会干净一点哈
@Mappings({
@Mapping(target = "id", ignore = true),
@Mapping(target = "activityId", source = "activityDO.id"),

View File

@@ -56,6 +56,7 @@ public interface SeckillActivityConvert {
return convert1(seckillActivity).setProducts(convertList2(seckillProducts));
}
// TODO @puhui999参数改成 activity、product 会不会干净一点哈
@Mappings({
@Mapping(target = "id", ignore = true),
@Mapping(target = "activityId", source = "activityDO.id"),

View File

@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* 砍价助力 DO TODO
* 砍价助力 DO TODO 芋艿:表结构
*
* @author HUIHUI
*/

View File

@@ -1,9 +1,6 @@
package cn.iocoder.yudao.module.promotion.dal.mysql.bargain;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.product.BargainProductPageReqVO;
import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainProductDO;
import org.apache.ibatis.annotations.Mapper;
@@ -18,18 +15,6 @@ import java.util.List;
@Mapper
public interface BargainProductMapper extends BaseMapperX<BargainProductDO> {
default PageResult<BargainProductDO> selectPage(BargainProductPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<BargainProductDO>()
.eqIfPresent(BargainProductDO::getActivityId, reqVO.getActivityId())
.eqIfPresent(BargainProductDO::getSpuId, reqVO.getSpuId())
.eqIfPresent(BargainProductDO::getSkuId, reqVO.getSkuId())
.eqIfPresent(BargainProductDO::getActivityStatus, reqVO.getActivityStatus())
.betweenIfPresent(BargainProductDO::getActivityStartTime, reqVO.getActivityStartTime())
.betweenIfPresent(BargainProductDO::getActivityEndTime, reqVO.getActivityEndTime())
.betweenIfPresent(BargainProductDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(BargainProductDO::getId));
}
default List<BargainProductDO> selectListByActivityIds(Collection<Long> ids) {
return selectList(BargainProductDO::getActivityId, ids);
}

View File

@@ -20,6 +20,7 @@ public interface CombinationRecordMapper extends BaseMapperX<CombinationRecordDO
CombinationRecordDO::getOrderId, orderId);
}
// TODO @puhui999 selectByUserIdAndActivityId
/**
* 查询拼团记录
*

View File

@@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.promotion.service.combination;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateReqDTO;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateStatusReqDTO;
import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO;
/**
@@ -16,7 +16,7 @@ public interface CombinationRecordService {
*
* @param reqDTO 请求 DTO
*/
void updateCombinationRecordStatusByUserIdAndOrderId(CombinationRecordUpdateReqDTO reqDTO);
void updateCombinationRecordStatusByUserIdAndOrderId(CombinationRecordUpdateStatusReqDTO reqDTO);
/**
* 创建拼团记录
@@ -30,7 +30,7 @@ public interface CombinationRecordService {
*
* @param reqDTO 请求 DTO
*/
void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(CombinationRecordUpdateReqDTO reqDTO);
void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(CombinationRecordUpdateStatusReqDTO reqDTO);
/**
* 获得拼团状态

View File

@@ -11,7 +11,7 @@ import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateReqDTO;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateStatusReqDTO;
import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO;
import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO;
import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO;
@@ -131,15 +131,14 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
/**
* 更新拼团商品
*
* @param updateObj 更新的活动
* @param products 商品配置
* @param activity 拼团活动
* @param products 该活动的最新商品配置
*/
private void updateCombinationProduct(CombinationActivityDO updateObj, List<CombinationProductUpdateReqVO> products) {
// 默认全部新增
List<CombinationProductDO> defaultNewList = CombinationActivityConvert.INSTANCE.convertList(products, updateObj);
// 数据库中的老数据
List<CombinationProductDO> oldList = combinationProductMapper.selectListByActivityIds(CollUtil.newArrayList(updateObj.getId()));
List<List<CombinationProductDO>> lists = CollectionUtils.diffList(oldList, defaultNewList, (oldVal, newVal) -> {
private void updateCombinationProduct(CombinationActivityDO activity, List<CombinationProductUpdateReqVO> products) {
// 第一步,对比新老数据,获得添加、修改、删除的列表
List<CombinationProductDO> newList = CombinationActivityConvert.INSTANCE.convertList(products, activity);
List<CombinationProductDO> oldList = combinationProductMapper.selectListByActivityIds(CollUtil.newArrayList(activity.getId()));
List<List<CombinationProductDO>> diffList = CollectionUtils.diffList(oldList, newList, (oldVal, newVal) -> {
boolean same = ObjectUtil.equal(oldVal.getSkuId(), newVal.getSkuId());
if (same) {
newVal.setId(oldVal.getId());
@@ -147,17 +146,15 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
return same;
});
// create
if (CollUtil.isNotEmpty(lists.get(0))) {
combinationProductMapper.insertBatch(lists.get(0));
// 第二步,批量添加、修改、删除
if (CollUtil.isNotEmpty(diffList.get(0))) {
combinationProductMapper.insertBatch(diffList.get(0));
}
// update
if (CollUtil.isNotEmpty(lists.get(1))) {
combinationProductMapper.updateBatch(lists.get(1));
if (CollUtil.isNotEmpty(diffList.get(1))) {
combinationProductMapper.updateBatch(diffList.get(1));
}
// delete
if (CollUtil.isNotEmpty(lists.get(2))) {
combinationProductMapper.deleteBatchIds(CollectionUtils.convertList(lists.get(2), CombinationProductDO::getId));
if (CollUtil.isNotEmpty(diffList.get(2))) {
combinationProductMapper.deleteBatchIds(CollectionUtils.convertList(diffList.get(2), CombinationProductDO::getId));
}
}
@@ -204,7 +201,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
}
@Override
public void updateCombinationRecordStatusByUserIdAndOrderId(CombinationRecordUpdateReqDTO reqDTO) {
public void updateCombinationRecordStatusByUserIdAndOrderId(CombinationRecordUpdateStatusReqDTO reqDTO) {
// 校验拼团是否存在
CombinationRecordDO recordDO = validateCombinationRecord(reqDTO.getUserId(), reqDTO.getOrderId());
@@ -215,7 +212,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
@Override
@Transactional(rollbackFor = Exception.class)
public void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(CombinationRecordUpdateReqDTO reqDTO) {
public void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(CombinationRecordUpdateStatusReqDTO reqDTO) {
CombinationRecordDO recordDO = validateCombinationRecord(reqDTO.getUserId(), reqDTO.getOrderId());
// 更新状态
recordDO.setStatus(reqDTO.getStatus());

View File

@@ -137,16 +137,14 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
/**
* 更新秒杀商品
*
* @param updateObj 更新的活动
* @param products 商品配置
* @param activity 秒杀活动
* @param products 该活动的最新商品配置
*/
private void updateSeckillProduct(SeckillActivityDO updateObj, List<SeckillProductUpdateReqVO> products) {
// 默认全部新增
List<SeckillProductDO> defaultNewList = SeckillActivityConvert.INSTANCE.convertList(products, updateObj);
// 数据库中的活动商品
List<SeckillProductDO> oldList = seckillProductMapper.selectListByActivityId(updateObj.getId());
// 对比老、新两个列表,找出新增、修改、删除的数据
List<List<SeckillProductDO>> lists = diffList(oldList, defaultNewList, (oldVal, newVal) -> {
private void updateSeckillProduct(SeckillActivityDO activity, List<SeckillProductUpdateReqVO> products) {
// 第一步,对比新老数据,获得添加、修改、删除的列表
List<SeckillProductDO> newList = SeckillActivityConvert.INSTANCE.convertList(products, activity);
List<SeckillProductDO> oldList = seckillProductMapper.selectListByActivityId(activity.getId());
List<List<SeckillProductDO>> diffList = diffList(oldList, newList, (oldVal, newVal) -> {
boolean same = ObjectUtil.equal(oldVal.getSkuId(), newVal.getSkuId());
if (same) {
newVal.setId(oldVal.getId());
@@ -154,17 +152,16 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
return same;
});
// create
if (isNotEmpty(lists.get(0))) {
seckillProductMapper.insertBatch(lists.get(0));
// 第二步,批量添加、修改、删除
if (isNotEmpty(diffList.get(0))) {
seckillProductMapper.insertBatch(diffList.get(0));
}
// update
if (isNotEmpty(lists.get(1))) {
seckillProductMapper.updateBatch(lists.get(1));
if (isNotEmpty(diffList.get(1))) {
seckillProductMapper.updateBatch(diffList.get(1));
}
// delete
if (isNotEmpty(lists.get(2))) {
seckillProductMapper.deleteBatchIds(convertList(lists.get(2), SeckillProductDO::getId));
if (isNotEmpty(diffList.get(2))) {
seckillProductMapper.deleteBatchIds(convertList(diffList.get(2), SeckillProductDO::getId));
}
}