From 961df0a15135f9e8cac2d3deffa14d96c91eb983 Mon Sep 17 00:00:00 2001 From: songmingsong <2929511417@qq.com> Date: Fri, 6 Dec 2024 15:18:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E8=B5=B7=E9=80=80=E6=AC=BE=E3=80=81?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/mobile/AppGoodsController.java | 3 +- .../mobile/AppMemberController.java | 4 +-- .../controller/mobile/AppOrderController.java | 12 +++++-- .../basic/controller/pc/OrderController.java | 8 +++++ .../com/ycwl/basic/enums/OrderStateEnum.java | 1 + .../model/mobile/order/RefundOrderReq.java | 21 +++++++++++ .../model/wx/WechatMessageSubscribeForm.java | 5 ++- .../impl/mobile/WxNotifyServiceImpl.java | 4 +-- .../service/impl/pc/OrderServiceImpl.java | 35 ++++++++++++++++--- .../ycwl/basic/service/pc/OrderService.java | 20 +++++++++++ 10 files changed, 100 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/model/mobile/order/RefundOrderReq.java diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java index c13d206..5402e76 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppGoodsController.java @@ -11,6 +11,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; import java.util.List; /** @@ -47,7 +48,7 @@ public class AppGoodsController { @ApiOperation("查询价格") @PostMapping("/queryPrice") - public ApiResponse queryPrice(@RequestBody GoodsPriceQueryReq queryPriceData) { + public ApiResponse queryPrice(@RequestBody GoodsPriceQueryReq queryPriceData) { return goodsService.queryPrice(queryPriceData); } } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java index 7e9af00..201c992 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppMemberController.java @@ -36,8 +36,8 @@ public class AppMemberController { @ApiOperation("登录") @PostMapping("/login") @IgnoreToken - public ApiResponse login(@RequestParam(value = "code", required = false) String code, - @RequestParam(value = "userInfoDTO", required = false) WeChatUserInfoDTO userInfoDTO) throws Exception { + public ApiResponse login(@RequestParam(value = "code") String code, + @RequestParam(value = "userInfoDTO") WeChatUserInfoDTO userInfoDTO) throws Exception { return memberService.login(code, userInfoDTO); } diff --git a/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java b/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java index 0cb2fb1..05503bf 100644 --- a/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java +++ b/src/main/java/com/ycwl/basic/controller/mobile/AppOrderController.java @@ -2,6 +2,7 @@ package com.ycwl.basic.controller.mobile; import com.ycwl.basic.annotation.IgnoreToken; import com.ycwl.basic.constant.BaseContextHandler; +import com.ycwl.basic.model.mobile.order.RefundOrderReq; import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq; import com.ycwl.basic.model.pc.order.req.OrderReqQuery; import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO; @@ -29,10 +30,11 @@ public class AppOrderController { @PostMapping("/page") @IgnoreToken public ApiResponse pageQuery(@RequestBody OrderReqQuery orderReqQuery) { - //TODO 添加用户openid查询条件,仅查询当前用户自己的订单 + // TODO 添加用户openid查询条件,仅查询当前用户自己的订单 return orderService.appPageQuery(orderReqQuery); } + @ApiOperation("用户端订单详情查询") @GetMapping("getOrderDetails/{id}") @IgnoreToken @@ -43,7 +45,7 @@ public class AppOrderController { @ApiOperation("用户端订单新增") @PostMapping("/addOrder") public ApiResponse addOrder(@RequestBody OrderAddOrUpdateReq orderAddReq) throws Exception { - return orderService.add(orderAddReq); + return orderService.add(orderAddReq); } @@ -55,4 +57,10 @@ public class AppOrderController { return orderService.getOrderCountByUserId(userId); } + @ApiOperation(value = "发起退款", notes = "发起退款") + @PostMapping("/refundOrder") + public ApiResponse refundOrder(@RequestBody RefundOrderReq refundOrderReq) { + return orderService.refundOrder(refundOrderReq); + } + } diff --git a/src/main/java/com/ycwl/basic/controller/pc/OrderController.java b/src/main/java/com/ycwl/basic/controller/pc/OrderController.java index bf17eed..7e7c1ee 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/OrderController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/OrderController.java @@ -1,6 +1,7 @@ package com.ycwl.basic.controller.pc; import com.github.pagehelper.PageInfo; +import com.ycwl.basic.model.mobile.order.RefundOrderReq; import com.ycwl.basic.model.pc.order.req.OrderReqQuery; import com.ycwl.basic.model.pc.order.resp.OrderRespVO; import com.ycwl.basic.service.pc.OrderService; @@ -24,6 +25,13 @@ public class OrderController { @Autowired private OrderService orderService; + @ApiOperation(value = "审核退款", notes = "审核退款") + @PostMapping("/auditRefundOrder") + public ApiResponse auditRefundOrder(@RequestBody RefundOrderReq refundOrderReq) { + return orderService.auditRefundOrder(refundOrderReq); + } + + @ApiOperation("分页查询订单") @PostMapping("page") public ApiResponse> pageQuery(@RequestBody OrderReqQuery query) { diff --git a/src/main/java/com/ycwl/basic/enums/OrderStateEnum.java b/src/main/java/com/ycwl/basic/enums/OrderStateEnum.java index 729f999..f6d98b6 100644 --- a/src/main/java/com/ycwl/basic/enums/OrderStateEnum.java +++ b/src/main/java/com/ycwl/basic/enums/OrderStateEnum.java @@ -15,6 +15,7 @@ import lombok.NoArgsConstructor; public enum OrderStateEnum { NOT_PRESENTED(0, "未提出",1), PASSED(1, "已通过",1), + TO_BE_REVIEWED(2, "待审核",1), UNPAID(0, "未支付",2), PAID(1, "已支付",2), REFUNDED(2, "已退款",2), diff --git a/src/main/java/com/ycwl/basic/model/mobile/order/RefundOrderReq.java b/src/main/java/com/ycwl/basic/model/mobile/order/RefundOrderReq.java new file mode 100644 index 0000000..879c183 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/mobile/order/RefundOrderReq.java @@ -0,0 +1,21 @@ +package com.ycwl.basic.model.mobile.order; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author: songmingsong + * @CreateTime: 2024-12-06 + * @Description: 退款 + * @Version: 1.0 + */ +@Data +@ApiModel("退款请求参数") +public class RefundOrderReq { + @ApiModelProperty("订单ID") + private Long orderId; + @ApiModelProperty("理由") + private String refundReason; +} diff --git a/src/main/java/com/ycwl/basic/model/wx/WechatMessageSubscribeForm.java b/src/main/java/com/ycwl/basic/model/wx/WechatMessageSubscribeForm.java index fe1efac..d21431c 100644 --- a/src/main/java/com/ycwl/basic/model/wx/WechatMessageSubscribeForm.java +++ b/src/main/java/com/ycwl/basic/model/wx/WechatMessageSubscribeForm.java @@ -18,7 +18,10 @@ public class WechatMessageSubscribeForm { * 用户的openID */ private String openId; - + /** + * 消息模板 + */ + private String templateId; /** * 默认跳到小程序首页 */ diff --git a/src/main/java/com/ycwl/basic/service/impl/mobile/WxNotifyServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/mobile/WxNotifyServiceImpl.java index aa645ea..bcd0bab 100644 --- a/src/main/java/com/ycwl/basic/service/impl/mobile/WxNotifyServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/mobile/WxNotifyServiceImpl.java @@ -43,7 +43,7 @@ public class WxNotifyServiceImpl implements WxNotifyService { /** * 缓存accessToken */ - private Map cacheAccessTokenMap = new ConcurrentHashMap<>(); + private final Map cacheAccessTokenMap = new ConcurrentHashMap<>(); @Override public String getAccessToken() { @@ -87,7 +87,7 @@ public class WxNotifyServiceImpl implements WxNotifyService { // 拼接推送的模板 WechatMssVO wxMssVO = new WechatMssVO(); wxMssVO.setTouser(info.getOpenId()); // 用户的openId - wxMssVO.setTemplate_id(wechatConfig.getTemplateId()); // 订阅消息模板id + wxMssVO.setTemplate_id(info.getTemplateId()); // 订阅消息模板id wxMssVO.setLang(info.getLang()); // 语言类型 wxMssVO.setMiniprogram_state(info.getMiniprogram_state()); // 跳转小程序类型 wxMssVO.setPage(info.getPage()); diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java index 5cad6e0..e59b250 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/OrderServiceImpl.java @@ -4,12 +4,15 @@ import cn.hutool.core.bean.BeanUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.constant.NumberConstant; +import com.ycwl.basic.enums.BizCodeEnum; import com.ycwl.basic.enums.OrderStateEnum; import com.ycwl.basic.enums.SourceTypeNameEnum; +import com.ycwl.basic.exception.AppException; import com.ycwl.basic.mapper.pc.OrderMapper; import com.ycwl.basic.mapper.pc.SourceMapper; import com.ycwl.basic.mapper.pc.VideoMapper; import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq; +import com.ycwl.basic.model.mobile.order.RefundOrderReq; import com.ycwl.basic.model.pc.member.resp.MemberRespVO; import com.ycwl.basic.model.pc.order.entity.OrderItemEntity; import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq; @@ -113,7 +116,7 @@ public class OrderServiceImpl implements OrderService { goodsName = videoRespVO.getTemplateName(); } else if (goodsType == NumberConstant.TWO) { SourceRespVO sourceRespVO = sourceMapper.getById(goodsId); - goodsName= SourceTypeNameEnum.getRemark( sourceRespVO.getType()); + goodsName = SourceTypeNameEnum.getRemark(sourceRespVO.getType()); } BigDecimal price = goodsService.queryPrice(goodsPriceQueryReq.setGoodsId(goodsId) .setGoodsType(goodsType)).getData(); @@ -124,7 +127,7 @@ public class OrderServiceImpl implements OrderService { .setOrderSn(orderId) .setTotalPrice(BigDecimalUtil.convertToCents(price)) .setGoodsName(goodsName); - return ApiResponse.success(wxPayService.createOrder(wxPayOrderReqVO)); + return ApiResponse.success(wxPayService.createOrder(wxPayOrderReqVO)); } } @@ -143,14 +146,16 @@ public class OrderServiceImpl implements OrderService { * @param orderSn 订单编号也就是订单的ID */ @Override - public void updateOrderState(Long orderSn, OrderStateEnum orderStateEnum, String refundReason) { + public void updateOrderState(Long orderSn, OrderStateEnum orderStateEnum, String reason) { OrderAddOrUpdateReq orderAddOrUpdateReq = new OrderAddOrUpdateReq(); orderAddOrUpdateReq.setId(orderSn); if (orderStateEnum.getType() == NumberConstant.ONE) { orderAddOrUpdateReq.setRefundStatus(orderStateEnum.getState()); orderAddOrUpdateReq.setRefundAt(new Date()); - if (Objects.nonNull(refundReason)) { - orderAddOrUpdateReq.setRefundReason(refundReason); + if (orderStateEnum.getState() == OrderStateEnum.PASSED.getState()) { + orderAddOrUpdateReq.setRemark(reason); + } else if (Objects.nonNull(reason)) { + orderAddOrUpdateReq.setRefundReason(reason); } } else if (orderStateEnum.getType() == NumberConstant.TWO) { int state = orderStateEnum.getState(); @@ -198,4 +203,24 @@ public class OrderServiceImpl implements OrderService { return ApiResponse.success(orderAppRespVO); } + @Override + public ApiResponse refundOrder(RefundOrderReq refundOrderReq) { + this.updateOrderState(refundOrderReq.getOrderId(), OrderStateEnum.TO_BE_REVIEWED, refundOrderReq.getRefundReason()); + return ApiResponse.buildResult(BizCodeEnum.REQUEST_OK); + } + + @Override + public ApiResponse auditRefundOrder(RefundOrderReq refundOrderReq) { + this.updateOrderState(refundOrderReq.getOrderId(), OrderStateEnum.PASSED, refundOrderReq.getRefundReason()); + // 调用微信发起退款 + new Thread(() -> { + try { + wxPayService.refundOrder(refundOrderReq.getOrderId().toString()); + } catch (Exception e) { + throw new AppException(BizCodeEnum.ADVANCE_PAYMENT_REFUND_FAILED,e.getMessage()); + } + }).start(); + return ApiResponse.buildResult(BizCodeEnum.REQUEST_OK); + } + } diff --git a/src/main/java/com/ycwl/basic/service/pc/OrderService.java b/src/main/java/com/ycwl/basic/service/pc/OrderService.java index 4bd4071..1087941 100644 --- a/src/main/java/com/ycwl/basic/service/pc/OrderService.java +++ b/src/main/java/com/ycwl/basic/service/pc/OrderService.java @@ -2,6 +2,7 @@ package com.ycwl.basic.service.pc; import com.github.pagehelper.PageInfo; import com.ycwl.basic.enums.OrderStateEnum; +import com.ycwl.basic.model.mobile.order.RefundOrderReq; import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq; import com.ycwl.basic.model.pc.order.req.OrderReqQuery; import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO; @@ -17,9 +18,13 @@ import java.util.List; */ public interface OrderService { ApiResponse> pageQuery(OrderReqQuery query); + ApiResponse> list(OrderReqQuery query); + ApiResponse detail(Long orderId); + ApiResponse add(OrderAddOrUpdateReq query) throws Exception; + ApiResponse update(OrderAddOrUpdateReq query); @@ -32,4 +37,19 @@ public interface OrderService { ApiResponse appDetail(Long id); + /** + * 订单退款 + * + * @param refundOrderReq + * @return + */ + ApiResponse refundOrder(RefundOrderReq refundOrderReq); + + /** + * 审核退款 + * + * @param refundOrderReq + * @return + */ + ApiResponse auditRefundOrder(RefundOrderReq refundOrderReq); }