无关风月
2024-08-30 d33c34c76e74dbacf1bf7a57d7d3109e2bc54e68
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -3,6 +3,9 @@
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.ruoyi.account.api.feignClient.AppCouponClient;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppUserAddress;
import com.ruoyi.common.core.domain.R;
@@ -18,6 +21,12 @@
import com.ruoyi.order.service.TShoppingOrderService;
import com.ruoyi.other.api.feignClient.CouponClient;
import com.ruoyi.other.api.feignClient.GoodsClient;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
import com.ruoyi.payment.api.model.RefundReq;
import com.ruoyi.payment.api.model.RefundResp;
import com.ruoyi.payment.api.model.WxPaymentRefundModel;
import com.ruoyi.payment.api.vo.WxRefundNotifyResp;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
import io.swagger.annotations.Api;
@@ -27,9 +36,8 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
 * <p>
@@ -111,6 +119,12 @@
   }
   @Resource
   private TokenService tokenService;
   @Resource
   private AliPaymentClient aliPaymentClient;
   @Resource
   private WxPaymentClient wxPaymentClient;
   @Resource
   private AppCouponClient appCouponClient;
   @GetMapping("/cancelShoppingOrder")
   @ApiOperation(value = "取消订单", tags = {"管理后台-购物订单"})
   public AjaxResult cancelShoppingOrder(String id) {
@@ -123,9 +137,40 @@
      switch (byId.getPaymentType()){
         case 1:
            // 微信
            WxPaymentRefundModel wxPaymentRefundModel = new WxPaymentRefundModel();
            wxPaymentRefundModel.setTransaction_id(byId.getSerialNumber());
            wxPaymentRefundModel.setOut_trade_no(byId.getCode());
            wxPaymentRefundModel.setOut_refund_no(OrderCodeUtil.getOrderCode("GW"));
            // todo 部署到线上之后写回调地址
//            wxPaymentRefundModel.setNotify_url("");
            String string = byId.getPaymentAmount().multiply(new BigDecimal("100")).toString();
            int i = Integer.parseInt(string);
            WxPaymentRefundModel.RefundAmount refundAmount = new WxPaymentRefundModel.RefundAmount();
            refundAmount.setTotal(i);
            refundAmount.setRefund(i);
            wxPaymentRefundModel.setAmount(refundAmount);
            wxPaymentClient.refundOrderR(wxPaymentRefundModel);
            break;
         case 2:
            // 支付宝
            RefundReq refundReq = new RefundReq();
            refundReq.setOutTradeNo(byId.getSerialNumber());
            String gw = OrderCodeUtil.getOrderCode("GW");
            refundReq.setOutRequestNo(gw);
            refundReq.setRefundAmount(byId.getPaymentAmount().toString());
            refundReq.setRefundReason("后台退款");
            RefundResp data = aliPaymentClient.refund(refundReq).getData();
            if (data!=null){
               // 退款成功 回退优惠券
//               byId.setStatus(4);
               if (byId.getAppCouponId()!=null){
                  appCouponClient.refund(byId.getAppCouponId().toString());
                  byId.setRefundCode(gw);
                  byId.setRefundAmount(byId.getPaymentAmount());
                  byId.setRefundStatus(2);
                  byId.setRefundSerialNumber(data.getTradeNo());
               }
            }
            break;
      }
      shoppingOrderService.updateById(byId);
@@ -144,15 +189,32 @@
   }
   @GetMapping("/getMyShoppingOrderList")
   @ApiOperation(value = "获取购买订单列表", tags = {"小程序-商城购买订单"})
   public AjaxResult<List<MyShoppingOrderList>> getMyShoppingOrderList(GetMyShoppingOrderList query){
      List<MyShoppingOrderList> list = shoppingOrderService.getMyShoppingOrderList(query);
   public AjaxResult<Map<String, Object>> getMyShoppingOrderList(GetMyShoppingOrderList query){
      Map<String, Object> list = shoppingOrderService.getMyShoppingOrderList(query);
      return AjaxResult.success(list);
   }
   @GetMapping("/getMyShoppingOrderListNum")
   @ApiOperation(value = "获取购买订单列表数量", tags = {"小程序-商城购买订单"})
   public AjaxResult<Map<String, Object>> getMyShoppingOrderListNum(){
      Long userId = tokenService.getLoginUserApplet().getUserId();
      long dfh = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0)
            .eq(TShoppingOrder::getStatus, 1).eq(TShoppingOrder::getAppUserId, userId));
      long dsh = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0)
            .eq(TShoppingOrder::getStatus, 2).eq(TShoppingOrder::getAppUserId, userId));
      long ywc = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0)
            .eq(TShoppingOrder::getStatus, 3).eq(TShoppingOrder::getAppUserId, userId));
      Map<String, Object> map = new HashMap<>();
      map.put("dfh", dfh);
      map.put("dsh", dsh);
      map.put("ywc", ywc);
      return AjaxResult.success(map);
   }
   
   
   @GetMapping("/getMyShoppingOrderInfo/{id}")
   @ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单"})
   @ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单","管理后台-支付订单-订单信息"})
   public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo(@PathVariable String id){
      MyShoppingOrderInfo info = shoppingOrderService.getMyShoppingOrderInfo(id);
      return AjaxResult.success(info);
@@ -185,6 +247,21 @@
      return shoppingOrderService.cancelOrder(id);
   }
   
   /**
    * 商城订单取消微信退款回调
    */
   @PostMapping("/cancelShoppingOrderWxRefund")
   public void cancelShoppingOrderWxRefund(HttpServletRequest request){
      WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData();
      if(null != data){
         String out_refund_no = data.getOut_refund_no();
         String refund_id = data.getRefund_id();
         String tradeState = data.getTradeState();
         String success_time = data.getSuccess_time();
         shoppingOrderService.cancelShoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time);
      }
   }
   
   
   @ResponseBody
@@ -207,7 +284,7 @@
         shoppingOrder.setCouponId(exchangeDto.getGoodId());
      }
      shoppingOrder.setPurchaseQuantity(exchangeDto.getNum());
      shoppingOrder.setAppUserAddressId(Long.valueOf(exchangeDto.getAddressId()));
      shoppingOrder.setAppUserAddressId(exchangeDto.getAddressId());
      shoppingOrder.setOrderAmount(exchangeDto.getOrderPrice());
      if (exchangeDto.getCouponId()!=null) {
         shoppingOrder.setAppCouponId(exchangeDto.getCouponId());