diff --git a/ruoyi-admin/src/test/java/com/fjp/lc/test/service/ServiceTest.java b/ruoyi-admin/src/test/java/com/fjp/lc/test/service/ServiceTest.java index e64c402..25dbe72 100644 --- a/ruoyi-admin/src/test/java/com/fjp/lc/test/service/ServiceTest.java +++ b/ruoyi-admin/src/test/java/com/fjp/lc/test/service/ServiceTest.java @@ -90,7 +90,7 @@ public class ServiceTest { // String code = "0611P2Ga1D8QCF0CVuJa1qNUJa11P2GL"; // WechatUserAuth userToken = wechatAuthService.getUserToken(code); String openId="oUA8I6lDdwSfz-EwR4284dU3KOYw"; - String res = wechatPayService.jsapiPay(UUID.randomUUID().toString().substring(0,30), "测试支付", 1, openId); + String res = wechatPayService.jsapiPay(UUID.randomUUID().toString().substring(0,30), "测试支付", 1, openId, 22L); System.out.println(res); } diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java index 9892cc2..cbb096e 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java @@ -2,6 +2,7 @@ package com.cyl.h5.controller; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONObject; +import com.cyl.h5.pojo.dto.ApplyRefundDTO; import com.cyl.h5.pojo.dto.OrderCreateDTO; import com.cyl.h5.pojo.request.CancelOrderRequest; import com.cyl.h5.pojo.request.OrderPayRequest; @@ -157,4 +158,24 @@ public class H5OrderController { } } } + + @ApiOperation("申请售后") + @PostMapping("/applyRefund") + public ResponseEntity applyRefund(@RequestBody ApplyRefundDTO applyRefundDTO){ + String redisKey = "h5_oms_order_applyRefund_" + applyRefundDTO.getOrderId(); + String redisValue = applyRefundDTO.getOrderId() + "_" + System.currentTimeMillis(); + try{ + redisService.lock(redisKey, redisValue, 60); + return ResponseEntity.ok(service.applyRefund(applyRefundDTO)); + }catch (Exception e){ + log.error("申请售后发生异常",e); + throw new RuntimeException(e.getMessage()); + }finally { + try { + redisService.unLock(redisKey, redisValue); + } catch (Exception e) { + log.error("", e); + } + } + } } diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/controller/PayNotifyController.java b/ruoyi-mall/src/main/java/com/cyl/h5/controller/PayNotifyController.java index e136f78..67d5437 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/controller/PayNotifyController.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/controller/PayNotifyController.java @@ -85,6 +85,7 @@ public class PayNotifyController { NotificationParser parser = new NotificationParser((NotificationConfig) config); // 以支付通知回调为例,验签、解密并转换成 Transaction Transaction transaction = parser.parse(requestParam, Transaction.class); + log.info("【transaction】" + JSONObject.toJSON(transaction)); PayNotifyMessageDTO message = new PayNotifyMessageDTO(); message.setTradeNo(transaction.getOutTradeNo()); message.setMemberId(Long.valueOf(transaction.getAttach())); diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/dto/ApplyRefundDTO.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/dto/ApplyRefundDTO.java new file mode 100644 index 0000000..c7f084f --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/dto/ApplyRefundDTO.java @@ -0,0 +1,34 @@ +package com.cyl.h5.pojo.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel("申请售后对象") +public class ApplyRefundDTO { + + @ApiModelProperty(value = "订单id", required = true) + private Long orderId; + + @ApiModelProperty(value = "申请售后类型 1:仅退款 2:退货退款", required = true) + private Integer applyRefundType; + + @ApiModelProperty(value = "退款原因", required = true) + private String reason; + + @ApiModelProperty(value = "申请退货数量", required = true) + private Integer quantity; + + @ApiModelProperty(value = "退款金额", required = true) + private BigDecimal refundAmount; + + @ApiModelProperty(value = "描述") + private String description; + + @ApiModelProperty("凭证图片以逗号隔开") + private String proofPics; + +} diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java index 5a21e78..60421a5 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java @@ -7,10 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.cyl.h5.pojo.dto.MicroMallOrderSyncMsg; -import com.cyl.h5.pojo.dto.OrderCreateDTO; -import com.cyl.h5.pojo.dto.OrderProductListDTO; -import com.cyl.h5.pojo.dto.PayNotifyMessageDTO; +import com.cyl.h5.pojo.dto.*; import com.cyl.h5.pojo.request.CancelOrderRequest; import com.cyl.h5.pojo.request.OrderPayRequest; import com.cyl.h5.pojo.response.OrderPayResponse; @@ -495,7 +492,8 @@ public class H5OrderService { orderDesc, Integer.valueOf(orderList.stream().map(Order::getPayAmount). reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString()), - memberWechat.getOpenid() + memberWechat.getOpenid(), + req.getMemberId() ); OrderPayResponse response = new OrderPayResponse(); response.setPayType(2); @@ -582,4 +580,14 @@ public class H5OrderService { } return ResponseEntity.ok("订单支付回调成功"); } + + /** + * 申请售后 + * @param applyRefundDTO + * @return + */ + public String applyRefund(ApplyRefundDTO applyRefundDTO) { + + return null; + } } diff --git a/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayService.java b/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayService.java index c876982..14705cf 100644 --- a/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayService.java +++ b/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayService.java @@ -24,12 +24,13 @@ public class WechatPayService { * @param openId 用户openid * @return prepay_id */ - public String jsapiPay(String orderNo,String desc,Integer totalAmount,String openId){ + public String jsapiPay(String orderNo,String desc,Integer totalAmount,String openId, Long memberId){ PrepayRequest prepayRequest = new PrepayRequest(); prepayRequest.setAppid(WechatPayData.appId); prepayRequest.setMchid(WechatPayData.merchantId); prepayRequest.setDescription(desc); prepayRequest.setOutTradeNo(orderNo); + prepayRequest.setAttach(String.valueOf(memberId)); prepayRequest.setNotifyUrl(WechatPayData.notifyUrl); Amount amount = new Amount(); amount.setTotal(totalAmount);