Browse Source

微信红包

zhangkaikai 1 year ago
parent
commit
027047504a

+ 20 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserMineController.java

@@ -15,6 +15,7 @@ import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.*;
 import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.common.utils.StringUtils;
+import com.qs.mp.core.domain.LoginUser;
 import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.user.domain.*;
@@ -190,9 +191,26 @@ public class UserMineController extends BaseApiController {
     @PostMapping("red/pkg/draw")
     @ApiOperation("红包领取")
     public AjaxResult redPkgDraw(@RequestBody RedPkgDrawParam param) {
-
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        Long userId = loginUser.getUserId();
+        SysUser sysUser = userService.selectUserById(userId);
+        if (sysUser == null) {
+            return AjaxResult.error("用户不存在");
+        }
+        if (StringUtils.isNotEmpty(sysUser.getMsdqOpenId())) {
+            param.setOpenId(sysUser.getMsdqOpenId());
+        }
+        if (StringUtils.isNotEmpty(sysUser.getOpenId())) {
+            param.setOpenId(sysUser.getOpenId());
+        }
+        if (param.getOpenId() == null) {
+            return AjaxResult.error("您未微信授权登录,无法提现,请重新微信授权登录");
+        }
         boolean rst = redPkgService.draw(param);
-        return AjaxResult.success("红包领取成功,请查看微信钱包零钱余额");
+        if (rst) {
+            return AjaxResult.success("红包领取成功,请查看微信钱包零钱余额");
+        }
+        return AjaxResult.error("系统繁忙,请联系客服处理");
     }
 
     /**

+ 2 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketController.java

@@ -119,6 +119,7 @@ public class UserTicketController extends BaseApiController {
     )
     public TableDataInfo ticketGoodsList(@RequestBody TicketBoxGoodsQueryParam param) {
         startPage();
+        boolean b = !"1" .equals(param.getAppSource());
         QueryWrapper<TicketBoxGoodsListVO> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("t1.is_deleted", 0);
         queryWrapper.eq("t1.type", param.getType());
@@ -132,6 +133,7 @@ public class UserTicketController extends BaseApiController {
         }
 
         queryWrapper.eq("t1.status", TicketBoxStatusEnum.PUT_ON);
+        queryWrapper.eq(b, "t1.is_have_red_pkg", 0);
         queryWrapper.eq("t2.is_deleted", 0);
         queryWrapper.eq("t1.sale_channel_type", TicketBoxSaleChannelTypeEnum.ALL.getValue());
         queryWrapper.orderByDesc("t1.sort_weight");
@@ -154,7 +156,6 @@ public class UserTicketController extends BaseApiController {
     @ApiOperation(value = "盲票组列表", notes = "获取所有盲票信息")
     public TableDataInfo list(@RequestBody TicketBoxParam param) {
         // 支付宝小程序仅展示无红包奖项的票组
-        boolean b = !"1" .equals(param.getAppSource());
         startPage();
         List<TicketBox> ticketBoxes = ticketBoxService.list(
             new LambdaQueryWrapper<TicketBox>().eq(TicketBox::getType, param.getType())
@@ -162,7 +163,6 @@ public class UserTicketController extends BaseApiController {
                     TicketBox::getCategoryId, param.getCategoryId())
                 .in(CollectionUtils.isNotEmpty(param.getBoxIds()), TicketBox::getBoxId, param.getBoxIds())
                 .eq(TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON)
-                    .eq(b,TicketBox::getIsHaveRedPkg,0)
                 .orderByDesc(TicketBox::getSortWeight)
         );
         List<TicketBoxListVO> ticketBoxListVOList = mapperFacade.mapAsList(ticketBoxes,

+ 12 - 0
mp-service/pom.xml

@@ -60,6 +60,18 @@
             <groupId>redis.clients</groupId>
             <artifactId>jedis</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.github.wechatpay-apiv3</groupId>
+            <artifactId>wechatpay-java-core</artifactId>
+            <version>0.2.8</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.github.wechatpay-apiv3</groupId>
+            <artifactId>wechatpay-java</artifactId>
+            <version>0.2.8</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 2 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxGoodsQueryParam.java

@@ -29,6 +29,7 @@ public class TicketBoxGoodsQueryParam {
     @ApiModelProperty("价格排序,1正序,2倒序")
     private Integer salePriceSort;
 
-
+    @ApiModelProperty("小程序,1微信,2支付宝")
+    private String appSource;
 
 }

+ 0 - 2
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketBoxParam.java

@@ -36,6 +36,4 @@ public class TicketBoxParam {
 	@ApiModelProperty("价格排序,1正序,2倒序")
 	private Integer salePriceSort;
 
-	@ApiModelProperty("小程序,1微信,2支付宝")
-	private String appSource;
 }

+ 66 - 1
mp-service/src/main/java/com/qs/mp/user/service/impl/UserRedPkgServiceImpl.java

@@ -1,16 +1,30 @@
 package com.qs.mp.user.service.impl;
 import java.util.Date;
 
+import cn.hutool.core.util.RandomUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.qs.mp.common.enums.AppSourceEnum;
 import com.qs.mp.common.enums.UserRedPkgStatusEnum;
+import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.system.service.id.BizIdGenerator;
 import com.qs.mp.user.domain.UserRedPkg;
 import com.qs.mp.user.domain.param.RedPkgDrawParam;
 import com.qs.mp.user.mapper.UserRedPkgMapper;
 import com.qs.mp.user.service.IUserRedPkgService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.wechat.pay.java.service.transferbatch.TransferBatchService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import com.wechat.pay.java.core.RSAConfig;
+import com.wechat.pay.java.service.transferbatch.model.InitiateBatchTransferRequest;
+import com.wechat.pay.java.service.transferbatch.model.InitiateBatchTransferResponse;
+import com.wechat.pay.java.service.transferbatch.model.TransferDetailInput;
+import org.springframework.util.Assert;
 
+import java.util.ArrayList;
+import java.util.List;
 /**
  * @auther quanshu
  * @create 2023-06-12 15:03:20
@@ -19,6 +33,12 @@ import org.springframework.stereotype.Service;
 @Service
 public class UserRedPkgServiceImpl extends ServiceImpl<UserRedPkgMapper, UserRedPkg> implements IUserRedPkgService {
 
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
+    // 商户号
+    public static String merChantId = "1643756321";
+    // 证书编号
+    public static String serialNumber = "6BA03F001024F81FAE490CAF240910512CBB1247";
+
     @Autowired
     private BizIdGenerator bizIdGenerator;
 
@@ -38,6 +58,51 @@ public class UserRedPkgServiceImpl extends ServiceImpl<UserRedPkgMapper, UserRed
     @Override
     public boolean draw(RedPkgDrawParam param) {
 
-        return false;
+        // 获取红包信息
+//        UserRedPkg userRedPkg = getById(param.getId());
+        RSAConfig config = new RSAConfig.Builder()
+                .merchantId(merChantId)
+                .privateKeyFromPath("mp-service/src/main/resources/config/apiclient_key.pem")
+                .merchantSerialNumber("6BA03F001024F81FAE490CAF240910512CBB1247")
+                .wechatPayCertificatesFromPath("mp-service/src/main/resources/config/apiclient_cert.pem")
+                .build();
+
+
+        TransferBatchService service = new TransferBatchService.Builder().config(config).build();
+        InitiateBatchTransferRequest initiateBatchTransferRequest =
+                new InitiateBatchTransferRequest();
+        initiateBatchTransferRequest.setAppid(AppSourceEnum.MSDQ.getAppId());
+        initiateBatchTransferRequest.setOutBatchNo("rp" + RandomUtil.randomNumbers(10));
+        initiateBatchTransferRequest.setBatchName("红包提现");
+        initiateBatchTransferRequest.setBatchRemark("红包提现");
+//        initiateBatchTransferRequest.setTotalAmount(Long.valueOf(userRedPkg.getValue()));
+        initiateBatchTransferRequest.setTotalAmount(100L);
+        initiateBatchTransferRequest.setTotalNum(1);
+        {
+            List<TransferDetailInput> transferDetailListList = new ArrayList<>();
+            {
+                TransferDetailInput transferDetailInput = new TransferDetailInput();
+                transferDetailInput.setOutDetailNo("rp" + RandomUtil.randomNumbers(10));
+//                transferDetailInput.setTransferAmount(Long.valueOf(userRedPkg.getValue()));
+                transferDetailInput.setTransferAmount(100L);
+                transferDetailInput.setTransferRemark("红包提现");
+                transferDetailInput.setOpenid(param.getOpenId());
+                transferDetailListList.add(transferDetailInput);
+            }
+            initiateBatchTransferRequest.setTransferDetailList(
+                    transferDetailListList);
+        }
+        initiateBatchTransferRequest.setTransferSceneId("1001");
+        try {
+            InitiateBatchTransferResponse response =
+                    service.initiateBatchTransfer(initiateBatchTransferRequest);
+        }catch (Exception e){
+            LogUtil.error(logger,e.getMessage());
+            return false;
+        }
+//        boolean rst = update(new LambdaUpdateWrapper<UserRedPkg>().set(UserRedPkg::getStatus, UserRedPkgStatusEnum.DRAW)
+//                .eq(UserRedPkg::getId, userRedPkg.getId()));
+//        Assert.isTrue(rst,"用户红包提现更新失败");
+        return true;
     }
 }

+ 25 - 0
mp-service/src/main/resources/config/apiclient_cert.pem

@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEKDCCAxCgAwIBAgIUa6A/ABAk+B+uSQyvJAkQUSy7EkcwDQYJKoZIhvcNAQEL
+BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
+FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
+Q0EwHhcNMjMwNjE5MDUxNTU4WhcNMjgwNjE3MDUxNTU4WjCBgTETMBEGA1UEAwwK
+MTY0Mzc1NjMyMTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMS0wKwYDVQQL
+DCTmna3lt57npajmuLjlpKnkuIvnp5HmioDmnInpmZDlhazlj7gxCzAJBgNVBAYM
+AkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALiVih1e4/HWApa4Njty21wj0qzORg9/2y760Ee/TpVV3zXb1veVM4vO
+eg5MtGU+RGRVTanuE6M2DIGCGR9KuH9A+87jGZbn351xr8+zjL3oHkkWWOkykb6q
+2IYsluhs0buk4JFPubixsJSCEr4RcfJbo8A2fW4+XO5nb9hLvs1AOV146wsEE0NF
+4Pqhwa2dioVDfHh3T16i7+FXB81cESKwcv0bj9hCcwz/Xk2w7qtSR4dPPLsNzJN7
+wb7YQMYYanooIlGERgBLdZcid7K0QMRvfxnvSKqfDAKdDkI42ii21tJbmNXIp93W
+yZ10PD8MKekVkhgQ40g3e3AOHaS0bRcCAwEAAaOBuTCBtjAJBgNVHRMEAjAAMAsG
+A1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2Y2Eu
+aXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRC
+MDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJCMjdB
+OUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQB0Ojej
+45Lo1Iq1akaJY4ypuRkzkZ6436b7JPJQnt8MLOz8bre9miJUN0O6pME2TQ+WXayA
+WiO/L6FZ/QYSiWSEHd3IuopivEAfXdyGyoH2J4twYTn2kp3KLyBGaLYH0inkM2jp
+uQpwVOQAoQQuxj/idE4CIedbX73ktWtBZ5BuSwYN2maXJCp8HiY+6oyehBD0AMSq
+sG3dZnkJszm4ZqnKdzrA2MVdZnjoScuH3NRXPlD8ulBjcjZ2/nreD8P+GzZZTOdC
+o/7vvVIz7HGZx9F3tstHh1k15MglJgUY+DMYUscAXgKEEPo0JEvFUYS6ntW6rlBX
+ypjwFo6BgjTOGMSh
+-----END CERTIFICATE-----

+ 28 - 0
mp-service/src/main/resources/config/apiclient_key.pem

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC4lYodXuPx1gKW
+uDY7cttcI9KszkYPf9su+tBHv06VVd8129b3lTOLznoOTLRlPkRkVU2p7hOjNgyB
+ghkfSrh/QPvO4xmW59+dca/Ps4y96B5JFljpMpG+qtiGLJbobNG7pOCRT7m4sbCU
+ghK+EXHyW6PANn1uPlzuZ2/YS77NQDldeOsLBBNDReD6ocGtnYqFQ3x4d09eou/h
+VwfNXBEisHL9G4/YQnMM/15NsO6rUkeHTzy7DcyTe8G+2EDGGGp6KCJRhEYAS3WX
+IneytEDEb38Z70iqnwwCnQ5CONoottbSW5jVyKfd1smddDw/DCnpFZIYEONIN3tw
+Dh2ktG0XAgMBAAECggEASZm3HMb9dSy0k4yYc1P1C+Rs2OLXJM8CgtUXv8QUfY9k
+FYG3Ubl4eEK4gIMtW0Fc2/T3ps57nhSrH+jUQ5nzvyoWPgRn67hBffIa/GLHt+Ga
+UeJLSZEUdEaDV9znv33Ek2HG+aokj/SqSE0lVAx4tv67aKVRlmfffmBYRJLPXd+T
+5qSXT/cf38ag12HvfFSGk60atMAPaafalzUnL7SCkroTEc2sW7ECbXlEFXcoZNsv
+mQnZD0fgBAFtsaALUfVXZRTfOsbZ/doG9LPI0vZzkiVwzBehptM0HtTg1OKVZxOD
+vLJj7Jobad4DyLtsDPHQCuwDpohoydXxgLkBp8yvgQKBgQDudhYI278cLSageJnR
+tckKbd2O6vj+iiFybldVgjdPAUH84ke/1Kj1JQI9SNbPV+Q7EsC6fS7Ljn976fkw
+4wx9dWKfW9FtrqANM0B+jglJQrK/7EO8nkDt1FqYhj8YRH5m2hAXYGjYMRTxj9lT
+aSVqdDPRBwTar7DXVDY6wsncEQKBgQDGKQR3UeK6cBFfzC6p9dTdHb/V8dwp8Oww
+sZSyNO2kFSj3sWkgwyo5EmQD6prlzRsCf/wXLOUBm8H8rl+9EWWRxUnCmcmuxntb
+tNpHIo8Uu8Lox1AcHCauNRFxId01MttsFqSbmu700rbRDRp9iqWIgtTWPbfUiQVV
+the8UN3+pwKBgQC7NGVUCv/bpO6gKE3JvwbXcyzu2DUlz1c2uL1DWfkFwx0E5Lgj
+N1Z1Ldq2Ngq9uGhqn+xB+6jTEUmwBB0nbfgOPitwo+qkSuVHt6a4M9XCd+RQm7EJ
+0Mt0arO87hd2e78oC6V6VKu6nb2tbprUysUe758GSJZdAHS6d1gjhWxnoQKBgQCw
+JrIzp3UXKpwnPoiUyVUqIlHvy4pdNi+fsZxvNiGx5KWAWhML7rHP/gsueBSuBz/l
+XwQnTd9dKKqvBgtRNO/HP0usU603UnVCNmh7J7ttQOOordUGx/eSkNYqbWII8maf
+lRlKwdV9iPq+pxlPVDqGOVceA8swgYVehfpfirtsrQKBgAMm0yzk+TV1k1cNBXBj
+7lpLmrhKmilB9U+HclK9xCqEf+QfTsFEv+CqH4zSwUCxjIp+A2oruPujqbzMwEA3
+WxmSQMODJFQt27HgHpRG5V2do6pq+9Uv5kmUJ7r76I0ys/5k1MPLpgkFM4upqsz4
+DVqKQwFaSZ6SVkBu9xzfGzP5
+-----END PRIVATE KEY-----