新增菜品功能开发
1. 需求分析
共有三个接口,分别为根据类型查询分类,文件上传和新增菜品
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. 功能测试
插入成功,数据保存完整
4. 代码提交
点击Git,点击提交,提交并推送