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

台州手机端建站模板松岗建设网站

台州手机端建站模板,松岗建设网站,1元建站,宁波做外贸网站1.需求分析和设计 产品原型 业务规则: 菜品名称必须是唯一的 菜品必须属于某个分类下,不能单独存在 新增菜品时可以根据情况选择菜品的口味 每个菜品必须对应一张图片 接口设计: 根据类型查询分类(已完成) 文件上传 新增菜品 根据类型…

1.需求分析和设计

产品原型

业务规则:

菜品名称必须是唯一的

菜品必须属于某个分类下,不能单独存在

新增菜品时可以根据情况选择菜品的口味

每个菜品必须对应一张图片

接口设计:

根据类型查询分类(已完成)

文件上传

新增菜品

根据类型查询分类

数据库设计(dish菜品表和dish_flavor口味表)

2.代码开发

OssConfiguration代码:

package com.sky.config;import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 配置类,用于创建AliOssUtil对象*/
@Configuration//注解,表示这是员工配置类
@Slf4j
public class OssConfiguration {@Bean//交给spring容器管理@ConditionalOnMissingBean//保证Spring容器里只有员工Util对象public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(),aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName());//读取配置文件内的数据,然后给配置类赋值}
}

CommonController代码:

package com.sky.controller.admin;import com.sky.constant.MessageConstant;
import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.util.UUID;/*** 通用接口*/
@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {@Autowiredprivate AliOssUtil aliOssUtil;/*** 文件上传* @param file* @return*/@PostMapping("/upload")@ApiOperation("文件上传")public Result<String> upload(MultipartFile file){//参数名要和前端的保持一致log.info("文件上传:{}",file);try {//原始文件String originalFilename = file.getOriginalFilename();//截取原始文件名的后缀String extension = originalFilename.substring(originalFilename.lastIndexOf("."));//构造新文件名称String objectName = UUID.randomUUID().toString() + extension;//文件的请求路径String filePath = aliOssUtil.upload(file.getBytes(),objectName);return Result.success(filePath);} catch (IOException e) {log.info("文件上传失败:{}",e);}return Result.error(MessageConstant.UPLOAD_FAILED);}
}

DishController代码:

package com.sky.controller.admin;import com.sky.dto.DishDTO;
import com.sky.result.Result;
import com.sky.service.DishService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 菜品管理*/
@RestController
@RequestMapping("/admin/dish")
@Api(tags = "菜品管理接口")
@Slf4j
public class DishController {@Autowiredprivate DishService dishService;/*** 新增菜品* @param dishDTO* @return*/@PostMapping@ApiOperation("新增菜品")public Result save(@RequestBody DishDTO dishDTO){log.info("新增菜品:{}",dishDTO);dishService.saveWithFlavor(dishDTO);return Result.success();}
}

DishService代码:

package com.sky.service;import com.sky.dto.DishDTO;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;@Service
public interface DishService {/*** 新增菜品和对应的口味* @param dishDTO*/void saveWithFlavor(DishDTO dishDTO);
}

DishServiceImpl代码:

package com.sky.service.impl;import com.sky.dto.DishDTO;
import com.sky.entity.Dish;
import com.sky.entity.DishFlavor;
import com.sky.mapper.DishFlavorMapper;
import com.sky.mapper.DishMapper;
import com.sky.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@Service
@Slf4j
public class DishServiceImpl implements DishService {@Autowiredprivate DishMapper dishMapper;@Autowiredprivate DishFlavorMapper dishFlavorMapper;/*** 新增菜品和对应的口味* @param dishDTO*/@Transactionalpublic void saveWithFlavor(DishDTO dishDTO) {Dish dish = new Dish();BeanUtils.copyProperties(dishDTO,dish);//向菜品表插入1条数据dishMapper.insert(dish);//获取inset语句生成的主键值Long dishId = dish.getId();//向口味表插入n条数据List<DishFlavor> flavors = dishDTO.getFlavors();if(flavors != null && flavors.size() > 0){//是否有口味数据flavors.forEach(dishFlavor -> {dishFlavor.setDishId(dishId);});dishFlavorMapper.insertBatch(flavors);}}
}

DishMapper代码:

package com.sky.mapper;import com.sky.annotation.AutoFill;
import com.sky.entity.Dish;
import com.sky.enumeration.OperationType;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface DishMapper {/*** 根据分类id查询菜品数量* @param categoryId* @return*/@Select("select count(id) from dish where category_id = #{categoryId}")Integer countByCategoryId(Long categoryId);/*** 新增菜品数据* @param dish*/@AutoFill(value = OperationType.INSERT)void insert(Dish dish);
}

DishFlavorMapper代码:

package com.sky.mapper;import com.sky.entity.DishFlavor;
import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper
public interface DishFlavorMapper {/*** 批量插入口味数据* @param flavors*/void insertBatch(List<DishFlavor> flavors);
}

DishMapper.xml代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.DishMapper"><insert id="insert" useGeneratedKeys="true" keyProperty="id">/*useGeneratedKeys="true"表示刚刚插入所生成的主键值,keyProperty="id"将id返回值给id*/INSERT INTO dish (name,category_id,price,image,description,create_time,update_time,create_user,update_user,status)VALUES(#{name},#{categoryId},#{price},#{image},#{description},#{createTime},#{updateTime},#{createUser},#{updateUser},#{status})</insert>
</mapper>

DishFlavorMapper.xml代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.DishFlavorMapper"><insert id="insertBatch">INSERT INTO dish_flavor(dish_id,name,value) VALUES<foreach collection="flavors" item="df" separator=",">(#{df.dishId},#{df.name},#{df.value})</foreach></insert>
</mapper>

yml文件代码:

  alioss:endpoint: ${sky.alioss.endpoint}access-key-id: ${sky.alioss.access-key-id}access-key-secret: ${sky.alioss.access-key-secret}bucket-name: ${sky.alioss.bucket-name}alioss:endpoint: oss-cn-beijing.aliyuncs.comaccess-key-id: LTAI5tPeFLzsPPT8gG3LPW64access-key-secret: U6k1brOZ8gaOIXv3nXbulGTUzy6Pd7bucket-name: sky-itcast
http://www.dtcms.com/a/597291.html

相关文章:

  • 力扣(LeetCode)100题:239.滑动窗口最大值
  • TDengine 字符串函数 LENGTH 用户手册
  • Kotlin-协程的挂起与恢复
  • 莱州网站建设有限公司网站页面架构
  • 【Java SE 基础学习打卡】09 JRE 与 JDK
  • 无人机12V锂电池管理控制器方案学习,BQ40Z50
  • React核心概念Mutation
  • 企业建设好一个网站后_如何进行网站推广?网页设计大作业模板
  • VMware Ubuntu 22.04 NAT模式下配置GitHub SSH完整教程(含踩坑实录+报错_成功信息对照)
  • 文生图模型攻击论文原理笔记
  • Goer-Docker系统-1-Dockerfile的构建速度优化
  • 代做网页设计平台站长工具seo综合查询隐私查询导航
  • 方形与圆形滚珠导轨在工业场景如何选型?
  • UCOS-III笔记(一)
  • Unity:lua热更新(一)——AB包AssetBundle、Lua语法
  • 如何在Dev-C++中配置编译选项以支持C++11?
  • 海城区建设局网站快速百度
  • 网站怎样设计网址大全关键词排名提高方法
  • HOT100题打卡第36天——二分查找
  • 【Linux】Linux内存管理与线程控制核心解析
  • dns服务器
  • bash 启动程序的流程
  • 专题:2025中国医疗器械出海现状与趋势创新发展研究报告|附160+份报告PDF、数据、可视化模板汇总下载
  • 工程建设最好的网站石家庄建设网站哪家好
  • c#笔记之面向对象
  • wordpress 移动到回收站发生错误广告公司网络推广计划
  • 汽车乘员热舒适测评的预测模型
  • [6]. SpringAI Alibaba 向量化和向量数据库
  • java学习--包
  • 乐鑫EchoEar开发套件详解:ESP32-S3+端侧AI+全双工语音实战