【项目学习01_2024.05.08_Day06】

学习笔记

  • 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接口实现类,实现向课程基本信息表保存数据

 @Overridepublic 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 doreturn null;}

5.3.2 保存营销信息

 @Overridepublic 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.mzph.cn/diannao/8504.shtml

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

相关文章

MIMO和RIS的一些学习

1.Accurate Beam Training for RIS-Assisted Wideband Terahertz Communication&#xff08;RIS 辅助宽带太赫兹通信的精确波束训练&#xff09; 摘要&#xff1a;太赫兹 (THz) 通信被广泛认为是未来 6G 无线系统最有前途的技术之一。为了应对太赫兹系统中的高路径损耗&#x…

【智能楼宇秘籍】一网关多协议无缝对接BACnet+OPC+MQTT

在繁华的都市中心&#xff0c;一座崭新的大型商业综合体拔地而起&#xff0c;集购物、餐饮、娱乐、办公于一体&#xff0c;是现代城市生活的缩影。然而&#xff0c;这座综合体的幕后英雄——一套高度集成的楼宇自动化系统&#xff0c;正是依靠多功能协议网关&#xff0c;实现了…

韩国站群服务器提供高级安全防护以确保数据和网站的安全性

韩国站群服务器提供高级安全防护以确保数据和网站的安全性 在当今数字化时代&#xff0c;网站的安全性和数据保护已成为企业和个人不可忽视的重要议题。韩国站群服务器作为一个拥有发达科技和互联网基础设施的国家&#xff0c;通过提供高级安全防护措施&#xff0c;为用户的数…

多态的用法

场景&#xff1a; 目前的一个功能F在一个平台a配置下是Fa()。 void C(Config c){ PreF(); if(c is a){ Fa(); } PostF(); } 现在要添加对另一个平台b的配置。 现在最直接的办法是修改F的调用代码C。 void C(Config a){ PreF(); if(c is a) { Fa(); } else if(c is b) { …

GPU系列(四)-常用 GPU 运维及故障处理

1 XID 错误事件 XID 是 NVIDIA 的错误码&#xff0c;可以通过命令: dmesg -T | grep -i "NVRM: Xid" 根据 XID 可以定位故障&#xff0c;下面是一些常见的 XID 事件&#xff1a; XID说明13Graphics Engine Exception。通常是数组越界、指令错误,小概率是硬件问题…

Web服务器和Tomcat

Web介绍 对于http协议操作进行封装、简化web程序开发 部署web项目&#xff0c;对外提供上网信息浏览 Tomcat介绍 一个轻量级的web服务器 也称为web容器 Tomcat的文件夹介绍 下载地址&#xff1a;Apache Tomcat - Apache Tomcat 9 Software Downloads 安装&#xff1a;直…

十个数据安全最佳实践:保护数据的简单方法

在德迅云安全将介绍数据安全的主要原则&#xff0c;并了解适用于大多数行业的 10 种数据安全最佳实践&#xff0c;以及云端安全检测的重要性。 数据威胁和维护数据安全的好处 什么是数据安全&#xff1f; 数据安全是旨在保护组织敏感资产的流程和工具的组合。有价值的数据在…

计算方法实验2(补充):列主元消元法解线性方程组

C源代码 #include<bits/stdc.h> using namespace std;// 列主元消去法求解线性方程组 vector<long double> Column_Elimination(vector<vector<long double>> A, vector<long double> b);int main() {vector<vector<long double>> …

梯度下降及其可视化

目录 一、算法思想 二、算法思路 三、算法实现 四、代码实现 一、算法思想 梯度下降算法是一种优化算法&#xff0c;用于寻找函数的局部最小值。其基本思想是通过迭代的方式&#xff0c;逐步调整参数&#xff0c;使得函数的输出值减小。以下是梯度下降算法的主要思想&…

JavaScript快速入门系列-1(JavaScript简介)

第一章:JavaScript简介 1. JavaScript简介1.1 什么是JavaScript1.2 JavaScript的历史与应用1.3 环境搭建:浏览器与Node.js2. JavaScript语言基础2.1 变量声明:let, const, var2.2 数据类型:字符串、数字、布尔值、对象、数组、null与undefined2.3 运算符:算术、比较、逻辑…

将图像特征和CSV中的特征保存到h5文件中

这个脚本的任务是&#xff1a;从mask中提取最大的ROI&#xff0c;然后映射到DCE原图中&#xff0c;获取原图最大ROI的上一层及下一层&#xff0c;共三层。然后去除掉周围的0像素&#xff0c;再利用双线性插值到224*224大小的图像。再映射到T2序列的原图中&#xff0c;得到224*2…

二叉树的前序、中序、后序遍历的C++实现

二叉树的前序、中序、后序 遍历属于深度优先搜索方式&#xff0c;本文使用递归法实现前序、中序、后序的遍历方法&#xff0c;代码如下&#xff1a; #include <iostream> #include <vector>struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int …

初识C++ · 模板初阶

目录 1 泛型编程 2 函数模板 3 类模板 1 泛型编程 模板是泛型编程的基础&#xff0c;泛型我们碰到过多次了&#xff0c;比如malloc函数返回的就是泛型指针&#xff0c;需要我们强转。 既然是泛型编程&#xff0c;也就是说我们可以通过一个样例来解决类似的问题&#xff0c…

leetcode1290-Convert Binary Number in a Linked List to Integer

题目 给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1&#xff1a; 输入&#xff1a;head [1,0,1] 输出&#xff1a;5 解释&#xff1a;二进制数 (101) 转化为…

Java基础之《mybatis-plus多数据源配置》

1、pom文件引入依赖 引入MyBatis-Plus之后请不要再次引入MyBatis以及mybatis-spring-boot-starter和MyBatis-Spring&#xff0c;以避免因版本差异导致的问题 <!--引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 mybatis-spring-boot-starter和MyBatis-Spring&#xff0…

【C++】STL_ string的使用 + 模拟实现

前言 目录 1. STL简介&#xff08;1&#xff09;什么是STL&#xff08;2&#xff09;STL的版本&#xff08;3&#xff09;STL的六大组件 2. string的使用2.1 npos2.2 遍历字符串string的每一个字符2.3 迭代器&#xff1a;2.4 string的内存管理2.5 string模拟实现2.5.1 深拷贝&a…

Redis(主从复制搭建)

文章目录 1.主从复制示意图2.搭建一主多从1.搭建规划三台机器&#xff08;一主二从&#xff09;2.将两台从Redis服务都按照同样的方式配置&#xff08;可以理解为Redis初始化&#xff09;1.安装Redis1.yum安装gcc2.查看gcc版本3.将redis6.2.6上传到/opt目录下4.进入/opt目录下然…

iptables---防火墙

防火墙介绍 防火墙的作用可以理解为是一堵墙&#xff0c;是一个门&#xff0c;用于保护服务器安全的。 防火墙可以保护服务器的安全&#xff0c;还可以定义各种流量匹配的规则。 防火墙的作用 防火墙具有对服务器很好的保护作用&#xff0c;入侵者必须穿透防火墙的安全防护…

第V章-Ⅰ Vue3路由vue-router初识

第V章-Ⅰ Vue3路由vue-router初识 安装Vue路由基础router-link 组件导航router-view 路由出口单独导入关于路由的库文件定义路由组件定义路由规则对象创建router实例将路由对象挂载Vue实例上redirect 路由重定向嵌套路由 路由传参params形式传参query形式传参params方式与query…

Leetcode—1991. 找到数组的中间位置【简单】

2024每日刷题&#xff08;129&#xff09; Leetcode—1991. 找到数组的中间位置 实现代码 class Solution { public:int findMiddleIndex(vector<int>& nums) {int sum accumulate(nums.begin(), nums.end(), 0);int prefix 0;for(int i 0; i < nums.size();…