当前位置: 首页 > ai >正文

新增优惠券

文章目录

    • 概要
    • 整体架构流程
    • 技术细节
    • 小结

概要

接口分析

一个基本的新增接口,按照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("新增优惠券接口")@PostMappingpublic 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@Transactionalpublic void saveCoupon(CouponFormDTO dto) {// 1.保存优惠券// 1.1.转POCoupon 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.转换POList<CouponScope> list = scopes.stream().map(bizId -> new CouponScope().setBizId(bizId).setCouponId(couponId)).collect(Collectors.toList());// 2.2.保存scopeService.saveBatch(list);}
}

3.Mapper层

效果展示

http://www.xdnf.cn/news/1659.html

相关文章:

  • 如何计算光伏电站的收益率
  • PyQt6基础_QProgressDialog
  • Discuz!+DeepSeek赋能虎跃办公:传统网址导航的智能进化之路
  • Python实例题:使用Pvthon3编写系列实用脚本
  • 【Java】jdk8安装——英文版
  • Java快速上手之实验4(接口回调)
  • 第13章:MCP服务端项目开发实战:向量检索
  • 如何在Spring Boot中配置自定义端口运行应用程序
  • 2025上海车展:光峰科技全球首发“灵境”智能车载光学系统
  • linux 中断子系统 层级中断编程
  • 【PVCodeNet】《Palm Vein Recognition Network Combining Transformer and CNN》
  • Python中random库的应用
  • openwrt作旁路由时的几个常见问题 openwrt作为旁路由配置zerotier 图文讲解
  • 【项目管理】进度网络图 笔记
  • Redis--预备知识以及String类型
  • 【刷题系列】LeetCode消失的数字、轮转数组
  • 前端微服务详解
  • Datawhale AI春训营——用AI帮助老人点餐
  • Redis 及其在系统设计中的作用
  • Docker 的基本概念和优势以及在应用程序开发中的实际应用
  • 金融行业一体化运维监控平台解决方案
  • 阶段性人生答疑解惑篇:穿越市场迷雾,重构生命坐标系
  • Java Thread类深度解析:构造方法与核心方法全攻略
  • 多级缓存架构深度解析:从设计原理到生产实践
  • 【AI提示词】艺人顾问
  • Turso:一个基于 libSQL的分布式数据库
  • 最新AI-Python机器学习与深度学习技术在植被参数反演中的核心技术应用
  • Vue.js 的组件化开发指南
  • 四、Python编程基础04
  • 【ES实战】Elasticsearch中模糊匹配类的查询