From 0d8b60c9ed72d996280688a82ffa8eac3afbbff9 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 02 六月 2023 15:28:24 +0800
Subject: [PATCH] 新增加充值和提现功能

---
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java |  611 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 519 insertions(+), 92 deletions(-)

diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java
index c2d7aba..a219bfc 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java
@@ -1,28 +1,33 @@
 package com.stylefeng.guns.modular.system.controller.general;
 
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.ZipUtil;
 import cn.hutool.crypto.SecureUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.stylefeng.guns.core.base.controller.BaseController;
 import com.stylefeng.guns.core.base.tips.SuccessTip;
 import com.stylefeng.guns.core.common.constant.state.ManagerStatus;
 import com.stylefeng.guns.core.exception.GunsException;
 import com.stylefeng.guns.core.exception.ServiceExceptionEnum;
 import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.shiro.ShiroUser;
 import com.stylefeng.guns.core.util.DateUtil;
+import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.controller.resp.TAgentResp;
 import com.stylefeng.guns.modular.system.controller.util.ExcelUtil;
+import com.stylefeng.guns.modular.system.controller.util.UUIDUtil;
 import com.stylefeng.guns.modular.system.enums.OrderStateEnum;
 import com.stylefeng.guns.modular.system.enums.PayStatusEnum;
 import com.stylefeng.guns.modular.system.enums.UserTypeEnum;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
-import com.stylefeng.guns.modular.system.util.MallBook.model.BindAccount;
-import com.stylefeng.guns.modular.system.util.MallBook.model.InterfaceResponse;
-import com.stylefeng.guns.modular.system.util.MallBook.model.Register;
+import com.stylefeng.guns.modular.system.util.MallBook.model.*;
 import com.stylefeng.guns.modular.system.util.MallBook.util.TrhRequest;
 import com.stylefeng.guns.modular.system.util.RedisUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
@@ -39,10 +44,12 @@
 import org.springframework.ui.Model;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.stylefeng.guns.core.log.LogObjectHolder;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
-import java.io.OutputStream;
+import java.io.*;
 import java.math.BigDecimal;
+import java.net.InetAddress;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -74,6 +81,12 @@
     private IUserService userService;
     @Autowired
     private RedisUtil redisUtil;
+
+    @Autowired
+    private ISettlementRecordService settlementRecordService;
+
+    @Autowired
+    private IRechargeRecordService rechargeRecordService;
 
     @Value("${callbackPath}")
     private String callbackPath;
@@ -221,7 +234,12 @@
         user.setSex(1);
         userService.insert(user);
 
-
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                registeredMerchant(tAgent);
+            }
+        }).start();
 
         return SUCCESS_TIP;
     }
@@ -229,97 +247,162 @@
 
 
     public void registeredMerchant(TAgent tAgent){
-        Register registerVO = new Register();
-        registerVO.setMerUserId("agent_" + tAgent.getId());
-        registerVO.setPhone(tAgent.getPrincipalPhone());
-        registerVO.setUserType(tAgent.getUserType().toString());
-        registerVO.setUserName(tAgent.getMerchantName());
-        registerVO.setCertId(tAgent.getMerchantIDCode());
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
-        registerVO.setCertIdExpires(sdf.format(tAgent.getCertIdExpires()));
-        registerVO.setBusinessScope(tAgent.getBusinessScope());
-        registerVO.setSocialCreditCode(tAgent.getSocialCreditCode());
-        registerVO.setSocialCreditCodeExpires(sdf.format(tAgent.getSocialCreditCodeExpires()));
-        registerVO.setLegalPhone(tAgent.getLegalPhone());
-        registerVO.setLegalPerson(tAgent.getLegalPerson());
-        registerVO.setAddress(tAgent.getAddress());
-        /**
-         * 省份编码(子商户类型非小微必填) 字段长度最长:4位
-         */
-        registerVO.setProvCode("0035");
-        /**
-         * 地区编码(子商户类型非小微必填) 字段长度最长:4位
-         */
-        registerVO.setAreaCode("3501");
-        registerVO.setFileNo(tAgent.getFileNo());
-        registerVO.setNotifyUrl(callbackPath + "/base/driver/microenterpriseCallback");
-        registerVO.setParameter1(tAgent.getId().toString());
-
-        TrhRequest<Register> request = new TrhRequest();
-        InterfaceResponse response = request.execute(registerVO, Register.SERVICE_CODE);
-        if("0000".equals(response.getCode())){
-            JSONObject jsonObject = JSON.parseObject(response.getResult());
-            String status = jsonObject.getString("status");
-            if("2".equals(status)){
-                tAgent.setMerchantStatus(2);
-                tAgentService.updateById(tAgent);
-                System.err.println("注册代理商子商户失败");
-            }
-            if("0".equals(status)){
-                tAgent.setMerchantStatus(0);
-                tAgentService.updateById(tAgent);
-                System.err.println("注册代理商子商户处理中");
-            }
-            if("1".equals(status)){
-                String userId = jsonObject.getString("userId");
-                tAgent.setMerchantNumber(userId);
-                tAgent.setMerchantStatus(1);
-                tAgentService.updateById(tAgent);
-
-                //开始绑定结算账户
-                BindAccount bindAccount = new BindAccount();
-                bindAccount.setUserId(tAgent.getMerchantNumber());
-                bindAccount.setCertId(tAgent.getMerchantIDCode());
-                bindAccount.setCardName(tAgent.getCardName());
-                bindAccount.setCardNo(tAgent.getCardNo());
-                bindAccount.setBankAcctType(tAgent.getBankAcctType().toString());
-                bindAccount.setPhone(tAgent.getPhone());
-                bindAccount.setBankCode(tAgent.getBankCode());
-                /**
-                 * 省份编码
-                 */
-                bindAccount.setProvCode("0035");
-                /**
-                 * 地区编码
-                 */
-                bindAccount.setAreaCode("3501");
-                TrhRequest<BindAccount> request1 = new TrhRequest();
-                InterfaceResponse execute = request1.execute(bindAccount, BindAccount.SERVICE_CODE);
-                if("0000".equals(execute.getCode())){
-                    JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
-                    String status1 = jsonObject1.getString("status");
-                    if("2".equals(status1)){
-                        tAgent.setBankStatus(2);
-                        tAgentService.updateById(tAgent);
-                        System.err.println("绑定结算账户失败" );
-                    }
-                    if("1".equals(status1)){
-                        tAgent.setBankStatus(1);
-                        tAgentService.updateById(tAgent);
-                        System.err.println("绑定结算账户成功");
-                    }
-                    if("0".equals(status1)){
-                        tAgent.setBankStatus(0);
-                        tAgentService.updateById(tAgent);
-                        System.err.println("绑定结算账户处理中");
-                    }
-                }else{
-                    System.err.println("绑定结算账户失败:" + execute.getMsg());
+        if(tAgent.getUserType() == 0){
+            Register registerVO = new Register();
+            registerVO.setMerUserId("agent_" + tAgent.getId());
+            registerVO.setPhone(tAgent.getPrincipalPhone());
+            registerVO.setUserType("0");
+            registerVO.setUserName(tAgent.getMerchantName());
+            registerVO.setCertId(tAgent.getMerchantIDCode());
+            registerVO.setNotifyUrl(callbackPath + "/base/driver/microenterpriseCallback");
+            TrhRequest<Register> request = new TrhRequest();
+            InterfaceResponse execute = request.execute(registerVO, Register.SERVICE_CODE);
+            if("0000".equals(execute.getCode())){
+                JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                String status = jsonObject.getString("status");
+                if("2".equals(status)){
+                    tAgent.setMerchantStatus(2);
+                    tAgentService.updateById(tAgent);
+                    System.err.println("注册代理商子商户失败");
                 }
+                if("0".equals(status)){
+                    tAgent.setMerchantStatus(0);
+                    tAgentService.updateById(tAgent);
+                    System.err.println("注册代理商子商户处理中");
+                }
+                if("1".equals(status)){
+                    String userId = jsonObject.getString("userId");
+                    tAgent.setMerchantNumber(userId);
+                    tAgent.setMerchantStatus(1);
+                    tAgentService.updateById(tAgent);
 
+                    BindAccount bindAccount = new BindAccount();
+                    bindAccount.setUserId(tAgent.getMerchantNumber());
+                    bindAccount.setCertId(tAgent.getMerchantIDCode());
+                    bindAccount.setCardName(tAgent.getCardName());
+                    bindAccount.setCardNo(tAgent.getCardNo());
+                    bindAccount.setBankAcctType(tAgent.getBankAcctType().toString());
+                    bindAccount.setPhone(tAgent.getPhone());
+                    TrhRequest<BindAccount> request1 = new TrhRequest();
+                    InterfaceResponse execute1 = request1.execute(bindAccount, BindAccount.SERVICE_CODE);
+                    if("0000".equals(execute1.getCode())){
+                        JSONObject jsonObject1 = JSON.parseObject(execute1.getResult());
+                        String status1 = jsonObject1.getString("status");
+                        if("2".equals(status1)){
+                            tAgent.setBankStatus(2);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户失败" );
+                        }
+                        if("1".equals(status1)){
+                            tAgent.setBankStatus(1);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户成功");
+                        }
+                        if("0".equals(status1)){
+                            tAgent.setBankStatus(0);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户处理中");
+                        }
+                    }else{
+                        System.err.println("绑定结算账户失败:" + execute.getMsg());
+                    }
+                }
+            }else{
+                System.err.println("注册代理商子商户异常:" + execute.getMsg());
             }
         }else{
-            System.err.println("注册代理商子商户异常:" + response.getMsg());
+            Register registerVO = new Register();
+            registerVO.setMerUserId("agent_" + tAgent.getId());
+            registerVO.setPhone(tAgent.getPrincipalPhone());
+            registerVO.setUserType(tAgent.getUserType().toString());
+            registerVO.setUserName(tAgent.getMerchantName());
+            registerVO.setCertId(tAgent.getMerchantIDCode());
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            registerVO.setCertIdExpires(sdf.format(tAgent.getCertIdExpires()));
+            registerVO.setBusinessScope(tAgent.getBusinessScope());
+            registerVO.setSocialCreditCode(tAgent.getSocialCreditCode());
+            registerVO.setSocialCreditCodeExpires(sdf.format(tAgent.getSocialCreditCodeExpires()));
+            registerVO.setLegalPhone(tAgent.getLegalPhone());
+            registerVO.setLegalPerson(tAgent.getLegalPerson());
+            registerVO.setAddress(tAgent.getAddress());
+            /**
+             * 省份编码(子商户类型非小微必填) 字段长度最长:4位
+             */
+            registerVO.setProvCode("0035");
+            /**
+             * 地区编码(子商户类型非小微必填) 字段长度最长:4位
+             */
+            registerVO.setAreaCode("3501");
+            registerVO.setFileNo(tAgent.getFileNo());
+            registerVO.setNotifyUrl(callbackPath + "/base/driver/microenterpriseCallback");
+            registerVO.setParameter1(tAgent.getId().toString());
+
+            TrhRequest<Register> request = new TrhRequest();
+            InterfaceResponse response = request.execute(registerVO, Register.SERVICE_CODE);
+            if("0000".equals(response.getCode())){
+                JSONObject jsonObject = JSON.parseObject(response.getResult());
+                String status = jsonObject.getString("status");
+                if("2".equals(status)){
+                    tAgent.setMerchantStatus(2);
+                    tAgentService.updateById(tAgent);
+                    System.err.println("注册代理商子商户失败");
+                }
+                if("0".equals(status)){
+                    tAgent.setMerchantStatus(0);
+                    tAgentService.updateById(tAgent);
+                    System.err.println("注册代理商子商户处理中");
+                }
+                if("1".equals(status)){
+                    String userId = jsonObject.getString("userId");
+                    tAgent.setMerchantNumber(userId);
+                    tAgent.setMerchantStatus(1);
+                    tAgentService.updateById(tAgent);
+
+                    //开始绑定结算账户
+                    BindAccount bindAccount = new BindAccount();
+                    bindAccount.setUserId(tAgent.getMerchantNumber());
+                    bindAccount.setCertId(tAgent.getMerchantIDCode());
+                    bindAccount.setCardName(tAgent.getCardName());
+                    bindAccount.setCardNo(tAgent.getCardNo());
+                    bindAccount.setBankAcctType(tAgent.getBankAcctType().toString());
+                    bindAccount.setPhone(tAgent.getPhone());
+                    bindAccount.setBankCode(tAgent.getBankCode());
+                    /**
+                     * 省份编码
+                     */
+                    bindAccount.setProvCode("0035");
+                    /**
+                     * 地区编码
+                     */
+                    bindAccount.setAreaCode("3501");
+                    TrhRequest<BindAccount> request1 = new TrhRequest();
+                    InterfaceResponse execute = request1.execute(bindAccount, BindAccount.SERVICE_CODE);
+                    if("0000".equals(execute.getCode())){
+                        JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
+                        String status1 = jsonObject1.getString("status");
+                        if("2".equals(status1)){
+                            tAgent.setBankStatus(2);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户失败" );
+                        }
+                        if("1".equals(status1)){
+                            tAgent.setBankStatus(1);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户成功");
+                        }
+                        if("0".equals(status1)){
+                            tAgent.setBankStatus(0);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户处理中");
+                        }
+                    }else{
+                        System.err.println("绑定结算账户失败:" + execute.getMsg());
+                    }
+
+                }
+            }else{
+                System.err.println("注册代理商子商户异常:" + response.getMsg());
+            }
         }
     }
 
@@ -476,4 +559,348 @@
         }
     }
 
+
+    @ResponseBody
+    @RequestMapping(value = "/uploadFile")
+    public String uploadFile(MultipartFile file){
+        File srcFile = null;
+        String originalFilename = file.getOriginalFilename();
+        String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
+        String fileName = "";
+        try {
+            fileName = UUIDUtil.getRandomCode(28) + ".png";
+            srcFile = multipartFileToFile(file, fileName);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        ImageUpload imageUpload = new ImageUpload();
+        imageUpload.setMerUserId("33567678901213221");
+        File zip = ZipUtil.zip(srcFile);
+        imageUpload.setName(zip.getName());
+        imageUpload.setFile(Base64.encode(zip));
+        TrhRequest<ImageUpload> request = new TrhRequest();
+        InterfaceResponse execute = request.execute(imageUpload, ImageUpload.SERVICE_CODE);
+        if(execute.getCode().equals("0000")){
+            JSONObject jsonObject = JSON.parseObject(execute.getResult());
+            return jsonObject.getString("fileNo");
+        }
+        return "";
+    }
+
+
+    public File multipartFileToFile(MultipartFile file, String fileName) throws Exception {
+        File toFile = null;
+        if (file.equals("") || file.getSize() <= 0) {
+            file = null;
+        } else {
+            InputStream ins = null;
+            ins = file.getInputStream();
+            toFile = new File("D:\\logs\\" + fileName);
+            inputStreamToFile(ins, toFile);
+            ins.close();
+        }
+        return toFile;
+
+    }
+
+
+    private static void inputStreamToFile(InputStream ins, File file) {
+        try {
+            OutputStream os = new FileOutputStream(file);
+            int bytesRead = 0;
+            byte[] buffer = new byte[8192];
+            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
+                os.write(buffer, 0, bytesRead);
+            }
+            os.close();
+            ins.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 跳转到企业信息页
+     * @return
+     */
+    @GetMapping("/showEnterprisePage")
+    public String showEnterprisePage(Model model){
+        ShiroUser user = ShiroKit.getUser();
+        Integer objectId = user.getObjectId();
+        Integer roleType = user.getRoleType();
+        User user1 = userService.selectById(user.getId());
+        TAgent tAgent = new TAgent();
+        if(roleType == 1){//平台
+            tAgent.setPrincipal(user1.getName());
+            tAgent.setPrincipalPhone(user1.getPhone());
+            tAgent.setEmail(user1.getEmail());
+            tAgent.setMerchantNumber("553021440975");
+        }
+        if(roleType == 3){//代理商
+            tAgent = tAgentService.selectById(objectId);
+        }
+        model.addAttribute("roleType", roleType);
+        model.addAttribute("item", tAgent);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        model.addAttribute("socialCreditCodeExpires", roleType == 1 ? "" : sdf.format(tAgent.getSocialCreditCodeExpires()));
+        model.addAttribute("certIdExpires", roleType == 1 ? "" : sdf.format(tAgent.getCertIdExpires()));
+        Wrapper<SettlementRecord> settlementRecordWrapper = new EntityWrapper<SettlementRecord>().eq("type", roleType == 1 ? 1 : 2);
+        if(roleType == 2){
+            settlementRecordWrapper.eq("objectId", objectId);
+        }
+        List<SettlementRecord> settlementRecords = settlementRecordService.selectList(settlementRecordWrapper.isNotNull("arrivalTime").orderBy("insertTime desc"));
+        model.addAttribute("settlementRecords", settlementRecords);
+
+        QueryBalance queryBalance = new QueryBalance();
+        queryBalance.setUserId(tAgent.getMerchantNumber());
+        TrhRequest<QueryBalance> request = new TrhRequest();
+        InterfaceResponse execute = request.execute(queryBalance, QueryBalance.SERVICE_CODE);
+        model.addAttribute("balance", 0);
+        model.addAttribute("marketingAmount", 0);
+        if("0000".equals(execute.getCode())){
+            JSONObject jsonObject = JSON.parseObject(execute.getResult());
+            model.addAttribute("balance", jsonObject.getDoubleValue("settledAmount") / 100);
+            if(roleType == 1){
+                model.addAttribute("marketingAmount", jsonObject.getDoubleValue("marketingAmount") / 100);
+            }
+        }
+        return PREFIX + "enterprisePage.html";
+    }
+
+
+    /**
+     * 提现申请
+     * @return
+     */
+    @ResponseBody
+    @PostMapping("/withdrawCash")
+    public ResultUtil withdrawCash(){
+        ShiroUser user = ShiroKit.getUser();
+        Integer objectId = user.getObjectId();
+        Integer roleType = user.getRoleType();
+        User user1 = userService.selectById(user.getId());
+        TAgent tAgent = new TAgent();
+        if(roleType == 1){//平台
+            tAgent.setLegalPerson(user1.getName());
+            tAgent.setLegalPhone(user1.getPhone());
+            tAgent.setEmail(user1.getEmail());
+            tAgent.setMerchantNumber("553021440975");
+        }
+        if(roleType == 3){//代理商
+            tAgent = tAgentService.selectById(objectId);
+        }
+        QueryBalance queryBalance = new QueryBalance();
+        queryBalance.setUserId(tAgent.getMerchantNumber());
+        TrhRequest<QueryBalance> request = new TrhRequest();
+        InterfaceResponse execute = request.execute(queryBalance, QueryBalance.SERVICE_CODE);
+        if("0000".equals(execute.getCode())){
+            JSONObject jsonObject = JSON.parseObject(execute.getResult());
+            double settledAmount = jsonObject.getDoubleValue("settledAmount");
+            if(0 == settledAmount){
+                return ResultUtil.error("余额不足");
+            }
+            SettlementRecord settlementRecord = new SettlementRecord();
+            settlementRecord.setType(roleType == 1 ? 1 : 2);
+            if(roleType == 3){
+                settlementRecord.setObjectId(tAgent.getId());
+            }
+            settlementRecord.setAmount(settledAmount);
+            settlementRecord.setInsertTime(new Date());
+            settlementRecordService.insert(settlementRecord);
+
+
+            Withdraw withdraw = new Withdraw();
+            withdraw.setUserId(tAgent.getMerchantNumber());
+            withdraw.setAmount(settledAmount + "");
+            withdraw.setOrderName("账户余额提现");
+            withdraw.setRemark("账户余额提现");
+            withdraw.setNotifyUrl(callbackPath + "/tAgent/withdrawCashCallback");
+            withdraw.setParameter1(settlementRecord.getId().toString());
+            TrhRequest<Withdraw> request1 = new TrhRequest();
+            InterfaceResponse execute1 = request1.execute(withdraw, Withdraw.SERVICE_CODE);//结算(提现)
+            if("0000".equals(execute1.getCode())){
+                JSONObject jsonObject1 = JSON.parseObject(execute1.getResult());
+                String merOrderId1 = jsonObject1.getString("merOrderId");
+                Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
+                if(0 == status){
+                    return ResultUtil.error("申请处理中");
+                }
+                if(1 == status){
+                    settlementRecord.setOrderNumber(merOrderId1);
+                    settlementRecord.setArrivalTime(new Date());
+                    settlementRecordService.updateById(settlementRecord);
+                    return ResultUtil.success();
+                }
+                if(2 == status){
+                    return ResultUtil.error("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
+                }
+            }else{
+                return ResultUtil.error("结算接口异常【提现】:" + execute.getMsg());
+            }
+
+        }else{
+            return ResultUtil.error(execute.getMsg());
+        }
+        return ResultUtil.error("未知异常");
+    }
+
+
+    /**
+     * 提现回调
+     * @param interfaceResponse
+     */
+    @ResponseBody
+    @PostMapping("/withdrawCashCallback")
+    public void withdrawCashCallback(@RequestBody InterfaceResponse interfaceResponse) {
+        if("0000".equals(interfaceResponse.getCode())){
+            JSONObject jsonObject1 = JSON.parseObject(interfaceResponse.getResult());
+            String merOrderId1 = jsonObject1.getString("merOrderId");
+            Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
+            if(1 == status){
+                String parameter1 = jsonObject1.getString("parameter1");
+                SettlementRecord settlementRecord = settlementRecordService.selectById(parameter1);
+                settlementRecord.setOrderNumber(merOrderId1);
+                settlementRecord.setArrivalTime(new Date());
+                settlementRecordService.updateById(settlementRecord);
+            }
+            if(2 == status){
+                System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
+            }
+        }else{
+            System.err.println("结算接口异常【提现】:" + interfaceResponse.getMsg());
+        }
+    }
+
+
+    /**
+     * 充值补贴金额
+     * @param amount
+     * @return
+     */
+    @ResponseBody
+    @PostMapping("/accountRecharge")
+    public ResultUtil accountRecharge(Double amount){
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+            String out_trade_no = sdf.format(new Date()) + UUIDUtil.getNumberRandom(3);
+            RechargeRecord rechargeRecord = new RechargeRecord();
+            rechargeRecord.setCode(out_trade_no);
+            rechargeRecord.setType(4);
+            rechargeRecord.setAmount(amount);
+            rechargeRecord.setPayType(2);
+            rechargeRecord.setPayStatus(1);
+            rechargeRecord.setCreateTime(new Date());
+            rechargeRecordService.insert(rechargeRecord);
+
+            Deposit deposit = new Deposit();
+            deposit.setAmount(String.valueOf(Double.valueOf(amount * 100).intValue()));
+            deposit.setOrderName("补贴充值");
+            deposit.setPayType("ALI_CB");
+            deposit.setTerminalIp(InetAddress.getLocalHost().getHostAddress());
+            deposit.setFrontUrl(callbackPath + "/tAgent/accountRechargeCallback");
+            deposit.setNotifyUrl(callbackPath + "/tAgent/accountRechargeCallback");
+            deposit.setParameter1(rechargeRecord.getId().toString());
+            TrhRequest<Deposit> request = new TrhRequest();
+            InterfaceResponse execute = request.execute(deposit, Deposit.SERVICE_CODE);
+            if("0000".equals(execute.getCode())){
+                JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                Integer status = jsonObject.getInteger("status");
+                if(2 == status){
+                    return ResultUtil.error("支付异常");
+                }
+                String merOrderId = jsonObject.getString("merOrderId");
+                String payCode = jsonObject.getString("payCode");
+                if(ToolUtil.isNotEmpty(payCode)){
+                    new Thread(new Runnable() {
+                        @Override
+                        public void run() {
+                            try {
+                                int num = 1;
+                                int wait = 0;
+                                while (num <= 10){
+                                    int min = 5000;
+                                    wait += (min * num);
+                                    RechargeRecord rechargeRecord1 = rechargeRecordService.selectById(rechargeRecord.getId());
+                                    if(rechargeRecord1.getPayStatus() != 1){
+                                        return;
+                                    }
+                                    QueryOrder queryOrder = new QueryOrder();
+                                    queryOrder.setOriginalMerOrderId(merOrderId);
+                                    /**
+                                     * 1:支付查询 2:退款查询 3:确认收货查询 4:结算查询 5:充值查询 6:转账查询 7:异步分账查询(必填)  字段长度最长:1位
+                                     */
+                                    queryOrder.setQueryType("5");
+                                    TrhRequest<QueryOrder> request = new TrhRequest();
+                                    InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE);
+                                    if("0000".equals(execute1.getCode())){
+                                        JSONObject jsonObject1 = JSON.parseObject(execute1.getResult());
+                                        String status1 = jsonObject1.getString("status");
+                                        if("0".equals(status1)){//待处理
+                                            Thread.sleep(wait);
+                                            num++;
+                                        }
+                                        if("1".equals(status1)){//成功
+                                            String merOrderId = jsonObject1.getString("merOrderId");
+                                            rechargeRecord1.setPayTime(new Date());
+                                            rechargeRecord1.setPayStatus(2);
+                                            rechargeRecord1.setOrderNumber(merOrderId);
+                                            rechargeRecord1.setSurplusDividedAmount(rechargeRecord1.getAmount());
+                                            rechargeRecordService.updateById(rechargeRecord1);
+                                            break;
+                                        }
+                                        if("2".equals(status1) || 10 == num){//失败
+                                            rechargeRecordService.deleteById(rechargeRecord1.getId());
+                                            break;
+                                        }
+                                    }else{
+                                        Thread.sleep(wait);
+                                        num++;
+                                    }
+                                }
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                        }
+                    }).start();
+                }
+                return ResultUtil.success(payCode);
+            }else{
+                return ResultUtil.error(execute.getMsg());
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+
+    /**
+     * 补贴金额充值回调
+     * @param interfaceResponse
+     */
+    @ResponseBody
+    @PostMapping("/accountRechargeCallback")
+    public void accountRechargeCallback(@RequestBody InterfaceResponse interfaceResponse){
+        if("0000".equals(interfaceResponse.getCode())){
+            JSONObject jsonObject = JSON.parseObject(interfaceResponse.getResult());
+            Integer status = jsonObject.getInteger("status");
+            if(2 == status){
+                System.err.println("支付异常");
+                return;
+            }
+            if(1 == status){
+                String parameter1 = jsonObject.getString("parameter1");
+                RechargeRecord rechargeRecord = rechargeRecordService.selectById(parameter1);
+                rechargeRecord.setPayStatus(2);
+                rechargeRecord.setPayTime(new Date());
+                rechargeRecord.setOrderNumber(jsonObject.getString("merOrderId"));
+                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getAmount());
+                rechargeRecordService.updateById(rechargeRecord);
+            }
+        }else{
+            System.err.println(interfaceResponse.getMsg());
+        }
+    }
+
 }

--
Gitblit v1.7.1