快捷餐饮之店家后台评论管理及餐桌管理实现

简介: 快捷餐饮之店家后台评论管理及餐桌管理实现


一、评论管理


评论是客户在就完餐之后,对店里的一些服务,菜品及环境的一些评价,所有店家后台这边只能是对评论的查询和删除,不可以对这些评论进行添加和修改相关的功能,那了解了这些,是不是业务流程就清晰了呢!


客户产生评论数据,他也是不可以修改的

店家这边可以查询评论和删除这些评论没有修改功能!


1.1 创建查询条件VO


image.png


/**
 * @Package: cn.liuliang.quickdinesysstore.entity.vo
 * @Author: liuliang
 * @CreateTime: 2020/10/29 - 15:54
 * @Description:
 */
@Data
@ApiModel(value="评论查询条件vo", description="")
public class EvaluateQueryConditionVO {
    @ApiModelProperty(value = "评价人身份:游客,用户,会员")
    private String identityType;
    @ApiModelProperty(value = "标识:1,菜品口味;2,服务态度;3,店内环境;4,总体评价")
    private Integer per;
    @ApiModelProperty(value = "星值:1代表一星,依次类推,最高五星")
    private Integer perValue;
    @ApiModelProperty(value = "评价时间(格式:2020-02-20)")
    private String evaluateTime;
}


1.2 创建评论数据展示DTO


image.png


/**
 * <p>
 * 
 * </p>
 *
 * @author j3_liuliang
 * @since 2020-10-24
 */
@Data
@ApiModel(value="评价信息DTO", description="")
public class EvaluateDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "ID")
    private Long id;
    @ApiModelProperty(value = "评价人姓名:(游客就是游客)")
    private String evaluateName;
    @ApiModelProperty(value = "评价人账号:(游客就为空)")
    private String phone;
    @ApiModelProperty(value = "评价人身份:(游客就写游客)")
    private String identityType;
    @ApiModelProperty(value = "店家名称")
    private String storeName;
    @ApiModelProperty(value = "菜品口味:1代表一星,依次类推,最高五星")
    private Integer taste;
    @ApiModelProperty(value = "服务态度:1代表一星,依次类推,最高五星")
    private Integer attitude;
    @ApiModelProperty(value = "店内环境:1代表一星,依次类推,最高五星")
    private Integer environment;
    @ApiModelProperty(value = "总体评价:1代表一星,依次类推,最高五星")
    private Integer overallEvaluation;
    @ApiModelProperty(value = "意见")
    private String opinion;
    @ApiModelProperty(value = "评价时间")
    private Date createTime;
}


1.3 编写controller


image.png


/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author j3_liuliang
 * @since 2020-10-24
 */
@Api(value = "评价管理", tags = "评价管理")
@CrossOrigin
@RestController
@RequestMapping("/evaluate")
public class EvaluateController {
    @Autowired
    private EvaluateService evaluateService;
    @ApiOperation(value = "条件分页查看所有评论信息", notes = "条件分页查看所有评论信息")
    @ApiResponses({@ApiResponse(code = 200, message = "请求成功!", response = EvaluateDTO.class)})
    @GetMapping("/select-all")
    public ResultDTO selectAll(
            EvaluateQueryConditionVO evaluateQueryConditionVO,
            @ApiParam("当前页码") @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
            @ApiParam("每页显示条数") @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
        return evaluateService.selectAll(evaluateQueryConditionVO, pageNum, pageSize);
    }
    @ApiOperation(value = "根据评论id删除评论", notes = "根据评论id删除评论")
    @GetMapping("/delete")
    public ResultDTO delete(@ApiParam("评论id") @RequestParam(value = "id", required = true) Long id) {
        evaluateService.removeById(id);
        return ResultDTO.success();
    }
}


1.4 编写service


image.png


/**
 * <p>
 *  服务类
 * </p>
 *
 * @author j3_liuliang
 * @since 2020-10-24
 */
public interface EvaluateService extends IService<Evaluate> {
    /**
     * 条件分查看所有评论信息
     * @param evaluateQueryConditionVO  查询条件
     * @param pageNum                   当前页
     * @param pageSize                  每页大小
     * @return
     */
    ResultDTO selectAll(EvaluateQueryConditionVO evaluateQueryConditionVO, Integer pageNum, Integer pageSize);
}


/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author j3_liuliang
 * @since 2020-10-24
 */
@Service
public class EvaluateServiceImpl extends ServiceImpl<EvaluateMapper, Evaluate> implements EvaluateService {
    @Autowired
    private EvaluateMapper evaluateMapper;
    @Override
    public ResultDTO selectAll(EvaluateQueryConditionVO evaluateQueryConditionVO, Integer pageNum, Integer pageSize) {
        // 构造分页
        Page<Evaluate> evaluatePage = new Page<>(pageNum, pageSize);
        // 执行查询
        List<Evaluate> evaluateList = evaluateMapper.selectAll(evaluatePage, evaluateQueryConditionVO);
        // 构造传输数据
        List<EvaluateDTO> evaluateDTOList = new ArrayList<>(evaluateList.size());
        evaluateList.forEach(evaluate -> {
            EvaluateDTO evaluateDTO = new EvaluateDTO();
            BeanUtils.copyProperties(evaluate, evaluateDTO);
            evaluateDTOList.add(evaluateDTO);
        });
        return ResultDTO.success().data("total", evaluatePage.getTotal()).data("rows", evaluateDTOList);
    }
}


1.5 编写Mapper及Mapper映射文件


image.png


/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author j3_liuliang
 * @since 2020-10-24
 */
public interface EvaluateMapper extends BaseMapper<Evaluate> {
    /**
     * 根据条件分页查询评论数据
     *
     * @param evaluatePage             分页对象
     * @param evaluateQueryConditionVO 查询条件对象
     * @return
     */
    List<Evaluate> selectAll(@Param("evaluatePage") Page<Evaluate> evaluatePage, @Param("evaluateQueryConditionVO") EvaluateQueryConditionVO evaluateQueryConditionVO);
}


<?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="cn.liuliang.quickdinesysstore.mapper.EvaluateMapper">
    <resultMap id="evaluate" type="cn.liuliang.quickdinesysstore.entity.Evaluate">
        <result property="id" javaType="long" column="id"/>
        <result property="evaluateName" javaType="string" column="evaluate_name"/>
        <result property="phone" javaType="string" column="phone"/>
        <result property="identityType" javaType="string" column="identity_type"/>
        <result property="storeName" javaType="string" column="store_name"/>
        <result property="taste" javaType="integer" column="taste"/>
        <result property="attitude" javaType="integer" column="attitude"/>
        <result property="environment" javaType="integer" column="environment"/>
        <result property="overallEvaluation" javaType="integer" column="overall_evaluation"/>
        <result property="opinion" javaType="string" column="opinion"/>
        <result property="createTime" javaType="date" column="create_time"/>
    </resultMap>
    <select id="selectAll" resultMap="evaluate">
        SELECT
        t_evaluate.`id`,
        t_evaluate.`evaluate_name`,
        t_evaluate.`phone`,
        t_evaluate.`identity_type`,
        t_evaluate.`store_name`,
        t_evaluate.`taste`,
        t_evaluate.`attitude`,
        t_evaluate.`environment`,
        t_evaluate.`overall_evaluation`,
        t_evaluate.`opinion`,
        t_evaluate.`create_time`
        FROM t_evaluate
        WHERE
        t_evaluate.`store_name` = '鲲鹏膳'
        <if test="evaluateQueryConditionVO.identityType != null and evaluateQueryConditionVO.identityType != ''">
            AND t_evaluate.`identity_type` = #{evaluateQueryConditionVO.identityType}
        </if>
        <if test="evaluateQueryConditionVO.per != null and evaluateQueryConditionVO.per == 1">
            AND t_evaluate.`taste` = #{evaluateQueryConditionVO.perValue}
        </if>
        <if test="evaluateQueryConditionVO.per != null and evaluateQueryConditionVO.per == 2">
            AND t_evaluate.`attitude` = #{evaluateQueryConditionVO.perValue}
        </if>
        <if test="evaluateQueryConditionVO.per != null and evaluateQueryConditionVO.per == 3">
            AND t_evaluate.`environment` = #{evaluateQueryConditionVO.perValue}
        </if>
        <if test="evaluateQueryConditionVO.per != null and evaluateQueryConditionVO.per == 4">
            AND t_evaluate.`overall_evaluation` = #{evaluateQueryConditionVO.perValue}
        </if>
    </select>
</mapper>


1.6 启动项目用swagger测试

访问:http://localhost:9110/swagger-ui.html#/


二、餐桌管理


餐桌其实也是一个很重要的环节,客户的点餐第一步就是选择餐桌所以店家应该有对餐桌的基本增删改查相关功能,如果后期有什么特殊的功能我们再来补充


2.1 创建餐桌展示信息DTO


image.png


/**
 * <p>
 * 
 * </p>
 *
 * @author j3_liuliang
 * @since 2020-10-24
 */
@Data
@ApiModel(value="餐桌信息DTO", description="")
public class DiningTableDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "ID")
    private Long id;
    @ApiModelProperty(value = "桌号:不为空,唯一")
    private String diningTableNumber;
    @ApiModelProperty(value = "餐桌名称:特色名称,有利于店面文怀")
    private String diningTableName;
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
}


2.2 编写controller


image.png


/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author j3_liuliang
 * @since 2020-10-24
 */
@Api(value = "餐桌管理", tags = "餐桌管理")
@CrossOrigin
@RestController
@RequestMapping("/dining-table")
public class DiningTableController {
    @Autowired
    private DiningTableService diningTableService;
    @ApiOperation(value = "添加餐桌", notes = "添加餐桌")
    @PostMapping("/add-or-update")
    public ResultDTO addOrUpdate(@RequestBody DiningTableVO diningTableVO) {
        return diningTableService.addOrUpdate(diningTableVO);
    }
    @ApiOperation(value = "分页查看所有餐桌信息", notes = "分页查看所有餐桌信息")
    @ApiResponses({@ApiResponse(code = 200, message = "请求成功!", response = DiningTableDTO.class)})
    @GetMapping("/select-all")
    public ResultDTO selectAll(
            @ApiParam("当前页码") @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
            @ApiParam("每页显示条数") @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
        return diningTableService.selectAll(pageNum, pageSize);
    }
    @ApiOperation(value = "根据id查询餐桌信息", notes = "根据id查询餐桌信息")
    @ApiResponses({@ApiResponse(code = 200, message = "请求成功!", response = DiningTableDTO.class)})
    @GetMapping("/select-one")
    public ResultDTO selectOne(@ApiParam("餐桌id") @RequestParam(value = "id", required = false, defaultValue = "1") Long id){
        return diningTableService.selectOne(id);
    }
    @ApiOperation(value = "根据id删除餐桌信息", notes = "根据id删除餐桌信息")
    @GetMapping("/delete")
    public ResultDTO delete(@ApiParam("餐桌id") @RequestParam(value = "id", required = false, defaultValue = "1") Long id){
        diningTableService.removeById(id);
        return ResultDTO.success();
    }
}


2.3 编写service


image.png


/**
 * <p>
 * 服务类
 * </p>
 *
 * @author j3_liuliang
 * @since 2020-10-24
 */
public interface DiningTableService extends IService<DiningTable> {
    /**
     * 添加餐桌
     *
     * @param diningTableVO 餐桌信息
     * @return
     */
    ResultDTO addOrUpdate(DiningTableVO diningTableVO);
    /**
     * 分页查看所有餐桌信息
     *
     * @param pageNum  当前页
     * @param pageSize 每页大小
     * @return
     */
    ResultDTO selectAll(Integer pageNum, Integer pageSize);
    /**
     * 根据id查询餐桌信息
     *
     * @param id 餐桌id
     * @return
     */
    ResultDTO selectOne(Long id);
}


/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author j3_liuliang
 * @since 2020-10-24
 */
@Service
public class DiningTableServiceImpl extends ServiceImpl<DiningTableMapper, DiningTable> implements DiningTableService {
    @Autowired
    private DiningTableMapper diningTableMapper;
    @Override
    public ResultDTO addOrUpdate(DiningTableVO diningTableVO) {
        // 判断参数是否为空
        if (StringUtils.isEmpty(diningTableVO.getDiningTableNumber())
                || StringUtils.isEmpty(diningTableVO.getDiningTableName())) {
            throw new QuickException(ResultCodeEnum.PAEAMETER_IS_EMPTY);
        }
        // 判断是添加还是修改
        if (null == diningTableVO.getId()) {
            // 插入
            // 构造数据
            DiningTable diningTable = new DiningTable();
            BeanUtils.copyProperties(diningTableVO, diningTable);
            // 插入
            diningTableMapper.insert(diningTable);
        } else {
            // 修改
            // 根据id查询需要的数据
            QueryWrapper<DiningTable> diningTableQueryWrapper = new QueryWrapper<>();
            diningTableQueryWrapper
                    .select("dining_table_number", "dining_table_name")
                    .eq("id", diningTableVO.getId());
            DiningTable diningTable = diningTableMapper.selectOne(diningTableQueryWrapper);
            BeanUtils.copyProperties(diningTableVO, diningTable);
            diningTableMapper.updateById(diningTable);
        }
        return ResultDTO.success();
    }
    @Override
    public ResultDTO selectAll(Integer pageNum, Integer pageSize) {
        // 构造分页
        Page<DiningTable> diningTablePage = new Page<>(pageNum, pageSize);
        // 分页查询
        IPage<DiningTable> diningTablePageModel = diningTableMapper.selectPage(diningTablePage, null);
        // 构造返回数据
        List<DiningTable> diningTableList = diningTablePageModel.getRecords();
        long total = diningTablePageModel.getTotal();
        return ResultDTO.success().data("total", total).data("rows", diningTableList);
    }
    @Override
    public ResultDTO selectOne(Long id) {
        // 执行查询
        DiningTable diningTable = diningTableMapper.selectById(id);
        // 构造返回数据
        DiningTableDTO diningTableDTO = new DiningTableDTO();
        BeanUtils.copyProperties(diningTable, diningTableDTO);
        return ResultDTO.success().data("data", diningTableDTO);
    }
}


2.4 编写mapper及mapper映射文件

无需编写,使用了MyBatisPlus内置方法,就是这么爽


2.5 启动项目,swagger测试

http://localhost:9110/swagger-ui.html#/


image.png


结束语


  • 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
  • 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
  • 感谢您的阅读,十分欢迎并感谢您的关注。


目录
相关文章
|
机器学习/深度学习 存储 算法
深度神经网络中的BNN和DNN:基于存内计算的原理、实现与能量效率
深度神经网络中的BNN和DNN:基于存内计算的原理、实现与能量效率
|
编译器 C语言
C语言:普通全局变量可以被多个源文件共享吗
C语言中,普通全局变量可以通过extern关键字在多个源文件中声明和共享,实现数据的跨文件使用。但需注意,变量只能在一个文件中定义,其他文件中仅能声明。
499 9
|
7月前
|
运维 数据可视化 数据管理
用二维码搭建的故障上报系统,让这家工厂报修效率提升了80%
“有时候一个问题不是技术问题,而是工具选得不对。”王工回忆整个项目落地的过程时说:“我们没换系统,也没买设备,只是用二维码把每个环节串起来了,效率就上来了。”对于像中誉这样的制造企业来说,这种简洁而实用的方式,或许正是数字化转型的理想起点。
用二维码搭建的故障上报系统,让这家工厂报修效率提升了80%
|
SQL 存储 数据库
如何在SQL中添加数据:一个初学者指南
如何在SQL中添加数据:一个初学者指南
304 3
|
人工智能
人工智能伦理:我们如何确保AI的发展不会失控?
随着人工智能技术的飞速发展,其在各行各业的应用也日益广泛。然而,随之而来的伦理问题也日益凸显。本文将探讨人工智能伦理的重要性,以及我们如何通过制定规范和标准,确保AI的发展不会失控。
324 0
|
人工智能 前端开发 UED
AI代码生成器——MutableAI
【2月更文挑战第17天】AI代码生成器——MutableAI
574 7
AI代码生成器——MutableAI
Bad Request, Resolved [org.springframework.http.converter.HttpMessageNotReadableException,跟着视频仔细比对
Bad Request, Resolved [org.springframework.http.converter.HttpMessageNotReadableException,跟着视频仔细比对
Flutter 学习之图片的选择、裁切、保存
Flutter 学习之图片的选择、裁切、保存 在Flutter中,我们可以通过调用系统的图片选择器来选择一张图片,也可以通过使用插件来实现图片的裁切和保存。
708 0
|
程序员 Swift
谁说程序员不懂浪漫,教你使用SwiftUI搭建一个电子相册送给她吧~
谁说程序员不懂浪漫,教你使用SwiftUI搭建一个电子相册送给她吧~
358 0
|
人工智能 自然语言处理 搜索推荐
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型(3)
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型
530 0
FlowSeq、mBART、BERT-fused、mRASP、mRASP2...你都掌握了吗?一文总结机器翻译必备经典模型(3)