Răsfoiți Sursa

Merge branch 'master' of http://124.220.229.80:9093/root/cif

linxk 5 zile în urmă
părinte
comite
3b25158d27

+ 2 - 2
cif-service/src/main/java/com/txz/cif/dubbo/impl/AccountDubboServiceImpl.java

@@ -172,7 +172,7 @@ public class AccountDubboServiceImpl implements AccountDubboService {
             // 开团红包
             Result result1 = redEnvelopeService.addRedEnvelope(RedEnvelopeParam.builder()
                     .amount(amount).bizType(BizTypeEnum.OPEN_GROUP_RED_ENVELOPE.getKey()).orderNo(param.getBizNo())
-                    .userIds(CollUtil.newArrayList(OrderParam.builder().userId(param.getOpenGroupUserId()).orderId(param.getOpenOrderNo()).build()))
+                    .userIds(CollUtil.newArrayList(OrderParam.builder().userId(param.getOpenGroupUserId()).orderNo(param.getOpenOrderNo()).build()))
                     .transTime(param.getTransTime())
                     .build());
         }
@@ -185,7 +185,7 @@ public class AccountDubboServiceImpl implements AccountDubboService {
             }
         }
         if (param.getWinnerUserId().compareTo(param.getOpenGroupUserId()) != 0){
-            param.getUserIds().add(OrderParam.builder().orderId(param.getWinnerOrderNo()).userId(param.getWinnerUserId()).build());
+            param.getUserIds().add(OrderParam.builder().orderNo(param.getWinnerOrderNo()).userId(param.getWinnerUserId()).build());
         }
         com.txz.operating.result.Result<ConfigDTO> openRedEnvelopeRate = operatingConfigDubboServiceClient.getConfigByCode("join_red_envelope_rate");
         String rate = openRedEnvelopeRate.getData().getValueInfo();

+ 5 - 2
cif-service/src/main/java/com/txz/cif/service/RechargeRecordService.java

@@ -1,4 +1,5 @@
 package com.txz.cif.service;
+
 import com.txz.cif.model.RechargeRecord;
 import com.txz.cif.core.Service;
 
@@ -7,8 +8,10 @@ import com.txz.cif.core.Service;
  * Created by CodeGenerator on 2025/07/15.
  */
 public interface RechargeRecordService extends Service<RechargeRecord> {
-
+    
     void success(RechargeRecord record);
-
+    
     void fail(RechargeRecord record);
+    
+    void closeRecharge();
 }

+ 4 - 2
cif-service/src/main/java/com/txz/cif/service/WithdrawRecordService.java

@@ -3,6 +3,8 @@ package com.txz.cif.service;
 import com.txz.cif.model.WithdrawRecord;
 import com.txz.cif.core.Service;
 
+import java.util.Date;
+
 
 /**
  * Created by CodeGenerator on 2025/07/15.
@@ -11,9 +13,9 @@ public interface WithdrawRecordService extends Service<WithdrawRecord> {
     
     void add(WithdrawRecord withdrawRecord);
     
-    void review(WithdrawRecord build, Integer status, String review, Long channelId);
+    void review(WithdrawRecord build, Integer status, String review, Long channelId, String userName);
     
-    void success(WithdrawRecord record);
+    void success(WithdrawRecord record, Date successTime);
     
     void fail(WithdrawRecord record);
 }

+ 40 - 13
cif-service/src/main/java/com/txz/cif/service/impl/RechargeRecordServiceImpl.java

@@ -1,17 +1,22 @@
 package com.txz.cif.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
+import com.txz.cif.core.AbstractService;
 import com.txz.cif.dao.RechargeRecordMapper;
 import com.txz.cif.model.RechargeRecord;
 import com.txz.cif.param.RechargeParam;
 import com.txz.cif.service.AccountService;
 import com.txz.cif.service.FlowService;
 import com.txz.cif.service.RechargeRecordService;
-import com.txz.cif.core.AbstractService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example;
 
 import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
 
 
 /**
@@ -22,12 +27,13 @@ import javax.annotation.Resource;
 public class RechargeRecordServiceImpl extends AbstractService<RechargeRecord> implements RechargeRecordService {
     @Resource
     private RechargeRecordMapper cRechargeRecordMapper;
-
+    
     @Resource
     private FlowService flowService;
-
+    
     @Resource
     private AccountService accountService;
+    
     @Override
     public void success(RechargeRecord record) {
         update(RechargeRecord.builder()
@@ -35,20 +41,41 @@ public class RechargeRecordServiceImpl extends AbstractService<RechargeRecord> i
                 .successTime(DateUtil.date())
                 .status(2)
                 .build());
-//        accountService.
+        //        accountService.
         flowService.recharge(RechargeParam.builder()
-                        .amount(record.getRealAmount())
-                        .bizNo(record.getOrderNo())
-                        .bizId(record.getId()+"")
-                        .userId(record.getUserId())
-                        .bizType(1001)
-                        .discount(record.getDiscount())
-                        .transTime(record.getTransTime())
+                .amount(record.getRealAmount())
+                .bizNo(record.getOrderNo())
+                .bizId(record.getId() + "")
+                .userId(record.getUserId())
+                .bizType(1001)
+                .discount(record.getDiscount())
+                .transTime(record.getTransTime())
                 .build());
     }
-
+    
     @Override
     public void fail(RechargeRecord record) {
-        update(RechargeRecord.builder() .id(record.getId()) .status(3).build());
+        update(RechargeRecord.builder().id(record.getId()).status(3).build());
+    }
+    
+    @Override
+    public void closeRecharge() {
+        Date thirtyMinutesAgo = DateUtil.offsetMinute(new Date(), -30);
+        Condition condition = new Condition(RechargeRecord.class);
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("status", 1);
+        criteria.andLessThan("createTime", thirtyMinutesAgo);
+        
+        List<RechargeRecord> processingRecords = this.findByCondition(condition);
+        if (CollectionUtil.isEmpty(processingRecords)) {
+            return;
+        }
+        for (RechargeRecord record : processingRecords) {
+            update(RechargeRecord.builder()
+                    .id(record.getId())
+                    .status(4)
+                    .updateTime(new Date())
+                    .build());
+        }
     }
 }

+ 4 - 4
cif-service/src/main/java/com/txz/cif/service/impl/RedEnvelopeServiceImpl.java

@@ -134,10 +134,10 @@ public class RedEnvelopeServiceImpl extends AbstractService<RedEnvelope> impleme
             User user = userService.findById(userId.getUserId());
             if (user.getPid() != null){
                 //找父亲 上级分佣
-                ret.add(bulidRedEnvelope2(2, OrderParam.builder().orderId(userId.getOrderNo()).userId(user.getPid()).build(),param,settleTime)) ;
+                ret.add(bulidRedEnvelope2(2, OrderParam.builder().orderNo(userId.getOrderNo()).userId(user.getPid()).build(),param,settleTime)) ;
                 if (user.getPpid() != null){
                     //找爷爷 上上级分佣
-                    ret.add(bulidRedEnvelope2(3,OrderParam.builder().orderId(userId.getOrderNo()).userId(user.getPpid()).build(),param,settleTime)) ;
+                    ret.add(bulidRedEnvelope2(3,OrderParam.builder().orderNo(userId.getOrderNo()).userId(user.getPpid()).build(),param,settleTime)) ;
                 }
             }
         }
@@ -155,7 +155,7 @@ public class RedEnvelopeServiceImpl extends AbstractService<RedEnvelope> impleme
      */
     private RedEnvelope bulidRedEnvelope2(Integer type , OrderParam userId, RedEnvelopeParam param, Date settleTime) {
         Condition c = new Condition(Account.class);
-        c.createCriteria().andEqualTo("userId", userId)
+        c.createCriteria().andEqualTo("userId", userId.getUserId())
                 .andEqualTo("bizType",2);
         List<Account> accounts = accountService.findByCondition(c);
         Account account = accounts.get(0);
@@ -197,7 +197,7 @@ public class RedEnvelopeServiceImpl extends AbstractService<RedEnvelope> impleme
                 .userId(param.getUserIds().get(0).getUserId())
                 .tranNo(param.getOrderNo())
                 .settleTime(settleTime)
-                .createUser(param.getUserIds().get(0)+"")
+                .createUser(param.getUserIds().get(0).getUserId()+"")
                 .build();
         return redEnvelope;
     }

+ 7 - 6
cif-service/src/main/java/com/txz/cif/service/impl/WithdrawRecordServiceImpl.java

@@ -25,6 +25,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.Map;
 
 
@@ -75,7 +76,7 @@ public class WithdrawRecordServiceImpl extends AbstractService<WithdrawRecord> i
     }
     
     @Override
-    public void review(WithdrawRecord w, Integer status, String review, Long channelId) {
+    public void review(WithdrawRecord w, Integer status, String review, Long channelId, String userName) {
         // 同意提现
         if (status == 2) {
             LockInfo lockInfo = lockTemplate.lock(String.format(MyConstants.TF_PAY_WITHDRAW_SUBMIT_LOCK, w.getOrderNo()), Long.valueOf(1000 * 60 * 2), Long.valueOf(1000 * 1), RedisTemplateLockExecutor.class);
@@ -120,7 +121,7 @@ public class WithdrawRecordServiceImpl extends AbstractService<WithdrawRecord> i
                                     .receiveMessage(bizLog.getReceiveMessage())
                                     .sendMessage(bizLog.getSendMessage())
                                     .createTime(now)
-                                    .createUser(user.getName())
+                                    .createUser(userName)
                                     .memo("提交提现申请").build());
                         } catch (Exception e) {
                             log.error("新增提现提交订单日志失败", e);
@@ -140,7 +141,7 @@ public class WithdrawRecordServiceImpl extends AbstractService<WithdrawRecord> i
                     default:
                         throw new ServiceException("暂不支持此渠道");
                 }
-                this.update(WithdrawRecord.builder().id(w.getId()).channel(paymentChannel.getChannelName()).review(review).status(status).thirdOrderNo(thirdOrderNo).build());
+                this.update(WithdrawRecord.builder().id(w.getId()).channel(paymentChannel.getChannelName()).review(review).status(status).updateUser(userName).thirdOrderNo(thirdOrderNo).build());
             } finally {
                 lockTemplate.releaseLock(lockInfo);
             }
@@ -151,11 +152,11 @@ public class WithdrawRecordServiceImpl extends AbstractService<WithdrawRecord> i
             flowService.unFreeze(w.getFreezeId());
         }
         this.update(WithdrawRecord.builder().id(w.getId())
-                .review(review).status(status).build());
+                .review(review).updateUser(userName).status(status).build());
     }
     
     @Override
-    public void success(WithdrawRecord record) {
+    public void success(WithdrawRecord record, Date successTime) {
         if (record.getFreezeId() != null) {
             flowService.unFreeze(record.getFreezeId());
         }
@@ -167,7 +168,7 @@ public class WithdrawRecordServiceImpl extends AbstractService<WithdrawRecord> i
                 .bizNo(record.getOrderNo())
                 .transTime(record.getTransTime())
                 .build());
-        update(WithdrawRecord.builder().id(record.getId()).status(4).build());
+        update(WithdrawRecord.builder().id(record.getId()).successTime(successTime).status(4).build());
     }
     
     @Override

+ 70 - 59
cif-service/src/main/java/com/txz/cif/task/GeneralJob.java

@@ -2,15 +2,12 @@ package com.txz.cif.task;
 
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
-import cn.hutool.http.HttpUtil;
-import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
+import com.txz.cif.configurer.Parameters;
 import com.txz.cif.dubbo.client.OrderDubboServiceClient;
 import com.txz.cif.service.DayCutService;
-import com.txz.cif.configurer.Parameters;
+import com.txz.cif.service.RechargeRecordService;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
-import org.apache.commons.codec.binary.Hex;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -21,7 +18,7 @@ import java.util.Map;
 
 /**
  * 常规job
- *
+ * <p>
  * 开发步骤:
  * 1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT<String> execute(String param)"
  * 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
@@ -32,17 +29,20 @@ import java.util.Map;
 @Component
 public class GeneralJob {
     private static Logger logger = LoggerFactory.getLogger(GeneralJob.class);
-
+    
     @Resource
     private DayCutService dayCutService;
-
-
+    
+    
     @Resource
     private OrderDubboServiceClient orderDubboServiceClient;
-
+    
     @Resource
     private Parameters parameters;
-
+    
+    @Resource
+    private RechargeRecordService rechargeRecordService;
+    
     /**
      * 日切
      */
@@ -58,36 +58,34 @@ public class GeneralJob {
         }
         return ReturnT.SUCCESS;
     }
-
+    
     @XxlJob("checkin")
     public ReturnT<String> checkin(String param) throws Exception {
-        Map<String,Object> map = new HashMap<>();
-        map.put("email","351550660@qq.com");
-        map.put("passwd","Lin123456");
+        Map<String, Object> map = new HashMap<>();
+        map.put("email", "351550660@qq.com");
+        map.put("passwd", "Lin123456");
         HttpResponse resp = HttpRequest.post("https://chynet01.azureedge.net/auth/login").form(map).timeout(-1).execute();
         String key = resp.getCookie("key").toString();
         String expire_in = resp.getCookie("expire_in").toString();
-        String cookie = "cookie:PHPSESSID=fun75tna6st563e78799552e69; cnxad_lunbo=yes; crisp-client%2Fsession%2F7850791f-bbe4-4874-9f05-c9dea3c63595=session_8a49d3eb-e9c7-43f8-9fe9-12d1560a4122; crisp-client%2Fsession%2F7850791f-bbe4-4874-9f05-c9dea3c63595%2Fc89170bf-a23d-3152-9ad4-fda9810011f7=session_8a49d3eb-e9c7-43f8-9fe9-12d1560a4122; uid=14105; email=351550660%40qq.com; ip=5f0f60145ce69c8054af6bb0a24e9c1a;"+key+"; "+expire_in;
+        String cookie = "cookie:PHPSESSID=fun75tna6st563e78799552e69; cnxad_lunbo=yes; crisp-client%2Fsession%2F7850791f-bbe4-4874-9f05-c9dea3c63595=session_8a49d3eb-e9c7-43f8-9fe9-12d1560a4122; crisp-client%2Fsession%2F7850791f-bbe4-4874-9f05-c9dea3c63595%2Fc89170bf-a23d-3152-9ad4-fda9810011f7=session_8a49d3eb-e9c7-43f8-9fe9-12d1560a4122; uid=14105; email=351550660%40qq.com; ip=5f0f60145ce69c8054af6bb0a24e9c1a;" + key + "; " + expire_in;
         String ret = HttpRequest.post("https://chynet01.azureedge.net/user/checkin").cookie(cookie).timeout(-1).execute().body();
-        logger.error("[checkin]:"+ret);
-
-
-
-//        JSONObject json = new JSONObject();
-//        json.put("username","linxinkai");
-//        json.put("password","Lin123456");
-//        String ret2 = HttpUtil.post("https://c4.a0.chat/v1/user/login/",json.toString());
-//        String token = JSONUtil.parseObj(ret2).getJSONObject("data").getStr("token");
-//        json = new JSONObject();
-//        json.put("action","sign_today");
-//        ret = HttpRequest.post("https://c4.a0.chat/v1/user/info/").body(json.toString()).header("Authorization",token).timeout(-1).execute().body();
-//        logger.error("[checkin]:"+ret);
-
+        logger.error("[checkin]:" + ret);
+        
+        
+        //        JSONObject json = new JSONObject();
+        //        json.put("username","linxinkai");
+        //        json.put("password","Lin123456");
+        //        String ret2 = HttpUtil.post("https://c4.a0.chat/v1/user/login/",json.toString());
+        //        String token = JSONUtil.parseObj(ret2).getJSONObject("data").getStr("token");
+        //        json = new JSONObject();
+        //        json.put("action","sign_today");
+        //        ret = HttpRequest.post("https://c4.a0.chat/v1/user/info/").body(json.toString()).header("Authorization",token).timeout(-1).execute().body();
+        //        logger.error("[checkin]:"+ret);
+        
         return ReturnT.SUCCESS;
     }
-
-
-
+    
+    
     @XxlJob("scheduledTaskStorePinkSummaryClose")
     public ReturnT<String> scheduledTaskStorePinkSummaryClose(String param) throws Exception {
         try {
@@ -100,8 +98,8 @@ public class GeneralJob {
         }
         return ReturnT.SUCCESS;
     }
-
-
+    
+    
     @XxlJob("scheduledTaskBatchSigning")
     public ReturnT<String> scheduledTaskBatchSigning(String param) throws Exception {
         try {
@@ -114,7 +112,7 @@ public class GeneralJob {
         }
         return ReturnT.SUCCESS;
     }
-
+    
     @XxlJob("orderTimeoutAutomaticCancel")
     public ReturnT<String> orderTimeoutAutomaticCancel(String param) throws Exception {
         try {
@@ -127,33 +125,46 @@ public class GeneralJob {
         }
         return ReturnT.SUCCESS;
     }
-
+    
+    @XxlJob("closeRecharge")
+    public ReturnT<String> closeRecharge() throws Exception {
+        try {
+            logger.info("【关闭支付订单】开始");
+            rechargeRecordService.closeRecharge();
+            logger.info("【关闭支付订单】完成");
+        } catch (Exception e) {
+            logger.error("【关闭支付订单】异常:e{}", e);
+            return ReturnT.FAIL;
+        }
+        return ReturnT.SUCCESS;
+    }
+    
     public static void main(String[] args) {
-//        int quhao = 154;
-//        int weihao = 9642;
-//        String a = Hex.encodeHexString( new byte[] {(byte)((quhao>>8)&0x00FF),(byte)(quhao&0x00FF),(byte)((weihao>>8)&0x00FF),(byte)(weihao&0x00FF)});
-//        System.out.println(a);
-//
-//        String b = Hex.encodeHexString( new byte[] {(byte)((quhao>>8)&0x00FF),(byte)(quhao&0x00FF)});
-//        System.out.println(b);
-//        String hex = "009a25aa";
-//        int decimal = Integer.parseInt(hex, 16);
-//        System.out.println(decimal); // 输出:2571
-//        String str = String.format("%09d", decimal);
-//        System.out.println(str); // 输出:2571
-//        System.out.println(str.substring(0,6)); // 输出:2571
-//        System.out.println(str.substring(6)); // 输出:2571
-
-        Map<String,Object> map = new HashMap<>();
-        map.put("email","351550660@qq.com");
-        map.put("passwd","Lin123456");
+        //        int quhao = 154;
+        //        int weihao = 9642;
+        //        String a = Hex.encodeHexString( new byte[] {(byte)((quhao>>8)&0x00FF),(byte)(quhao&0x00FF),(byte)((weihao>>8)&0x00FF),(byte)(weihao&0x00FF)});
+        //        System.out.println(a);
+        //
+        //        String b = Hex.encodeHexString( new byte[] {(byte)((quhao>>8)&0x00FF),(byte)(quhao&0x00FF)});
+        //        System.out.println(b);
+        //        String hex = "009a25aa";
+        //        int decimal = Integer.parseInt(hex, 16);
+        //        System.out.println(decimal); // 输出:2571
+        //        String str = String.format("%09d", decimal);
+        //        System.out.println(str); // 输出:2571
+        //        System.out.println(str.substring(0,6)); // 输出:2571
+        //        System.out.println(str.substring(6)); // 输出:2571
+        
+        Map<String, Object> map = new HashMap<>();
+        map.put("email", "351550660@qq.com");
+        map.put("passwd", "Lin123456");
         HttpResponse resp = HttpRequest.post("https://chynet01.azureedge.net/auth/login").form(map).timeout(-1).execute();
         String key = resp.getCookie("key").toString();
         String expire_in = resp.getCookie("expire_in").toString();
-        String cookie = "cookie:PHPSESSID=fun75tna6st563e78799552e69; cnxad_lunbo=yes; crisp-client%2Fsession%2F7850791f-bbe4-4874-9f05-c9dea3c63595=session_8a49d3eb-e9c7-43f8-9fe9-12d1560a4122; crisp-client%2Fsession%2F7850791f-bbe4-4874-9f05-c9dea3c63595%2Fc89170bf-a23d-3152-9ad4-fda9810011f7=session_8a49d3eb-e9c7-43f8-9fe9-12d1560a4122; uid=14105; email=351550660%40qq.com; ip=5f0f60145ce69c8054af6bb0a24e9c1a;"+key+"; "+expire_in;
+        String cookie = "cookie:PHPSESSID=fun75tna6st563e78799552e69; cnxad_lunbo=yes; crisp-client%2Fsession%2F7850791f-bbe4-4874-9f05-c9dea3c63595=session_8a49d3eb-e9c7-43f8-9fe9-12d1560a4122; crisp-client%2Fsession%2F7850791f-bbe4-4874-9f05-c9dea3c63595%2Fc89170bf-a23d-3152-9ad4-fda9810011f7=session_8a49d3eb-e9c7-43f8-9fe9-12d1560a4122; uid=14105; email=351550660%40qq.com; ip=5f0f60145ce69c8054af6bb0a24e9c1a;" + key + "; " + expire_in;
         String ret = HttpRequest.post("https://chynet01.azureedge.net/user/checkin").cookie(cookie).timeout(-1).execute().body();
-        logger.error("[checkin]:"+ret);
+        logger.error("[checkin]:" + ret);
     }
-
-
+    
+    
 }

+ 74 - 1
cif-service/src/main/java/com/txz/cif/web/RechargeRecordApiController.java

@@ -14,22 +14,29 @@ import com.baomidou.lock.executor.RedisTemplateLockExecutor;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.txz.cif.constants.MyConstants;
-import com.txz.cif.core.*;
+import com.txz.cif.core.AuthService;
+import com.txz.cif.core.Result;
+import com.txz.cif.core.ResultCode;
+import com.txz.cif.core.ResultGenerator;
 import com.txz.cif.dto.BizLogDTO;
 import com.txz.cif.dto.tfpay.CheckSignDTO;
 import com.txz.cif.dto.tfpay.TFCreateOrderDTO;
 import com.txz.cif.model.*;
 import com.txz.cif.service.*;
+import com.txz.cif.service.impl.BizLogServiceImpl;
 import com.txz.cif.util.IpUtils;
 import com.txz.cif.util.TFPayUtil;
 import com.txz.cif.web.para.RecordParam;
 import com.txz.cif.web.ro.TFPayNotifyDTO;
 import com.txz.cif.web.vo.CreatePayVO;
 import com.txz.cif.web.vo.PaymentPriceVO;
+import com.txz.cif.web.vo.UnpaidOrderVO;
+import com.txz.core.ServiceException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import tk.mybatis.mapper.entity.Condition;
 import tk.mybatis.mapper.entity.Example;
@@ -79,6 +86,8 @@ public class RechargeRecordApiController {
     
     @Resource
     private LockTemplate lockTemplate;
+    @Autowired
+    private BizLogServiceImpl bizLogServiceImpl;
     
     @GetMapping("/goodsList/{methodId:^\\d+$}")
     @ApiOperation(value = "充值商品", httpMethod = "GET")
@@ -98,6 +107,70 @@ public class RechargeRecordApiController {
         );
     }
     
+    /**
+     * 充值未完成订单
+     */
+    @GetMapping("unpaidOrder")
+    public Result<UnpaidOrderVO> unpaidOrder(HttpServletRequest request) {
+        Condition condition = new Condition(RechargeRecord.class);
+        Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("status", 1);
+        criteria.andEqualTo("userId", authService.getTokenUserId(request));
+        condition.setOrderByClause("create_time desc");
+        List<RechargeRecord> list = rechargeRecordService.findByCondition(condition);
+        if (CollectionUtil.isEmpty(list)) {
+            return Result.success();
+        }
+        RechargeRecord rechargeRecord = list.get(0);
+        
+        Condition conditionBiz = new Condition(BizLog.class);
+        Criteria criteriaBiz = conditionBiz.createCriteria();
+        criteriaBiz.andEqualTo("bizType", 1);
+        criteriaBiz.andEqualTo("bizNo", rechargeRecord.getOrderNo());
+        criteriaBiz.andIsNotNull("receiveMessage");
+        List<BizLog> bizCondition = bizLogService.findByCondition(conditionBiz);
+        if (CollectionUtil.isEmpty(bizCondition)) {
+            return Result.success();
+        }
+        JSONObject receiveJson = JSONUtil.parseObj(bizCondition.get(0).getReceiveMessage());
+        
+        JSONObject sendJson = JSONUtil.parseObj(bizCondition.get(0).getSendMessage());
+        return Result.success(UnpaidOrderVO.builder()
+                .amount(sendJson.getStr("pay_amount"))
+                .payUrl(receiveJson.getStr("data"))
+                .build());
+    }
+    
+    /**
+     * 充值订单二次三方支付
+     */
+    @GetMapping("thirdPayAgree/{recordId:^\\d+$}")
+    public Result thirdPayAgree(@PathVariable("paymentId") Long paymentId, HttpServletRequest request) {
+        Condition condition = new Condition(RechargeRecord.class);
+        Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("status", 1);
+        criteria.andEqualTo("userId", authService.getTokenUserId(request));
+        criteria.andEqualTo("id", paymentId);
+        condition.setOrderByClause("create_time desc");
+        List<RechargeRecord> list = rechargeRecordService.findByCondition(condition);
+        if (CollectionUtil.isEmpty(list)) {
+            return Result.success();
+        }
+        RechargeRecord rechargeRecord = list.get(0);
+        
+        Condition conditionBiz = new Condition(BizLog.class);
+        Criteria criteriaBiz = conditionBiz.createCriteria();
+        criteriaBiz.andEqualTo("bizType", 1);
+        criteriaBiz.andEqualTo("bizNo", rechargeRecord.getOrderNo());
+        criteriaBiz.andIsNotNull("receiveMessage");
+        List<BizLog> bizCondition = bizLogService.findByCondition(conditionBiz);
+        if (CollectionUtil.isEmpty(bizCondition)) {
+            return Result.success();
+        }
+        JSONObject resultJson = JSONUtil.parseObj(bizCondition.get(0).getReceiveMessage());
+        return Result.success(resultJson.getStr("data"));
+    }
+    
     
     @GetMapping("/add")
     @ApiOperation(value = "创建充值订单", httpMethod = "GET")

+ 1 - 1
cif-service/src/main/java/com/txz/cif/web/WithdrawRecordApiController.java

@@ -270,7 +270,7 @@ public class WithdrawRecordApiController {
             
             Integer type = 8;
             if (StrUtil.equals("1", dto.getReturncode())) {
-                withdrawRecordService.success(records.get(0));
+                withdrawRecordService.success(records.get(0), DateUtil.parse(dto.getDatetime(), "yyyyMMddHHmmss"));
             } else {
                 withdrawRecordService.fail(records.get(0));
                 type = 9;

+ 51 - 48
cif-service/src/main/java/com/txz/cif/web/bo/RechargeRecordBO.java

@@ -8,116 +8,119 @@ import lombok.*;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
-import javax.persistence.*;
+
 @Getter
 @Setter
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
 
-@ApiModel(value="充值对象")
+@ApiModel(value = "充值对象")
 public class RechargeRecordBO {
-    @ApiModelProperty(value="id")
+    @ApiModelProperty(value = "id")
     private Long id;
-
+    
     /**
      * 订单号
      */
-    @ApiModelProperty(value="orderNo订单号")
+    @ApiModelProperty(value = "orderNo订单号")
     private String orderNo;
-
+    
     /**
      * 用户id
      */
-    @ApiModelProperty(value="userId用户id")
+    @ApiModelProperty(value = "userId用户id")
     private Long userId;
-
+    
     /**
      * 交易金额
      */
-    @ApiModelProperty(value="amount交易金额")
+    @ApiModelProperty(value = "amount交易金额")
     private BigDecimal amount;
-
-    @ApiModelProperty(value="折扣金额")
+    
+    @ApiModelProperty(value = "折扣金额")
     private BigDecimal discount;
-
-    @ApiModelProperty(value="钱包余额")
+    
+    @ApiModelProperty(value = "钱包余额")
     private BigDecimal walletBalance;
-
-    @ApiModelProperty(value="收益余额")
+    
+    @ApiModelProperty(value = "收益余额")
     private BigDecimal earningsBalance;
-
+    
     /**
      * 状态 1处理中 2充值成功 3充值失败 4超时取消
      */
-    @ApiModelProperty(value="status状态 1处理中 2充值成功 3充值失败 4超时取消")
+    @ApiModelProperty(value = "status状态 1处理中 2充值成功 3充值失败 4超时取消")
     private Integer status;
-
+    
     /**
      * 渠道
      */
-    @ApiModelProperty(value="channel渠道")
+    @ApiModelProperty(value = "channel渠道")
     private String channel;
-
-    @ApiModelProperty(value="支付通道")
+    
+    @ApiModelProperty(value = "支付通道")
     private String channelName;
-    @ApiModelProperty(value="支付方式")
+    @ApiModelProperty(value = "支付方式")
     private String methodName;
-
+    
     /**
      * 币种
      */
-    @ApiModelProperty(value="currency币种")
+    @ApiModelProperty(value = "currency币种")
     private String currency;
-
+    
     /**
      * 用户名
      */
-    @ApiModelProperty(value="userName用户名")
+    @ApiModelProperty(value = "userName用户名")
     private String userName;
-
+    
     /**
      * 手机号
      */
-    @ApiModelProperty(value="userPhone手机号")
+    @ApiModelProperty(value = "userPhone手机号")
     private String userPhone;
-
-
-
-    @ApiModelProperty(value="银行")
+    
+    
+    @ApiModelProperty(value = "银行")
     private String bank;
-
+    
     /**
      * 用户名
      */
-    @ApiModelProperty(value="银行账号姓名")
+    @ApiModelProperty(value = "银行账号姓名")
     private String bankAccountName;
-
-    @ApiModelProperty(value="银行")
+    
+    @ApiModelProperty(value = "银行")
     private String bankAccount;
-
-
+    
+    
     /**
      * 交易时间
      */
-    @ApiModelProperty(value="transTime交易时间")
+    @ApiModelProperty(value = "transTime交易时间")
     private Date transTime;
-
+    
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    
     /**
      * 交易成功时间
      */
-    @ApiModelProperty(value="successTime交易成功时间")
+    @ApiModelProperty(value = "successTime交易成功时间")
     private Date successTime;
-
-
-
+    
+    
     /**
      * 版本号
      */
-    @ApiModelProperty(value="version版本号")
+    @ApiModelProperty(value = "version版本号")
     private String version;
-
-    @ApiModelProperty(value="日志")
+    
+    @ApiModelProperty(value = "日志")
     private List<BizLog> bizLogs;
-
+    
 }

+ 210 - 203
cif-service/src/main/java/com/txz/cif/web/mng/RechargeRecordController.java

@@ -1,4 +1,5 @@
 package com.txz.cif.web.mng;
+
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
@@ -33,222 +34,228 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 /**
-* Created by CodeGenerator on 2025/07/15.
-*/
+ * Created by CodeGenerator on 2025/07/15.
+ */
 @Api(tags = "[后台]rechargeRecord管理")
 @RestController
 @RequestMapping("/recharge/record")
 public class RechargeRecordController {
-
-	private static Logger log = LoggerFactory.getLogger(RechargeRecordController.class);
-
+    
+    private static Logger log = LoggerFactory.getLogger(RechargeRecordController.class);
+    
     @Resource
     private RechargeRecordService rechargeRecordService;
-
-	@Resource
-	private BizLogService bizLogService;
-
-	@Resource
-	private AccountService accountService;
-
-	@Resource
-	private PaymentChannelService paymentChannelService;
-	@Resource
-	private PaymentMethodService paymentMethodService;
-
-
-	@GetMapping("/detail")
-	@ApiOperation(value = "rechargeRecord获取详情",httpMethod = "GET")
+    
+    @Resource
+    private BizLogService bizLogService;
+    
+    @Resource
+    private AccountService accountService;
+    
+    @Resource
+    private PaymentChannelService paymentChannelService;
+    @Resource
+    private PaymentMethodService paymentMethodService;
+    
+    @Resource
+    private UserService userService;
+    
+    @GetMapping("/detail")
+    @ApiOperation(value = "rechargeRecord获取详情", httpMethod = "GET")
     public Result<RechargeRecordBO> detail(@RequestParam Long id) {
-    	if(id == null){
-    		return ResultGenerator.genFailResult(ResultCode.ID_IS_NULL);
-    	}
-
-    	try {
-			RechargeRecord rechargeRecord = rechargeRecordService.findById(id);
-			if (rechargeRecord == null){
-				return ResultGenerator.genFailResult(ResultCode.OBJECT_IS_NULL);
-			}
-			RechargeRecordBO bo = BeanUtil.toBean(rechargeRecord,RechargeRecordBO.class);
-			Condition c = new Condition(BizLog.class);
-			c.createCriteria().andEqualTo("bizType",1)
-					.andEqualTo("bizNo",rechargeRecord.getOrderNo());
-			List<BizLog> logs = bizLogService.findByCondition(c);
-			bo.setBizLogs(logs);
-			Account wallet = accountService.getAccount(rechargeRecord.getUserId(), 1);
-			if (wallet != null){
-				bo.setWalletBalance(wallet.getBalance());
-			}
-			Account earnings = accountService.getAccount(rechargeRecord.getUserId(), 2);
-			if (earnings != null){
-				bo.setEarningsBalance(earnings.getBalance());
-			}
-			if (rechargeRecord.getMethodId() != null){
-				PaymentMethod method = paymentMethodService.findById(rechargeRecord.getMethodId());
-				if (method != null){
-					bo.setMethodName(method.getMethodName());
-				}
-			}
-			if (rechargeRecord.getChannelId() != null){
-				PaymentChannel channel = paymentChannelService.findById(rechargeRecord.getChannelId());
-				if (channel != null){
-					bo.setChannelName(channel.getChannelName());
-				}
-			}
-			return ResultGenerator.genSuccessResult(bo);
-		} catch (Exception e) {
-			log.error("查询对象操作异常e:{}",e);
-			return ResultGenerator.genFailResult(ResultCode.INTERNAL_SERVER_ERROR);
-		}
-
+        if (id == null) {
+            return ResultGenerator.genFailResult(ResultCode.ID_IS_NULL);
+        }
+        
+        try {
+            RechargeRecord rechargeRecord = rechargeRecordService.findById(id);
+            if (rechargeRecord == null) {
+                return ResultGenerator.genFailResult(ResultCode.OBJECT_IS_NULL);
+            }
+            User user = userService.findById(rechargeRecord.getUserId());
+            RechargeRecordBO bo = BeanUtil.toBean(rechargeRecord, RechargeRecordBO.class);
+            bo.setBank(user.getBank());
+            bo.setBankAccount(user.getBankAccount());
+            bo.setBankAccountName(user.getBankAccountName());
+            Condition c = new Condition(BizLog.class);
+            c.createCriteria().andEqualTo("bizType", 1)
+                    .andEqualTo("bizNo", rechargeRecord.getOrderNo());
+            List<BizLog> logs = bizLogService.findByCondition(c);
+            bo.setBizLogs(logs);
+            Account wallet = accountService.getAccount(rechargeRecord.getUserId(), 1);
+            if (wallet != null) {
+                bo.setWalletBalance(wallet.getBalance());
+            }
+            Account earnings = accountService.getAccount(rechargeRecord.getUserId(), 2);
+            if (earnings != null) {
+                bo.setEarningsBalance(earnings.getBalance());
+            }
+            if (rechargeRecord.getMethodId() != null) {
+                PaymentMethod method = paymentMethodService.findById(rechargeRecord.getMethodId());
+                if (method != null) {
+                    bo.setMethodName(method.getMethodName());
+                }
+            }
+            if (rechargeRecord.getChannelId() != null) {
+                PaymentChannel channel = paymentChannelService.findById(rechargeRecord.getChannelId());
+                if (channel != null) {
+                    bo.setChannelName(channel.getChannelName());
+                }
+            }
+            return ResultGenerator.genSuccessResult(bo);
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return ResultGenerator.genFailResult(ResultCode.INTERNAL_SERVER_ERROR);
+        }
+        
     }
-
+    
     @PostMapping("/list")
-	@ApiOperation(value = "rechargeRecord获取列表",httpMethod = "POST")
+    @ApiOperation(value = "rechargeRecord获取列表", httpMethod = "POST")
     public Result<List<RechargeRecordBO>> list(@RequestBody RecordParam param) {
-
+        
         PageHelper.startPage(param.getPage(), param.getSize());
-
+        
         Condition condition = new Condition(RechargeRecord.class);
         Criteria criteria = condition.createCriteria();
-		if (StrUtil.isNotBlank(param.getChannel())){
-			criteria.andEqualTo("channel", param.getChannel());
-		}
-		if (StrUtil.isNotBlank(param.getUserName())){
-			criteria.andEqualTo("userName", param.getUserName());
-		}
-		if (StrUtil.isNotBlank(param.getUserPhone())){
-			criteria.andEqualTo("userPhone", param.getUserPhone());
-		}
-		if (StrUtil.isNotBlank(param.getOrderNo())){
-			criteria.andEqualTo("orderNo", param.getOrderNo());
-		}
-		if (param.getStatus() != null){
-			criteria.andEqualTo("status", param.getStatus());
-		}
-		if (param.getTimeType() != null){
-			if (param.getTimeType() ==1 ){
-				if (StrUtil.isNotBlank(param.getStartTime())){
-					criteria.andBetween("createTime", param.getStartTime(),param.getEndTime());
-				}
-			} else  if (param.getTimeType() ==2 ){
-				if (StrUtil.isNotBlank(param.getStartTime())){
-					criteria.andBetween("successTime", param.getStartTime(),param.getEndTime());
-				}
-			}
-		}
-		PageInfo pageInfo = null;
-		try {
-			condition.setOrderByClause("create_time desc");
-    		 List<RechargeRecord> list = rechargeRecordService.findByCondition(condition);
-    		 pageInfo = new PageInfo(list);
-			 pageInfo.setList(list.stream().map(e-> {
-				 RechargeRecordBO bo = BeanUtil.toBean(e,RechargeRecordBO.class);
-				 if (e.getMethodId() != null){
-					 PaymentMethod method = paymentMethodService.findById(e.getMethodId());
-					 if (method != null){
-						 bo.setMethodName(method.getMethodName());
-					 }
-				 }
-				 if (e.getChannelId() != null){
-					 PaymentChannel channel = paymentChannelService.findById(e.getChannelId());
-					 if (channel != null){
-						 bo.setChannelName(channel.getChannelName());
-					 }
-				 }
-				 return bo;
-			 }).collect(Collectors.toList()));
-		} catch (Exception e) {
-			log.error("查询对象操作异常e:{}",e);
-			return ResultGenerator.genFailResult(ResultCode.INTERNAL_SERVER_ERROR);
-		}
+        if (StrUtil.isNotBlank(param.getChannel())) {
+            criteria.andEqualTo("channel", param.getChannel());
+        }
+        if (StrUtil.isNotBlank(param.getUserName())) {
+            criteria.andEqualTo("userName", param.getUserName());
+        }
+        if (StrUtil.isNotBlank(param.getUserPhone())) {
+            criteria.andEqualTo("userPhone", param.getUserPhone());
+        }
+        if (StrUtil.isNotBlank(param.getOrderNo())) {
+            criteria.andEqualTo("orderNo", param.getOrderNo());
+        }
+        if (param.getStatus() != null) {
+            criteria.andEqualTo("status", param.getStatus());
+        }
+        if (param.getTimeType() != null) {
+            if (param.getTimeType() == 1) {
+                if (StrUtil.isNotBlank(param.getStartTime())) {
+                    criteria.andBetween("createTime", param.getStartTime(), param.getEndTime());
+                }
+            } else if (param.getTimeType() == 2) {
+                if (StrUtil.isNotBlank(param.getStartTime())) {
+                    criteria.andBetween("successTime", param.getStartTime(), param.getEndTime());
+                }
+            }
+        }
+        PageInfo pageInfo = null;
+        try {
+            condition.setOrderByClause("create_time desc");
+            List<RechargeRecord> list = rechargeRecordService.findByCondition(condition);
+            pageInfo = new PageInfo(list);
+            pageInfo.setList(list.stream().map(e -> {
+                RechargeRecordBO bo = BeanUtil.toBean(e, RechargeRecordBO.class);
+                if (e.getMethodId() != null) {
+                    PaymentMethod method = paymentMethodService.findById(e.getMethodId());
+                    if (method != null) {
+                        bo.setMethodName(method.getMethodName());
+                    }
+                }
+                if (e.getChannelId() != null) {
+                    PaymentChannel channel = paymentChannelService.findById(e.getChannelId());
+                    if (channel != null) {
+                        bo.setChannelName(channel.getChannelName());
+                    }
+                }
+                return bo;
+            }).collect(Collectors.toList()));
+        } catch (Exception e) {
+            log.error("查询对象操作异常e:{}", e);
+            return ResultGenerator.genFailResult(ResultCode.INTERNAL_SERVER_ERROR);
+        }
         return ResultGenerator.genSuccessResult(pageInfo);
     }
-
-	@GetMapping("/report")
-	@ApiOperation(value = "导出", httpMethod = "GET")
-	public void report(@RequestParam(required = false) String orderNo ,
-					   @RequestParam(required = false) String channel ,
-					   @RequestParam(required = false) String userName ,
-					   @RequestParam(required = false) String userPhone ,
-					   @RequestParam(required = false) Integer status ,
-					   @RequestParam(required = false) Integer timeType ,
-					   @RequestParam(required = false) String startTime ,
-					   @RequestParam(required = false) String endTime ,
-					   HttpServletResponse response) {
-		Condition condition = new Condition(RechargeRecord.class);
-		Criteria criteria = condition.createCriteria();
-		if (StrUtil.isNotBlank(channel)){
-			criteria.andEqualTo("channel", channel);
-		}
-		if (StrUtil.isNotBlank(userName)){
-			criteria.andEqualTo("userName", userName);
-		}
-		if (StrUtil.isNotBlank(userPhone)){
-			criteria.andEqualTo("userPhone", userPhone);
-		}
-		if (StrUtil.isNotBlank(orderNo)){
-			criteria.andEqualTo("orderNo", orderNo);
-		}
-		if (status != null){
-			criteria.andEqualTo("status", status);
-		}
-		if (timeType != null){
-			if (timeType ==1 ){
-				if (StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)){
-					criteria.andBetween("createTime", startTime,endTime);
-				}
-			} else  if (timeType ==2 ){
-				if (StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)){
-					criteria.andBetween("successTime", startTime,endTime);
-				}
-			}
-		}
-		condition.setOrderByClause("create_time desc");
-		List<RechargeRecord> list = rechargeRecordService.findByCondition(condition);
-		List<String> rowHead = CollUtil.newArrayList("编号", "订单号", "用户id", "交易金额", "折扣金额", "状态 1处理中 2充值成功 3充值失败 4超时取消", "渠道", "币种", "用户名", "手机号", "交易时间", "交易成功时间", "银行", "银行账户", "银行账户姓名");
-		ExcelWriter writer = ExcelUtil.getWriter();
-		try {
-			writer.writeHeadRow(rowHead);
-			List<List<Object>> rows = new LinkedList<>();
-			if (CollUtil.isNotEmpty(list)) {
-				for (RechargeRecord temp : list) {
-					List<Object> rowA = CollUtil.newArrayList(
-							temp.getId()+"",
-							temp.getOrderNo(),
-							temp.getAmount() == null? "0":temp.getAmount().toPlainString(),
-							temp.getDiscount() == null? "0":temp.getDiscount().toPlainString(),
-							temp.getStatus()+"",
-							temp.getChannel(),
-							temp.getCurrency(),
-							temp.getUserName(),
-							temp.getUserPhone(),
-							temp.getTransTime() == null? "":DateUtil.format(temp.getTransTime(), "yyyy-MM-dd HH:mm:ss"),
-							temp.getSuccessTime() == null? "":DateUtil.format(temp.getSuccessTime(), "yyyy-MM-dd HH:mm:ss"),
-							temp.getBank(),
-							temp.getBankAccount(),
-							temp.getBankAccountName());
-					rows.add(rowA);
-				}
-			}
-			writer.write(rows);
-			//设置宽度自适应
-			writer.setColumnWidth(-1, 22);
-			//response为HttpServletResponse对象
-			response.setContentType("application/vnd.ms-excel;charset=utf-8");
-			//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
-			response.setHeader("Content-Disposition", "attachment;filename=" + new String(("数据列表").getBytes("UTF-8"), "ISO-8859-1") + ".xls");
-			ServletOutputStream out = response.getOutputStream();
-			//out为OutputStream,需要写出到的目标流
-			writer.flush(out);
-			log.info("导出结束");
-		} catch (Exception e) {
-			log.error("导出异常", e);
-			e.printStackTrace();
-		} finally {
-			// 关闭writer,释放内存
-			writer.close();
-			log.info("导出结束");
-		}
-	}
+    
+    @GetMapping("/report")
+    @ApiOperation(value = "导出", httpMethod = "GET")
+    public void report(@RequestParam(required = false) String orderNo,
+                       @RequestParam(required = false) String channel,
+                       @RequestParam(required = false) String userName,
+                       @RequestParam(required = false) String userPhone,
+                       @RequestParam(required = false) Integer status,
+                       @RequestParam(required = false) Integer timeType,
+                       @RequestParam(required = false) String startTime,
+                       @RequestParam(required = false) String endTime,
+                       HttpServletResponse response) {
+        Condition condition = new Condition(RechargeRecord.class);
+        Criteria criteria = condition.createCriteria();
+        if (StrUtil.isNotBlank(channel)) {
+            criteria.andEqualTo("channel", channel);
+        }
+        if (StrUtil.isNotBlank(userName)) {
+            criteria.andEqualTo("userName", userName);
+        }
+        if (StrUtil.isNotBlank(userPhone)) {
+            criteria.andEqualTo("userPhone", userPhone);
+        }
+        if (StrUtil.isNotBlank(orderNo)) {
+            criteria.andEqualTo("orderNo", orderNo);
+        }
+        if (status != null) {
+            criteria.andEqualTo("status", status);
+        }
+        if (timeType != null) {
+            if (timeType == 1) {
+                if (StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)) {
+                    criteria.andBetween("createTime", startTime, endTime);
+                }
+            } else if (timeType == 2) {
+                if (StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)) {
+                    criteria.andBetween("successTime", startTime, endTime);
+                }
+            }
+        }
+        condition.setOrderByClause("create_time desc");
+        List<RechargeRecord> list = rechargeRecordService.findByCondition(condition);
+        List<String> rowHead = CollUtil.newArrayList("编号", "订单号", "用户id", "交易金额", "折扣金额", "状态 1处理中 2充值成功 3充值失败 4超时取消", "渠道", "币种", "用户名", "手机号", "交易时间", "交易成功时间", "银行", "银行账户", "银行账户姓名");
+        ExcelWriter writer = ExcelUtil.getWriter();
+        try {
+            writer.writeHeadRow(rowHead);
+            List<List<Object>> rows = new LinkedList<>();
+            if (CollUtil.isNotEmpty(list)) {
+                for (RechargeRecord temp : list) {
+                    List<Object> rowA = CollUtil.newArrayList(
+                            temp.getId() + "",
+                            temp.getOrderNo(),
+                            temp.getAmount() == null ? "0" : temp.getAmount().toPlainString(),
+                            temp.getDiscount() == null ? "0" : temp.getDiscount().toPlainString(),
+                            temp.getStatus() + "",
+                            temp.getChannel(),
+                            temp.getCurrency(),
+                            temp.getUserName(),
+                            temp.getUserPhone(),
+                            temp.getTransTime() == null ? "" : DateUtil.format(temp.getTransTime(), "yyyy-MM-dd HH:mm:ss"),
+                            temp.getSuccessTime() == null ? "" : DateUtil.format(temp.getSuccessTime(), "yyyy-MM-dd HH:mm:ss"),
+                            temp.getBank(),
+                            temp.getBankAccount(),
+                            temp.getBankAccountName());
+                    rows.add(rowA);
+                }
+            }
+            writer.write(rows);
+            // 设置宽度自适应
+            writer.setColumnWidth(-1, 22);
+            // response为HttpServletResponse对象
+            response.setContentType("application/vnd.ms-excel;charset=utf-8");
+            // test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
+            response.setHeader("Content-Disposition", "attachment;filename=" + new String(("数据列表").getBytes("UTF-8"), "ISO-8859-1") + ".xls");
+            ServletOutputStream out = response.getOutputStream();
+            // out为OutputStream,需要写出到的目标流
+            writer.flush(out);
+            log.info("导出结束");
+        } catch (Exception e) {
+            log.error("导出异常", e);
+            e.printStackTrace();
+        } finally {
+            // 关闭writer,释放内存
+            writer.close();
+            log.info("导出结束");
+        }
+    }
 }

+ 3 - 3
cif-service/src/main/java/com/txz/cif/web/mng/WithdrawRecordController.java

@@ -69,7 +69,7 @@ public class WithdrawRecordController {
             WithdrawRecordBO bo = BeanUtil.toBean(withdrawRecord, WithdrawRecordBO.class);
             Condition c = new Condition(BizLog.class);
             c.createCriteria().andEqualTo("bizType", 2)
-                    .andEqualTo("bizNo", withdrawRecord.getOrderNo());
+                    .andEqualTo("bizNo", withdrawRecord.getThirdOrderNo());
             List<BizLog> logs = bizLogService.findByCondition(c);
             bo.setBizLogs(logs);
             
@@ -91,7 +91,7 @@ public class WithdrawRecordController {
     
     @PostMapping("/review")
     @ApiOperation(value = "审核", httpMethod = "POST")
-    public Result review(@RequestBody ReviewParam param) {
+    public Result review(@RequestBody ReviewParam param, @RequestHeader("userName") String userName) {
         if (param == null) {
             return ResultGenerator.genFailResult(ResultCode.OBJECT_IS_NULL);
         }
@@ -114,7 +114,7 @@ public class WithdrawRecordController {
             return ResultGenerator.genFailResult(ResultCode.STATUS_IS_NULL);
         }
         
-        withdrawRecordService.review(w, param.getType() == 1 ? 2 : 3, param.getReview(), param.getChannelId());
+        withdrawRecordService.review(w, param.getType() == 1 ? 2 : 3, param.getReview(), param.getChannelId(), userName);
         // WithdrawRecord.builder().id(param.getId())
         // .review(param.getReview()).status(param.getType() == 1 ? 2 : 3).build());
         return ResultGenerator.genSuccessResult();

+ 24 - 0
cif-service/src/main/java/com/txz/cif/web/vo/UnpaidOrderVO.java

@@ -0,0 +1,24 @@
+package com.txz.cif.web.vo;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @author: MTD®️
+ * @date: 2025/9/2
+ */
+@Data
+@Builder
+public class UnpaidOrderVO {
+    
+    /**
+     * 充值金额
+     */
+    private String amount;
+    
+    /**
+     * 支付连接
+     */
+    private String payUrl;
+    
+}

+ 0 - 0
cif-service/src/main/resources/static/i18n/messages.properties → cif-service/src/main/resources/static/i18n/me.properties


+ 0 - 0
cif-service/src/main/resources/static/i18n/messages_bn.properties → cif-service/src/main/resources/static/i18n/me_bn.properties


+ 0 - 0
cif-service/src/main/resources/static/i18n/messages_zh_CN.properties → cif-service/src/main/resources/static/i18n/messa_zh.properties


+ 0 - 0
cif-service/src/main/resources/static/i18n/messages_en_US.properties → cif-service/src/main/resources/static/i18n/messages_en.properties