- j3_liuliang
- 上期写了菜品及分类相关的功能,现在我们来实现一下商家的餐桌及评论管理相关内容
项目相关文章导航:
- 快捷点餐项目简介
- 餐饮系统设计概括
- 餐饮系统店家后端基础功能构建
- 快捷餐饮之店家后台OSS文件管理实现
- 快捷餐饮之店家后台厨艺秀实现
- 快捷餐饮之店家后台菜品分类及菜品管理实现
- 快捷餐饮之店家后台评论管理及餐桌管理实现
- 下期实现订单相关功能
项目Git地址:
点这里哦!
一、评论管理
评论是客户在就完餐之后,对店里的一些服务,菜品及环境的一些评价,所有店家后台这边只能是对评论的查询和删除,不可以对这些评论进行添加和修改相关的功能,那了解了这些,是不是业务流程就清晰了呢!
- 客户产生评论数据,他也是不可以修改的
- 店家这边可以查询评论和删除这些评论没有修改功能!
1.1 创建查询条件VO
/**
* @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
/**
* <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
/**
* <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
/**
* <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映射文件
/**
* <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
/**
* <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
/**
* <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
/**
* <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#/
结束语
- 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
- 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
- 感谢您的阅读,十分欢迎并感谢您的关注。