Althars123 3 lat temu
rodzic
commit
14bb5a9934

+ 4 - 51
twzd-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java

@@ -3,11 +3,6 @@ package com.miaxis.app.controller.wx;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.github.wxpay.sdk.WXPay;
-import com.github.wxpay.sdk.WXPayConfig;
-import com.github.wxpay.sdk.WXPayConstants;
-import com.github.wxpay.sdk.WXPayUtil;
-import com.miaxis.common.config.WxPayConfigImpl;
 import com.miaxis.common.config.WxpayConfig;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.controller.BaseController;
@@ -17,13 +12,10 @@ import com.miaxis.common.core.domain.entity.UserInfo;
 import com.miaxis.common.enums.OrderStatusEnum;
 import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.SecurityUtils;
-import com.miaxis.common.utils.XmlUtil;
 import com.miaxis.common.utils.uuid.CommonUtils;
 import com.miaxis.system.service.ISysDictDataService;
-import com.miaxis.wx.domain.WxExtract;
 import com.miaxis.wx.domain.WxOrder;
 import com.miaxis.wx.dto.WxOrderDTO;
-import com.miaxis.wx.service.IWxExtractService;
 import com.miaxis.wx.service.IWxOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -48,8 +40,6 @@ import java.io.File;
 import java.security.PrivateKey;
 import java.security.Signature;
 import java.util.Base64;
-import java.util.Map;
-import java.util.TreeMap;
 
 import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
 
@@ -72,16 +62,14 @@ public class WxController extends BaseController {
     @Autowired
     private WxpayConfig wxpayConfig;
 
-    @Autowired
-    private IWxOrderService wxOrderService;
-
 
     @Autowired
     private ISysDictDataService dictDataService;
 
 
     @Autowired
-    private IWxExtractService wxExtractService;
+    private IWxOrderService wxOrderService;
+
 
     @Value("${app.appid}")
     private String appid;
@@ -221,49 +209,14 @@ public class WxController extends BaseController {
         if (amount > 200 && amount <0){
             throw new CustomException("提现金额必须在200以内");
         }
-
-        return Response.success(withdrawal(amount));
+        wxOrderService.wxwithdrawal(amount);
+        return Response.success();
 
 
     }
 
 
 
-    private String withdrawal(Integer amount) throws Exception {
-
-        Map<String, String> sortMap = new TreeMap<String, String>();
-        sortMap.put("mch_appid",appid);
-        sortMap.put("mchid",wxpayConfig.getMerchantId());
-        sortMap.put("nonce_str",RandomStringUtils.randomAlphanumeric(32));
-        sortMap.put("partner_trade_no",getOrderCode(null));
-        sortMap.put("openid",SecurityUtils.getLoginUser().getStudent().getOpenid());
-        sortMap.put("check_name","NO_CHECK");
-        sortMap.put("amount",String.valueOf(amount));
-        sortMap.put("desc","用户提现");
-
-        WXPayConfig config = new WxPayConfigImpl();
-        String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.MD5);
-        sortMap.put("sign", sign);
-        WXPay pay = new WXPay(config);
-
-        String url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
-        Map<String, String> resMap;
-        String xmlStr = pay.requestWithCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
-        resMap = XmlUtil.xmlToMap(xmlStr);
-        if (!"SUCCESS".equals(resMap.get("return_code"))||!"SUCCESS".equals(resMap.get("result_code"))){
-            throw new CustomException(resMap.get("return_msg"));
-        }
-        //新增提现记录
-        WxExtract wxExtract = new WxExtract();
-        wxExtract.setOpenid(SecurityUtils.getLoginUser().getStudent().getOpenid());
-        wxExtract.setExtractPrice(amount);
-        wxExtract.setPartnerTradeNo(resMap.get("partner_trade_no"));
-        wxExtract.setStatus("1");
-        wxExtractService.save(wxExtract);
-
-        return resMap.get("return_msg");
-    }
-
     private HttpPost initHttpPost() {
         HttpPost httpPost = new HttpPost(wxpayConfig.getV3url());
         httpPost.addHeader("Accept", "application/json");

+ 2 - 0
twzd-service/src/main/java/com/miaxis/wx/service/IWxOrderService.java

@@ -18,4 +18,6 @@ public interface IWxOrderService extends IService<WxOrder>{
 
 
     List<WxOrder> QuerySchoolOrderList(QuerySchoolOrderListDTO dto);
+
+    String wxwithdrawal(Integer amount) throws Exception;
 }

+ 82 - 0
twzd-service/src/main/java/com/miaxis/wx/service/impl/WxOrderServiceImpl.java

@@ -1,17 +1,37 @@
 package com.miaxis.wx.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.wxpay.sdk.WXPay;
+import com.github.wxpay.sdk.WXPayConfig;
+import com.github.wxpay.sdk.WXPayConstants;
+import com.github.wxpay.sdk.WXPayUtil;
+import com.miaxis.common.config.WxPayConfigImpl;
+import com.miaxis.common.config.WxpayConfig;
+import com.miaxis.common.core.domain.entity.UserInfo;
+import com.miaxis.common.exception.CustomException;
+import com.miaxis.common.utils.SecurityUtils;
+import com.miaxis.common.utils.XmlUtil;
 import com.miaxis.system.service.ISysConfigService;
+import com.miaxis.user.service.IUserInfoService;
+import com.miaxis.wx.domain.WxExtract;
 import com.miaxis.wx.domain.WxOrder;
 import com.miaxis.wx.dto.QuerySchoolOrderListDTO;
 import com.miaxis.wx.mapper.WxOrderMapper;
+import com.miaxis.wx.service.IWxExtractService;
 import com.miaxis.wx.service.IWxOrderService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
 
 /**
  * 电影订单Service业务层处理
@@ -26,10 +46,26 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
     private WxOrderMapper wxOrderMapper;
 
 
+
+    @Autowired
+    private IWxExtractService wxExtractService;
+
     @Autowired
     private ISysConfigService configService;
 
 
+    @Autowired
+    private IUserInfoService userInfoService;
+
+
+    @Autowired
+    private WxpayConfig wxpayConfig;
+
+    @Value("${app.appid}")
+    private String appid;
+
+
+
 
     @Override
     public void createVipOrder(WxOrder wxOrder) {
@@ -49,4 +85,50 @@ public class WxOrderServiceImpl extends ServiceImpl<WxOrderMapper, WxOrder> impl
     public List<WxOrder> QuerySchoolOrderList(QuerySchoolOrderListDTO dto) {
         return wxOrderMapper.QuerySchoolOrderList(dto);
     }
+
+    @Override
+    @Transactional
+    public String wxwithdrawal(Integer amount) throws Exception {
+        UserInfo student = SecurityUtils.getLoginUser().getStudent();
+        UserInfo dbUserInfo = userInfoService.getById(student.getId());
+        if (dbUserInfo.getProfitPrice() < amount){
+            throw new CustomException("提现金额不能大于可提现金额");
+        }
+
+        Map<String, String> sortMap = new TreeMap<String, String>();
+        sortMap.put("mch_appid",appid);
+        sortMap.put("mchid",wxpayConfig.getMerchantId());
+        sortMap.put("nonce_str", RandomStringUtils.randomAlphanumeric(32));
+        sortMap.put("partner_trade_no",getOrderCode(null));
+        sortMap.put("openid",student.getOpenid());
+        sortMap.put("check_name","NO_CHECK");
+        sortMap.put("amount",String.valueOf(amount));
+        sortMap.put("desc","用户提现");
+
+        WXPayConfig config = new WxPayConfigImpl();
+        String sign = WXPayUtil.generateSignature(sortMap, config.getKey(), WXPayConstants.SignType.MD5);
+        sortMap.put("sign", sign);
+        WXPay pay = new WXPay(config);
+
+        String url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
+        Map<String, String> resMap;
+        String xmlStr = pay.requestWithCert(url, sortMap, config.getHttpConnectTimeoutMs(), config.getHttpReadTimeoutMs());
+        resMap = XmlUtil.xmlToMap(xmlStr);
+        if (!"SUCCESS".equals(resMap.get("return_code"))||!"SUCCESS".equals(resMap.get("result_code"))){
+            throw new CustomException(resMap.get("return_msg"));
+        }
+        //新增提现记录
+        WxExtract wxExtract = new WxExtract();
+        wxExtract.setOpenid(student.getOpenid());
+        wxExtract.setExtractPrice(amount);
+        wxExtract.setPartnerTradeNo(resMap.get("partner_trade_no"));
+        wxExtract.setStatus("1");
+        wxExtractService.save(wxExtract);
+
+        //更新余额
+        dbUserInfo.setProfitPrice(dbUserInfo.getProfitPrice()-amount);
+        userInfoService.updateById(dbUserInfo);
+
+        return resMap.get("return_msg");
+    }
 }