From a0fa46f873f0252c23e391a9223f4e6fceff89b7 Mon Sep 17 00:00:00 2001 From: JIAN Date: Sat, 14 Sep 2024 23:18:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(health):=E6=96=B0=E5=A2=9E=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=9F=A5=E8=AF=A2=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=201.=20=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=202.=20=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/OrdersQueryController.java | 12 +- .../user/OrdersQueryController.java | 16 ++- .../dto/response/AdminOrdersDetailResDTO.java | 6 +- .../health/service/IOrderCancelService.java | 11 ++ .../health/service/IOrderManagerService.java | 31 +++++ .../service/impl/OrderCancelServiceImpl.java | 15 ++ .../service/impl/OrderManagerServiceImpl.java | 129 ++++++++++++++++++ 7 files changed, 208 insertions(+), 12 deletions(-) create mode 100644 jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderCancelService.java create mode 100644 jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderManagerService.java create mode 100644 jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderCancelServiceImpl.java create mode 100644 jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderManagerServiceImpl.java diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/OrdersQueryController.java b/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/OrdersQueryController.java index f9d7ef0..f2b6823 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/OrdersQueryController.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/controller/admin/OrdersQueryController.java @@ -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 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); } - -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/OrdersQueryController.java b/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/OrdersQueryController.java index f6ef0e5..93a96a2 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/OrdersQueryController.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/controller/user/OrdersQueryController.java @@ -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 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); } - -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/model/dto/response/AdminOrdersDetailResDTO.java b/jzo2o-health/src/main/java/com/jzo2o/health/model/dto/response/AdminOrdersDetailResDTO.java index 953fbad..6454a10 100644 --- a/jzo2o-health/src/main/java/com/jzo2o/health/model/dto/response/AdminOrdersDetailResDTO.java +++ b/jzo2o-health/src/main/java/com/jzo2o/health/model/dto/response/AdminOrdersDetailResDTO.java @@ -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; } -} +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderCancelService.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderCancelService.java new file mode 100644 index 0000000..b44ca1b --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderCancelService.java @@ -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 { +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderManagerService.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderManagerService.java new file mode 100644 index 0000000..ee1ced9 --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/IOrderManagerService.java @@ -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 { + /** + * 管理端订单分页查询 + */ + PageResult pageQuery(OrdersPageQueryReqDTO ordersPageQueryReqDTO); + + /** + * 用户端订单分页查询 + */ + List pageQuery(Integer orderStatus, Long sortBy); + + /** + * 管理端查询订单详情 + */ + AdminOrdersDetailResDTO getAggregationInfo(Long id); +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderCancelServiceImpl.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderCancelServiceImpl.java new file mode 100644 index 0000000..620adcc --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderCancelServiceImpl.java @@ -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 implements IOrderCancelService { +} \ No newline at end of file diff --git a/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderManagerServiceImpl.java b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderManagerServiceImpl.java new file mode 100644 index 0000000..ecfbc71 --- /dev/null +++ b/jzo2o-health/src/main/java/com/jzo2o/health/service/impl/OrderManagerServiceImpl.java @@ -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 implements IOrderManagerService { + @Resource + private IOrderCancelService orderCancelService; + + @Override + public PageResult pageQuery(OrdersPageQueryReqDTO ordersPageQueryReqDTO) { + Page ordersPage = PageUtils.parsePageQuery(ordersPageQueryReqDTO, Orders.class); + + Integer orderStatus = ordersPageQueryReqDTO.getOrderStatus(); + String memberPhone = ordersPageQueryReqDTO.getMemberPhone(); + + Page 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 pageQuery(Integer orderStatus, Long sortBy) { + Long userId = UserThreadLocal.currentUserId(); + if (ObjectUtils.isEmpty(userId)) { + throw new ForbiddenOperationException("无法获取当前用户"); + } + + // 默认每页10条数据 + List 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; + } +} \ No newline at end of file