mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-08-14 10:11:53 +08:00
订单:
1. review 发货 2. review 拼团逻辑
This commit is contained in:
@@ -12,12 +12,12 @@ import org.springframework.stereotype.Service;
|
||||
public class BargainRecordApiImpl implements BargainRecordApi {
|
||||
|
||||
@Override
|
||||
public void createRecord(BargainRecordCreateReqDTO reqDTO) {
|
||||
public void createBargainRecord(BargainRecordCreateReqDTO reqDTO) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validateRecordSuccess(Long userId, Long orderId) {
|
||||
public boolean isBargainRecordSuccess(Long userId, Long orderId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -23,12 +23,12 @@ 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 validateRecordSuccess(Long userId, Long orderId) {
|
||||
public boolean isCombinationRecordSuccess(Long userId, Long orderId) {
|
||||
return CombinationRecordStatusEnum.isSuccess(recordService.getCombinationRecord(userId, orderId).getStatus());
|
||||
}
|
||||
|
||||
|
@@ -3,8 +3,7 @@ package cn.iocoder.yudao.module.promotion.controller.admin.bargain;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityBaseVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityCreateReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityPageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityRespVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityUpdateReqVO;
|
||||
@@ -32,13 +31,10 @@ public class BargainActivityController {
|
||||
@Resource
|
||||
private BargainActivityService activityService;
|
||||
|
||||
@Resource
|
||||
private ProductSpuApi productSpuApi;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建砍价活动")
|
||||
@PreAuthorize("@ss.hasPermission('promotion:bargain-activity:create')")
|
||||
public CommonResult<Long> createBargainActivity(@Valid @RequestBody BargainActivityBaseVO createReqVO) {
|
||||
public CommonResult<Long> createBargainActivity(@Valid @RequestBody BargainActivityCreateReqVO createReqVO) {
|
||||
return success(activityService.createBargainActivity(createReqVO));
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,14 @@
|
||||
package cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
||||
@Schema(description = "管理后台 - 砍价活动创建 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class BargainActivityCreateReqVO extends BargainActivityBaseVO {
|
||||
|
||||
}
|
@@ -15,7 +15,7 @@ public class BargainActivityPageReqVO extends PageParam {
|
||||
@Schema(description = "砍价名称", example = "赵六")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "活动状态:0开启 1关闭", example = "0")
|
||||
@Schema(description = "活动状态", example = "0")
|
||||
private Integer status;
|
||||
|
||||
}
|
||||
|
@@ -42,8 +42,8 @@ public interface CombinationActivityConvert {
|
||||
|
||||
CombinationProductRespVO convert(CombinationProductDO bean);
|
||||
|
||||
default CombinationActivityRespVO convert(CombinationActivityDO bean, List<CombinationProductDO> productDOs) {
|
||||
return convert(bean).setProducts(convertList2(productDOs));
|
||||
default CombinationActivityRespVO convert(CombinationActivityDO activity, List<CombinationProductDO> products) {
|
||||
return convert(activity).setProducts(convertList2(products));
|
||||
}
|
||||
|
||||
List<CombinationActivityRespVO> convertList(List<CombinationActivityDO> list);
|
||||
|
@@ -40,24 +40,24 @@ public interface SeckillActivityConvert {
|
||||
|
||||
PageResult<SeckillActivityRespVO> convertPage(PageResult<SeckillActivityDO> page);
|
||||
|
||||
default PageResult<SeckillActivityRespVO> convertPage(PageResult<SeckillActivityDO> page, List<SeckillProductDO> seckillProducts, List<ProductSpuRespDTO> spuList) {
|
||||
Map<Long, ProductSpuRespDTO> spuMap = CollectionUtils.convertMap(spuList, ProductSpuRespDTO::getId);
|
||||
default PageResult<SeckillActivityRespVO> convertPage(PageResult<SeckillActivityDO> page,
|
||||
List<SeckillProductDO> seckillProducts,
|
||||
List<ProductSpuRespDTO> spuList) {
|
||||
PageResult<SeckillActivityRespVO> pageResult = convertPage(page);
|
||||
// 拼接商品
|
||||
Map<Long, ProductSpuRespDTO> spuMap = CollectionUtils.convertMap(spuList, ProductSpuRespDTO::getId);
|
||||
pageResult.getList().forEach(item -> {
|
||||
MapUtils.findAndThen(spuMap, item.getSpuId(), spu -> {
|
||||
item.setSpuName(spu.getName());
|
||||
item.setPicUrl(spu.getPicUrl());
|
||||
});
|
||||
|
||||
item.setProducts(convertList2(seckillProducts));
|
||||
MapUtils.findAndThen(spuMap, item.getSpuId(),
|
||||
spu -> item.setSpuName(spu.getName()).setPicUrl(spu.getPicUrl()));
|
||||
});
|
||||
return pageResult;
|
||||
}
|
||||
|
||||
SeckillActivityDetailRespVO convert1(SeckillActivityDO seckillActivity);
|
||||
SeckillActivityDetailRespVO convert1(SeckillActivityDO activity);
|
||||
|
||||
default SeckillActivityDetailRespVO convert(SeckillActivityDO seckillActivity, List<SeckillProductDO> seckillProducts) {
|
||||
return convert1(seckillActivity).setProducts(convertList2(seckillProducts));
|
||||
default SeckillActivityDetailRespVO convert(SeckillActivityDO activity, List<SeckillProductDO> products) {
|
||||
return convert1(activity).setProducts(convertList2(products));
|
||||
}
|
||||
|
||||
@Mappings({
|
||||
@@ -77,6 +77,6 @@ public interface SeckillActivityConvert {
|
||||
return CollectionUtils.convertList(products, item -> convert(activity, item).setActivityStatus(activity.getStatus()));
|
||||
}
|
||||
|
||||
List<SeckillProductRespVO> convertList2(List<SeckillProductDO> productDOs);
|
||||
List<SeckillProductRespVO> convertList2(List<SeckillProductDO> list);
|
||||
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.promotion.dal.dataobject.bargain;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
@@ -38,7 +39,6 @@ public class BargainActivityDO extends BaseDO {
|
||||
* 活动开始时间
|
||||
*/
|
||||
private LocalDateTime startTime;
|
||||
|
||||
/**
|
||||
* 活动结束时间
|
||||
*/
|
||||
@@ -46,6 +46,8 @@ public class BargainActivityDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 活动状态
|
||||
*
|
||||
* 枚举 {@link CommonStatusEnum}
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
@@ -65,11 +67,15 @@ public class BargainActivityDO extends BaseDO {
|
||||
* 砍价底价,单位:分
|
||||
*/
|
||||
private Integer bargainPrice;
|
||||
/**
|
||||
* 砍价活动库存
|
||||
*/
|
||||
private Integer stock;
|
||||
|
||||
/**
|
||||
* 达到该人数,才能砍到低价
|
||||
*/
|
||||
private Integer userSize;
|
||||
|
||||
/**
|
||||
* 最大帮砍次数
|
||||
*/
|
||||
@@ -79,22 +85,14 @@ public class BargainActivityDO extends BaseDO {
|
||||
* 总限购数量
|
||||
*/
|
||||
private Integer totalLimitCount;
|
||||
|
||||
/**
|
||||
* 砍价活动库存
|
||||
*/
|
||||
private Integer stock;
|
||||
|
||||
/**
|
||||
* 用户每次砍价的最小金额,单位:分
|
||||
*/
|
||||
private Integer randomMinPrice;
|
||||
|
||||
/**
|
||||
* 用户每次砍价的最大金额,单位:分
|
||||
*/
|
||||
private Integer randomMaxPrice;
|
||||
|
||||
/**
|
||||
* 砍价成功数量
|
||||
*/
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package cn.iocoder.yudao.module.promotion.service.bargain;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityBaseVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityCreateReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityPageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityUpdateReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
|
||||
@@ -21,7 +21,7 @@ public interface BargainActivityService {
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createBargainActivity(@Valid BargainActivityBaseVO createReqVO);
|
||||
Long createBargainActivity(@Valid BargainActivityCreateReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新砍价活动
|
||||
|
@@ -1,22 +1,16 @@
|
||||
package cn.iocoder.yudao.module.promotion.service.bargain;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
|
||||
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.controller.admin.bargain.vo.BargainActivityBaseVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityCreateReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityPageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.BargainActivityUpdateReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.convert.bargain.BargainActivityConvert;
|
||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
|
||||
import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainActivityMapper;
|
||||
import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainRecordMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -27,7 +21,6 @@ import java.util.List;
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.anyMatch;
|
||||
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
@@ -39,62 +32,27 @@ import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
|
||||
@Validated
|
||||
public class BargainActivityServiceImpl implements BargainActivityService {
|
||||
|
||||
|
||||
@Resource
|
||||
private BargainActivityMapper bargainActivityMapper;
|
||||
@Resource
|
||||
private BargainRecordMapper recordMapper;
|
||||
@Resource
|
||||
private ProductSpuApi productSpuApi;
|
||||
|
||||
@Resource
|
||||
private ProductSkuApi productSkuApi;
|
||||
|
||||
private static void validateSku(Long skuId, List<ProductSkuRespDTO> skus) {
|
||||
// 校验商品 sku 是否存在
|
||||
if (!CollectionUtils.convertSet(skus, ProductSkuRespDTO::getId).contains(skuId)) {
|
||||
throw exception(SKU_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createBargainActivity(BargainActivityBaseVO createReqVO) {
|
||||
public Long createBargainActivity(BargainActivityCreateReqVO createReqVO) {
|
||||
// 校验商品 SPU 是否存在是否参加的别的活动
|
||||
validateBargainConflict(createReqVO.getSpuId(), null);
|
||||
// 获取所选 spu下的所有 sku
|
||||
List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(CollectionUtil.newArrayList(createReqVO.getSpuId()));
|
||||
validateSku(createReqVO.getSkuId(), skus);
|
||||
// 校验商品 sku 是否存在
|
||||
validateSku(createReqVO.getSkuId());
|
||||
|
||||
// 插入砍价活动
|
||||
BargainActivityDO activityDO = BargainActivityConvert.INSTANCE.convert(createReqVO);
|
||||
// TODO 营销相关属性初始化 砍价成功更新相关属性
|
||||
activityDO.setSuccessCount(0);
|
||||
activityDO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
BargainActivityDO activityDO = BargainActivityConvert.INSTANCE.convert(createReqVO)
|
||||
.setStatus(CommonStatusEnum.ENABLE.getStatus()).setSuccessCount(0);
|
||||
bargainActivityMapper.insert(activityDO);
|
||||
// 返回
|
||||
return activityDO.getId();
|
||||
}
|
||||
|
||||
private void validateBargainConflict(Long spuId, Long activityId) {
|
||||
// 校验商品 spu 是否存在
|
||||
List<ProductSpuRespDTO> spuList = productSpuApi.getSpuList(CollUtil.newArrayList(spuId));
|
||||
if (CollUtil.isEmpty(spuList)) {
|
||||
throw exception(SPU_NOT_EXISTS);
|
||||
}
|
||||
// 查询所有开启的砍价活动
|
||||
List<BargainActivityDO> activityDOs = bargainActivityMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
// 更新时排除自己
|
||||
if (activityId != null) {
|
||||
activityDOs.removeIf(item -> ObjectUtil.equal(item.getId(), activityId));
|
||||
}
|
||||
// 校验商品 spu 是否参加了其它活动
|
||||
if (anyMatch(activityDOs, s -> ObjectUtil.equal(s.getId(), spuId))) {
|
||||
throw exception(BARGAIN_ACTIVITY_SPU_CONFLICTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateBargainActivity(BargainActivityUpdateReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
BargainActivityDO activityDO = validateBargainActivityExists(updateReqVO.getId());
|
||||
@@ -104,15 +62,31 @@ public class BargainActivityServiceImpl implements BargainActivityService {
|
||||
}
|
||||
// 校验商品冲突
|
||||
validateBargainConflict(updateReqVO.getSpuId(), updateReqVO.getId());
|
||||
// 获取所选 spu下的所有 sku
|
||||
List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(CollectionUtil.newArrayList(updateReqVO.getSpuId()));
|
||||
// 校验商品 sku 是否存在
|
||||
validateSku(updateReqVO.getSkuId(), skus);
|
||||
validateSku(updateReqVO.getSkuId());
|
||||
|
||||
// 更新
|
||||
BargainActivityDO updateObj = BargainActivityConvert.INSTANCE.convert(updateReqVO);
|
||||
bargainActivityMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
private void validateBargainConflict(Long spuId, Long activityId) {
|
||||
// 查询所有开启的砍价活动
|
||||
List<BargainActivityDO> activityList = bargainActivityMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
if (activityId != null) { // 更新时排除自己
|
||||
activityList.removeIf(item -> ObjectUtil.equal(item.getId(), activityId));
|
||||
}
|
||||
// 校验商品 spu 是否参加了其它活动
|
||||
if (anyMatch(activityList, activity -> ObjectUtil.equal(activity.getSpuId(), spuId))) {
|
||||
throw exception(BARGAIN_ACTIVITY_SPU_CONFLICTS);
|
||||
}
|
||||
}
|
||||
|
||||
private void validateSku(Long skuId) {
|
||||
ProductSkuRespDTO sku = productSkuApi.getSku(skuId);
|
||||
if (sku == null) {
|
||||
throw exception(SKU_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -139,7 +113,7 @@ public class BargainActivityServiceImpl implements BargainActivityService {
|
||||
|
||||
@Override
|
||||
public BargainActivityDO getBargainActivity(Long id) {
|
||||
return validateBargainActivityExists(id);
|
||||
return bargainActivityMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user