code review:营销文章

This commit is contained in:
YunaiV 2023-10-19 23:41:39 +08:00
parent 64b842ed94
commit 453f69931f
7 changed files with 22 additions and 23 deletions

View File

@ -46,7 +46,7 @@ public class AppActivityController {
@Parameter(name = "spuId", description = "商品编号", required = true) @Parameter(name = "spuId", description = "商品编号", required = true)
public CommonResult<List<AppActivityRespVO>> getActivityListBySpuId(@RequestParam("spuId") Long spuId) { public CommonResult<List<AppActivityRespVO>> getActivityListBySpuId(@RequestParam("spuId") Long spuId) {
// 每种活动只返回一个 // 每种活动只返回一个
return success(getAppActivityRespVOList(Collections.singletonList(spuId))); return success(getAppActivityList(Collections.singletonList(spuId)));
} }
@GetMapping("/list-by-spu-ids") @GetMapping("/list-by-spu-ids")
@ -57,16 +57,17 @@ public class AppActivityController {
return success(MapUtil.empty()); return success(MapUtil.empty());
} }
// 每种活动只返回一个key SPU 编号 // 每种活动只返回一个key SPU 编号
return success(convertMultiMap(getAppActivityRespVOList(spuIds), AppActivityRespVO::getSpuId)); return success(convertMultiMap(getAppActivityList(spuIds), AppActivityRespVO::getSpuId));
} }
private List<AppActivityRespVO> getAppActivityRespVOList(Collection<Long> spuIds) { private List<AppActivityRespVO> getAppActivityList(Collection<Long> spuIds) {
if (CollUtil.isEmpty(spuIds)) { if (CollUtil.isEmpty(spuIds)) {
return new ArrayList<>(); return new ArrayList<>();
} }
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
List<AppActivityRespVO> activityList = new ArrayList<>(); List<AppActivityRespVO> activityList = new ArrayList<>();
// 拼团活动-获取开启的且开始的且没有结束的活动
// 1. 拼团活动 - 获取开启的且开始的且没有结束的活动
List<CombinationActivityDO> combinationActivities = combinationActivityService.getCombinationActivityBySpuIdsAndStatusAndDateTimeLt( List<CombinationActivityDO> combinationActivities = combinationActivityService.getCombinationActivityBySpuIdsAndStatusAndDateTimeLt(
spuIds, CommonStatusEnum.ENABLE.getStatus(), now); spuIds, CommonStatusEnum.ENABLE.getStatus(), now);
if (CollUtil.isNotEmpty(combinationActivities)) { if (CollUtil.isNotEmpty(combinationActivities)) {
@ -76,7 +77,8 @@ public class AppActivityController {
.setSpuId(item.getSpuId()).setStartTime(item.getStartTime()).setEndTime(item.getEndTime())); .setSpuId(item.getSpuId()).setStartTime(item.getStartTime()).setEndTime(item.getEndTime()));
}); });
} }
// 秒杀活动-获取开启的且开始的且没有结束的活动
// 2. 秒杀活动 - 获取开启的且开始的且没有结束的活动
List<SeckillActivityDO> seckillActivities = seckillActivityService.getSeckillActivityBySpuIdsAndStatusAndDateTimeLt( List<SeckillActivityDO> seckillActivities = seckillActivityService.getSeckillActivityBySpuIdsAndStatusAndDateTimeLt(
spuIds, CommonStatusEnum.ENABLE.getStatus(), now); spuIds, CommonStatusEnum.ENABLE.getStatus(), now);
if (CollUtil.isNotEmpty(seckillActivities)) { if (CollUtil.isNotEmpty(seckillActivities)) {
@ -86,7 +88,8 @@ public class AppActivityController {
.setSpuId(item.getSpuId()).setStartTime(item.getStartTime()).setEndTime(item.getEndTime())); .setSpuId(item.getSpuId()).setStartTime(item.getStartTime()).setEndTime(item.getEndTime()));
}); });
} }
// 砍价活动-获取开启的且开始的且没有结束的活动
// 3. 砍价活动 - 获取开启的且开始的且没有结束的活动
List<BargainActivityDO> bargainActivities = bargainActivityService.getBargainActivityBySpuIdsAndStatusAndDateTimeLt( List<BargainActivityDO> bargainActivities = bargainActivityService.getBargainActivityBySpuIdsAndStatusAndDateTimeLt(
spuIds, CommonStatusEnum.ENABLE.getStatus(), now); spuIds, CommonStatusEnum.ENABLE.getStatus(), now);
if (CollUtil.isNotEmpty(bargainActivities)) { if (CollUtil.isNotEmpty(bargainActivities)) {

View File

@ -32,7 +32,7 @@ public class AppArticleCategoryController {
public CommonResult<List<AppArticleCategoryRespVO>> getArticleCategoryList() { public CommonResult<List<AppArticleCategoryRespVO>> getArticleCategoryList() {
List<ArticleCategoryDO> categoryList = articleCategoryService.getArticleCategoryListByStatus( List<ArticleCategoryDO> categoryList = articleCategoryService.getArticleCategoryListByStatus(
CommonStatusEnum.ENABLE.getStatus()); CommonStatusEnum.ENABLE.getStatus());
categoryList.sort(Comparator.comparing(ArticleCategoryDO::getSort).reversed()); // sort 降序排列 categoryList.sort(Comparator.comparing(ArticleCategoryDO::getSort)); // sort 降序排列
return success(ArticleCategoryConvert.INSTANCE.convertList04(categoryList)); return success(ArticleCategoryConvert.INSTANCE.convertList04(categoryList));
} }

View File

@ -56,10 +56,12 @@ public class AppArticleController {
return success(ArticleConvert.INSTANCE.convert01(articleService.getArticle(id))); return success(ArticleConvert.INSTANCE.convert01(articleService.getArticle(id)));
} }
// TODO @puhui999add-browse-count 前端 uniapp 也要接下就是打开文章的时候调用下这个接口
@PutMapping("/add-browseCount") @PutMapping("/add-browseCount")
@Operation(summary = "增加文章浏览量") @Operation(summary = "增加文章浏览量")
@Parameter(name = "id", description = "文章编号", example = "1024") @Parameter(name = "id", description = "文章编号", example = "1024")
public CommonResult<Boolean> addBrowseCount(@RequestParam("id") Long id) { public CommonResult<Boolean> addBrowseCount(@RequestParam("id") Long id) {
// TODO @puhui999addArticleBrowseCount
articleService.addBrowseCount(id); articleService.addBrowseCount(id);
return success(true); return success(true);
} }

View File

@ -204,9 +204,6 @@ public interface CombinationActivityConvert {
return respVO; return respVO;
} }
@Mapping(target = "id", ignore = true)
CombinationRecordDO convert5(CombinationRecordDO headRecord);
/** /**
* 转换生成虚拟成团虚拟记录 * 转换生成虚拟成团虚拟记录
* *
@ -214,21 +211,19 @@ public interface CombinationActivityConvert {
* @return 虚拟记录列表 * @return 虚拟记录列表
*/ */
default List<CombinationRecordDO> convertVirtualRecordList(CombinationRecordDO headRecord) { default List<CombinationRecordDO> convertVirtualRecordList(CombinationRecordDO headRecord) {
List<CombinationRecordDO> createRecords = new ArrayList<>();
// 计算需要创建的虚拟成团记录数量
int count = headRecord.getUserSize() - headRecord.getUserCount(); int count = headRecord.getUserSize() - headRecord.getUserCount();
List<CombinationRecordDO> createRecords = new ArrayList<>(count);
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
// 基础信息和团长保持一致 // 基础信息和团长保持一致
CombinationRecordDO newRecord = convert5(headRecord); CombinationRecordDO newRecord = convert5(headRecord);
// 虚拟信息 // 虚拟信息
newRecord.setCount(0); newRecord.setCount(0) // 会单独更新下在后续的 Service 逻辑里
newRecord.setUserId(0L); .setUserId(0L).setNickname("").setAvatar("").setOrderId(0L);
newRecord.setNickname("");
newRecord.setAvatar("");
newRecord.setOrderId(0L);
createRecords.add(newRecord); createRecords.add(newRecord);
} }
return createRecords; return createRecords;
} }
@Mapping(target = "id", ignore = true)
CombinationRecordDO convert5(CombinationRecordDO headRecord);
} }

View File

@ -102,6 +102,7 @@ public interface BargainActivityMapper extends BaseMapperX<BargainActivityDO> {
.groupBy("spu_id")); .groupBy("spu_id"));
} }
// TODO @puhui999是不是只要 endTime 小于就可以啦
/** /**
* 获取指定活动编号的活动列表且 * 获取指定活动编号的活动列表且
* 开始时间和结束时间小于给定时间 dateTime 的活动列表 * 开始时间和结束时间小于给定时间 dateTime 的活动列表

View File

@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.article.ArticleCategoryD
import cn.iocoder.yudao.module.promotion.dal.dataobject.article.ArticleDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.article.ArticleDO;
import cn.iocoder.yudao.module.promotion.dal.mysql.article.ArticleMapper; import cn.iocoder.yudao.module.promotion.dal.mysql.article.ArticleMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -112,12 +111,10 @@ public class ArticleServiceImpl implements ArticleService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void addBrowseCount(Long id) { public void addBrowseCount(Long id) {
// 校验文章是否存在 // 校验文章是否存在
validateArticleExists(id); validateArticleExists(id);
// 增加浏览次数
// 增加浏览次数 TODO 先简单做用户规模不大 +1
articleMapper.updateBrowseCount(id); articleMapper.updateBrowseCount(id);
} }

View File

@ -369,6 +369,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
keyValue.setValue(keyValue.getValue() + 1); keyValue.setValue(keyValue.getValue() + 1);
} }
} catch (Exception ignored) { // 处理异常继续循环 } catch (Exception ignored) { // 处理异常继续循环
// TODO @puhui999拼团过期 or 虚拟成团 可以改成 expireCombinationRecord因为找方法更容易一些
log.error("[拼团过期 or 虚拟成团][record({}) 处理异常请进行处理record 数据是:{}]", log.error("[拼团过期 or 虚拟成团][record({}) 处理异常请进行处理record 数据是:{}]",
record.getId(), JsonUtils.toJsonString(record)); record.getId(), JsonUtils.toJsonString(record));
} }
@ -383,10 +384,10 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void handleExpireRecord(CombinationRecordDO headRecord) { public void handleExpireRecord(CombinationRecordDO headRecord) {
// 1.更新拼团记录 // 1. 更新拼团记录
List<CombinationRecordDO> headAndRecords = updateBatchCombinationRecords(headRecord, List<CombinationRecordDO> headAndRecords = updateBatchCombinationRecords(headRecord,
CombinationRecordStatusEnum.FAILED); CombinationRecordStatusEnum.FAILED);
// 2.订单取消 // 2. 订单取消
headAndRecords.forEach(item -> tradeOrderApi.cancelPaidOrder(item.getUserId(), item.getOrderId())); headAndRecords.forEach(item -> tradeOrderApi.cancelPaidOrder(item.getUserId(), item.getOrderId()));
} }