查看历史订单(本质还是分页查询)
首先理清关系,传过来的是每页和总共页数
交给PageHelper去查询返回的是
其次需要去查的是历史的订单
传入Mapper的参数应该是pageQueryDTO
所以把参数都set好传给DTO
查到的是我们的page
Page page = userMapper.pageQuery(ordersPageQueryDTO);
其他的Employee可以查的很完整所以可以直接返回EmployeeVO这里不可以所以需要完善信息
当然信息不够完整,因为Orders没有包含Detaill的信息
所以我们还需要去查Order_Detaill 的表去完善这个返回的参数OrderVO
最后返回new PageResult(totalNumber,List)给Controller的pageResult
然后由Controller返回Result.success(pageResult)
这个和Dish的分页查询 dish_flavor很像,都是查不明白,需要再去查另外一个表补全信息,然后返回
public PageResult pageQueryUser(int pageNum, int pageSize, Integer status){
PageHelper.startPage(pageNum,pageSize);
OrdersPageQueryDTO ordersPageQueryDTO = new OrdersPageQueryDTO();
ordersPageQueryDTO.setPage(pageNum);
ordersPageQueryDTO.setPageSize(pageSize);
ordersPageQueryDTO.setStatus(status);
ordersPageQueryDTO.setUserId(BaseContext.getCurrentId());
Page<Orders> page = userMapper.pageQuery(ordersPageQueryDTO);
List<OrderVO> list = new ArrayList<>();
if(page != null && page.size()>0){
for(Orders orders:page){
Long id = orders.getId();
List<OrderDetail> orderDetail = orderDetailMapper.getById(id);
OrderVO orderVO = new OrderVO();
orderVO.setOrderDetailList(orderDetail);
BeanUtils.copyProperties(orders,orderVO);
list.add(orderVO);
}
}
long total = page.getTotal();
//List<Orders> result = pageRes.getResult();
return new PageResult(total,list);
}
<select id="pageQuery" resultType="com.sky.entity.Orders">
select * from orders
<where>
<if test="number != null and number!=''">
and number like concat('%',#{number},'%')
</if>
<if test="phone != null and phone!=''">
and phone like concat('%',#{phone},'%')
</if>
<if test="userId != null">
and user_id = #{userId}
</if>
<if test="status != null">
and status = #{status}
</if>
<if test="beginTime != null">
and order_time >= #{beginTime}
</if>
</where>
</select>
查看订单详细
太简单了不写了,和上面的查询页面一样返回VO的时候需要set Detail的部分
再来一单(传入的直接是orderid)
直接去查OrderDetail就好了
然后把OrderDetail的值赋给shoppingcart然后批量插入就行了
秒了!
记得把shoppingcart的值set完整对着entity看一下哪里没有插入就可以了
public void repetitionById(long id){
//id是订单id Order的ID 可以去查detail然后再插入到shoppingcart
Orders orders = orderMapper.getById(id);
List<OrderDetail> orderDetailList = orderDetailMapper.getById(orders.getId());
List<ShoppingCart> shoppingCartList = new ArrayList<>();
for(OrderDetail orderDetail : orderDetailList){
ShoppingCart shoppingCart = new ShoppingCart();
BeanUtils.copyProperties(orderDetail,shoppingCart);
shoppingCart.setCreateTime(LocalDateTime.now());
shoppingCart.setUserId(BaseContext.getCurrentId());
shoppingCartList.add(shoppingCart);
}
shoppingCartMapper.insertBatch(shoppingCartList);
}
<insert id="insertBatch" parameterType="list">
insert into shopping_cart
(name, image, user_id, dish_id, setmeal_id, dish_flavor, number, amount, create_time)
values
<foreach collection="shoppingCartList" item="sc" separator=",">
(#{sc.name},#{sc.image},#{sc.userId},#{sc.dishId},#{sc.setmealId},#{sc.dishFlavor},#{sc.number},#{sc.amount},#{sc.createTime})
</foreach>
</insert>
取消订单(有一个退款操作需要调用Utils 其他记得抛异常就行)
/**
* 用户取消订单
*
* @param id
*/
public void userCancelById(Long id) throws Exception {
// 根据id查询订单
Orders ordersDB = orderMapper.getById(id);
// 校验订单是否存在
if (ordersDB == null) {
throw new OrderBusinessException(MessageConstant.ORDER_NOT_FOUND);
}
//订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消
if (ordersDB.getStatus() > 2) {
throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);
}
Orders orders = new Orders();
orders.setId(ordersDB.getId());
// 订单处于待接单状态下取消,需要进行退款
if (ordersDB.getStatus().equals(Orders.TO_BE_CONFIRMED)) {
//调用微信支付退款接口
weChatPayUtil.refund(
ordersDB.getNumber(), //商户订单号
ordersDB.getNumber(), //商户退款单号
new BigDecimal(0.01),//退款金额,单位 元
new BigDecimal(0.01));//原订单金额
//支付状态修改为 退款
orders.setPayStatus(Orders.REFUND);
}
// 更新订单状态、取消原因、取消时间
orders.setStatus(Orders.CANCELLED);
orders.setCancelReason("用户取消");
orders.setCancelTime(LocalDateTime.now());
orderMapper.update(orders);
}
管理端查看订单(分页查询)
再强调一遍,controller返回的是PageResult
new pageResult(totalNumber,list<>)
所以Service需要去查List<。。。VO>返回给Controller
@GetMapping("/conditionSearch")
@ApiOperation("管理端订单搜索")
public Result<PageResult> conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO){
PageResult pageResult = orderService.conditionSearch(ordersPageQueryDTO);
return Result.success(pageResult);
}
查询用DTO去查询
然后在补全查不到的在别的表的数据,返回list<。。VO>给Controller
public PageResult conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO){
PageHelper.startPage(ordersPageQueryDTO.getPage(),ordersPageQueryDTO.getPageSize());
Page<Orders> page = userMapper.pageQuery(ordersPageQueryDTO);
List<OrderVO> list = new ArrayList<>();
for(Orders orders:page){
List<OrderDetail> orderDetailList = orderDetailMapper.getById(orders.getId());
OrderVO orderVO = new OrderVO();
orderVO.setOrderDetailList(orderDetailList);
list.add(orderVO);
}
return new PageResult(page.getTotal(),list);
}