文章目录
概要
接口分析
一个基本的新增接口,按照Restful风格设计即可,关键是请求参数。之前表分析时已经详细介绍过这个页面及其中的字段,这里不再赘述。
需要特别注意的是,如果优惠券限定了使用范围,则需要保存限定的课程分类。而这些信息不再coupon表,而是一张中间关系表:coupon_scope
需求分析以及接口设计
技术细节
1.Controller层
package com.tianji.promotion.controller;
import com.tianji.promotion.domain.dto.CouponFormDTO;
import com.tianji.promotion.service.ICouponService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/coupons")
@Api(tags = "优惠券相关接口")
public class CouponController {
private final ICouponService couponService;
@ApiOperation("新增优惠券接口")
@PostMapping
public void saveCoupon(@RequestBody @Valid CouponFormDTO dto){
couponService.saveCoupon(dto);
}
}
2.Service层:
package com.tianji.promotion.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tianji.promotion.mapper.CouponMapper;
import com.tianji.promotion.service.ICouponScopeService;
import com.tianji.promotion.service.ICouponService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> implements ICouponService {
private final ICouponScopeService scopeService;
@Override
@Transactional
public void saveCoupon(CouponFormDTO dto) {
// 1.保存优惠券
// 1.1.转PO
Coupon coupon = BeanUtils.copyBean(dto, Coupon.class);
// 1.2.保存
save(coupon);
if (!dto.getSpecific()) {
// 没有范围限定
return;
}
Long couponId = coupon.getId();
// 2.保存限定范围
List<Long> scopes = dto.getScopes();
if (CollUtils.isEmpty(scopes)) {
throw new BadRequestException("限定范围不能为空");
}
// 2.1.转换PO
List<CouponScope> list = scopes.stream()
.map(bizId -> new CouponScope().setBizId(bizId).setCouponId(couponId))
.collect(Collectors.toList());
// 2.2.保存
scopeService.saveBatch(list);
}
}
3.Mapper层