苍穹外卖新增菜品功能开发

59 阅读1分钟

新增菜品功能开发

1. 需求分析

共有三个接口,分别为根据类型查询分类,文件上传和新增菜品

image-20250729204043611

image-20250729204117035

image-20250729204136446

image-20250729204628118

2. 代码开发

在application配置文件中配置alioss:

  alioss:
    access-key-id: yourasskeyid
    access-key-secret: yourasskeysecret
    endpoint: oss-cn-hangzhou.aliyuncs.com
    bucket-name: yourbucketname

1. 文件上传

创建配置类

@Configuration
@Slf4j
public class OssConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){
        log.info("开始创建阿里云oss工具类对象:{}",aliOssProperties);
        return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName());
    }
}

编写controller

@RestController
@RequestMapping("/admin/common")
@Slf4j
@Api(tags = "通用接口")
public class CommonController {

    @Autowired
    AliOssUtil aliOssUtil;

    @PostMapping("/upload")
    @ApiOperation(value = "文件上传")
    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;

            //调用aliOss工具类,上传文件并返回路径
            String path = aliOssUtil.upload(file.getBytes(),objectName);

            return Result.success(path);

        }catch (IOException e){
            log.error("文件上传失败: {}",file.getOriginalFilename());
        }
        return null;
    }
}

保存菜品和口味

controller层:

@Api(tags = "菜品管理接口")
@RestController
@Slf4j
@RequestMapping("/admin/dish")
public class DishController {

    @Autowired
    DishService dishService;

    @PostMapping
    @ApiOperation(value = "新增菜品")
    public Result save(@RequestBody DishDTO dishDTO){
        log.info("新增菜品: {}",dishDTO);
        dishService.saveWithFlavor(dishDTO);
        return Result.success();
    }
}

service层

@Service
@Slf4j
public class DishServiceImpl implements DishService {
    @Autowired
    DishMapper dishMapper;
    @Autowired
    DishFlavorMapper dishFlavorMapper;
    @Override
    public void saveWithFlavor(DishDTO dishDTO) {
        Dish dish = new Dish();
        BeanUtils.copyProperties(dishDTO,dish);

        //插入菜品数据
        dishMapper.insert(dish);

        Long id = dish.getId();

        List<DishFlavor> flavors = dishDTO.getFlavors();
        log.info("插入口味表: {}",flavors);
        if (flavors != null && !flavors.isEmpty()){
            flavors.forEach(dishFlavor -> {
                dishFlavor.setDishId(id);
            });

            dishFlavorMapper.insertBatch(flavors);
        }

    }
}

mapper层:

dishmapper:

@Mapper
public interface DishMapper {

    /**
     * 根据分类id查询菜品数量
     * @param categoryId
     * @return
     */
    @Select("select count(id) from dish where category_id = #{categoryId}")
    Integer countByCategoryId(Long categoryId);

    @AutoFill(value = OperationType.INSERT)
    void  insert(Dish dish);
}
<?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">
        insert into dish(name, category_id, price, image, description, status, create_time, update_time, create_user, update_user)
        VALUES
        (#{name},#{categoryId},#{price},#{image},#{description},#{status},#{createTime},#{updateTime},#{createUser},#{updateUser})
    </insert>
</mapper>

dishflavor mapper:

@Mapper
public interface DishFlavorMapper {

    void insertBatch(List<DishFlavor> flavors);
}
<?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>

3. 功能测试

image-20250731124021504

image-20250731124053683

插入成功,数据保存完整

4. 代码提交

点击Git,点击提交,提交并推送

image-20250731124213572