Pu Zhibing
2024-09-30 f541eaa5c92cb112af6d3f656275105606d31b39
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -1,6 +1,7 @@
package com.ruoyi.order.controller;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
@@ -15,10 +16,13 @@
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.api.model.TChargingOrderRefund;
import com.ruoyi.order.api.model.TExchangeOrder;
import com.ruoyi.order.api.model.TShoppingOrder;
import com.ruoyi.order.api.model.TShoppingOrderRefund;
import com.ruoyi.order.api.query.ShoppingOrderQuery;
import com.ruoyi.order.dto.*;
import com.ruoyi.order.service.TShoppingOrderRefundService;
import com.ruoyi.order.service.TShoppingOrderService;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.domain.TGoods;
@@ -40,6 +44,7 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
@@ -73,7 +78,31 @@
   private AppCouponClient appCouponClient;
   @Resource
   private SysUserClient sysUserClient;
   @Resource
   private TShoppingOrderRefundService shoppingOrderRefundService;
   /**
    * 远程管理后台取消订单后退款回调
    */
   @ResponseBody
   @PostMapping(value = "/shoppingOrderWxRefund")
   public void shoppingOrderWxRefund(@RequestParam("out_trade_no") String out_refund_no,
                                       @RequestParam("out_trade_no") String refund_id,
                                       @RequestParam("out_trade_no") String tradeState,
                                       @RequestParam("out_trade_no") String success_time){
      if("SUCCESS".equals(tradeState)){
         TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, out_refund_no));
         one.setRefundSerialNumber(refund_id);
         one.setRefundStatus(2);
         one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE")));
         shoppingOrderRefundService.updateById(one);
         TShoppingOrder byId = shoppingOrderService.getById(one.getShoppingOrderId());
         byId.setStatus(4);
         shoppingOrderService.updateById(byId);
         if (byId.getAppCouponId() != null) {
            appCouponClient.refund(byId.getAppCouponId().toString());
         }
      }
   }
   
   @PostMapping("/getShoppingOrderList")
   @ApiOperation(value = "列表查询", tags = {"管理后台-购物订单"})
@@ -144,7 +173,7 @@
      shoppingOrderService.removeBatchByIds(Arrays.asList(ids.split(",")));
      return AjaxResult.success();
   }
   @GetMapping("/cancelShoppingOrder")
   @ApiOperation(value = "取消订单", tags = {"管理后台-购物订单"})
   public AjaxResult cancelShoppingOrder(String id) {
@@ -154,6 +183,21 @@
      byId.setCancellationId(userid);
      byId.setCancellationTime(LocalDateTime.now());
      byId.setStatus(4);
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
      TShoppingOrderRefund tShoppingOrderRefund = new TShoppingOrderRefund();
      tShoppingOrderRefund.setPayTime(byId.getPayTime());
      tShoppingOrderRefund.setPayCode(byId.getSerialNumber());
      tShoppingOrderRefund.setPayAmount(byId.getPaymentAmount());
      tShoppingOrderRefund.setPayType(1);
      tShoppingOrderRefund.setShoppingOrderId(byId.getId());
      tShoppingOrderRefund.setRefundAmount(byId.getPaymentAmount());
      tShoppingOrderRefund.setRefundStatus(1);
      tShoppingOrderRefund.setCode("GWF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue());
      tShoppingOrderRefund.setRefundTitle("后台取消订单");
      tShoppingOrderRefund.setRefundContent("后台取消订单");
      tShoppingOrderRefund.setRefundReason("后台取消订单");
      tShoppingOrderRefund.setRefundRemark("全额退款");
      tShoppingOrderRefund.setRefundTotalAmount(byId.getPaymentAmount());
      switch (byId.getPaymentType()) {
         case 1:
            // 微信
@@ -163,8 +207,6 @@
            wxPaymentRefundModel.setOut_refund_no(OrderCodeUtil.getOrderCode("GWTK"));
            wxPaymentRefundModel.setReason("后台购物订单退款");
            wxPaymentRefundModel.setNotify_url("/payment/wx/refund/notify");
            // todo 部署到线上之后写回调地址
            String string = byId.getPaymentAmount().multiply(new BigDecimal("100")).toString();
            if (string.contains(".")) {
               string = string.substring(0, string.indexOf("."));
@@ -175,28 +217,37 @@
            refundAmount.setCurrency("CNY");
            refundAmount.setRefund(i);
            wxPaymentRefundModel.setAmount(refundAmount);
            wxPaymentClient.refundOrderR(wxPaymentRefundModel);
            R<String> stringR = wxPaymentClient.refundOrderR(wxPaymentRefundModel);
            if(200 == stringR.getCode()){
               shoppingOrderRefundService.save(tShoppingOrderRefund);
            }
            break;
         case 2:
            // 支付宝
            RefundReq refundReq = new RefundReq();
            refundReq.setOutTradeNo(byId.getSerialNumber());
            String gw = OrderCodeUtil.getOrderCode("GWTK");
            String gw = OrderCodeUtil.getOrderCode("GWF");
            refundReq.setOutRequestNo(gw);
            refundReq.setRefundAmount(byId.getPaymentAmount().toString());
            refundReq.setRefundReason("后台购物订单退款");
            RefundResp data = aliPaymentClient.refund(refundReq).getData();
            if (data != null) {
               // 退款成功 回退优惠券
               byId.setStatus(4);
               SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
               TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, data.getOutTradeNo()));
               one.setRefundSerialNumber(data.getTradeNo());
               one.setRefundStatus(2);
               one.setRefundTime(LocalDateTime.parse(sdf1.format(new Date()), DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE")));
               shoppingOrderRefundService.updateById(one);
               if (byId.getAppCouponId() != null) {
                  // 退款成功 回退优惠券
                  appCouponClient.refund(byId.getAppCouponId().toString());
                  byId.setRefundCode(gw);
                  byId.setRefundAmount(byId.getPaymentAmount());
                  byId.setRefundStatus(2);
                  byId.setRefundSerialNumber(data.getTradeNo());
                  shoppingOrderService.updateById(byId);
               }
               byId.setRefundCode(gw);
               byId.setRefundAmount(byId.getPaymentAmount());
               byId.setRefundStatus(2);
               byId.setRefundSerialNumber(data.getTradeNo());
               shoppingOrderService.updateById(byId);
            }
            break;
      }