学习日记 2022.11.28

1.swagger的使用

1.使用knife4j坐标

        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.2</version>
        </dependency>

2.在webmvc配置类加上注解

@EnableKnife4j
@EnableSwagger2
public class WebMvcConfig implements WebMvcConfigurer {

 3.配置扫描的包

    // 在配置类中声明一个Docket类型的bean, 通过该bean来指定生成文档的信息
    @Bean
    public Docket createRestApi() {
        // 文档类型
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //更改为自己项目的路径:
                .apis(RequestHandlerSelectors.basePackage("com.maidou.reggie.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("瑞吉外卖")
                .version("1.0")
                .description("瑞吉外卖接口文档")
                .build();
    }

4.设置静态资源映射

    /**
     * 设置静态资源映射
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("开始进行静态资源映射...");
        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

5.配置登录过滤器

"/doc.html",
"/webjars/**",
"/swagger-resources",
"/v2/api-docs"

2.注解的使用

@ApiModel注解写在实体类上

@ApiModelProperty("")写在属性上

@Data
@ApiModel("分类")
public class Category implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("主键")
    private Long id;


    //类型 1 菜品分类 2 套餐分类
    @ApiModelProperty("类型")
    private Integer type;


    //分类名称
    @ApiModelProperty("分类名称")
    private String name;


    //顺序
    @ApiModelProperty("顺序")
    private Integer sort;


    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;


    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;


    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT)
    private Long createUser;


    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;


    //是否删除
    @ApiModelProperty("是否删除")
    @TableField(exist = false)
    private Integer isDeleted;

}

@Api(tags = "") 写在controller上

@ApiOperation("")写在方法上

@Slf4j
@RestController
@Api(tags = "套餐相关接口")
@RequestMapping("/setmeal")
public class SetMealController {
    @Autowired
    private SetMealService setMealService;

    @Autowired
    private SetMealDishService setMealDishService;

    @Autowired
    private CategoryService categoryService;

    /**
     * 保存新增套餐
     *
     * @param setmealDto
     * @return
     */
    @CacheEvict(value = "setMealCache",allEntries = true)
    @PostMapping
    @ApiOperation("保存新增套餐接口")
    public R<String> save(@RequestBody SetmealDto setmealDto) {
        log.info("保存新增套餐: {}", setmealDto.toString());
        setMealService.saveWithDish(setmealDto);
        return R.success("新增套餐成功");
    }

    /**
     * 套餐分页查询
     *
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    @ApiOperation("套餐分页查询接口")
    @GetMapping("/page")
    public R<Page> page(Integer page, Integer pageSize, String name) {
        Page<Setmeal> pageInfo = new Page<>(page, pageSize);
        Page<SetmealDto> dtoPage = new Page<>();

        LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(name != null, Setmeal::getName, name);
        queryWrapper.orderByDesc(Setmeal::getUpdateTime);

        setMealService.page(pageInfo, queryWrapper);

        //对象拷贝
        BeanUtils.copyProperties(pageInfo, dtoPage, "records");
        List<Setmeal> records = pageInfo.getRecords();

        List<SetmealDto> list = records.stream().map((item) -> {
            SetmealDto setmealDto = new SetmealDto();
            //对象拷贝
            BeanUtils.copyProperties(item, setmealDto);
            //分类id
            Long categoryId = item.getCategoryId();
            //根据分类id查询分类对象
            Category category = categoryService.getById(categoryId);
            if (category != null) {
                //分类名称
                String categoryName = category.getName();
                setmealDto.setCategoryName(categoryName);
            }
            return setmealDto;
        }).collect(Collectors.toList());

        dtoPage.setRecords(list);
        return R.success(dtoPage);
    }

    /**
     * 删除套餐
     *
     * @param ids
     * @return
     */
    @ApiOperation("删除套餐接口")
    @CacheEvict(value = "setMealCache",allEntries = true)
    @DeleteMapping
    public R<String> delete(@RequestParam List<Long> ids) {
        log.info("ids: {}", ids);
        setMealService.removeWithDish(ids);
        return R.success("删除套餐成功");
    }

    /**
     * 批量修改状态
     *
     * @param status
     * @param ids
     * @return
     */
    @ApiOperation("批量修改状态接口")
    @PostMapping("/status/{status}")
    public R<String> updateStatus(@PathVariable Integer status, @RequestParam List<Long> ids) {
        log.info("修改套餐状态为: {} ids: {}", status, ids);
        //判断状态是否一致sql: select count(*) from setmeal where in ? and status = ?
        LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(Setmeal::getId, ids);
        queryWrapper.eq(Setmeal::getStatus, status);
        int count = setMealService.count(queryWrapper);
        if (count != 0) {
            throw new BusinessException("套餐状态不一致~无法批量修改!");
        }

        //修改状态 sql:update setmeal set status = 0 where id = ?
        ArrayList<Setmeal> setMeals = new ArrayList<>();
        for (Long id : ids) {
            Setmeal s = new Setmeal();
            s.setStatus(status);
            s.setId(id);
            setMeals.add(s);
        }
        setMealService.updateBatchById(setMeals);
        return R.success("修改状态成功");
    }

    /**
     * 根据id回显关系表数据
     *
     * @param id
     * @return
     */
    @ApiOperation("根据id回显关系表数据接口")
    @GetMapping("/{id}")
    public R<SetmealDto> selectById(@PathVariable Long id) {
        //select * from setmeal_dish where id = ?
        log.info("根据setMealId: {}回显菜品", id);
        SetmealDto setmealDto = setMealService.selectWithDish(id);
        return R.success(setmealDto);
    }

    /**
     * 保存套餐的修改
     *
     * @param setmealDto
     * @return
     */
    @ApiOperation("保存套餐的修改接口")
    @PutMapping
    public R<String> update(@RequestBody SetmealDto setmealDto) {
        log.info("保存套餐修改: {}", setmealDto.toString());
        setMealService.updateWithDish(setmealDto);
        return R.success("套餐修改成功");
    }

    /**
     * 根据id查询套餐
     *
     * @param setmeal
     * @return
     */
    @ApiOperation("根据id查询套餐接口")
    @Cacheable(value = "setMealCache",key = "#setmeal.categoryId + '_' + #setmeal.status")
    @GetMapping("/list")
    public R<List<Setmeal>> list(Setmeal setmeal) {
        LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(setmeal.getCategoryId() != null, Setmeal::getCategoryId, setmeal.getCategoryId());
        queryWrapper.eq(setmeal.getStatus() != null, Setmeal::getStatus, setmeal.getStatus());
        queryWrapper.orderByDesc(Setmeal::getUpdateTime);

        List<Setmeal> list = setMealService.list(queryWrapper);
        return R.success(list);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值