mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	【功能简化】商城:1)拼团活动,移除用户主动取消,不常用;2)review 拼团相关的逻辑
This commit is contained in:
		@@ -10,9 +10,7 @@ import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.Ap
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.record.AppCombinationRecordSummaryRespVO;
 | 
			
		||||
import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert;
 | 
			
		||||
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.CombinationRecordService;
 | 
			
		||||
import cn.iocoder.yudao.module.trade.api.order.TradeOrderApi;
 | 
			
		||||
import io.swagger.v3.oas.annotations.Operation;
 | 
			
		||||
import io.swagger.v3.oas.annotations.Parameter;
 | 
			
		||||
import io.swagger.v3.oas.annotations.Parameters;
 | 
			
		||||
@@ -20,7 +18,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 | 
			
		||||
import jakarta.annotation.Resource;
 | 
			
		||||
import jakarta.validation.Valid;
 | 
			
		||||
import jakarta.validation.constraints.Max;
 | 
			
		||||
import org.springframework.context.annotation.Lazy;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
@@ -43,9 +40,6 @@ public class AppCombinationRecordController {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private CombinationRecordService combinationRecordService;
 | 
			
		||||
    @Resource
 | 
			
		||||
    @Lazy
 | 
			
		||||
    private TradeOrderApi tradeOrderApi;
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/get-summary")
 | 
			
		||||
    @Operation(summary = "获得拼团记录的概要信息", description = "用于小程序首页")
 | 
			
		||||
@@ -117,26 +111,4 @@ public class AppCombinationRecordController {
 | 
			
		||||
        return success(CombinationActivityConvert.INSTANCE.convert(getLoginUserId(), headRecord, memberRecords));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/cancel")
 | 
			
		||||
    @Operation(summary = "取消拼团")
 | 
			
		||||
    @Parameter(name = "id", description = "拼团记录编号", required = true, example = "1024")
 | 
			
		||||
    public CommonResult<Boolean> cancelCombinationRecord(@RequestParam("id") Long id) {
 | 
			
		||||
        Long userId = getLoginUserId();
 | 
			
		||||
        // 1、查找这条拼团记录
 | 
			
		||||
        CombinationRecordDO record = combinationRecordService.getCombinationRecordByIdAndUser(userId, id);
 | 
			
		||||
        if (record == null) {
 | 
			
		||||
            return success(Boolean.FALSE);
 | 
			
		||||
        }
 | 
			
		||||
        // 1.1、需要先校验拼团记录未完成;
 | 
			
		||||
        if (!CombinationRecordStatusEnum.isInProgress(record.getStatus())) {
 | 
			
		||||
            return success(Boolean.FALSE);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 2. 取消已支付的订单
 | 
			
		||||
        tradeOrderApi.cancelPaidOrder(userId, record.getOrderId());
 | 
			
		||||
        // 3. 取消拼团记录
 | 
			
		||||
        combinationRecordService.cancelCombinationRecord(userId, record.getId(), record.getHeadId());
 | 
			
		||||
        return success(Boolean.TRUE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -139,24 +139,6 @@ public interface CombinationRecordService {
 | 
			
		||||
                                                              @Nullable Integer status,
 | 
			
		||||
                                                              @Nullable Long headId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取拼团记录
 | 
			
		||||
     *
 | 
			
		||||
     * @param userId 用户编号
 | 
			
		||||
     * @param id     拼团记录编号
 | 
			
		||||
     * @return 拼团记录
 | 
			
		||||
     */
 | 
			
		||||
    CombinationRecordDO getCombinationRecordByIdAndUser(Long userId, Long id);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 取消拼团
 | 
			
		||||
     *
 | 
			
		||||
     * @param userId 用户编号
 | 
			
		||||
     * @param id     拼团记录编号
 | 
			
		||||
     * @param headId 团长编号
 | 
			
		||||
     */
 | 
			
		||||
    void cancelCombinationRecord(Long userId, Long id, Long headId);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 处理过期拼团
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,6 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
 | 
			
		||||
    private ProductSpuApi productSpuApi;
 | 
			
		||||
    @Resource
 | 
			
		||||
    private ProductSkuApi productSkuApi;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    @Lazy // 延迟加载,避免循环依赖
 | 
			
		||||
    private TradeOrderApi tradeOrderApi;
 | 
			
		||||
@@ -289,61 +288,6 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
 | 
			
		||||
        return combinationRecordMapper.selectCombinationRecordCountMapByActivityIdAndStatusAndHeadId(activityIds, status, headId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public CombinationRecordDO getCombinationRecordByIdAndUser(Long userId, Long id) {
 | 
			
		||||
        return combinationRecordMapper.selectOne(CombinationRecordDO::getUserId, userId, CombinationRecordDO::getId, id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class)
 | 
			
		||||
    public void cancelCombinationRecord(Long userId, Long id, Long headId) {
 | 
			
		||||
        // 删除记录
 | 
			
		||||
        combinationRecordMapper.deleteById(id);
 | 
			
		||||
 | 
			
		||||
        // 需要更新的记录
 | 
			
		||||
        List<CombinationRecordDO> updateRecords = new ArrayList<>();
 | 
			
		||||
        // 如果它是团长,则顺序(下单时间)继承
 | 
			
		||||
        if (Objects.equals(headId, CombinationRecordDO.HEAD_ID_GROUP)) { // 情况一:团长
 | 
			
		||||
            // 团员
 | 
			
		||||
            List<CombinationRecordDO> list = getCombinationRecordListByHeadId(id);
 | 
			
		||||
            if (CollUtil.isEmpty(list)) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // 按照创建时间升序排序
 | 
			
		||||
            list.sort(Comparator.comparing(CombinationRecordDO::getCreateTime)); // 影响原 list
 | 
			
		||||
            CombinationRecordDO newHead = list.get(0); // 新团长继位
 | 
			
		||||
            list.forEach(item -> {
 | 
			
		||||
                CombinationRecordDO recordDO = new CombinationRecordDO();
 | 
			
		||||
                recordDO.setId(item.getId());
 | 
			
		||||
                if (ObjUtil.equal(item.getId(), newHead.getId())) { // 新团长
 | 
			
		||||
                    recordDO.setHeadId(CombinationRecordDO.HEAD_ID_GROUP);
 | 
			
		||||
                } else {
 | 
			
		||||
                    recordDO.setHeadId(newHead.getId());
 | 
			
		||||
                }
 | 
			
		||||
                recordDO.setUserCount(list.size());
 | 
			
		||||
                updateRecords.add(recordDO);
 | 
			
		||||
            });
 | 
			
		||||
        } else { // 情况二:团员
 | 
			
		||||
            // 团长
 | 
			
		||||
            CombinationRecordDO recordHead = combinationRecordMapper.selectById(headId);
 | 
			
		||||
            // 团员
 | 
			
		||||
            List<CombinationRecordDO> records = getCombinationRecordListByHeadId(headId);
 | 
			
		||||
            if (CollUtil.isEmpty(records)) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            records.add(recordHead); // 加入团长,团长数据也需要更新
 | 
			
		||||
            records.forEach(item -> {
 | 
			
		||||
                CombinationRecordDO recordDO = new CombinationRecordDO();
 | 
			
		||||
                recordDO.setId(item.getId());
 | 
			
		||||
                recordDO.setUserCount(records.size());
 | 
			
		||||
                updateRecords.add(recordDO);
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 更新拼团记录
 | 
			
		||||
        combinationRecordMapper.updateBatch(updateRecords);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public KeyValue<Integer, Integer> expireCombinationRecord() {
 | 
			
		||||
        // 1. 获取所有正在进行中的过期的父拼团
 | 
			
		||||
 
 | 
			
		||||
@@ -855,12 +855,14 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 | 
			
		||||
    @Override
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class)
 | 
			
		||||
    public void cancelPaidOrder(Long userId, Long orderId) {
 | 
			
		||||
        // TODO 芋艿:这里实现要优化下;
 | 
			
		||||
        // TODO @puhui999:需要校验状态;已支付的情况下,才可以。
 | 
			
		||||
        TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId);
 | 
			
		||||
        if (order == null) {
 | 
			
		||||
            throw exception(ORDER_NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
 | 
			
		||||
 | 
			
		||||
        // TODO @puhui999:需要退款
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user