一、订单管理
1.1 编写订单查询vo对象
OrderQueryConditionVO
/** * @Package: cn.liuliang.quickdinesysstore.entity.vo * @Author: liuliang * @CreateTime: 2020/10/30 - 8:40 * @Description: */ @Data @ApiModel(value = "订单查询vo", description = "") public class OrderQueryConditionVO extends BaseVO { @ApiModelProperty(value = "桌号:关联餐桌表中的id") private String diningTableNumber; @ApiModelProperty(value = "是否结账:1:结账,2:未结账") private Integer isSettleAccounts; @ApiModelProperty(value = "下单人电话") private String orderDishesPeoplePhone; @ApiModelProperty(value = "金额") private BigDecimal money; @ApiModelProperty(value = "下单时间") private String orderTime; }
1.2 编写订单信息DTO对象
OrderDTO
/** * @Package: cn.liuliang.quickdinesysstore.entity.dto * @Author: liuliang * @CreateTime: 2020/10/30 - 8:53 * @Description: */ @Data @ApiModel(value="订单信息DTO", description="") public class OrderDTO implements Serializable { private static final long serialVersionUID=1L; @ApiModelProperty(value = "ID") private Long id; @ApiModelProperty(value = "店家名称:唯一") private String storeName; @ApiModelProperty(value = "桌号:关联餐桌表中的id") private String diningTableNumber; @ApiModelProperty(value = "下单人名称") private String orderDishesPeopleName; @ApiModelProperty(value = "下单人电话") private String orderDishesPeoplePhone; @ApiModelProperty(value = "已点菜品:生成id,关联已点菜表id") private Long foods; @ApiModelProperty(value = "金额") private BigDecimal money; @ApiModelProperty(value = "实付金额") private BigDecimal actualMoney; @ApiModelProperty(value = "金额来源描述(优惠率,积分抵扣)") private String description; @ApiModelProperty(value = "优惠率") private String discountRate; @ApiModelProperty(value = "积分抵扣") private String pointsDeduction; @ApiModelProperty(value = "积分:每十块抵一积分,积分可以在结账时抵扣,一积分抵扣一块钱(这个以后后台需要可设置话)") private Integer integral; @ApiModelProperty(value = "是否结账:1:结账,2:未结账") private Integer isSettleAccounts; @ApiModelProperty(value = "是否结账") private Date orderTime; @ApiModelProperty(value = "结账时间") private Date settleAccountsTime; }
1.3 编写菜品信息DTO列表对象
AlreadyOrderDishesDTO
/** * @Package: cn.liuliang.quickdinesysstore.entity.dto * @Author: liuliang * @CreateTime: 2020/10/30 - 9:34 * @Description: */ @Data @ApiModel(value="所点菜品信息DTO", description="") public class AlreadyOrderDishesDTO implements Serializable { @ApiModelProperty(value = "ID") private Long id; @ApiModelProperty(value = "菜Id:关联菜品表,根据这个菜品id可以查到菜品所有信息") private Long dishesId; @ApiModelProperty(value = "图片:存储图片的url访问地址") private String imageUrl; @ApiModelProperty(value = "菜名:唯一") private String dishesName; @ApiModelProperty(value = "价格") private BigDecimal price; @ApiModelProperty(value = "数量") private Integer number; @ApiModelProperty(value = "合计:价格 * 数量") private BigDecimal sumPrice; }
1.4 编写订单详情信息DTO
OrderDetailDTO
/** * @Package: cn.liuliang.quickdinesysstore.entity.dto * @Author: liuliang * @CreateTime: 2020/10/30 - 9:31 * @Description: */ @Data @ApiModel(value="订单详情信息DTO", description="") public class OrderDetailDTO implements Serializable { @ApiModelProperty(value = "订单基本信息DTO对象") private OrderDTO orderDTO; @ApiModelProperty(value = "所点菜品信息DTO列表") List<AlreadyOrderDishesDTO> alreadyOrderDishesDTOList; }
1.5 编写订单控制类
@Api(value = "订单管理", tags = "订单管理") @CrossOrigin @RestController @RequestMapping("/order") public class OrderController { @Autowired private OrderService orderService; @ApiOperation(value = "分页条件查询所有订单列表", notes = "分页条件查询所有订单列表") @ApiResponses({@ApiResponse(code = 200, message = "请求成功!", response = OrderDTO.class)}) @GetMapping("/select-all") public ResultDTO selectAll( OrderQueryConditionVO orderQueryConditionVO, @ApiParam("当前页码") @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum, @ApiParam("每页显示条数") @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) { return orderService.selectAll(orderQueryConditionVO, pageNum, pageSize); } @ApiOperation(value = "根据id查询订单详情", notes = "根据id查询订单详情") @ApiResponses({@ApiResponse(code = 200, message = "请求成功!", response = OrderDetailDTO.class)}) @GetMapping("/select-one") public ResultDTO selectOne(@ApiParam("订单id") @RequestParam(value = "id", required = true) Long id) { return orderService.selectOne(id); } @ApiOperation(value = "根据id删除订单", notes = "根据id删除订单") @GetMapping("/delete") public ResultDTO delete(@ApiParam("订单id") @RequestParam(value = "id", required = true) Long id){ return orderService.delete(id); } /* @ApiOperation(value = "根据订单id进行结账", notes = "根据订单id进行结账") @GetMapping("/bill-please") public ResultDTO billPlease(@ApiParam("订单id") @RequestParam(value = "id", required = true) Long id){ return orderService.billPlease(id); }*/ }
1.6 编写订单业务类
public interface OrderService extends IService<Order> { /** * 分页条件查询所有订单列表 * * @param orderQueryConditionVO 订单查询条件对象 * @param pageNum 当前页 * @param pageSize 每页大小 * @return */ ResultDTO selectAll(OrderQueryConditionVO orderQueryConditionVO, Integer pageNum, Integer pageSize); /** * 根据订单 id 查询订单详情 * * @param id 订单id * @return */ ResultDTO selectOne(Long id); /** * 根据订单id删除订单 * * @param id 订单id * @return */ ResultDTO delete(Long id); /** * 根据订单id进行结账 * * @param id 订单id * @return */ ResultDTO billPlease(Long id); }
@Service public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService { @Autowired private OrderMapper orderMapper; @Autowired private DiningTableMapper diningTableMapper; @Autowired private QueryUtils queryUtils; @Override public ResultDTO selectAll(OrderQueryConditionVO orderQueryConditionVO, Integer pageNum, Integer pageSize) { // 构造分页 Page<Order> orderPage = new Page<>(pageNum, pageSize); // 设置查询店家名称条件 orderQueryConditionVO.setStoreName(queryUtils.getStoreName()); // 执行查询 List<Order> orderList = orderMapper.selectAll(orderPage, orderQueryConditionVO); // 构造数据 List<OrderDTO> orderDTOList = new ArrayList<>(orderList.size()); orderList.forEach(order -> { OrderDTO orderDTO = new OrderDTO(); BeanUtils.copyProperties(order, orderDTO); orderDTOList.add(orderDTO); }); return ResultDTO.success().data("total", Math.toIntExact(orderPage.getTotal())).data("rows", orderDTOList); } @Override public ResultDTO selectOne(Long id) { // 查询订单基本信息 Order order = orderMapper.selectById(id); // 根据订单中的点菜id,查询点菜列表 List<AlreadyOrderDishesDTO> alreadyOrderDishesDTOList = orderMapper.selectAlreadyOrderDishesByFoods(order.getFoods()); // 计算点菜条目中的合计字段 alreadyOrderDishesDTOList.forEach(alreadyOrderDishesDTO -> { alreadyOrderDishesDTO.setSumPrice(alreadyOrderDishesDTO.getPrice().multiply(new BigDecimal(alreadyOrderDishesDTO.getNumber()))); }); // 组装数据 OrderDetailDTO orderDetailDTO = new OrderDetailDTO(); // 组装订单基本数据 OrderDTO orderDTO = new OrderDTO(); BeanUtils.copyProperties(order, orderDTO); orderDTO.setDiscountRate(orderDTO.getDescription().split(";")[0]); orderDTO.setPointsDeduction(orderDTO.getDescription().split(";")[1]); // 设置订单菜品信息 orderDetailDTO.setOrderDTO(orderDTO); orderDetailDTO.setAlreadyOrderDishesDTOList(alreadyOrderDishesDTOList); return ResultDTO.success().data("data", orderDetailDTO); } @Override public ResultDTO delete(Long id) { // 根据订单id , 查询其下面的所有一点菜品id(foods) // 构造查询条件对象 QueryWrapper<Order> orderQueryWrapper = new QueryWrapper<>(); orderQueryWrapper.select("foods").eq("id", id); Order order = orderMapper.selectOne(orderQueryWrapper); // 开始删除订单基本信息 orderMapper.deleteById(id); // 开始删除订单下的以点菜品信息 orderMapper.deleteAlreadyOrderDishes(order.getFoods()); return ResultDTO.success(); } @Transactional @Override public ResultDTO billPlease(Long id) { // 获取订单的餐桌号 QueryWrapper<Order> orderQueryWrapper = new QueryWrapper<>(); orderQueryWrapper.select("dining_table_number").eq("id", id); Order order = orderMapper.selectOne(orderQueryWrapper); // 修改餐桌状态为空闲和下单状态为未下单 UpdateWrapper<DiningTable> diningTableUpdateWrapper = new UpdateWrapper<>(); DiningTable diningTable = new DiningTable(); //diningTable.setIsLeisure(1); //diningTable.setIsOrder(2); diningTableUpdateWrapper.eq("dining_table_number", order.getDiningTableNumber()); diningTableMapper.update(diningTable, diningTableUpdateWrapper); // 修改订单的结账状态为结账 UpdateWrapper<Order> orderUpdateWrapper = new UpdateWrapper<>(); Order order1 = new Order(); order1.setIsSettleAccounts(1); diningTableUpdateWrapper.eq("id", id); orderMapper.update(order1, orderUpdateWrapper); // 结账成功 ,返回结果 return ResultDTO.success(); } }
QueryUtils工具类
内置店家名称的一个配置类
/** * @Package: cn.liuliang.quickdinesysstore.utils * @Author: liuliang * @CreateTime: 2020/10/31 - 15:30 * @Description: 系统相关属性工具类 */ @Data @Component @ConfigurationProperties(prefix = "quick") public class QueryUtils { /** * 当前系统的店家名称 */ private String storeName; }
1.7 编写订单mapper
public interface OrderMapper extends BaseMapper<Order> { /** * 分页条件查询所有订单列表 * * @param orderPage 分页对象 * @param orderQueryConditionVO 查询条件对象 * @return */ List<Order> selectAll(@Param("orderPage") Page<Order> orderPage, @Param("orderQueryConditionVO") OrderQueryConditionVO orderQueryConditionVO); /** * 根据订单中已点菜foods字段查询订单的所有菜品 * * @param foods 已点菜字段 * @return */ List<AlreadyOrderDishesDTO> selectAlreadyOrderDishesByFoods(@Param("foods") Long foods); /** * 删除订单下的以点菜品信息 * * @param foods id */ void deleteAlreadyOrderDishes(@Param("foods") Long foods); }
<?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.OrderMapper"> <resultMap id="order" type="cn.liuliang.quickdinesysstore.entity.Order"> <result property="id" javaType="long" column="id"/> <result property="storeName" javaType="string" column="store_name"/> <result property="diningTableNumber" javaType="string" column="dining_table_number"/> <result property="orderDishesPeopleName" javaType="string" column="order_dishes_people_name"/> <result property="orderDishesPeoplePhone" javaType="string" column="order_dishes_people_phone"/> <result property="foods" javaType="long" column="foods"/> <result property="money" javaType="java.math.BigDecimal" column="money"/> <result property="integral" javaType="integer" column="integral"/> <result property="isSettleAccounts" javaType="integer" column="is_settle_accounts"/> <result property="orderTime" javaType="date" column="order_time"/> <result property="settleAccountsTime" javaType="date" column="settle_accounts_time"/> </resultMap> <select id="selectAll" resultMap="order"> SELECT t_order.`id`, t_order.`store_name`, t_order.`dining_table_number`, t_order.`order_dishes_people_name`, t_order.`order_dishes_people_phone`, t_order.`foods`, t_order.`money`, t_order.`integral`, t_order.`is_settle_accounts`, t_order.`order_time`, t_order.`settle_accounts_time` FROM t_order <where> AND t_order.`store_name` = #{orderQueryConditionVO.storeName} <if test="orderQueryConditionVO.diningTableNumber != null and orderQueryConditionVO.diningTableNumber != ''"> AND t_order.`dining_table_number` = #{orderQueryConditionVO.diningTableNumber} </if> <if test="orderQueryConditionVO.isSettleAccounts != null"> AND t_order.`is_settle_accounts` = #{orderQueryConditionVO.isSettleAccounts} </if> <if test="orderQueryConditionVO.orderDishesPeoplePhone != null and orderQueryConditionVO.orderDishesPeoplePhone != ''"> AND t_order.`order_dishes_people_phone` = #{orderQueryConditionVO.orderDishesPeoplePhone} </if> <if test="orderQueryConditionVO.money != null"> AND t_order.`money` = #{orderQueryConditionVO.money} </if> <if test="orderQueryConditionVO.orderTime != null and orderQueryConditionVO.orderTime != ''"> AND DATE_FORMAT(t_order.`order_time`, '%Y-%m-%d') = DATE_FORMAT(#{orderQueryConditionVO.orderTime}, '%Y-%m-%d') </if> </where> ORDER BY t_order.`update_time` DESC </select> <resultMap id="alreadyOrderDishesDTO" type="cn.liuliang.quickdinesysstore.entity.dto.AlreadyOrderDishesDTO"> <result property="id" javaType="long" column="id"/> <result property="dishesId" javaType="long" column="dishes_id"/> <result property="imageUrl" javaType="string" column="image_url"/> <result property="dishesName" javaType="string" column="dishes_name"/> <result property="price" javaType="java.math.BigDecimal" column="price"/> <result property="number" javaType="integer" column="number"/> </resultMap> <select id="selectAlreadyOrderDishesByFoods" resultMap="alreadyOrderDishesDTO"> SELECT t_already_order_dishes.`id`, t_already_order_dishes.`dishes_id`, t_dishes.`image_url`, t_dishes.`dishes_name`, t_dishes.`price`, t_already_order_dishes.`number` FROM t_already_order_dishes LEFT JOIN t_dishes ON t_dishes.`id` = t_already_order_dishes.`dishes_id` WHERE t_already_order_dishes.`id` = #{foods} </select> <delete id="deleteAlreadyOrderDishes"> DELETE FROM t_already_order_dishes WHERE id = #{foods} </delete> </mapper>
1.8 启动项目swagger测试
http://localhost:9110/swagger-ui.html#/
结束语
- 由于博主才疏学浅,难免会有纰漏,假如你发现了错误或偏见的地方,还望留言给我指出来,我会对其加以修正。
- 如果你觉得文章还不错,你的转发、分享、点赞、留言就是对我最大的鼓励。
- 感谢您的阅读,十分欢迎并感谢您的关注。