Переглянути джерело

feat:"增加查询提现状态接口"

soobin 4 місяців тому
батько
коміт
55d83d0daf

+ 17 - 0
src/main/java/com/szwl/controller/PurseController.java

@@ -220,6 +220,21 @@ public class PurseController {
         return R.fail(result);
     }
 
+    @ApiOperation("查询提现状态")
+    @GetMapping("/withdrawStatus")
+    public ResponseModel<?> withdrawStatus(Long adminId, String orderNo) {
+        LambdaQueryWrapper<WithdrawalRecord> query = Wrappers.lambdaQuery();
+        query.eq(WithdrawalRecord::getAdminId, adminId);
+        query.eq(WithdrawalRecord::getOrderNo, orderNo);
+        WithdrawalRecord withdrawalRecord = withdrawalRecordService.getOne(query);
+
+        TAdmin admin = adminService.getById(adminId);
+        if (withdrawalRecord != null && admin != null) {
+            withdrawalRecordService.withdrawStatus(admin, withdrawalRecord);
+        }
+        return R.ok();
+    }
+
     @ApiOperation("证照识别")
     @PostMapping("/ocrImage")
     public ResponseModel<?> ocrImage(MultipartFile file, Long adminId, String imageType) {
@@ -266,6 +281,8 @@ public class PurseController {
         return R.ok(licenseDTO);
     }
 
+
+
 //    @ApiOperation("查询用户证照")
 //    @GetMapping("/userLicense")
 //    public ResponseModel<?> userLicense(Long adminId) {

+ 3 - 0
src/main/java/com/szwl/service/THuifuMchService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.huifu.bspay.sdk.opps.core.exception.BasePayException;
 import com.szwl.constant.HuifuConstant;
 import com.szwl.model.bo.BalanceBo;
+import com.szwl.model.entity.TAdmin;
 import com.szwl.model.entity.THuifuMch;
 import com.szwl.model.entity.THuifuMchCheck;
 import com.szwl.model.entity.WithdrawalRecord;
@@ -99,4 +100,6 @@ public interface THuifuMchService extends IService<THuifuMch> {
      * @param huifuMchCheck
      */
     String addCashBusiness(THuifuMchCheck huifuMchCheck) throws Exception;
+
+    void withdrawStatus(TAdmin admin, WithdrawalRecord withdrawalRecord) throws Exception;
 }

+ 3 - 0
src/main/java/com/szwl/service/TJoinpayMchService.java

@@ -3,6 +3,7 @@ package com.szwl.service;
 import com.alibaba.fastjson.JSONArray;
 import com.szwl.model.bo.BalanceBo;
 import com.szwl.model.bo.SettlementRecordBo;
+import com.szwl.model.entity.TAdmin;
 import com.szwl.model.entity.TJoinpayMch;
 import com.szwl.model.entity.WithdrawalRecord;
 import com.szwl.service.base.MyIService;
@@ -85,4 +86,6 @@ public interface TJoinpayMchService extends MyIService<TJoinpayMch> {
      * @return
      */
     List<SettlementRecordBo> getAutoSettlement(TJoinpayMch joinpayMch, String date);
+
+    void withdrawStatus(TAdmin admin, WithdrawalRecord withdrawalRecord);
 }

+ 3 - 0
src/main/java/com/szwl/service/WithdrawalRecordService.java

@@ -1,6 +1,7 @@
 package com.szwl.service;
 
 import com.szwl.model.dto.WithdrawTarget;
+import com.szwl.model.entity.TAdmin;
 import com.szwl.model.entity.WithdrawalRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -17,4 +18,6 @@ import java.util.List;
 public interface WithdrawalRecordService extends IService<WithdrawalRecord> {
 
     List<WithdrawTarget> export(List<WithdrawalRecord> list);
+
+    void withdrawStatus(TAdmin admin, WithdrawalRecord withdrawalRecord);
 }

+ 54 - 17
src/main/java/com/szwl/service/impl/THuifuMchServiceImpl.java

@@ -22,6 +22,7 @@ import com.szwl.model.entity.TAdmin;
 import com.szwl.model.entity.THuifuMch;
 import com.szwl.model.entity.THuifuMchCheck;
 import com.szwl.model.entity.WithdrawalRecord;
+import com.szwl.model.utils.DateUtils;
 import com.szwl.service.TAdminService;
 import com.szwl.service.THuifuMchCheckService;
 import com.szwl.service.THuifuMchService;
@@ -29,32 +30,15 @@ import com.szwl.service.WithdrawalRecordService;
 import com.szwl.util.HuifuUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.mime.MultipartEntityBuilder;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.io.File;
-import java.io.IOException;
 import java.math.BigDecimal;
-import java.nio.charset.Charset;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.TreeMap;
 
-import static com.szwl.util.HuifuUtils.base64ToTempImage;
-
 /**
  * <p>
  * 服务实现类
@@ -783,4 +767,57 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         }
         return tokenNo;
     }
+
+    @Override
+    public void withdrawStatus(TAdmin admin, WithdrawalRecord withdrawalRecord) throws Exception {
+        LambdaQueryWrapper<THuifuMch> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(THuifuMch::getAdminId, admin.getId());
+        THuifuMch huifuMch = tHuifuMchService.getOne(wrapper);
+        // 请求接口
+        String url = "https://api.huifu.com/v2/trade/settlement/query";
+        HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
+        // 请求参数:Data
+        JSONObject request = new JSONObject();
+        // 请求流水号
+        request.put("org_req_seq_id", withdrawalRecord.getOrderNo());
+        // 请求日期
+        Date createDate = withdrawalRecord.getCreateDate();
+        if (createDate != null) {
+            String formatPayDate = DateUtils.formatDate(createDate, DateUtils.PATTERN_yyyyMMdd);
+            request.put("org_req_date", formatPayDate);
+        }
+        // 汇付ID
+        request.put("huifu_id", huifuMch.getHuifuId());
+        // 签名:sign
+        String s = JSON.toJSONString(request);
+        String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
+        String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
+
+        // 公共参数
+        System.out.println("请求参数:" + request);
+        JSONObject requestData = new JSONObject();
+        requestData.put("sys_id", HuifuConstant.SYS_ID);
+        requestData.put("product_id", HuifuConstant.PRODUCT_ID);
+        requestData.put("sign", sign);
+        requestData.put("data", request);
+        System.out.println("最终请求参数:" + requestData);
+        String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
+        System.out.println("返回的数据:" + result);
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        JSONObject dataObject = jsonObject.getJSONObject("data");
+        String code = dataObject.getString("resp_code");
+        if (code.equals(HuifuConstant.RESP_CODE)) {
+            String transStatus = dataObject.getString("trans_status");
+            if (HuifuConstant.TRANS_STAT_S.equals(transStatus)) {
+                withdrawalRecord.setStatus(1);
+                withdrawalRecord.setArrivalDate(new Date());
+            } else if (HuifuConstant.TRANS_STAT_P.equals(transStatus)) {
+                withdrawalRecord.setStatus(0);
+            } else {
+                withdrawalRecord.setStatus(2);
+                withdrawalRecord.setResultMsg(dataObject.getString("resp_desc"));
+            }
+            withdrawalRecordService.updateById(withdrawalRecord);
+        }
+    }
 }

+ 52 - 0
src/main/java/com/szwl/service/impl/TJoinpayMchServiceImpl.java

@@ -4,12 +4,15 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.RandomUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.szwl.constant.JoinpayConstant;
 import com.szwl.feign.bean.PayFeign;
 import com.szwl.mapper.TJoinpayMchMapper;
 import com.szwl.model.bo.BalanceBo;
 import com.szwl.model.bo.SettlementRecordBo;
+import com.szwl.model.entity.TAdmin;
+import com.szwl.model.entity.THuifuMch;
 import com.szwl.model.entity.TJoinpayMch;
 import com.szwl.model.entity.WithdrawalRecord;
 import com.szwl.model.utils.AESUtil;
@@ -873,6 +876,55 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
         return recordBos;
     }
 
+    @Override
+    public void withdrawStatus(TAdmin admin, WithdrawalRecord withdrawalRecord) {
+        String url = "https://www.joinpay.com/allocFunds";
+        JSONObject requestData = new JSONObject(new LinkedHashMap());
+        // 结算订单号
+        requestData.put("mch_order_no", withdrawalRecord.getOrderNo());
+
+        JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
+        requestJson.put("method", "altSettle.get");
+        requestJson.put("version", "1.1");
+        requestJson.put("data", requestData);
+        // 32位随机字符串
+        String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
+        requestJson.put("rand_str", uuid);
+        requestJson.put("sign_type", JoinpayConstant.sign_type_MD5);
+        requestJson.put("mch_no", JoinpayConstant.mch_no);
+        String sign = createMD5Sign(requestJson, JoinpayConstant.key);
+        requestJson.put("sign", sign.toUpperCase());
+        log.info("提现参数:{}", requestJson);
+
+        org.json.JSONObject jsonObject;
+        try {
+            jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
+            log.info("提现结果:{}", jsonObject);
+            // 判断请求是否正确,受理成功
+            if(jsonObject.has("resp_code")){
+                String respCode = jsonObject.getString("resp_code");
+                if(JoinpayConstant.resp_code1.equals(respCode)){
+                    org.json.JSONObject data = jsonObject.getJSONObject("data");
+                    String bizCode = data.getString("biz_code");
+                    if(JoinpayConstant.biz_code1.equals(bizCode)){
+                        // 申请提现成功,保存记录
+                        String orderStatus = data.getString("order_status");
+                        if (JoinpayConstant.order_status2.equals(orderStatus)) {
+                            withdrawalRecord.setStatus(1);
+                            withdrawalRecord.setArrivalDate(new Date());
+                        } else if (JoinpayConstant.order_status3.equals(orderStatus)) {
+                            withdrawalRecord.setStatus(2);
+                            withdrawalRecord.setResultMsg(data.getString("biz_msg"));
+                        }
+                        withdrawalRecordService.updateById(withdrawalRecord);
+                    }
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
 
     /**
      * 获取随机字符串

+ 30 - 0
src/main/java/com/szwl/service/impl/WithdrawalRecordServiceImpl.java

@@ -2,13 +2,17 @@ package com.szwl.service.impl;
 
 import com.szwl.model.dto.SugarDoTarget;
 import com.szwl.model.dto.WithdrawTarget;
+import com.szwl.model.entity.TAdmin;
 import com.szwl.model.entity.TSugarDo;
 import com.szwl.model.entity.WithdrawalRecord;
 import com.szwl.mapper.WithdrawalRecordMapper;
 import com.szwl.model.utils.DateUtils;
+import com.szwl.service.THuifuMchService;
+import com.szwl.service.TJoinpayMchService;
 import com.szwl.service.WithdrawalRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -26,6 +30,12 @@ import java.util.List;
 @Service
 public class WithdrawalRecordServiceImpl extends ServiceImpl<WithdrawalRecordMapper, WithdrawalRecord> implements WithdrawalRecordService {
 
+    @Autowired
+    private THuifuMchService huifuMchService;
+
+    @Autowired
+    private TJoinpayMchService joinpayMchService;
+
     @Override
     public List<WithdrawTarget> export(List<WithdrawalRecord> list) {
         List<WithdrawTarget> withdrawTargets = new ArrayList<>();
@@ -62,4 +72,24 @@ public class WithdrawalRecordServiceImpl extends ServiceImpl<WithdrawalRecordMap
         }
         return withdrawTargets;
     }
+
+    @Override
+    public void withdrawStatus(TAdmin admin, WithdrawalRecord withdrawalRecord) {
+        String payPlatform = admin.getPayPlatform();
+        if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
+            // 汇付
+            try {
+                huifuMchService.withdrawStatus(admin, withdrawalRecord);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        } else {
+            // 汇聚
+            try {
+                joinpayMchService.withdrawStatus(admin, withdrawalRecord);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
 }