Browse Source

zyp --红包修改

zyp 2 months ago
parent
commit
fd282479c4

+ 20 - 2
fs-service-system/src/main/java/com/fs/course/HuaweiCloudTest.java

@@ -1,5 +1,7 @@
 package com.fs.course;
 
+import com.fs.common.core.domain.R;
+import com.fs.course.config.RedPacketConfig;
 import lombok.extern.slf4j.Slf4j;
 
 
@@ -13,11 +15,27 @@ import java.util.*;
 public class HuaweiCloudTest {
 
     public static void main(String[] args) {
-        String testUrl = "https://tcpv.ylrzcloud.com/course/20241015/1728981064466.mp4";
-        String result = extractPathByRegex(testUrl);
+        RedPacketConfig config = new RedPacketConfig();
+        config.setIsNew(1);
+        R result = new R();
+        // 根据 isNew 判断使用哪种发红包方式
+        if (config.getIsNew() != null && config.getIsNew() == 1) {
+            result = test1();
+        } else {
+            result= test2();
+        }
+        result.put("isNew",config.getIsNew());
         System.out.println(result);
     }
 
+    public static R test1(){
+        return R.ok().put("code",1);
+    }
+
+    public static R test2(){
+        return R.ok().put("data",2);
+    }
+
     public static String extractPathByRegex(String urlString) {
         // ^https?://   匹配 http:// 或 https:// 开头
         // [^/]+        匹配域名部分(直到遇到第一个 '/')

+ 2 - 0
fs-service-system/src/main/java/com/fs/course/config/RedPacketConfig.java

@@ -48,4 +48,6 @@ public class RedPacketConfig implements Serializable {
     private String publicKeyPath;
 
     private String notifyUrl;
+
+    private Integer isNew;//0:老商户 商家转账到零钱 1:新商户 商家转账
 }

+ 26 - 14
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -35,6 +35,7 @@ import com.fs.qwApi.param.QwAddContactWayParam;
 import com.fs.qwApi.service.QwApiService;
 import com.fs.sop.mapper.QwSopLogsMapper;
 import com.fs.system.service.ISysConfigService;
+import com.github.binarywang.wxpay.bean.transfer.TransferBillsResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -606,10 +607,13 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 return R.error("参数错误!");
         }
     }
-    
+
+
+
+
     /**
      * 发放红包奖励
-     * 
+     *
      * @param param 请求参数
      * @param user 用户信息
      * @param log 观看日志
@@ -621,13 +625,13 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         // 确定红包金额
         BigDecimal amount = BigDecimal.ZERO;
         FsUserCourseVideoRedPackage redPackage = fsUserCourseVideoRedPackageMapper.selectRedPacketByCompanyId(param.getVideoId(), param.getCompanyId());
-        
+
         if (redPackage != null) {
             amount = redPackage.getRedPacketMoney();
         } else if (video != null) {
             amount = new BigDecimal(video.getRedPacketMoney());
         }
-        
+
         // 准备发送红包参数
         WxSendRedPacketParam packetParam = new WxSendRedPacketParam();
         packetParam.setOpenId(user.getMpOpenId());
@@ -637,14 +641,22 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         }
         packetParam.setAmount(amount);
         packetParam.setSource(param.getSource());
-        
+        packetParam.setRedPacketMode(config.getRedPacketMode());
+        packetParam.setCompanyId(param.getCompanyId());
+
         // 发送红包
         R sendRedPacket = paymentService.sendRedPacket(packetParam);
         if (sendRedPacket.get("code").equals(200)) {
-            // 添加红包记录
             FsCourseRedPacketLog redPacketLog = new FsCourseRedPacketLog();
+            TransferBillsResult transferBillsResult;
+            if (sendRedPacket.get("isNew").equals(1)){
+                transferBillsResult = (TransferBillsResult)sendRedPacket.get("data");
+                redPacketLog.setOutBatchNo(transferBillsResult.getOutBillNo());
+            }else {
+                redPacketLog.setOutBatchNo(sendRedPacket.get("orderCode").toString());
+            }
+            // 添加红包记录
             redPacketLog.setCourseId(param.getCourseId());
-            redPacketLog.setOutBatchNo(sendRedPacket.get("orderCode").toString());
             redPacketLog.setCompanyId(param.getCompanyId());
             redPacketLog.setUserId(param.getUserId());
             redPacketLog.setVideoId(param.getVideoId());
@@ -655,21 +667,21 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             redPacketLog.setAmount(amount);
             redPacketLog.setWatchLogId(log.getLogId() != null ? log.getLogId() : null);
             redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
-            
+
             // 更新观看记录的奖励类型
-            if (param.getLinkType() == null || param.getLinkType() == 0) {
+            if (param.getLinkType()==null || param.getLinkType()==0 || param.getLinkType()==3){
                 log.setRewardType(config.getRewardType());
                 courseWatchLogMapper.updateFsCourseWatchLog(log);
             }
-            return R.ok("奖励发放成功");
+            return sendRedPacket;
         } else {
             return R.error("奖励发送失败,请联系客服");
         }
     }
-    
+
     /**
      * 发放积分奖励
-     * 
+     *
      * @param user 用户信息
      * @param log 观看日志
      * @param config 配置信息
@@ -681,7 +693,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         userMap.setUserId(user.getUserId());
         userMap.setIntegral(NumberUtil.add(user.getIntegral(), config.getAnswerIntegral()));
         fsUserMapper.updateFsUser(userMap);
-        
+
         // 记录积分日志
         FsUserIntegralLogs integralLogs = new FsUserIntegralLogs();
         integralLogs.setIntegral(new BigDecimal(config.getAnswerIntegral()));
@@ -691,7 +703,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         integralLogs.setBusinessId(StringUtils.isNotEmpty(log.getLogId().toString()) ? log.getLogId().toString() : null);
         integralLogs.setCreateTime(new Date());
         fsUserIntegralLogsMapper.insertFsUserIntegralLogs(integralLogs);
-        
+
         return R.ok("奖励发放成功");
     }
 

+ 2 - 0
fs-service-system/src/main/java/com/fs/his/param/WxSendRedPacketParam.java

@@ -16,5 +16,7 @@ public class WxSendRedPacketParam implements Serializable {
 
     private Integer source=1;//来源 1:h5  2:看课小程序
 
+    private Integer redPacketMode;
+
 
 }

+ 88 - 69
fs-service-system/src/main/java/com/fs/store/service/impl/FsStorePaymentServiceImpl.java

@@ -15,7 +15,9 @@ import com.fs.common.core.domain.R;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.IPUtils;
 import com.fs.common.utils.ServletUtils;
+import com.fs.company.domain.CompanyConfig;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyConfigMapper;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.course.config.RedPacketConfig;
@@ -95,6 +97,9 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService
 
     @Autowired
     private IFsCourseRedPacketLogService redPacketLogService;
+
+    @Autowired
+    private CompanyConfigMapper companyConfigMapper;
     /**
      * 查询支付明细
      *
@@ -355,46 +360,119 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService
     @Override
     @Transactional
     public R sendRedPacket(WxSendRedPacketParam param) {
+        String json;
+        RedPacketConfig config = new RedPacketConfig();
+        // 根据红包模式获取配置
+        switch (param.getRedPacketMode()){
+            case 1:
+                json = configService.selectConfigByKey("redPacket.config");
+                config = JSONUtil.toBean(json, RedPacketConfig.class);
+                break;
+            case 2:
+                json = companyConfigMapper.selectRedPacketConfigByKey(param.getCompanyId());
+                config = JSONUtil.toBean(json, RedPacketConfig.class);
+                break;
+        }
+        //组合返回参数
+        R result = new R();
+        // 根据 isNew 判断使用哪种发红包方式
+        if (config.getIsNew() != null && config.getIsNew() == 1) {
+            result = sendRedPacketV3Internal(param, config);
+        } else {
+            result= sendRedPacketLegacyInternal(param, config);
+        }
+        result.put("isNew",config.getIsNew());
+        return result;
+    }
 
-        String json = configService.selectConfigByKey("redPacket.config");
-        RedPacketConfig config = JSONUtil.toBean(json, RedPacketConfig.class);
-        //创建微信订单
+    // 内部方法:处理新版本的发红包逻辑
+    private R sendRedPacketV3Internal(WxSendRedPacketParam param, RedPacketConfig config) {
         WxPayConfig payConfig = new WxPayConfig();
-        BeanUtils.copyProperties(config,payConfig);
+        BeanUtils.copyProperties(config, payConfig);
         WxPayService wxPayService = new WxPayServiceImpl();
         wxPayService.setConfig(payConfig);
         TransferService transferService = wxPayService.getTransferService();
 
-        TransferBatchesRequest request = new TransferBatchesRequest();
+        TransferBillsRequest request = new TransferBillsRequest();
+        request.setAppid(config.getAppId());
+        request.setOpenid(param.getOpenId());
+
+        String code = String.valueOf(IdUtil.getSnowflake(0, 0).nextId());
+        request.setOutBillNo("fsCourse" + code);
 
+        Integer amount = WxPayUnifiedOrderRequest.yuanToFen(param.getAmount() != null ? param.getAmount().toString() : "0.1");
+        request.setTransferAmount(amount);
+        request.setTransferRemark("活动奖励");
+        request.setUserRecvPerception("活动奖励");
+        request.setNotifyUrl(config.getNotifyUrl());
+        request.setTransferSceneId("1000");
+
+        // 设置场景信息
+        List<TransferBillsRequest.TransferSceneReportInfo> transferSceneReportInfos = new ArrayList<>();
+        TransferBillsRequest.TransferSceneReportInfo info1 = new TransferBillsRequest.TransferSceneReportInfo();
+        info1.setInfoType("活动名称");
+        info1.setInfoContent("新会员有礼");
+        transferSceneReportInfos.add(info1);
+
+        TransferBillsRequest.TransferSceneReportInfo info2 = new TransferBillsRequest.TransferSceneReportInfo();
+        info2.setInfoType("奖励说明");
+        info2.setInfoContent("注册会员抽奖一等奖");
+        transferSceneReportInfos.add(info2);
+        request.setTransferSceneReportInfos(transferSceneReportInfos);
+
+        try {
+            TransferBillsResult transferBillsResult = transferService.transferBills(request);
+            logger.info("商家转账支付完成:[msg:{}]", transferBillsResult);
+            return R.ok("发送红包成功").put("data", transferBillsResult);
+        } catch (WxPayException e) {
+            e.printStackTrace();
+            logger.info("商家转账支付失败:[msg:{}]", e.getMessage());
+            return R.error("发送失败");
+        }
+    }
+
+    // 内部方法:处理旧版本的发红包逻辑
+    private R sendRedPacketLegacyInternal(WxSendRedPacketParam param, RedPacketConfig config) {
+        WxPayConfig payConfig = new WxPayConfig();
+        BeanUtils.copyProperties(config, payConfig);
+        WxPayService wxPayService = new WxPayServiceImpl();
+        wxPayService.setConfig(payConfig);
+        TransferService transferService = wxPayService.getTransferService();
+
+        TransferBatchesRequest request = new TransferBatchesRequest();
         request.setAppid(config.getAppId());
         String code = IdUtil.getSnowflake(0, 0).nextIdStr();
-        request.setOutBatchNo("fsCourse"+code);
+        request.setOutBatchNo("fsCourse" + code);
         request.setBatchRemark("课堂答题奖励");
         request.setBatchName("课堂答题奖励");
         Integer amount = WxPayUnifiedOrderRequest.yuanToFen(param.getAmount().toString());
         request.setTotalAmount(amount);
         request.setTotalNum(1);
         request.setNotifyUrl(config.getNotifyUrl());
+
         ArrayList<TransferBatchesRequest.TransferDetail> transferDetailList = new ArrayList<>();
         TransferBatchesRequest.TransferDetail transferDetail = new TransferBatchesRequest.TransferDetail();
         transferDetail.setOpenid(param.getOpenId());
         String code1 = IdUtil.getSnowflake(0, 0).nextIdStr();
-        transferDetail.setOutDetailNo("fsCourse"+code1);
+        transferDetail.setOutDetailNo("fsCourse" + code1);
         transferDetail.setTransferAmount(amount);
         transferDetail.setTransferRemark("恭喜同学,认真听课,奖励你一朵小红花!");
         transferDetailList.add(transferDetail);
         request.setTransferDetailList(transferDetailList);
-        TransferBatchesResult transferBatchesResult=null;
+
         try {
-            transferBatchesResult = transferService.transferBatches(request);
-            return R.ok("发送红包成功").put("orderCode",transferBatchesResult.getOutBatchNo());
+            TransferBatchesResult transferBatchesResult = transferService.transferBatches(request);
+            return R.ok("发送红包成功").put("orderCode", transferBatchesResult.getOutBatchNo());
         } catch (WxPayException e) {
             e.printStackTrace();
             return R.error("发送失败");
         }
     }
 
+    @Override
+    public R sendRedPacketV3(WxSendRedPacketParam param) {
+        return null;
+    }
 
     @Override
     public String transferNotify(String notifyData, HttpServletRequest request) {
@@ -431,65 +509,6 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService
         }
     }
 
-    @Override
-    public R sendRedPacketV3(WxSendRedPacketParam param) {
-        String json = configService.selectConfigByKey("redPacket.config");
-        RedPacketConfig config = JSONUtil.toBean(json, RedPacketConfig.class);
-
-        //创建微信订单
-        WxPayConfig payConfig = new WxPayConfig();
-        BeanUtils.copyProperties(config,payConfig);
-        WxPayService wxPayService = new WxPayServiceImpl();
-        wxPayService.setConfig(payConfig);
-        TransferService transferService = wxPayService.getTransferService();
-
-        //商家转账请求
-        TransferBillsRequest request = new TransferBillsRequest();
-        request.setAppid(config.getAppId());
-        request.setOpenid(param.getOpenId());
-
-//        String code =  OrderCodeUtils.getH5RedPacketOrderSn();
-//        if(StringUtils.isEmpty(code)){
-//            return R.error("订单生成失败,请重试");
-//        }
-        String code = String.valueOf(IdUtil.getSnowflake(0, 0).nextId());
-        request.setOutBillNo("fsCourse"+code);
-        //转账金额
-        Integer amount = WxPayUnifiedOrderRequest.yuanToFen(param.getAmount()!=null ? param.getAmount().toString() : "0.1");
-        request.setTransferAmount(amount);
-        request.setTransferRemark("活动奖励");
-        //用户感知
-        request.setUserRecvPerception("活动奖励");
-        request.setNotifyUrl(config.getNotifyUrl());
-        request.setTransferSceneId("1000");
-        List<TransferBillsRequest.TransferSceneReportInfo> transferSceneReportInfos = new ArrayList<>();
-        // 添加第一条数据
-        TransferBillsRequest.TransferSceneReportInfo info1 = new TransferBillsRequest.TransferSceneReportInfo();
-        info1.setInfoType("活动名称");
-        info1.setInfoContent("新会员有礼");
-        transferSceneReportInfos.add(info1);
-
-        // 添加第二条数据
-        TransferBillsRequest.TransferSceneReportInfo info2 = new TransferBillsRequest.TransferSceneReportInfo();
-        info2.setInfoType("奖励说明");
-        info2.setInfoContent("注册会员抽奖一等奖");
-        transferSceneReportInfos.add(info2);
-        request.setTransferSceneReportInfos(transferSceneReportInfos);
-
-        //发起商家转账API(新)
-        TransferBillsResult transferBillsResult=null;
-        try {
-            transferBillsResult = transferService.transferBills(request);
-            logger.info("商家转账支付完成:[msg:{}]",transferBillsResult);
-            return R.ok("发送红包成功").put("data",transferBillsResult);
-        } catch (WxPayException e) {
-            e.printStackTrace();
-            logger.info("商家转账支付失败:[msg:{}]",e.getMessage());
-            return R.error("发送失败");
-        }
-    }
-
-
     @Override
     public String v3TransferNotify(String notifyData, HttpServletRequest request) {
         logger.info("zyp \n【收到转账回调】:{}",notifyData);