Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

785834757 2 месяцев назад
Родитель
Сommit
80605247e9

+ 38 - 0
market/src/main/java/com/ruoyi/market/domain/MarketAwardLog.java

@@ -0,0 +1,38 @@
+package com.ruoyi.market.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("market_award_log")
+public class MarketAwardLog {
+    @TableId
+    private String id;
+
+    @TableField(value = "award_id")
+    @ApiModelProperty("奖品id")
+    private String awardId;
+
+    @TableField(value = "user_id")
+    @ApiModelProperty("用户id")
+    private String userId;
+
+    @TableField(value = "create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("发放时间")
+    private LocalDateTime createTime;
+
+    @TableField(value = "distribution_status")
+    @ApiModelProperty("发放状态 0 已发放 1 未发放")
+    private String distributionStatus;
+
+    @TableField(value = "winning_method")
+    @ApiModelProperty("中奖方式 0 抽奖 1 看广告")
+    private String winningMethod;
+}

+ 1 - 1
market/src/main/java/com/ruoyi/market/domain/vo/DrawCallBackQueryVo.java

@@ -14,6 +14,6 @@ public class DrawCallBackQueryVo {
     private String drawActivityId;
 
     @ApiModelProperty("结果")
-    private String result;
+    private Integer result;
 
 }

+ 10 - 0
market/src/main/java/com/ruoyi/market/domain/vo/WechatVo.java

@@ -0,0 +1,10 @@
+package com.ruoyi.market.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class WechatVo {
+    private String userId;
+
+    private String activityId;
+}

+ 7 - 0
market/src/main/java/com/ruoyi/market/mapper/MarketAwardLogMapper.java

@@ -0,0 +1,7 @@
+package com.ruoyi.market.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.market.domain.MarketAwardLog;
+
+public interface MarketAwardLogMapper extends BaseMapper<MarketAwardLog> {
+}

+ 4 - 0
market/src/main/java/com/ruoyi/market/service/MarketAdvertisingAwardService.java

@@ -5,8 +5,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.market.domain.MarketAdvertisingAward;
 import com.ruoyi.market.domain.vo.AdvertisingAwardQueryVo;
 
+import java.util.List;
+
 
 public interface MarketAdvertisingAwardService extends IService<MarketAdvertisingAward> {
 
     Page<MarketAdvertisingAward> advertisingAwardList(Page page, AdvertisingAwardQueryVo advertisingAwardQueryVo);
+
+    List<MarketAdvertisingAward> getListByAdvertisingId(String advertisingId);
 }

+ 8 - 0
market/src/main/java/com/ruoyi/market/service/MarketAwardLibraryService.java

@@ -30,4 +30,12 @@ public interface MarketAwardLibraryService extends IService<MarketAwardLibrary>
      * @return
      */
     boolean grantAward(String activityId,String userId,Integer pos);
+
+    /**
+     * 广告发放奖品
+     * @param adId
+     * @param userId
+     * @return
+     */
+    boolean adsGrantAward(String adId,String userId);
 }

+ 7 - 0
market/src/main/java/com/ruoyi/market/service/MarketAwardLogService.java

@@ -0,0 +1,7 @@
+package com.ruoyi.market.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.market.domain.MarketAwardLog;
+
+public interface MarketAwardLogService extends IService<MarketAwardLog> {
+}

+ 8 - 0
market/src/main/java/com/ruoyi/market/service/impl/MarketAdvertisingAwardServiceImpl.java

@@ -10,6 +10,7 @@ import com.ruoyi.market.service.MarketAdvertisingAwardService;
 import org.springframework.stereotype.Service;
 
 
+import java.util.List;
 import java.util.Objects;
 
 @Service
@@ -25,4 +26,11 @@ public class MarketAdvertisingAwardServiceImpl extends ServiceImpl<MarketAdverti
         queryWrapper.gt(!Objects.isNull(advertisingAwardQueryVo.getCreateTimeEnd()), MarketAdvertisingAward::getCreateTime, advertisingAwardQueryVo.getCreateTimeEnd());
         return this.page(page, queryWrapper);
     }
+
+    @Override
+    public List<MarketAdvertisingAward> getListByAdvertisingId(String advertisingId) {
+        LambdaQueryWrapper<MarketAdvertisingAward>  queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MarketAdvertisingAward::getVideoId,advertisingId);
+        return this.list(queryWrapper);
+    }
 }

+ 58 - 9
market/src/main/java/com/ruoyi/market/service/impl/MarketAwardLibraryServiceImpl.java

@@ -4,20 +4,17 @@ import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.market.domain.MarketAwardLibrary;
-import com.ruoyi.market.domain.MarketDrawActivity;
-import com.ruoyi.market.domain.MarketDrawActivityProbability;
-import com.ruoyi.market.domain.MarketUserDraw;
+import com.ruoyi.common.utils.idgen.IdGenerate;
+import com.ruoyi.market.domain.*;
 import com.ruoyi.market.domain.vo.AwardQueryVo;
 import com.ruoyi.market.mapper.MarketAwardLibraryMapper;
-import com.ruoyi.market.service.MarketAwardLibraryService;
-import com.ruoyi.market.service.MarketDrawActivityProbabilityService;
-import com.ruoyi.market.service.MarketDrawActivityService;
-import com.ruoyi.market.service.MarketUserDrawService;
+import com.ruoyi.market.service.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -35,6 +32,15 @@ public class MarketAwardLibraryServiceImpl extends ServiceImpl<MarketAwardLibrar
     @Autowired
     MarketDrawActivityService marketDrawActivityService;
 
+    @Autowired
+    MarketAwardLogService marketAwardLogService;
+
+    @Autowired
+    MarketAdvertisingAwardService marketAdvertisingAwardService;
+
+    @Autowired
+    MarketAwardLibraryService marketAwardLibraryService;
+
     /**
      * 查询奖品列表
      *
@@ -96,8 +102,16 @@ public class MarketAwardLibraryServiceImpl extends ServiceImpl<MarketAwardLibrar
                 break;
         }
         //添加发放日志记录
+        MarketAwardLog marketAwardLog = new MarketAwardLog();
+        marketAwardLog.setId(IdGenerate.nextId());
+        marketAwardLog.setAwardId(award.getId());
+        marketAwardLog.setUserId(userId);
+        marketAwardLog.setCreateTime(LocalDateTime.now());
+        marketAwardLog.setDistributionStatus("0"); // 已发放
+        marketAwardLog.setWinningMethod("0");  // 抽奖发放
+        marketAwardLogService.save(marketAwardLog);
 
-        return false;
+        return true;
     }
 
     /**
@@ -131,4 +145,39 @@ public class MarketAwardLibraryServiceImpl extends ServiceImpl<MarketAwardLibrar
         }
     }
 
+
+    //广告奖励发放
+    public boolean adsGrantAward(String adId,String userId){
+        List<MarketAdvertisingAward> marketAdvertisingAwards = marketAdvertisingAwardService.getListByAdvertisingId(adId);
+        List<String> awardIds = new ArrayList<>();
+        marketAdvertisingAwards.forEach(x->{
+            awardIds.add(x.getAwardId());
+        });
+        List<MarketAwardLibrary> getAward = marketAwardLibraryService.listByIds(awardIds);
+        getAward.forEach(x->{
+            switch(x.getAwardType()){
+                case 1:
+//                this.redEnvelope(activityId,userId,);
+                    break;
+                case 2:
+                    JSONObject obj = JSONObject.parse(x.getAwardAttr());
+                    String drawActivityId = obj.getString("activityId");
+                    String number = obj.getString("number");
+                    //发放抽奖奖品
+                    this.numberDraws(drawActivityId,userId,Integer.parseInt(number));
+                    break;
+            }
+            MarketAwardLog marketAwardLog = new MarketAwardLog();
+            marketAwardLog.setId(IdGenerate.nextId());
+            marketAwardLog.setAwardId(x.getId());
+            marketAwardLog.setUserId(userId);
+            marketAwardLog.setCreateTime(LocalDateTime.now());
+            marketAwardLog.setDistributionStatus("0"); //已发放
+            marketAwardLog.setWinningMethod("1");   // 看广告发放
+            marketAwardLogService.save(marketAwardLog);
+        });
+        return true;
+    }
+
+
 }

+ 11 - 0
market/src/main/java/com/ruoyi/market/service/impl/MarketAwardLogServiceImpl.java

@@ -0,0 +1,11 @@
+package com.ruoyi.market.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.market.domain.MarketAwardLog;
+import com.ruoyi.market.mapper.MarketAwardLogMapper;
+import com.ruoyi.market.service.MarketAwardLogService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MarketAwardLogServiceImpl extends ServiceImpl<MarketAwardLogMapper, MarketAwardLog> implements MarketAwardLogService {
+}

+ 1 - 1
market/src/main/java/com/ruoyi/market/service/impl/MarketDrawActivityServiceImpl.java

@@ -187,7 +187,7 @@ public class MarketDrawActivityServiceImpl extends ServiceImpl<MarketDrawActivit
         marketUserDrawService.updateById(userDrawNumber);
 
         //发放奖励
-
+        marketAwardLibraryService.grantAward(drawCallBackQueryVo.getDrawActivityId(),drawCallBackQueryVo.getUserId(),drawCallBackQueryVo.getResult());
         return true;
     }
 

+ 14 - 0
pom.xml

@@ -196,6 +196,20 @@
                 <version>1.18.32</version>
             </dependency>
 
+            <!--  hutool -->
+            <dependency>
+                <groupId>cn.hutool</groupId>
+                <artifactId>hutool-all</artifactId>
+                <version>5.7.7</version>
+            </dependency>
+            <!--  http  -->
+            <dependency>
+                <groupId>org.apache.httpcomponents</groupId>
+                <artifactId>httpclient</artifactId>
+                <version>4.5.6</version>
+            </dependency>
+
+
 
         </dependencies>
     </dependencyManagement>

+ 6 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/callback/CallBackController.java

@@ -10,6 +10,7 @@ import com.ruoyi.market.domain.MarketAdvertisingAward;
 import com.ruoyi.market.domain.MarketAdvertisingLog;
 import com.ruoyi.market.domain.vo.AdvertisingBackQueryVo;
 import com.ruoyi.market.domain.vo.DrawCallBackQueryVo;
+import com.ruoyi.market.service.MarketAwardLibraryService;
 import com.ruoyi.market.service.MarketDrawActivityService;
 import com.ruoyi.market.service.MarketAdvertisingAwardService;
 import com.ruoyi.market.service.MarketAdvertisingLogService;
@@ -43,6 +44,9 @@ public class CallBackController{
     @Resource
     private MarketAdvertisingAwardService marketAdvertisingAwardService;
 
+    @Resource
+    private MarketAwardLibraryService marketAwardLibraryService;
+
 
     @ApiOperation("抽奖回调")
     @PostMapping("drawCallback")
@@ -53,7 +57,7 @@ public class CallBackController{
             redisCache.deleteObject(DrawConstants.REDIS_DRAW_ACTIVITY_KEY + drawCallBackVo.getUserId());
             throw new RuntimeException("请求超时");
         }
-        if(!drawCallBackVo.getResult().equals(cacheObject.toString())){
+        if(!drawCallBackVo.getResult().toString().equals(cacheObject.toString())){
             redisCache.deleteObject(DrawConstants.REDIS_DRAW_ACTIVITY_KEY + drawCallBackVo.getUserId());
             throw new RuntimeException("数据异常");
         }
@@ -87,9 +91,7 @@ public class CallBackController{
         redisCache.deleteObject(AdvertisingConstants.REDIS_ADVERTISING_KEY + advertisingBackQueryVo.getUserId());
         //暂时。。。。。
         if (advertisingBackQueryVo.getIsCatOver().equals("1")) {
-            //观看完成 发放广告对应奖励
-            MarketAdvertisingAward marketAdvertisingAward =
-                    marketAdvertisingAwardService.getOne(new LambdaQueryWrapper<MarketAdvertisingAward>().eq(MarketAdvertisingAward::getVideoId, advertisingBackQueryVo.getVideoId()));
+            marketAwardLibraryService.adsGrantAward(advertisingBackQueryVo.getVideoId(), advertisingBackQueryVo.getUserId());
             return AjaxResult.success("奖励已发放");
         }
         return AjaxResult.success("广告已播放");

+ 104 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/wechat/WechatController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.web.controller.wechat;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.market.domain.MarketDrawActivity;
+import com.ruoyi.market.domain.MarketDrawTemplate;
+import com.ruoyi.market.domain.vo.WechatVo;
+import com.ruoyi.market.service.MarketDrawActivityService;
+import com.ruoyi.market.service.MarketDrawTemplateService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.Base64;
+import java.util.concurrent.TimeUnit;
+
+@Api(tags = "微信管理")
+@RestController
+@RequestMapping("/wechat")
+public class WechatController {
+    @Resource
+    private RedisCache redisCache;
+
+    @Resource
+    private MarketDrawActivityService marketDrawActivityService;
+
+    @Resource
+    private MarketDrawTemplateService marketDrawTemplateService;
+
+    private static final String WECHAT_ACCESS_TOKEN_KEY = "access_token";
+
+    public String fetchAccessToken() {
+        String appId = "wxc649c8ca8e3f4e95";
+        String appSecret = "9b7929786aef456716b1a32142cf34bd";
+        String accessTokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appId, appSecret);
+        String response = HttpUtil.get(accessTokenUrl);
+        JSONObject jsonObject = JSON.parseObject(response);
+        return jsonObject.getString("access_token");
+
+    }
+
+    public String getAccessToken() {
+        String accessToken = redisCache.getCacheObject(WECHAT_ACCESS_TOKEN_KEY);
+
+        if (StringUtils.isEmpty(accessToken)) {
+            accessToken = fetchAccessToken();
+            // access_token 有效期为 7200 秒
+            redisCache.setCacheObject(WECHAT_ACCESS_TOKEN_KEY, accessToken, 7000, TimeUnit.SECONDS);
+        }
+        return accessToken;
+    }
+
+    @PostMapping("/getQrCode")
+    @ApiOperation("获取小程序码")
+    public String getQrCode(@RequestBody WechatVo wechatVo) {
+        String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=" + getAccessToken();
+
+        HttpClient httpClient = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost(url);
+
+        // 构建请求参数,这里示意为一个 JSON 格式的请求体
+        JSONObject params = new JSONObject();
+        String sceneValue = wechatVo.getUserId() +' '+ wechatVo.getActivityId();
+        MarketDrawActivity activity = marketDrawActivityService.getById(wechatVo.getActivityId());
+        MarketDrawTemplate template = marketDrawTemplateService.getById(activity.getTemplateId());
+        params.put("path", template.getTemplateAppletPage() + "?userId=" + wechatVo.getUserId() + "&activityId=" + wechatVo.getActivityId()); // 路径
+        try {
+            StringEntity entity = new StringEntity(params.toJSONString(), "UTF-8");
+            httpPost.setEntity(entity);
+            httpPost.setHeader("Content-Type", "application/json");
+
+            HttpResponse response = httpClient.execute(httpPost);
+            HttpEntity responseEntity = response.getEntity();
+
+            if (responseEntity != null) {
+                byte[] bytes = EntityUtils.toByteArray(responseEntity);
+                // 返回 Base64 编码的字符串
+                return Base64.getEncoder().encodeToString(bytes);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            // 处理异常情况
+            return "Failed: " + e.getMessage();
+        }
+
+        return "Failed: Unknown error";
+    }
+
+}

+ 8 - 0
ruoyi-common/pom.xml

@@ -129,6 +129,14 @@
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
         </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.projectlombok</groupId>

+ 1 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -125,6 +125,7 @@ public class SecurityConfig
                         .antMatchers("/callback/**").permitAll()
                         //小程序测试接口
                         .antMatchers("/user/**").permitAll()
+                        .antMatchers("/wechat/**").permitAll()
                     // 除上面外的所有请求全部需要鉴权认证
                     .anyRequest().authenticated();
             })