feat(health):新增订单查询相关功能

1. 分页查询 2. 查询订单详情
This commit is contained in:
JIAN 2024-09-14 23:18:58 +08:00
parent 6003aca88e
commit a0fa46f873
7 changed files with 208 additions and 12 deletions

View File

@ -4,6 +4,7 @@ import com.jzo2o.common.model.PageResult;
import com.jzo2o.health.model.dto.request.OrdersPageQueryReqDTO;
import com.jzo2o.health.model.dto.response.AdminOrdersDetailResDTO;
import com.jzo2o.health.model.dto.response.OrdersResDTO;
import com.jzo2o.health.service.IOrderManagerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@ -13,6 +14,8 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author itcast
*/
@ -20,11 +23,13 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/admin/orders")
@Api(tags = "管理端 - 订单查询接口")
public class OrdersQueryController {
@Resource
private IOrderManagerService orderManagerService;
@ApiOperation("分页查询")
@GetMapping("/page")
public PageResult<OrdersResDTO> pageQuery(OrdersPageQueryReqDTO ordersPageQueryReqDTO) {
return null;
return orderManagerService.pageQuery(ordersPageQueryReqDTO);
}
@GetMapping("/{id}")
@ -33,7 +38,6 @@ public class OrdersQueryController {
@ApiImplicitParam(name = "id", value = "订单id", required = true, dataTypeClass = Long.class)
})
public AdminOrdersDetailResDTO aggregation(@PathVariable("id") Long id) {
return null;
return orderManagerService.getAggregationInfo(id);
}
}
}

View File

@ -1,13 +1,16 @@
package com.jzo2o.health.controller.user;
import com.jzo2o.common.utils.BeanUtils;
import com.jzo2o.health.model.dto.response.OrdersDetailResDTO;
import com.jzo2o.health.model.dto.response.OrdersResDTO;
import com.jzo2o.health.service.IOrderManagerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
@ -17,16 +20,18 @@ import java.util.List;
@RequestMapping("/user/orders")
@Api(tags = "用户端 - 订单查询相关接口")
public class OrdersQueryController {
@Resource
private IOrderManagerService orderManagerService;
@ApiOperation("滚动分页查询")
@GetMapping("/page")
@ApiImplicitParams({
@ApiImplicitParam(name = "ordersStatus", value = "订单状态0未支付100待体检200已体检300已关闭400已取消", required = false, dataTypeClass = Integer.class),
@ApiImplicitParam(name = "sortBy", value = "排序字段", required = false, dataTypeClass = Long.class)
@ApiImplicitParam(name = "ordersStatus", value = "订单状态0未支付100待体检200已体检300已关闭400已取消", dataTypeClass = Integer.class),
@ApiImplicitParam(name = "sortBy", value = "排序字段", dataTypeClass = Long.class)
})
public List<OrdersResDTO> pageQuery(@RequestParam(value = "ordersStatus", required = false) Integer ordersStatus,
@RequestParam(value = "sortBy", required = false) Long sortBy) {
return null;
return orderManagerService.pageQuery(ordersStatus, sortBy);
}
@GetMapping("/{id}")
@ -35,7 +40,6 @@ public class OrdersQueryController {
@ApiImplicitParam(name = "id", value = "订单id", required = true, dataTypeClass = Long.class)
})
public OrdersDetailResDTO detail(@PathVariable("id") Long id) {
return null;
return BeanUtils.toBean(orderManagerService.getById(id), OrdersDetailResDTO.class);
}
}
}

View File

@ -3,6 +3,7 @@ package com.jzo2o.health.model.dto.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
@ -11,7 +12,6 @@ import java.time.LocalDateTime;
/**
* 管理端订单详情
*
* @author itcast
* @create 2023/11/6 17:31
**/
@ -142,6 +142,7 @@ public class AdminOrdersDetailResDTO {
}
@Data
@Builder
@ApiModel("退款信息模型")
public static class RefundInfo {
/**
@ -177,6 +178,7 @@ public class AdminOrdersDetailResDTO {
}
@Data
@Builder
@ApiModel("订单取消模型")
public static class CancelInfo {
/**
@ -192,4 +194,4 @@ public class AdminOrdersDetailResDTO {
@ApiModelProperty("取消理由")
private String cancelReason;
}
}
}

View File

@ -0,0 +1,11 @@
package com.jzo2o.health.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.health.model.domain.OrdersCancelled;
/**
* 取消订单相关业务层
* @author JIAN
*/
public interface IOrderCancelService extends IService<OrdersCancelled> {
}

View File

@ -0,0 +1,31 @@
package com.jzo2o.health.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.health.model.domain.Orders;
import com.jzo2o.health.model.dto.request.OrdersPageQueryReqDTO;
import com.jzo2o.health.model.dto.response.AdminOrdersDetailResDTO;
import com.jzo2o.health.model.dto.response.OrdersResDTO;
import java.util.List;
/**
* 订单管理相关业务层
* @author JIAN
*/
public interface IOrderManagerService extends IService<Orders> {
/**
* 管理端订单分页查询
*/
PageResult<OrdersResDTO> pageQuery(OrdersPageQueryReqDTO ordersPageQueryReqDTO);
/**
* 用户端订单分页查询
*/
List<OrdersResDTO> pageQuery(Integer orderStatus, Long sortBy);
/**
* 管理端查询订单详情
*/
AdminOrdersDetailResDTO getAggregationInfo(Long id);
}

View File

@ -0,0 +1,15 @@
package com.jzo2o.health.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jzo2o.health.mapper.OrdersCancelledMapper;
import com.jzo2o.health.model.domain.OrdersCancelled;
import com.jzo2o.health.service.IOrderCancelService;
import org.springframework.stereotype.Service;
/**
* 取消订单相关业务层实现
* @author JIAN
*/
@Service
public class OrderCancelServiceImpl extends ServiceImpl<OrdersCancelledMapper, OrdersCancelled> implements IOrderCancelService {
}

View File

@ -0,0 +1,129 @@
package com.jzo2o.health.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jzo2o.common.expcetions.ForbiddenOperationException;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.common.utils.BeanUtils;
import com.jzo2o.common.utils.CollUtils;
import com.jzo2o.common.utils.ObjectUtils;
import com.jzo2o.health.enums.OrderPayStatusEnum;
import com.jzo2o.health.enums.OrderStatusEnum;
import com.jzo2o.health.mapper.OrdersMapper;
import com.jzo2o.health.model.UserThreadLocal;
import com.jzo2o.health.model.domain.Orders;
import com.jzo2o.health.model.domain.OrdersCancelled;
import com.jzo2o.health.model.dto.request.OrdersPageQueryReqDTO;
import com.jzo2o.health.model.dto.response.AdminOrdersDetailResDTO;
import com.jzo2o.health.model.dto.response.OrdersResDTO;
import com.jzo2o.health.service.IOrderCancelService;
import com.jzo2o.health.service.IOrderManagerService;
import com.jzo2o.mysql.utils.PageUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 订单管理相关业务层实现
* @author JIAN
*/
@Service
public class OrderManagerServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements IOrderManagerService {
@Resource
private IOrderCancelService orderCancelService;
@Override
public PageResult<OrdersResDTO> pageQuery(OrdersPageQueryReqDTO ordersPageQueryReqDTO) {
Page<Orders> ordersPage = PageUtils.parsePageQuery(ordersPageQueryReqDTO, Orders.class);
Integer orderStatus = ordersPageQueryReqDTO.getOrderStatus();
String memberPhone = ordersPageQueryReqDTO.getMemberPhone();
Page<Orders> page = lambdaQuery()
.eq(ObjectUtils.isNotEmpty(orderStatus), Orders::getOrderStatus, orderStatus)
.like(ObjectUtils.isNotEmpty(memberPhone), Orders::getMemberPhone, memberPhone)
.page(ordersPage);
return PageUtils.toPage(page, OrdersResDTO.class);
}
@Override
public List<OrdersResDTO> pageQuery(Integer orderStatus, Long sortBy) {
Long userId = UserThreadLocal.currentUserId();
if (ObjectUtils.isEmpty(userId)) {
throw new ForbiddenOperationException("无法获取当前用户");
}
// 默认每页10条数据
List<Orders> ordersList = lambdaQuery()
.eq(Orders::getMemberId, userId)
.eq(ObjectUtils.isNotEmpty(orderStatus), Orders::getOrderStatus, orderStatus)
.lt(ObjectUtils.isNotEmpty(sortBy), Orders::getSortBy, sortBy)
.last("LIMIT 10")
.list();
if (CollUtils.isEmpty(ordersList)) {
return new ArrayList<>();
} else {
return ordersList.stream()
.map(order -> BeanUtils.toBean(order, OrdersResDTO.class))
.collect(Collectors.toList());
}
}
@Override
public AdminOrdersDetailResDTO getAggregationInfo(Long id) {
AdminOrdersDetailResDTO adminOrdersDetailResDTO = new AdminOrdersDetailResDTO();
Orders orders = baseMapper.selectById(id);
if (ObjectUtils.isEmpty(orders)) {
return adminOrdersDetailResDTO;
}
// 订单信息
adminOrdersDetailResDTO.setOrderInfo(
BeanUtils.toBean(orders, AdminOrdersDetailResDTO.OrderInfo.class));
// 支付信息
AdminOrdersDetailResDTO.PayInfo payInfo = BeanUtils.toBean(orders, AdminOrdersDetailResDTO.PayInfo.class);
payInfo.setThirdOrderId(orders.getTransactionId());
adminOrdersDetailResDTO.setPayInfo(payInfo);
Integer orderStatus = orders.getOrderStatus();
if (OrderStatusEnum.CANCELLED.getStatus().equals(orderStatus)) {
OrdersCancelled cancelInfo = orderCancelService.getById(orders.getId());
// 取消信息
adminOrdersDetailResDTO.setCancelInfo(AdminOrdersDetailResDTO.CancelInfo.builder()
.cancelReason(cancelInfo.getCancelReason())
.cancelTime(cancelInfo.getCancelTime())
.build());
// 退款信息
adminOrdersDetailResDTO.setRefundInfo(AdminOrdersDetailResDTO.RefundInfo.builder()
.refundStatus(payInfo.getPayStatus())
.cancelTime(cancelInfo.getCancelTime())
.cancelReason(cancelInfo.getCancelReason())
.tradingChannel(orders.getTradingChannel())
.refundId(orders.getRefundId())
.build());
payInfo.setPayStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus());
} else if (OrderStatusEnum.CLOSED.getStatus().equals(orderStatus)) {
OrdersCancelled cancelInfo = orderCancelService.getById(orders.getId());
// 取消信息
adminOrdersDetailResDTO.setCancelInfo(AdminOrdersDetailResDTO.CancelInfo.builder()
.cancelReason(cancelInfo.getCancelReason())
.cancelTime(cancelInfo.getCancelTime())
.build());
payInfo.setPayStatus(OrderPayStatusEnum.PAY_SUCCESS.getStatus());
}
return adminOrdersDetailResDTO;
}
}