Browse Source

初始化

wujiefeng 9 tháng trước cách đây
mục cha
commit
05b5852107

+ 13 - 0
RewardClient/src/main/java/com/zhongshu/reward/client/type/OperateType.java

@@ -0,0 +1,13 @@
+package com.zhongshu.reward.client.type;
+
+/**
+ * @author wjf
+ * @date 2024/8/14
+ */
+public enum OperateType {
+
+    /**
+     * 提现
+     */
+    TRANSFER;
+}

+ 14 - 0
RewardServer/src/main/java/com/zhongshu/reward/server/core/dao/OperateDisableDao.java

@@ -0,0 +1,14 @@
+package com.zhongshu.reward.server.core.dao;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.reward.client.type.OperateType;
+import com.zhongshu.reward.server.core.domain.OperateDisable;
+
+/**
+ * @author wjf
+ * @date 2024/8/14
+ */
+public interface OperateDisableDao extends MongoDao<OperateDisable> {
+
+    OperateDisable findTopByUserIdAndType(String userId, OperateType type);
+}

+ 11 - 0
RewardServer/src/main/java/com/zhongshu/reward/server/core/dao/WxTransferLogDao.java

@@ -0,0 +1,11 @@
+package com.zhongshu.reward.server.core.dao;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.reward.server.core.domain.WxTransferLog;
+
+/**
+ * @author wjf
+ * @date 2024/8/14
+ */
+public interface WxTransferLogDao extends MongoDao<WxTransferLog> {
+}

+ 33 - 0
RewardServer/src/main/java/com/zhongshu/reward/server/core/domain/OperateDisable.java

@@ -0,0 +1,33 @@
+package com.zhongshu.reward.server.core.domain;
+
+import com.github.microservice.components.data.mongo.mongo.domain.SuperEntity;
+import com.zhongshu.reward.client.type.OperateType;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @author wjf
+ * @date 2024/8/14
+ */
+@Data
+@Builder
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+public class OperateDisable extends SuperEntity {
+
+    @Indexed
+    private String userId;
+
+    @Indexed
+    private OperateType type;
+
+    @Indexed(expireAfterSeconds = 0)
+    private Date TTL;
+}

+ 26 - 0
RewardServer/src/main/java/com/zhongshu/reward/server/core/domain/WxTransferLog.java

@@ -0,0 +1,26 @@
+package com.zhongshu.reward.server.core.domain;
+
+import com.github.microservice.components.data.mongo.mongo.domain.SuperEntity;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * @author wjf
+ * @date 2024/8/14
+ */
+@Data
+@Builder
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+public class WxTransferLog extends SuperEntity {
+
+    private String requestBody;
+
+    private String resultContent;
+
+    private String resultState;
+}

+ 22 - 1
RewardServer/src/main/java/com/zhongshu/reward/server/core/service/ChatTransferBatchService.java

@@ -1,6 +1,7 @@
 package com.zhongshu.reward.server.core.service;
 
 import cn.hutool.core.lang.Snowflake;
+import com.github.microservice.core.util.JsonUtil;
 import com.wechat.pay.java.core.Config;
 import com.wechat.pay.java.core.RSAAutoCertificateConfig;
 import com.wechat.pay.java.core.exception.HttpException;
@@ -11,6 +12,8 @@ import com.wechat.pay.java.service.transferbatch.model.*;
 import com.zhongshu.reward.client.model.wallet.TransferModel;
 import com.zhongshu.reward.client.model.wallet.TransferStatusModel;
 import com.zhongshu.reward.server.core.config.WeChatConfig;
+import com.zhongshu.reward.server.core.dao.WxTransferLogDao;
+import com.zhongshu.reward.server.core.domain.WxTransferLog;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +36,9 @@ public class ChatTransferBatchService {
     @Autowired
     Snowflake snowflake;
 
+    @Autowired
+    WxTransferLogDao wxTransferLogDao;
+
 
 
     public  Config RSAAutoCertificateConfig(){
@@ -77,6 +83,7 @@ public class ChatTransferBatchService {
      * 发起商家转账
      */
     public InitiateBatchTransferResponse initiateBatchTransfer(TransferModel transferModel, String appid) {
+        WxTransferLog wxTransferErrorLog = new WxTransferLog();
         Config config = RSAAutoCertificateConfig();
         // 初始化服务
         service = new TransferBatchService.Builder().config(config).build();
@@ -86,17 +93,31 @@ public class ChatTransferBatchService {
             request.setAppid(appid);
             request.setTransferSceneId(transferModel.getTransferSceneId());
             request.setTransferSceneId(weChatConfig.getTransferSceneId());
-            return service.initiateBatchTransfer(request);
+            InitiateBatchTransferResponse initiateBatchTransferResponse = service.initiateBatchTransfer(request);
+
+            wxTransferErrorLog.setRequestBody(JsonUtil.toJson(request));
+            wxTransferErrorLog.setResultContent(JsonUtil.toJson(initiateBatchTransferResponse));
+            wxTransferErrorLog.setResultState("SUCCESS");
+            wxTransferLogDao.save(wxTransferErrorLog);
+            return initiateBatchTransferResponse;
         } catch (HttpException e) { // 发送HTTP请求失败
             // 调用e.getHttpRequest()获取请求打印日志或上报监控,更多方法见HttpException定义
             log.info("发送HTTP请求失败:{}", e.getHttpRequest());
+            wxTransferErrorLog.setRequestBody(JsonUtil.toJson(transferModel));
+            wxTransferErrorLog.setResultContent(JsonUtil.toJson(e.getHttpRequest()));
         } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500
             // 调用e.getResponseBody()获取返回体打印日志或上报监控,更多方法见ServiceException定义
             log.info("请求失败2:{}", e.getResponseBody());
+            wxTransferErrorLog.setRequestBody(JsonUtil.toJson(transferModel));
+            wxTransferErrorLog.setResultContent(e.getResponseBody());
         } catch (MalformedMessageException e) { // 服务返回成功,返回体类型不合法,或者解析返回体失败
             // 调用e.getMessage()获取信息打印日志或上报监控,更多方法见MalformedMessageException定义
             log.info("请求失败3:{}", e.getMessage());
+            wxTransferErrorLog.setRequestBody(JsonUtil.toJson(transferModel));
+            wxTransferErrorLog.setResultContent(e.getMessage());
         }
+        wxTransferErrorLog.setResultState("Exception");
+        wxTransferLogDao.save(wxTransferErrorLog);
         return null;
     }
 

+ 33 - 5
RewardServer/src/main/java/com/zhongshu/reward/server/core/service/WxTransferService.java

@@ -4,6 +4,11 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Snowflake;
 import com.github.microservice.auth.client.content.ResultContent;
 import com.github.microservice.auth.client.content.ResultState;
+import com.github.microservice.auth.security.helper.AuthHelper;
+import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
+import com.wechat.pay.java.core.exception.HttpException;
+import com.wechat.pay.java.core.exception.MalformedMessageException;
+import com.wechat.pay.java.core.exception.ServiceException;
 import com.wechat.pay.java.service.transferbatch.model.InitiateBatchTransferResponse;
 import com.wechat.pay.java.service.transferbatch.model.TransferBatchEntity;
 import com.wechat.pay.java.service.transferbatch.model.TransferDetailInput;
@@ -12,13 +17,16 @@ import com.zhongshu.reward.client.model.wallet.TransferModel;
 import com.zhongshu.reward.client.model.wallet.TransferStatusModel;
 import com.zhongshu.reward.client.model.wallet.WxTransferBatchModel;
 import com.zhongshu.reward.client.ret.CommentException;
+import com.zhongshu.reward.client.type.OperateType;
 import com.zhongshu.reward.client.type.TimeUnitType;
 import com.zhongshu.reward.client.type.TransferChannel;
 import com.zhongshu.reward.client.type.TransferStatus;
 import com.zhongshu.reward.server.core.config.WeChatConfig;
+import com.zhongshu.reward.server.core.dao.OperateDisableDao;
 import com.zhongshu.reward.server.core.dao.TransferRulerDao;
 import com.zhongshu.reward.server.core.dao.WalletDao;
 import com.zhongshu.reward.server.core.dao.WxTransferBatchDao;
+import com.zhongshu.reward.server.core.domain.OperateDisable;
 import com.zhongshu.reward.server.core.domain.TransferRuler;
 import com.zhongshu.reward.server.core.domain.Wallet;
 import com.zhongshu.reward.server.core.domain.WxTransferBatch;
@@ -34,9 +42,7 @@ import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjuster;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -65,6 +71,15 @@ public class WxTransferService {
     @Autowired
     WeChatConfig weChatConfig;
 
+    @Autowired
+    OperateDisableDao operateDisableDao;
+
+    @Autowired
+    AuthHelper authHelper;
+
+    @Autowired
+    DBHelper dbHelper;
+
 
     /**
      * 发起提现
@@ -73,6 +88,16 @@ public class WxTransferService {
      */
     @Transactional
     public Object transfer(WalletTransferParam param){
+        String userId = authHelper.getCurrentUser().getUserId();
+        OperateDisable operateDisable = operateDisableDao.findTopByUserIdAndType(userId, OperateType.TRANSFER);
+        if (ObjectUtils.isNotEmpty(operateDisable)){
+            if (new Date().getTime() < operateDisable.getTTL().getTime()){
+                return ResultContent.build(ResultState.Fail, "系统异常,请"+ DateUtils.paresTime(operateDisable.getTTL().getTime(), DateUtils.patternyyyyMis) + "后重试");
+            }else {
+                operateDisableDao.delete(operateDisable);
+            }
+        }
+
         Wallet wallet = walletDao.findTop1ById(param.getWalletId());
         //校验提现规则
         validTransfer(param.getTotal(), wallet);
@@ -98,9 +123,13 @@ public class WxTransferService {
 
         InitiateBatchTransferResponse response = wechatService.initiateBatchTransfer(transferModel, param.getAppid());
         if (response==null){
+            OperateDisable newDisable = new OperateDisable();
+            newDisable.setUserId(userId);
+            newDisable.setType(OperateType.TRANSFER);
+            newDisable.setTTL(new Date(this.dbHelper.getTime() + 60*60 * 1000L));
+            operateDisableDao.save(newDisable);
             return ResultContent.build(ResultState.Fail);
         }
-
         WxTransferBatch wxTransferBatch = new WxTransferBatch();
         wxTransferBatch.setBatchNo(outBatchNo);
         wxTransferBatch.setDetailNo(outDetailNo);
@@ -111,7 +140,6 @@ public class WxTransferService {
         wxTransferBatch.setBatchStatus(response.getBatchStatus());
         wxTransferBatch.setWxBatchId(response.getBatchId());
         wxTransferBatch.setTransferStatus(TransferStatus.PROCESSING);
-
         wxTransferBatchDao.save(wxTransferBatch);
         wallet.setAmount(wallet.getAmount().subtract(param.getTotal()));
         wallet.setTodayTransferAmount(wallet.getTodayTransferAmount().add(param.getTotal()));

+ 2 - 0
RewardServer/src/main/java/com/zhongshu/reward/server/core/util/DateUtils.java

@@ -21,6 +21,8 @@ import java.util.Date;
 public class DateUtils {
 
     public final static String FORMAT_LONG = "yyyy-MM-dd HH:mm:ss";
+
+    public final static String patternyyyyMis = "yyyy-MM-dd HH:mm";
     public static Long timeToLong(String time, String format) {
         if (!org.springframework.util.StringUtils.hasText(time)) {
             return null;