【项目学习01_2024.05.08_Day06】

news2024/11/20 2:37:50

学习笔记

  • 5 新增课程
    • 5.1 需求分析
      • 5.1.1 业务流程
      • 5.1.2 数据模型
    • 5.2 接口定义
    • 5.3 接口开发
      • 5.3.1 保存课程基本信息
      • 5.3.2 保存营销信息
    • 5.4 接口测试

5 新增课程

5.1 需求分析

5.1.1 业务流程

5.1.2 数据模型

5.2 接口定义

在这里插入图片描述

5.3 接口开发

根据需求分析,新增课程表单中包括了课程基本信息、课程营销信息,需要分别向课程基本信息表、课程营销表保证数据。

5.3.1 保存课程基本信息

编写service接口实现类,实现向课程基本信息表保存数据

 @Override
    public CourseBaseInfoDto creatCourseBase(Long companyID, AddCourseDto addCourseDto) {

        //参数的合法性校验
		//合法性校验
 if (StringUtils.isBlank(dto.getName())) {
  throw new RuntimeException("课程名称为空");
 }

 if (StringUtils.isBlank(dto.getMt())) {
  throw new RuntimeException("课程分类为空");
 }

 if (StringUtils.isBlank(dto.getSt())) {
  throw new RuntimeException("课程分类为空");
 }

 if (StringUtils.isBlank(dto.getGrade())) {
  throw new RuntimeException("课程等级为空");
 }

 if (StringUtils.isBlank(dto.getTeachmode())) {
  throw new RuntimeException("教育模式为空");
 }

 if (StringUtils.isBlank(dto.getUsers())) {
  throw new RuntimeException("适应人群为空");
 }

 if (StringUtils.isBlank(dto.getCharge())) {

        //向课程基本信息表course_base写入数据
//向课程基本信息表course_base写入数据
        CourseBase courseBaseNew = new CourseBase();
        //将传入的页面参数dto放到courseBaseNew这个对象中
//        courseBaseNew.setName(dto.getName());
//        courseBaseNew.setMt(dto.getMt());
//        ......
        //上边的从原始对象中get拿数据向新对象set,属性比较多,麻烦
        BeanUtils.copyProperties(dto,courseBaseNew); //将前者dto的属性值拷贝给courseBaseNew,拷贝属性名一致的

        courseBaseNew.setCompanyId(companyID); //不是dto传来的值
        courseBaseNew.setCreateDate(LocalDateTime.now()); //创建时间
        //审核状态默认为未提交
        courseBaseNew.setAuditStatus("202002"); //查看dictionary表未提交对应的码
        //发布状态为未发布
        courseBaseNew.setStatus("203001");  //同上

        //插入数据库
        int insert = courseBaseMapper.insert(courseBaseNew);
        if(insert<0){
            throw new RuntimeException("添加课程失败");
        }

        //向课程营销表course_market写入数据
        //--to do


        return null;
    }

5.3.2 保存营销信息

 @Override
   public CourseBaseInfoDto creatCourseBase(Long companyID, AddCourseDto addCourseDto) {
//--------------
//向课程营销表保存课程营销信息
       //课程营销信息
       CourseMarket courseMarketNew = new CourseMarket();
       Long courseId = courseBaseNew.getId();
       BeanUtils.copyProperties(dto,courseMarketNew);
       courseMarketNew.setId(courseId);
       int i = saveCourseMarket(courseMarketNew); //保存课堂营销信息
       if(i<=0){
           throw new RuntimeException("保存课堂营销信息失败");
       }

       //查询课程基本信息及营销信息并返回
       return getCourseBaseInfo(courseId);


   }
   //保存课堂营销信息
   private int saveCourseMarket(CourseMarket courseMarketNew){
       //收费规则
       String charge = courseMarketNew.getCharge();
       if(StringUtils.isBlank(charge)){
           throw new RuntimeException("收费规则没有选择");
       }
       //收费规则为收费
       if(charge.equals("201001")){
           if(courseMarketNew.getPrice()==null || courseMarketNew.getPrice().floatValue()<=0){
               throw new RuntimeException("课程收费价格不能为空且必须大于0");
           }
       }
       //根据id从课堂营销查询
       CourseMarket courseMarketObj = courseMarketMapper.selectById(courseMarketNew.getId());
       if(courseMarketObj == null){
           return  courseMarketMapper.insert(courseMarketNew); //插入courseMarketNew的数据
       }else{
           BeanUtils.copyProperties(courseMarketNew,courseMarketObj);
           courseMarketObj.setId(courseMarketNew.getId());
           return courseMarketMapper.updateById(courseMarketObj);
       }
   }

   //根据课程id查询课程基本信息,包括基本信息和营销信息
   private CourseBaseInfoDto getCourseBaseInfo(Long courseId){
       CourseBaseInfoDto courseBaseInfoDto = new CourseBaseInfoDto();

       CourseBase courseBase = courseBaseMapper.selectById(courseId);
       if(courseBase == null){
           return null;
       }
       CourseMarket courseMarket = courseMarketMapper.selectById(courseId);
       BeanUtils.copyProperties(courseBase,courseBaseInfoDto);
       if(courseMarket !=null){
           BeanUtils.copyProperties(courseMarket,courseBaseInfoDto);
       }

       //查询分类名称并设置
       CourseCategory courseCategoryBySt = courseCategoryMapper.selectById(courseBase.getSt());
       courseBaseInfoDto.setStName(courseCategoryBySt.getName());
       CourseCategory courseCategoryByMt = courseCategoryMapper.selectById(courseBase.getMt());
       courseBaseInfoDto.setMtName(courseCategoryByMt.getName());

       return courseBaseInfoDto;
   }
}

5.4 接口测试

访问:http://localhost:63040/content/swagger-ui.html
在这里插入图片描述
或者xc-content-api.http添加下面的内容
在这里插入图片描述

### 新增课程
POST {{content_host}}/content/content/course
Content-Type: application/json

{
  "charge": "201000",
  "description": "冲冲冲",
  "grade": "204001",
  "mt": "1-1",
  "name": "java网络编程高级",
  "originalPrice": 0,
  "phone": "18888888",
  "pic": "暂无",
  "price": 0,
  "qq": "22333",
  "st": "1-1-1",
  "tags": "",
  "teachmode": "200002",
  "users": "初级人员",
  "validDays": 365,
  "wechat": "223344"
}

2024-05-08T190437.200.json
{
“id”: 125,
“companyId”: 12345678,
“companyName”: null,
“name”: “java网络编程高级”,
“users”: “初级人员”,
“tags”: “”,
“mt”: “1-1”,
“st”: “1-1-1”,
“grade”: “204001”,
“teachmode”: “200002”,
“description”: “冲冲冲”,
“pic”: “暂无”,
“createDate”: “2024-05-08 19:04:37”,
“changeDate”: null,
“createPeople”: null,
“changePeople”: null,
“auditStatus”: “202002”,
“status”: “203001”,
“charge”: “201000”,
“price”: 0.0,
“originalPrice”: 0.0,
“qq”: “22333”,
“wechat”: “223344”,
“phone”: “18888888”,
“validDays”: 365,
“mtName”: “前端开发”,
“stName”: “HTML/CSS”
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1655178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中的类和对象的概念理解和创建方法1——基本概念的理解和具体程序实例

Python中的类和对象的概念理解和创建方法1——基本概念的理解和具体程序实例 目录 Python中的类和对象的概念理解和创建方法1——基本概念的理解和具体程序实例一、类和对象的概念二、类和对象的关系2.1 两者辩证关系2.2 两者内部的对应关系 三、类和对象的优势3.1 多态性3.2 封…

添加一个索引要投产,需要哪些步骤?

编程一生 致力于写大家都能看懂的、有深度的 技术文章 05/2024 01 开场白 亚马逊有个bar raiser文化。就是说新招来的人一定要超过之前入职人员的平均水平&#xff0c;宁缺毋滥。越来越多的公司在推行这种文化。在这种氛围下&#xff1a;“虽然我不懂&#xff0c;但是活儿是能出…

Spring自定义配置属性类

以一个minio的配置类为例 首先&#xff0c;由于minio模块被很多微服务需要&#xff0c;因此封装了一个starter&#xff0c;当背的微服务需要的时候就进行引入。 以下是starter模块的结构图 一、spring.factories文件 org.springframework.boot.autoconfigure.EnableAutoConf…

【管理篇】如何管理情绪?

目录标题 为什么要特别关注激动和愤怒两种情绪呢&#xff1f;管理自己的情绪大致的步骤三层脑结构爬行脑情绪脑视觉脑 大家说的情绪管理&#xff0c;基本上都是对于情绪激动、生气甚至是愤怒的管理&#xff1b;日常所说的情绪化&#xff0c;一般也是指某个人特别容易情绪激动&a…

Java | Leetcode Java题解之第78题子集

题目&#xff1a; 题解&#xff1a; class Solution {List<Integer> t new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> subsets(int[] nums) {dfs(0, nums…

Ansible--Templates 模块 Tags模块 Roles模块

一 Templates 模块 ①Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件&#xff0c;可看作一个编译过的模 板文件&#xff0c;用来产生目标文本&#xff0c;传递Python的变量给模板去替换模板中的标记。 ②在配置文件中&#xff0c;会有一些数据&#xff08;如…

YOLOv8改进 | 独家创新篇 | 利用MobileNetV4的UIB模块二次创新C2f(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用MobileNetV4的UIB模块二次创新C2f&#xff0c;其中UIB模块来自2024.5月发布的MobileNetV4网络&#xff0c;其是一种高度优化的神经网络架构&#xff0c;专为移动设备设计。它最新的改动总结主要有两点&#xff0c;采用了通用反向瓶…

rust打包编译为mac或者linux可执行文件,发送到别的电脑不能运行

如果使用rust项目编译为linux或者mac可执行文件&#xff0c;发送到别的电脑之后&#xff0c;不可以直接运行&#xff0c;而是显示一个空白文件&#xff0c;双击也没有反应&#xff0c;其实这是因为这个文件没有可执行权限导致的&#xff0c;添加可执行权限就可以了&#xff1a;…

沙盘Sandboxie v5.56.4

菜鸟高手裸奔工具沙盘Sandboxie是一款国外著名的系统安全工具&#xff0c;它可以让选定程序在安全的隔离环境下运行&#xff0c; 只要在此环境中运行的软件&#xff0c;浏览器或注册表信息等都可以完整的进行清空&#xff0c;不留一点痕迹。同时可以防御些 带有木马或者病毒的…

24证券从业资格报名照片要求✅如何上传?

✨24证券从业报名今天下午3点开始喽&#xff01; 话说&#xff0c;每次都有人证券报名照片不符合规格导致报名不通过&#xff0c;建议大家提前了解一下注意事项和要求&#xff01; 之前考过还需要上传照片吗&#xff1f; ✅老考生之前传过照片不用上传了。 ✅首次注册过但没有考…

EMAP的Root工程及其他工具

首先右击项目导航&#xff0c;新建EMAP系统配置 上方辅助工具功能&#xff1a; 1 2 3 4 5 6 7 8 9 10 查看重复数据模型:显示为放大镜标识&#xff0c;可以显示所有应用中相同…

mysql oceanbase数据库alter语句阻塞,解决方案

获取当前阻塞事件 select d.trx_started, a.thread_id, b.processlist_id, a.SQL_text from performance_schema.events_statements_current ajoin performance_schema.threads b on a.thread_id b.thread_idjoin information_schema.processlist c on b.processlist_id c.i…

Sealos急速部署生产用k8s集群

最近一段时间部署k8s全部使用sealos了&#xff0c;整体使用感觉良好&#xff0c;基本没有什么坑。推荐给大家。 使用 Sealos&#xff0c;可以安装一个不包含任何组件的裸 Kubernetes 集群。 最大的好处是提供 99 年证书&#xff0c;用到我跑路是足够了。不用像之前kubeadm安装…

使用Docker安装Whistle Web Debugging Proxy

大家好&#xff0c;继续给大家分享如何使用docker来安装Whistle Web Debugging Proxy&#xff0c;关于Whistle Web Debugging Proxy的介绍和使用&#xff0c;大家可以参考下面文章&#xff0c;希望本文能够给大家的工作带来一定帮助。 Whistle Web Debugging Proxy介绍及使用 …

echarts 处理数据

假如 我数据是这样式的 一个数组里边包含两个对象 var data [{ "gender": "female", "height": 161.2, "weight": 51.6 }, { "gender": "female", "height": 167.5, "weight": 59 }] 想转换…

Redis进阶学习

Redis进阶学习 一、Redis事务1.2 Redis监控1.3 Jedis连接1.4 SpringBoot整合1.5 自定义RedisTemple1.6 Redis.conf详解 二、 Redis持久化2.1 RDB2.2 AOF进程 三、Redis发布订阅3.1 Redis主从复制3.2 集群环境配置3.3、复制原理3.4、宕机后主动变为主机3.5、哨兵模式 四、Redis缓…

文件属性与目录-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

文件属性与目录 1、七种文件类型 普通文件&#xff08;regular file&#xff09; 普通文件中的数据存在系统磁盘中&#xff0c;可以访问文件中的内容&#xff0c;文件中的内容以字节为单位进行存储于访问。 文本文件 ASCII 码字符 常见的.c、.h、.sh、.txt 等 这些都是文本文…

设计模式之单例模式详解

单例模式 描述&#xff1a;单例&#xff08;Singleton&#xff09;模式的定义&#xff1a;指一个类只有一个实例&#xff0c;且该类能自行创建这个实例的一种模式。 核心特点 单例类只有一个实例对象&#xff1b;该单例对象必须由单例类自行创建&#xff1b;单例类对外提供一…

Hive SQL-DML-insert插入数据

Hive SQL-DML-insert插入数据 1. 插入静态数据 可以直接插入具体的值到Hive表中&#xff1a; INSERT INTO TABLE tablename (column1, column2, column3) VALUES (value1, value2, value3),(value4, value5, value6),...;2. 插入查询结果 将一条查询的结果直接插入到另一个表中…

webpack从零到1 构建 vue3

为什么要手写webpack 不用cli &#xff08;无的放矢&#xff09;并不是 其实是为了加深我们对webpack 的了解方便以后灵活运用webpack 的技术 初始化项目结构&#xff08;跟cli 结构保持一致&#xff09; 新建 public src 等文件夹npm init -y 创建package.json文件tsc --init…