package cn.iocoder.yudao.module.promotion.controller.admin.combination; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 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.product.api.spu.dto.ProductSpuRespDTO; import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.*; import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert; import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO; import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum; import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService; import cn.iocoder.yudao.module.promotion.service.combination.CombinationRecordService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import static cn.hutool.core.collection.CollectionUtil.newArrayList; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Tag(name = "管理后台 - 拼团活动") @RestController @RequestMapping("/promotion/combination-activity") @Validated public class CombinationActivityController { @Resource private CombinationActivityService combinationActivityService; @Resource private CombinationRecordService combinationRecordService; @Resource private ProductSpuApi productSpuApi; @PostMapping("/create") @Operation(summary = "创建拼团活动") @PreAuthorize("@ss.hasPermission('promotion:combination-activity:create')") public CommonResult createCombinationActivity(@Valid @RequestBody CombinationActivityCreateReqVO createReqVO) { return success(combinationActivityService.createCombinationActivity(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新拼团活动") @PreAuthorize("@ss.hasPermission('promotion:combination-activity:update')") public CommonResult updateCombinationActivity(@Valid @RequestBody CombinationActivityUpdateReqVO updateReqVO) { combinationActivityService.updateCombinationActivity(updateReqVO); return success(true); } @PutMapping("/close") @Operation(summary = "关闭拼团活动") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('promotion:combination-activity:close')") public CommonResult closeCombinationActivity(@RequestParam("id") Long id) { combinationActivityService.closeCombinationActivityById(id); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除拼团活动") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('promotion:combination-activity:delete')") public CommonResult deleteCombinationActivity(@RequestParam("id") Long id) { combinationActivityService.deleteCombinationActivity(id); return success(true); } @GetMapping("/get") @Operation(summary = "获得拼团活动") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('promotion:combination-activity:query')") public CommonResult getCombinationActivity(@RequestParam("id") Long id) { CombinationActivityDO activity = combinationActivityService.getCombinationActivity(id); List products = combinationActivityService.getCombinationProductListByActivityIds(newArrayList(id)); return success(CombinationActivityConvert.INSTANCE.convert(activity, products)); } @GetMapping("/list-by-ids") @Operation(summary = "获得拼团活动列表,基于活动编号数组") @Parameter(name = "ids", description = "活动编号数组", required = true, example = "[1024, 1025]") public CommonResult> getCombinationActivityListByIds(@RequestParam("ids") List ids) { // 1. 获得开启的活动列表 List activityList = combinationActivityService.getCombinationActivityListByIds(ids); activityList.removeIf(activity -> CommonStatusEnum.isDisable(activity.getStatus())); if (CollUtil.isEmpty(activityList)) { return success(Collections.emptyList()); } // 2. 拼接返回 List productList = combinationActivityService.getCombinationProductListByActivityIds( convertList(activityList, CombinationActivityDO::getId)); List spuList = productSpuApi.getSpuList(convertList(activityList, CombinationActivityDO::getSpuId)); return success(CombinationActivityConvert.INSTANCE.convertList(activityList, productList, spuList)); } @GetMapping("/page") @Operation(summary = "获得拼团活动分页") @PreAuthorize("@ss.hasPermission('promotion:combination-activity:query')") public CommonResult> getCombinationActivityPage( @Valid CombinationActivityPageReqVO pageVO) { // 查询拼团活动 PageResult pageResult = combinationActivityService.getCombinationActivityPage(pageVO); if (CollUtil.isEmpty(pageResult.getList())) { return success(PageResult.empty(pageResult.getTotal())); } // 统计数据 Set activityIds = convertSet(pageResult.getList(), CombinationActivityDO::getId); Map groupCountMap = combinationRecordService.getCombinationRecordCountMapByActivity( activityIds, null, CombinationRecordDO.HEAD_ID_GROUP); Map groupSuccessCountMap = combinationRecordService.getCombinationRecordCountMapByActivity( activityIds, CombinationRecordStatusEnum.SUCCESS.getStatus(), CombinationRecordDO.HEAD_ID_GROUP); Map recordCountMap = combinationRecordService.getCombinationRecordCountMapByActivity( activityIds, null, null); // 拼接数据 List products = combinationActivityService.getCombinationProductListByActivityIds( convertSet(pageResult.getList(), CombinationActivityDO::getId)); List spus = productSpuApi.getSpuList( convertSet(pageResult.getList(), CombinationActivityDO::getSpuId)); return success(CombinationActivityConvert.INSTANCE.convertPage(pageResult, products, groupCountMap, groupSuccessCountMap, recordCountMap, spus)); } }