From aa43a92c7ec9053dbaef92fe5ccb3011b670442c Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 12 七月 2023 11:46:21 +0800
Subject: [PATCH] 更新线上视频奖励模块接口

---
 cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageList.java                                 |    2 
 cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java                               |   56 +
 cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java                    |   10 
 cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideoClassificationListVo.java             |   22 
 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideoClassificationServiceImpl.java |   15 
 cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java                         |    2 
 cloud-server-activity/src/main/java/com/dsh/activity/service/IBenefitsVideoClassificationService.java         |   11 
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/Course.java                     |   48 +
 cloud-server-course/src/main/java/com/dsh/course/entity/TCourse.java                                          |    2 
 cloud-server-account/src/main/java/com/dsh/account/controller/UserIntegralChangesController.java              |   33 +
 cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java           |   28 
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CourseClient.java                     |   21 
 cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideosInfoVo.java                          |   30 +
 cloud-server-account/src/main/java/com/dsh/account/mapper/UserIntegralChangesMapper.java                      |    2 
 cloud-server-competition/src/main/java/com/dsh/competition/service/CompetitionService.java                    |    6 
 cloud-server-competition/src/main/java/com/dsh/CompetitionApplication.java                                    |    2 
 cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserBenefitsVideosMapper.java                     |   11 
 cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml                                      |   10 
 cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideosListVo.java                          |   26 
 cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java           |   40 
 cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java                                     |  144 ++--
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/SaveUserIntegralChangesVo.java |   23 
 cloud-server-activity/src/main/java/com/dsh/activity/service/IUserBenefitsVideosService.java                  |   11 
 cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java                             |   17 
 cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java                         |   16 
 cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java                      |   10 
 cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java    |    4 
 cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java                                    |   11 
 cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/AuthService.java                                  |    2 
 cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/ResultUtil.java                                   |    5 
 cloud-server-competition/src/main/java/com/dsh/competition/util/JuHeUtil.java                                 |   44 +
 cloud-server-activity/src/main/resources/mapper/BenefitsVideoClassificationMapper.xml                         |    6 
 cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java                                       |  144 ++--
 cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java           |   14 
 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserBenefitsVideosServiceImpl.java          |   15 
 cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java                   |  110 +++
 cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideoClassificationMapper.java            |   11 
 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java              |  158 +++++
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/UserIntegralChangesClient.java       |   21 
 cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java                             |  144 ++--
 cloud-server-other/src/main/java/com/dsh/other/entity/Banner.java                                             |   53 +
 cloud-server-other/src/main/java/com/dsh/other/mapper/BannerMapper.java                                       |   11 
 cloud-server-competition/src/main/java/com/dsh/competition/util/TaskUtil.java                                 |   31 +
 cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java                               |   24 
 cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java                       |   44 +
 cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java                          |   21 
 cloud-server-activity/src/main/resources/mapper/UserBenefitsVideosMapper.xml                                  |    6 
 cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideoClassification.java                  |   43 +
 cloud-server-other/src/main/java/com/dsh/other/model/BannerVo.java                                            |   20 
 cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java                            |   15 
 cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml                                      |   28 
 cloud-server-account/src/main/java/com/dsh/account/model/SaveUserIntegralChangesVo.java                       |   23 
 cloud-server-account/src/main/java/com/dsh/account/entity/UserIntegralChanges.java                            |   16 
 cloud-server-competition/src/main/java/com/dsh/competition/model/EditParticipant.java                         |   16 
 cloud-server-activity/src/main/java/com/dsh/activity/entity/UserBenefitsVideos.java                           |   48 +
 55 files changed, 1,424 insertions(+), 262 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/UserIntegralChangesController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/UserIntegralChangesController.java
new file mode 100644
index 0000000..41f6691
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/UserIntegralChangesController.java
@@ -0,0 +1,33 @@
+package com.dsh.account.controller;
+
+import com.dsh.account.model.SaveUserIntegralChangesVo;
+import com.dsh.account.service.UserIntegralChangesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 11:25
+ */
+@RestController
+@RequestMapping("")
+public class UserIntegralChangesController {
+
+    @Autowired
+    private UserIntegralChangesService userIntegralChangesService;
+
+
+    /**
+     * 保存用户积分变动记录
+     * @param vo
+     */
+    @ResponseBody
+    @PostMapping("/userIntegralChanges/saveUserIntegralChanges")
+    public void saveUserIntegralChanges(@RequestBody SaveUserIntegralChangesVo vo){
+        try {
+            userIntegralChangesService.saveUserIntegralChanges(vo);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/UserIntegralChanges.java b/cloud-server-account/src/main/java/com/dsh/account/entity/UserIntegralChanges.java
index 7930442..305748a 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/entity/UserIntegralChanges.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/entity/UserIntegralChanges.java
@@ -1,14 +1,14 @@
 package com.dsh.account.entity;
 
-import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import java.util.Date;
-import com.baomidou.mybatisplus.annotations.TableId;
-import com.baomidou.mybatisplus.activerecord.Model;
-import com.baomidou.mybatisplus.annotations.TableName;
 import java.io.Serializable;
 
-import com.baomidou.mybatisplus.annotations.Version;
 
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -37,26 +37,32 @@
     /**
      * 用户id
      */
+    @TableField("appUserId")
     private Integer appUserId;
     /**
      * 积分类型(1=赠送积分,2=兑换商品,3=完成课后练习,4=观看教学视频)
      */
+    @TableField("type")
     private Integer type;
     /**
      * 历史积分
      */
+    @TableField("oldIntegral")
     private Integer oldIntegral;
     /**
      * 新积分
      */
+    @TableField("newIntegral")
     private Integer newIntegral;
     /**
      * 备注
      */
+    @TableField("remark")
     private String remark;
     /**
      * 添加时间
      */
+    @TableField("insertTime")
     private Date insertTime;
 
 
diff --git a/cloud-server-account/src/main/java/com/dsh/account/mapper/UserIntegralChangesMapper.java b/cloud-server-account/src/main/java/com/dsh/account/mapper/UserIntegralChangesMapper.java
index 5e9a97d..72bff09 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/mapper/UserIntegralChangesMapper.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/mapper/UserIntegralChangesMapper.java
@@ -1,7 +1,7 @@
 package com.dsh.account.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dsh.account.entity.UserIntegralChanges;
-import com.baomidou.mybatisplus.mapper.BaseMapper;
 
 /**
  * <p>
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/SaveUserIntegralChangesVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/SaveUserIntegralChangesVo.java
new file mode 100644
index 0000000..57a33db
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/SaveUserIntegralChangesVo.java
@@ -0,0 +1,23 @@
+package com.dsh.account.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 11:26
+ */
+@Data
+public class SaveUserIntegralChangesVo {
+    /**
+     * 用户id
+     */
+    private Integer appUserId;
+    /**
+     * 积分类型(1=赠送积分,2=兑换商品,3=完成课后练习,4=观看教学视频)
+     */
+    private Integer type;
+    /**
+     * 积分
+     */
+    private Integer integral;
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java b/cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java
index 2e21559..2d1b48a 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java
@@ -1,7 +1,8 @@
 package com.dsh.account.service;
 
-import com.baomidou.mybatisplus.service.IService;
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.dsh.account.entity.UserIntegralChanges;
+import com.dsh.account.model.SaveUserIntegralChangesVo;
 import com.dsh.account.model.vo.userBenefitDetail.IntegralDetailsResponse;
 
 /**
@@ -16,4 +17,11 @@
 
     IntegralDetailsResponse queryUserPointsDetails(String yearMonth, Integer recordId, Integer userIdFormRedis);
 
+
+    /**
+     * 保存用户积分变动
+     * @param vo
+     * @throws Exception
+     */
+    void saveUserIntegralChanges(SaveUserIntegralChangesVo vo) throws Exception;
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java
index 0280cee..309550a 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java
@@ -1,11 +1,12 @@
 package com.dsh.account.service.impl;
 
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dsh.account.entity.TAppUser;
 import com.dsh.account.entity.UserIntegralChanges;
 import com.dsh.account.mapper.TAppUserMapper;
 import com.dsh.account.mapper.UserIntegralChangesMapper;
+import com.dsh.account.model.SaveUserIntegralChangesVo;
 import com.dsh.account.model.vo.userBenefitDetail.IntegralDetailsResponse;
 import com.dsh.account.service.UserIntegralChangesService;
 import com.dsh.account.util.DateTimeHelper;
@@ -49,10 +50,10 @@
             monthStart = DateTimeHelper.getCurrentMouthStart();
             monthEnd = DateTimeHelper.getCurrentMouthEnd();
         }
-        List<UserIntegralChanges> userIntegralChanges = this.baseMapper.selectList(new EntityWrapper<UserIntegralChanges>()
+        List<UserIntegralChanges> userIntegralChanges = this.baseMapper.selectList(new QueryWrapper<UserIntegralChanges>()
                 .eq("appUserId",userIdFormRedis )
                 .between("insertTime",monthStart,monthEnd)
-                .orderBy("insertTime",false));
+                .orderByDesc("insertTime"));
         if (userIntegralChanges.size() > 0 ){
             for (UserIntegralChanges userIntegralChange : userIntegralChanges) {
                 IntegralDetailsResponse.IntegralsData detail= new IntegralDetailsResponse.IntegralsData();
@@ -96,4 +97,23 @@
         }
         return vo;
     }
+
+
+    /**
+     * 保存用户积分变动
+     * @param vo
+     * @throws Exception
+     */
+    @Override
+    public void saveUserIntegralChanges(SaveUserIntegralChangesVo vo) throws Exception {
+        TAppUser appUser = tauMapper.selectById(vo.getAppUserId());
+        UserIntegralChanges userIntegralChanges = new UserIntegralChanges();
+        userIntegralChanges.setAppUserId(vo.getAppUserId());
+        userIntegralChanges.setOldIntegral(appUser.getIntegral());
+        userIntegralChanges.setType(vo.getType());
+        appUser.setIntegral(appUser.getIntegral() + vo.getIntegral());
+        userIntegralChanges.setNewIntegral(appUser.getIntegral());
+        userIntegralChanges.setInsertTime(new Date());
+        this.save(userIntegralChanges);
+    }
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java b/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java
index 2d2a81b..0ffecf3 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java
@@ -41,13 +41,13 @@
  */
 @Component
 public class PayMoneyUtil {
-    private String aliAppid = "";//支付宝appid
+    private String aliAppid = "2021004103650328";//支付宝appid
 
-    private String appPrivateKey = "";//支付宝开发者应用私钥
+    private String appPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCSsBy+F6k1CTL4b0qQssuhf6x2aeqSn2eBmv0mJALK9iqRgA9EG0buYVnV/tsNGYvKCgX56onb+Cv+f9/TShZzp0FVGemIcgPhrjK0WW2RJBMq9EmPzc2x+7SkygKO1H6S3CwWhYdc7TCNL9OnFAHSEa+FfGNWXg0jM0mSXI7/me8icbWZd5mdiLTV+OWx5ONAE0GfVPhUPnb9faunE6gvZCamZnS+H6ACzzidO7ksVkZq5PBsI3Jew2oAcAJSktsljMZNqDrVknzUbvKBXSw80zZD66i5twx8+8els5VLo6qu9PD80l+K430r2eMqxzXm9mRXZSPSxoOm5c+0cNiHAgMBAAECggEAR+EIlJWfkp+JXHecgD88zUx0xCmuil6WJ8o81h27SJ1LyrSHxoXfQhxuGxChYk/sUfqLZyVonGOFm1Yp5a1eRxnkR8FE0FmeUU49Bmbz67VTty6xhUgBzX9by4w5qKezxl8hM4AHDqAjtGuFOU/yfG+yJKUJQF8h7OfK22+DmveglMt+W8buCf+IJahMyxYLWnA5eG8X1KjOC5PnpQEEBBB3g8fJpdbcoUteGGKzGhkSMKXuM//m2T8bU1sNZytnV+rDblg4E9IZIJwhory7WBxDzykEGpbM+RwJ6E6bAp6MXMUKbed1Uf/40d8C5yItWhjUh1a+ZDS0XbsMP+C/IQKBgQDmYhUr5wcqNQHqpKZWd0l/UZyR+Ykjk7WNvWFQIoMZmCWCGcepyQHAdXpk29evgTqcF9v9dlGDc7waFc93L2uxEYOaSk5UK8Sf6yoXHDocKwauY5DDvAuyy2b9QQDNqisi/MN872RaefBILz/DYN2ZbTtp8i/udSaRl01h6EXQfwKBgQCi/5+eIEcQZTa4zhq5CXKKVbcU2Y8uVsM1tgLaxOwQFr0Xd0ckQiJdkN7qhjgeSuOz0BOXo1xovzN4ZIKISB5sZDadgQCZi7O1YeKc8ElLPnV/WfKBGAxSBpURyMUOYH1mno5QG+QiGmTgH0/OhmqWfp+dVWHNwlx0EwMOpCBz+QKBgBRuVlpSXrxLfyQD/gxk/8uevTfk3VieXNd5GAw3Q1EdwRXMm3xfKxyaToRrSrFx0HTPWN8dgxUZSnE1xfRX7EEDwJwKQvAMAZ/9BvqNskmVNz537fqtzovIphWHkj6q/LBZoiyOPmQXtEtyhUEacgyNN1up8r4+/XCj7mTkaGyZAoGBAIx+GG6LE7WmB8yymYX0Bq4Fw5BNFYSzc/7PqxY1teMINmQLg15VQpmzTPCIT8aMdkd+ieSiAfynEQ4sU/ZzcwWqOwj3MDUonPUyMcljs0kPxObH+KYcvEHXOpXhnzgNIwlYkQGriK98YIZtdrRkV2rwKVPLTEm1xUqnOHNeNDrBAoGASnewOvqzZQVnzbGYur7nbEBQaMKWP2IYKozr57+EHQ40QFyTzFUx+jhxnQ2TIoXQEbozNp11eWGm9TZenHxUbOZmAmPKGq5DQzBgwj/V9QPNPpulCEkgjEqIn0gdCNaEilZXTpdsLPxmZ/J9IxGJt+y/5OYhbIwfSS9gbvVEook=";//支付宝开发者应用私钥
 
-    private String alipayPublicKey = "";//支付宝应用公钥
+    private String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwRiMpvwg288WxCwJTBxeqQcFlkZR1p+hZn3/GshrYgRKhGu34IfnRbEnb70YJBq0N1AmdJRU4tYMS1qqFcvKdXnUrdPz+yx4F/uWv+Vz7ftzAEZ1JJh1s9IhJ1ayE4NNWBczj12cIrinUcIHNoITmPFSpcizk9jGnzZZDK4u2oZQEontseu6QyLoc4bBXgy3J1Cux7Q3kO0m3unr0j14PSOAY6kMmgPOyAyuP5Vl655OFJz1x4YDiXs6c+fHLzEZh+Bmm4kCedE7PeJ69xpxSo+i0qia9mhiR4L3LmX7yAzDffHfSQHdxzN0UR34ZF9ChZi/tGOeGABbC35tzGiWWQIDAQAB";//支付宝应用公钥
 
-    private String alipay_public_key = "";//支付宝支付公钥
+    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
 
     private String appid = "";//微信appid
 
@@ -73,83 +73,83 @@
      * 支付宝支付
      */
     public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl){
-        //构造client
-        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
-        //设置网关地址
-        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
-        //设置应用Id
-        certAlipayRequest.setAppId(aliAppid);
-        //设置应用私钥
-        certAlipayRequest.setPrivateKey(appPrivateKey);
-        //设置请求格式,固定值json
-        certAlipayRequest.setFormat("json");
-        //设置字符集
-        certAlipayRequest.setCharset("UTF-8");
-        //设置签名类型
-        certAlipayRequest.setSignType("RSA2");
-        //设置应用公钥证书路径
-        certAlipayRequest.setCertPath(app_cert_path);
-        //设置支付宝公钥证书路径
-        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
-        //设置支付宝根证书路径
-        certAlipayRequest.setRootCertPath(alipay_root_cert_path);
-        //构造client
-        AlipayClient alipayClient = null;
-        try {
-            alipayClient = new DefaultAlipayClient(certAlipayRequest);
-        } catch (AlipayApiException e) {
-            e.printStackTrace();
-        }
-        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
-        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
-        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
-        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
-        model.setBody(body);
-        model.setSubject (subject);
-        model.setOutTradeNo (outTradeNo);
-        model.setTimeoutExpress ("30m" );
-        model.setTotalAmount (amount);
-        model.setProductCode ( "QUICK_MSECURITY_PAY" );
-        model.setPassbackParams(passbackParams);//自定义参数
-        request.setBizModel ( model );
-        request.setNotifyUrl (callbackPath + notifyUrl);
-        try  {
-            //这里和普通的接口调用不同,使用的是sdkExecute
-            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
-            Map<String, String> map = new HashMap<>();
-            map.put("orderString", response.getBody());
-            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
-            return ResultUtil.success(map);
-        }  catch (AlipayApiException e ) {
-            e.printStackTrace();
-        }
-
-
-//        //实例化客户端
-//        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
-//        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
-//        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
-//        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
-//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
-//        model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
-//        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
-//        model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
-//        model.setTimeoutExpress("30m");
-//        model.setTotalAmount(amount);//付款金额
-//        model.setProductCode("QUICK_MSECURITY_PAY");
-//        model.setPassbackParams(passbackParams);//自定义参数
-//        request.setBizModel(model);
-//        request.setNotifyUrl(callbackPath + notifyUrl);
+//        //构造client
+//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
+//        //设置网关地址
+//        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
+//        //设置应用Id
+//        certAlipayRequest.setAppId(aliAppid);
+//        //设置应用私钥
+//        certAlipayRequest.setPrivateKey(appPrivateKey);
+//        //设置请求格式,固定值json
+//        certAlipayRequest.setFormat("json");
+//        //设置字符集
+//        certAlipayRequest.setCharset("UTF-8");
+//        //设置签名类型
+//        certAlipayRequest.setSignType("RSA2");
+//        //设置应用公钥证书路径
+//        certAlipayRequest.setCertPath(app_cert_path);
+//        //设置支付宝公钥证书路径
+//        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
+//        //设置支付宝根证书路径
+//        certAlipayRequest.setRootCertPath(alipay_root_cert_path);
+//        //构造client
+//        AlipayClient alipayClient = null;
 //        try {
+//            alipayClient = new DefaultAlipayClient(certAlipayRequest);
+//        } catch (AlipayApiException e) {
+//            e.printStackTrace();
+//        }
+//        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
+//        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
+//        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
+//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
+//        model.setBody(body);
+//        model.setSubject (subject);
+//        model.setOutTradeNo (outTradeNo);
+//        model.setTimeoutExpress ("30m" );
+//        model.setTotalAmount (amount);
+//        model.setProductCode ( "QUICK_MSECURITY_PAY" );
+//        model.setPassbackParams(passbackParams);//自定义参数
+//        request.setBizModel ( model );
+//        request.setNotifyUrl (callbackPath + notifyUrl);
+//        try  {
 //            //这里和普通的接口调用不同,使用的是sdkExecute
 //            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
 //            Map<String, String> map = new HashMap<>();
 //            map.put("orderString", response.getBody());
 //            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
 //            return ResultUtil.success(map);
-//        } catch (AlipayApiException e) {
+//        }  catch (AlipayApiException e ) {
 //            e.printStackTrace();
 //        }
+
+
+        //实例化客户端
+        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
+        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
+        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
+        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
+        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+        model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
+        model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
+        model.setTimeoutExpress("30m");
+        model.setTotalAmount(amount);//付款金额
+        model.setProductCode("QUICK_MSECURITY_PAY");
+        model.setPassbackParams(passbackParams);//自定义参数
+        request.setBizModel(model);
+        request.setNotifyUrl(callbackPath + notifyUrl);
+        try {
+            //这里和普通的接口调用不同,使用的是sdkExecute
+            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
+            Map<String, String> map = new HashMap<>();
+            map.put("orderString", response.getBody());
+            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
+            return ResultUtil.success(map);
+        } catch (AlipayApiException e) {
+            e.printStackTrace();
+        }
         return null;
     }
 
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java
index 971a10f..8cf32c6 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java
@@ -3,12 +3,19 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.dsh.activity.entity.BenefitsVideos;
+import com.dsh.activity.model.BenefitsVideoClassificationListVo;
+import com.dsh.activity.model.BenefitsVideosInfoVo;
+import com.dsh.activity.model.BenefitsVideosListVo;
 import com.dsh.activity.service.BenefitsVideosService;
+import com.dsh.activity.util.ResultUtil;
+import com.dsh.activity.util.TokenUtil;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-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 org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 @RestController
 @RequestMapping("")
@@ -18,6 +25,10 @@
     @Autowired
     private BenefitsVideosService bfvService;
 
+    @Autowired
+    private TokenUtil tokenUtil;
+
+
 
 
     @PostMapping("base/benefitVideo/getList")
@@ -26,4 +37,95 @@
     }
 
 
+
+
+    @ResponseBody
+    @PostMapping("/api/benefitsVideo/queryClassificationBenefitsVideosList")
+    @ApiOperation(value = "获取视频列表", tags = {"APP-线上课得积分", "APP-看视频得奖励"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "位置(1=线上课得积分,2=看视频得奖励)", name = "position", dataType = "int", required = true),
+            @ApiImplicitParam(value = "搜索内容", name = "search", dataType = "string", required = false),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<List<BenefitsVideoClassificationListVo>> queryClassificationBenefitsVideosList(Integer position, String search){
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if(null == uid){
+                return ResultUtil.tokenErr();
+            }
+            List<BenefitsVideoClassificationListVo> listVos = bfvService.queryClassificationBenefitsVideosList(uid, position, search);
+            return ResultUtil.success(listVos);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+
+    @ResponseBody
+    @PostMapping("/api/benefitsVideo/queryBenefitsVideosList")
+    @ApiOperation(value = "获取视频列表", tags = {"APP-线上课得积分", "APP-看视频得奖励"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "视频分类id", name = "classificationId", dataType = "int", required = true),
+            @ApiImplicitParam(value = "页码,首页1", name = "pageSize", dataType = "int", required = true),
+            @ApiImplicitParam(value = "页条数", name = "pageNo", dataType = "int", required = true),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<List<BenefitsVideosListVo>> queryBenefitsVideosList(Integer classificationId, Integer pageSize, Integer pageNo){
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if(null == uid){
+                return ResultUtil.tokenErr();
+            }
+            List<BenefitsVideosListVo> benefitsVideosListVos = bfvService.queryBenefitsVideosList(uid, classificationId, pageSize, pageNo);
+            return ResultUtil.success(benefitsVideosListVos);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+
+
+    @ResponseBody
+    @PostMapping("/api/benefitsVideo/queryBenefitsVideosInfo")
+    @ApiOperation(value = "获取视频详情", tags = {"APP-线上课得积分", "APP-看视频得奖励"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "视频id", name = "id", dataType = "int", required = true),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil<BenefitsVideosInfoVo> queryBenefitsVideosInfo(Integer id){
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if(null == uid){
+                return ResultUtil.tokenErr();
+            }
+            BenefitsVideosInfoVo benefitsVideosInfoVo = bfvService.queryBenefitsVideosInfo(uid, id);
+            return ResultUtil.success(benefitsVideosInfoVo);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+    @ResponseBody
+    @PostMapping("/api/benefitsVideo/receiveAward")
+    @ApiOperation(value = "观看视频结束后领取奖励", tags = {"APP-线上课得积分", "APP-看视频得奖励"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "视频id", name = "id", dataType = "int", required = true),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResultUtil receiveAward(Integer id) {
+        try {
+            Integer uid = tokenUtil.getUserIdFormRedis();
+            if(null == uid){
+                return ResultUtil.tokenErr();
+            }
+            bfvService.receiveAward(uid, id);
+            return ResultUtil.success();
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideoClassification.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideoClassification.java
new file mode 100644
index 0000000..f1fe293
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideoClassification.java
@@ -0,0 +1,43 @@
+package com.dsh.activity.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:28
+ */
+@Data
+@TableName("t_benefits_video_classification")
+public class BenefitsVideoClassification {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 分类名称
+     */
+    @TableField("name")
+    private String name;
+    /**
+     * 位置(1=线上课得积分,2=看视频得奖励)
+     */
+    @TableField("position")
+    private Integer position;
+    /**
+     * 排序
+     */
+    @TableField("sort")
+    private Integer sort;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java
index b603c57..5246b77 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java
@@ -1,6 +1,7 @@
 package com.dsh.activity.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
@@ -35,34 +36,27 @@
     /**
      * 分类id
      */
+    @TableField("benefitsVideoClassificationId")
     private Integer benefitsVideoClassificationId;
     /**
-     * 视频名称
+     * 课程id
      */
-    private String name;
-    /**
-     * 视频封面
-     */
-    private String cover;
-    /**
-     * 视频简介
-     */
-    private String introduction;
-    /**
-     * 视频地址
-     */
-    private String videos;
+    @TableField("courseId")
+    private Integer courseId;
     /**
      * 可得积分
      */
-    private String integral;
+    @TableField("integral")
+    private Integer integral;
     /**
      * 状态(1=正常,2=冻结,3=删除)
      */
+    @TableField("state")
     private Integer state;
     /**
      * 添加时间
      */
+    @TableField("insertTime")
     private Date insertTime;
 
 
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserBenefitsVideos.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserBenefitsVideos.java
new file mode 100644
index 0000000..251fc00
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserBenefitsVideos.java
@@ -0,0 +1,48 @@
+package com.dsh.activity.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 9:12
+ */
+@Data
+@TableName("t_user_benefits_videos")
+public class UserBenefitsVideos {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+    /**
+     * 用户id
+     */
+    @TableField("appUserId")
+    private Integer appUserId;
+    /**
+     * 分类id
+     */
+    @TableField("benefitsVideoClassificationId")
+    private Integer benefitsVideoClassificationId;
+    /**
+     * 福利视频id
+     */
+    @TableField("benefitsVideosId")
+    private Integer benefitsVideosId;
+    /**
+     * 获取积分
+     */
+    @TableField("integral")
+    private Integer integral;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/UserIntegralChangesClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/UserIntegralChangesClient.java
new file mode 100644
index 0000000..6420526
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/UserIntegralChangesClient.java
@@ -0,0 +1,21 @@
+package com.dsh.activity.feignclient.account;
+
+import com.dsh.activity.feignclient.account.model.SaveUserIntegralChangesVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 11:40
+ */
+@FeignClient("mb-cloud-account")
+public interface UserIntegralChangesClient {
+
+
+    /**
+     * 保存用户积分变动记录
+     * @param vo
+     */
+    @PostMapping("/userIntegralChanges/saveUserIntegralChanges")
+    void saveUserIntegralChanges(SaveUserIntegralChangesVo vo);
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/SaveUserIntegralChangesVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/SaveUserIntegralChangesVo.java
new file mode 100644
index 0000000..c76eebf
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/account/model/SaveUserIntegralChangesVo.java
@@ -0,0 +1,23 @@
+package com.dsh.activity.feignclient.account.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 11:26
+ */
+@Data
+public class SaveUserIntegralChangesVo {
+    /**
+     * 用户id
+     */
+    private Integer appUserId;
+    /**
+     * 积分类型(1=赠送积分,2=兑换商品,3=完成课后练习,4=观看教学视频)
+     */
+    private Integer type;
+    /**
+     * 积分
+     */
+    private Integer integral;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CourseClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CourseClient.java
new file mode 100644
index 0000000..4373a9d
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CourseClient.java
@@ -0,0 +1,21 @@
+package com.dsh.activity.feignclient.course;
+
+import com.dsh.activity.feignclient.course.model.Course;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 9:57
+ */
+@FeignClient("mb-cloud-course")
+public interface CourseClient {
+
+    /**
+     * 根据id获取课程详情
+     * @param id
+     * @return
+     */
+    @PostMapping("/course/queryCourseById")
+    Course queryCourseById(Integer id);
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/Course.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/Course.java
new file mode 100644
index 0000000..0273c7b
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/Course.java
@@ -0,0 +1,48 @@
+package com.dsh.activity.feignclient.course.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 9:58
+ */
+@Data
+public class Course {
+    private Integer id;
+    /**
+     * 课程名称
+     */
+    private String name;
+    /**
+     * 类型(1=课后练习,2=运动教学视频,3=器材教学视频)
+     */
+    private Integer type;
+    /**
+     * 介绍
+     */
+    private String introduce;
+    /**
+     * 封面图
+     */
+    private String coverDrawing;
+    /**
+     * 介绍图
+     */
+    private String introductionDrawing;
+    /**
+     * 课程视频
+     */
+    private String courseVideo;
+    /**
+     * 状态(1=正常,2=冻结,3=删除)
+     */
+    private Integer state;
+    /**
+     * 添加时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date insertTime;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideoClassificationMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideoClassificationMapper.java
new file mode 100644
index 0000000..a7c8261
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideoClassificationMapper.java
@@ -0,0 +1,11 @@
+package com.dsh.activity.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dsh.activity.entity.BenefitsVideoClassification;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:30
+ */
+public interface BenefitsVideoClassificationMapper extends BaseMapper<BenefitsVideoClassification> {
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java
index eaa063c..6d94acb 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java
@@ -1,7 +1,12 @@
 package com.dsh.activity.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.dsh.activity.entity.BenefitsVideos;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -13,4 +18,15 @@
  */
 public interface BenefitsVideosMapper extends BaseMapper<BenefitsVideos> {
 
+
+    /**
+     * 获取福利课程列表
+     * @param uid
+     * @param classificationId
+     * @param pageSize
+     * @param pageNo
+     * @return
+     */
+    List<Map<String, Object>> queryBenefitsVideosList(@Param("uid") Integer uid, @Param("classificationId") Integer classificationId,
+                                                      @Param("pageSize") Integer pageSize, @Param("pageNo") Integer pageNo);
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserBenefitsVideosMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserBenefitsVideosMapper.java
new file mode 100644
index 0000000..fa8ce72
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/UserBenefitsVideosMapper.java
@@ -0,0 +1,11 @@
+package com.dsh.activity.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dsh.activity.entity.UserBenefitsVideos;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 9:14
+ */
+public interface UserBenefitsVideosMapper extends BaseMapper<UserBenefitsVideos> {
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideoClassificationListVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideoClassificationListVo.java
new file mode 100644
index 0000000..67f9692
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideoClassificationListVo.java
@@ -0,0 +1,22 @@
+package com.dsh.activity.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:57
+ */
+@Data
+@ApiModel
+public class BenefitsVideoClassificationListVo {
+    @ApiModelProperty("数据id")
+    private Integer id;
+    @ApiModelProperty("分类名称")
+    private String name;
+    @ApiModelProperty("视频列表")
+    private List<BenefitsVideosListVo> list;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideosInfoVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideosInfoVo.java
new file mode 100644
index 0000000..94886fd
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideosInfoVo.java
@@ -0,0 +1,30 @@
+package com.dsh.activity.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 10:36
+ */
+@Data
+@ApiModel
+public class BenefitsVideosInfoVo {
+    @ApiModelProperty("数据id")
+    private Integer id;
+    @ApiModelProperty("视频名称")
+    private String name;
+    @ApiModelProperty("封面图")
+    private String cover;
+    @ApiModelProperty("视频简介")
+    private String introduce;
+    @ApiModelProperty("视频介绍")
+    private String introductionDrawing;
+    @ApiModelProperty("视频地址")
+    private String courseVideo;
+    @ApiModelProperty("积分")
+    private Integer integral;
+    @ApiModelProperty("学习状态(0=未学习,1=已学习)")
+    private Integer study;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideosListVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideosListVo.java
new file mode 100644
index 0000000..be41431
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVideosListVo.java
@@ -0,0 +1,26 @@
+package com.dsh.activity.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:56
+ */
+@Data
+@ApiModel
+public class BenefitsVideosListVo {
+    @ApiModelProperty("数据id")
+    private Integer id;
+    @ApiModelProperty("视频名称")
+    private String name;
+    @ApiModelProperty("封面图")
+    private String cover;
+    @ApiModelProperty("视频简介")
+    private String introduce;
+    @ApiModelProperty("积分")
+    private Integer integral;
+    @ApiModelProperty("学习状态(0=未学习,1=已学习)")
+    private Integer study;
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java
index 4727bae..b49ec9d 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java
@@ -2,6 +2,11 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.dsh.activity.entity.BenefitsVideos;
+import com.dsh.activity.model.BenefitsVideoClassificationListVo;
+import com.dsh.activity.model.BenefitsVideosInfoVo;
+import com.dsh.activity.model.BenefitsVideosListVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,43 @@
  */
 public interface BenefitsVideosService extends IService<BenefitsVideos> {
 
+
+    /**
+     * 获取福利视频分类列表数据
+     * @param uid
+     * @param search
+     * @return
+     * @throws Exception
+     */
+    List<BenefitsVideoClassificationListVo> queryClassificationBenefitsVideosList(Integer uid, Integer position, String search) throws Exception;
+
+
+    /**
+     * 获取福利视频列表
+     * @param uid
+     * @param classificationId
+     * @param pageSize
+     * @param pageNo
+     * @return
+     * @throws Exception
+     */
+    List<BenefitsVideosListVo> queryBenefitsVideosList(Integer uid, Integer classificationId, Integer pageSize, Integer pageNo) throws Exception;
+
+
+    /**
+     * 获取福利视频详情
+     * @param uid
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    BenefitsVideosInfoVo queryBenefitsVideosInfo(Integer uid, Integer id) throws Exception;
+
+
+    /**
+     * 视频观看完毕后获得奖励
+     * @param id
+     * @throws Exception
+     */
+    void receiveAward(Integer uid, Integer id) throws Exception;
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/IBenefitsVideoClassificationService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/IBenefitsVideoClassificationService.java
new file mode 100644
index 0000000..a6b909d
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/IBenefitsVideoClassificationService.java
@@ -0,0 +1,11 @@
+package com.dsh.activity.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsh.activity.entity.BenefitsVideoClassification;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:31
+ */
+public interface IBenefitsVideoClassificationService extends IService<BenefitsVideoClassification> {
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/IUserBenefitsVideosService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/IUserBenefitsVideosService.java
new file mode 100644
index 0000000..bf1b870
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/IUserBenefitsVideosService.java
@@ -0,0 +1,11 @@
+package com.dsh.activity.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsh.activity.entity.UserBenefitsVideos;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 9:15
+ */
+public interface IUserBenefitsVideosService extends IService<UserBenefitsVideos> {
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideoClassificationServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideoClassificationServiceImpl.java
new file mode 100644
index 0000000..9369d4e
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideoClassificationServiceImpl.java
@@ -0,0 +1,15 @@
+package com.dsh.activity.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.activity.entity.BenefitsVideoClassification;
+import com.dsh.activity.mapper.BenefitsVideoClassificationMapper;
+import com.dsh.activity.service.IBenefitsVideoClassificationService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:31
+ */
+@Service
+public class BenefitsVideoClassificationServiceImpl extends ServiceImpl<BenefitsVideoClassificationMapper, BenefitsVideoClassification> implements IBenefitsVideoClassificationService {
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java
index 1a7dc72..aad419a 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java
@@ -1,10 +1,33 @@
 package com.dsh.activity.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.activity.entity.BenefitsVideoClassification;
 import com.dsh.activity.entity.BenefitsVideos;
+import com.dsh.activity.entity.UserBenefitsVideos;
+import com.dsh.activity.feignclient.account.UserIntegralChangesClient;
+import com.dsh.activity.feignclient.account.model.SaveUserIntegralChangesVo;
+import com.dsh.activity.feignclient.course.CourseClient;
+import com.dsh.activity.feignclient.course.model.Course;
 import com.dsh.activity.mapper.BenefitsVideosMapper;
+import com.dsh.activity.model.BenefitsVideoClassificationListVo;
+import com.dsh.activity.model.BenefitsVideosInfoVo;
+import com.dsh.activity.model.BenefitsVideosListVo;
 import com.dsh.activity.service.BenefitsVideosService;
+import com.dsh.activity.service.IBenefitsVideoClassificationService;
+import com.dsh.activity.service.IUserBenefitsVideosService;
+import com.dsh.activity.util.ToolUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -17,4 +40,139 @@
 @Service
 public class BenefitsVideosServiceImpl extends ServiceImpl<BenefitsVideosMapper, BenefitsVideos> implements BenefitsVideosService {
 
+    @Autowired
+    private IBenefitsVideoClassificationService benefitsVideoClassificationService;
+
+    @Autowired
+    private IUserBenefitsVideosService userBenefitsVideosService;
+
+    @Resource
+    private CourseClient courseClient;
+
+    @Resource
+    private UserIntegralChangesClient userIntegralChangesClient;
+
+
+
+
+
+    /**
+     * 获取福利视频分类列表数据
+     * @param uid
+     * @param search
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<BenefitsVideoClassificationListVo> queryClassificationBenefitsVideosList(Integer uid, Integer position, String search) throws Exception {
+        QueryWrapper<BenefitsVideoClassification> wrapper = new QueryWrapper<BenefitsVideoClassification>().eq("position", position);
+        if(ToolUtil.isNotEmpty(search)){
+            wrapper.like("name", search);
+        }
+        List<BenefitsVideoClassification> list = benefitsVideoClassificationService.list(wrapper.orderByAsc("sort"));
+        List<UserBenefitsVideos> userBenefitsVideos = userBenefitsVideosService.list(new QueryWrapper<UserBenefitsVideos>().eq("appUserId", uid));
+        List<Integer> collect = userBenefitsVideos.stream().map(UserBenefitsVideos::getBenefitsVideosId).collect(Collectors.toList());
+
+        List<BenefitsVideoClassificationListVo> listVos = new ArrayList<>();
+        for (BenefitsVideoClassification benefitsVideoClassification : list) {
+            BenefitsVideoClassificationListVo benefitsVideoClassificationListVo = new BenefitsVideoClassificationListVo();
+            benefitsVideoClassificationListVo.setId(benefitsVideoClassification.getId());
+            benefitsVideoClassificationListVo.setName(benefitsVideoClassification.getName());
+
+            List<BenefitsVideos> list1 = this.list(new QueryWrapper<BenefitsVideos>().eq("state", 1).notIn("id", collect).orderByDesc("insertTime").last(" limit 4"));
+            List<BenefitsVideosListVo> lists = new ArrayList<>();
+            for (BenefitsVideos benefitsVideos : list1) {
+                Integer courseId = benefitsVideos.getCourseId();
+                Course course = courseClient.queryCourseById(courseId);
+                BenefitsVideosListVo benefitsVideosListVo = new BenefitsVideosListVo();
+                benefitsVideosListVo.setId(benefitsVideos.getId());
+                benefitsVideosListVo.setName(course.getName());
+                benefitsVideosListVo.setCover(course.getCoverDrawing());
+                benefitsVideosListVo.setIntroduce(course.getIntroduce());
+                lists.add(benefitsVideosListVo);
+            }
+            benefitsVideoClassificationListVo.setList(lists);
+            listVos.add(benefitsVideoClassificationListVo);
+        }
+        return listVos;
+    }
+
+
+    @Override
+    public List<BenefitsVideosListVo> queryBenefitsVideosList(Integer uid, Integer classificationId, Integer pageSize, Integer pageNo) throws Exception {
+        pageSize = (pageSize - 1) * pageNo;
+        List<Map<String, Object>> benefitsVideos = this.baseMapper.queryBenefitsVideosList(uid, classificationId, pageSize, pageNo);
+        List<BenefitsVideosListVo> lists = new ArrayList<>();
+        for (Map<String, Object> benefitsVideo : benefitsVideos) {
+            Integer id = Integer.valueOf(benefitsVideo.get("id").toString());
+            Integer courseId = Integer.valueOf(benefitsVideo.get("courseId").toString());
+            Integer integral = Integer.valueOf(benefitsVideo.get("integral").toString());
+            Integer study = Integer.valueOf(benefitsVideo.get("study").toString());
+            Course course = courseClient.queryCourseById(courseId);
+            BenefitsVideosListVo benefitsVideosListVo = new BenefitsVideosListVo();
+            benefitsVideosListVo.setId(id);
+            benefitsVideosListVo.setName(course.getName());
+            benefitsVideosListVo.setCover(course.getCoverDrawing());
+            benefitsVideosListVo.setIntroduce(course.getIntroduce());
+            benefitsVideosListVo.setIntegral(integral);
+            benefitsVideosListVo.setStudy(study);
+            lists.add(benefitsVideosListVo);
+        }
+        return lists;
+    }
+
+
+    /**
+     * 获取福利视频详情
+     * @param uid
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public BenefitsVideosInfoVo queryBenefitsVideosInfo(Integer uid, Integer id) throws Exception {
+        BenefitsVideos benefitsVideos = this.getById(id);
+        Integer courseId = benefitsVideos.getCourseId();
+        Course course = courseClient.queryCourseById(courseId);
+        BenefitsVideosInfoVo benefitsVideosInfoVo = new BenefitsVideosInfoVo();
+        benefitsVideosInfoVo.setId(id);
+        benefitsVideosInfoVo.setName(course.getName());
+        benefitsVideosInfoVo.setCover(course.getCoverDrawing());
+        benefitsVideosInfoVo.setIntroduce(course.getIntroduce());
+        benefitsVideosInfoVo.setIntroductionDrawing(course.getIntroductionDrawing());
+        benefitsVideosInfoVo.setCourseVideo(course.getCourseVideo());
+        benefitsVideosInfoVo.setIntegral(benefitsVideos.getIntegral());
+        UserBenefitsVideos one = userBenefitsVideosService.getOne(new QueryWrapper<UserBenefitsVideos>().eq("appUserId", uid).eq("benefitsVideosId", id));
+        benefitsVideosInfoVo.setStudy(null == one ? 0 : 1);
+        return benefitsVideosInfoVo;
+    }
+
+
+    /**
+     * 视频观看完毕后获得奖励
+     * @param uid
+     * @param id
+     * @throws Exception
+     */
+    @Override
+    public void receiveAward(Integer uid, Integer id) throws Exception {
+        BenefitsVideos benefitsVideos = this.getById(id);
+        UserBenefitsVideos one = userBenefitsVideosService.getOne(new QueryWrapper<UserBenefitsVideos>().eq("appUserId", uid).eq("benefitsVideosId", id));
+        if(null == one){
+            one = new UserBenefitsVideos();
+            one.setAppUserId(uid);
+            one.setBenefitsVideoClassificationId(benefitsVideos.getBenefitsVideoClassificationId());
+            one.setBenefitsVideosId(id);
+            one.setInsertTime(new Date());
+            one.setIntegral(benefitsVideos.getIntegral());
+            userBenefitsVideosService.save(one);
+
+            //添加积分
+            SaveUserIntegralChangesVo vo = new SaveUserIntegralChangesVo();
+            vo.setAppUserId(uid);
+            vo.setIntegral(benefitsVideos.getIntegral());
+            vo.setType(4);
+            userIntegralChangesClient.saveUserIntegralChanges(vo);
+        }
+    }
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserBenefitsVideosServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserBenefitsVideosServiceImpl.java
new file mode 100644
index 0000000..7a5eff8
--- /dev/null
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/UserBenefitsVideosServiceImpl.java
@@ -0,0 +1,15 @@
+package com.dsh.activity.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.activity.entity.UserBenefitsVideos;
+import com.dsh.activity.mapper.UserBenefitsVideosMapper;
+import com.dsh.activity.service.IUserBenefitsVideosService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/12 9:15
+ */
+@Service
+public class UserBenefitsVideosServiceImpl extends ServiceImpl<UserBenefitsVideosMapper, UserBenefitsVideos> implements IUserBenefitsVideosService {
+}
diff --git a/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java b/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
index bb66dd0..7e0a34d 100644
--- a/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
+++ b/cloud-server-activity/src/main/java/com/dsh/config/Sharding_jdbc/ShardingConfig.java
@@ -84,6 +84,15 @@
         result2.getKeyGenerators().put("t_user_points_merchandise-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties()));
         linkedList.add(result2);
 
+        //分片规则配置
+        ShardingRuleConfiguration result3 = new ShardingRuleConfiguration();
+        result3.getTables().add(getUserBenefitsVideosTableRuleConfiguration());
+        Properties props3 = new Properties();
+        props3.setProperty("algorithm-expression", "t_user_benefits_videos$->{appUserId % 5 + 1}");
+        result3.getShardingAlgorithms().put("t_user_benefits_videos-inline", new AlgorithmConfiguration("INLINE", props3));
+        result3.getKeyGenerators().put("t_user_benefits_videos-snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties()));
+        linkedList.add(result3);
+
         return linkedList;
     }
 
@@ -111,4 +120,16 @@
         return result;
     }
 
+
+    /**
+     * 分片算法配置
+     * @return
+     */
+    private ShardingTableRuleConfiguration getUserBenefitsVideosTableRuleConfiguration() {
+        ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_user_benefits_videos", "m_$->{0}.t_user_benefits_videos$->{1..5}");//30
+        result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("appUserId", "t_user_benefits_videos-inline"));
+        result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "t_user_benefits_videos-snowflake"));
+        return result;
+    }
+
 }
diff --git a/cloud-server-activity/src/main/resources/mapper/BenefitsVideoClassificationMapper.xml b/cloud-server-activity/src/main/resources/mapper/BenefitsVideoClassificationMapper.xml
new file mode 100644
index 0000000..df28755
--- /dev/null
+++ b/cloud-server-activity/src/main/resources/mapper/BenefitsVideoClassificationMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dsh.activity.mapper.BenefitsVideoClassificationMapper">
+
+
+</mapper>
diff --git a/cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml b/cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml
index 8350761..a89bf74 100644
--- a/cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml
+++ b/cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml
@@ -3,4 +3,32 @@
 <mapper namespace="com.dsh.activity.mapper.BenefitsVideosMapper">
 
 
+    <select id="queryBenefitsVideosList" resultType="map">
+        select * from (
+            (select
+            id,
+            courseId,
+            integral,
+            0 as study
+            from t_benefits_videos where state = 1 and id not in (select benefitsVideosId from t_user_benefits_videos where appUserId = #{uid})
+            <if test="null != classificationId">
+                and benefitsVideoClassificationId = #{classificationId}
+            </if>
+            order by insertTime desc)
+
+            union all
+
+            (select
+            id,
+            courseId,
+            integral,
+            1 as study
+            from t_benefits_videos where state = 1 and id in (select benefitsVideosId from t_user_benefits_videos where appUserId = #{uid})
+            <if test="null != classificationId">
+                and benefitsVideoClassificationId = #{classificationId}
+            </if>
+            order by insertTime desc)
+        ) as a limit #{pageSize}, #{pageNo}
+    </select>
+
 </mapper>
diff --git a/cloud-server-activity/src/main/resources/mapper/UserBenefitsVideosMapper.xml b/cloud-server-activity/src/main/resources/mapper/UserBenefitsVideosMapper.xml
new file mode 100644
index 0000000..860436f
--- /dev/null
+++ b/cloud-server-activity/src/main/resources/mapper/UserBenefitsVideosMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dsh.activity.mapper.UserBenefitsVideosMapper">
+
+
+</mapper>
diff --git a/cloud-server-competition/src/main/java/com/dsh/CompetitionApplication.java b/cloud-server-competition/src/main/java/com/dsh/CompetitionApplication.java
index a5a0ac8..a464f60 100644
--- a/cloud-server-competition/src/main/java/com/dsh/CompetitionApplication.java
+++ b/cloud-server-competition/src/main/java/com/dsh/CompetitionApplication.java
@@ -9,6 +9,7 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Import;
 import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
+import org.springframework.scheduling.annotation.EnableScheduling;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 import javax.annotation.PostConstruct;
@@ -18,6 +19,7 @@
  * @author jason
  */
 @EnableSwagger2
+@EnableScheduling
 @EnableFeignClients
 @MBCloudApplication
 @Import({WebConfig.class})
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java b/cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java
index 69a7c85..f1c1c47 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/mapper/CompetitionMapper.java
@@ -29,4 +29,14 @@
     List<CompetitionListVo> queryCompetitionList(@Param("cityCode") String cityCode, @Param("content") String content,
                                                  @Param("registerCondition") Integer registerCondition, @Param("heat") Integer heat);
 
+
+    /**
+     * 定时任务修改赛事状态
+     */
+    void taskSetStatusStart();
+
+
+
+    void taskSetStatusEnd();
+
 }
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java b/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java
index 6ffed56..4bf4f7b 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java
@@ -59,4 +59,6 @@
     private Integer apply;
     @ApiModelProperty("报名参赛人员")
     private List<ParticipantVo> participant;
+    @ApiModelProperty("状态(1=未开始,2=进行中,3=已结束,4=已取消)")
+    private Integer status;
 }
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/model/EditParticipant.java b/cloud-server-competition/src/main/java/com/dsh/competition/model/EditParticipant.java
index 3bb658e..d7ae2fe 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/model/EditParticipant.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/model/EditParticipant.java
@@ -1,7 +1,10 @@
 package com.dsh.competition.model;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import java.util.Date;
 
 /**
  * @author zhibing.pu
@@ -11,10 +14,19 @@
 public class EditParticipant {
     @ApiModelProperty(value = "数据id", dataType = "int", required = true)
     private Integer id;
-    @ApiModelProperty(value = "身高(CM)", dataType = "int", required = true)
+    @ApiModelProperty(value = "身高(CM)", dataType = "int", required = false)
     private Integer height;
-    @ApiModelProperty(value = "体重(KG)", dataType = "double", required = true)
+    @ApiModelProperty(value = "体重(KG)", dataType = "double", required = false)
     private Double weight;
     @ApiModelProperty(value = "联系电话", dataType = "string", required = false)
     private String phone;
+    @ApiModelProperty(value = "姓名", dataType = "string", required = false)
+    private String name;
+    @ApiModelProperty(value = "生日", dataType = "string", required = false)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date birthday;
+    @ApiModelProperty(value = "性别(1=男,2=女)", dataType = "int", required = false)
+    private Integer gender;
+    @ApiModelProperty(value = "身份证号码", dataType = "string", required = false)
+    private String idcard;
 }
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/CompetitionService.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/CompetitionService.java
index 005e215..570cb53 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/service/CompetitionService.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/CompetitionService.java
@@ -47,4 +47,10 @@
      * @throws Exception
      */
     ResultUtil paymentCompetition(Integer uid, PaymentCompetitionVo paymentCompetitionVo) throws Exception;
+
+
+    /**
+     * 定时任务修改赛事状态
+     */
+    void taskSetStatus();
 }
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
index cae574a..b0f2838 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
@@ -104,16 +104,18 @@
         competitionInfo.setImgs(competition.getImgs());
         competitionInfo.setName(competition.getName());
         competitionInfo.setRegisterCondition(competition.getRegisterCondition());
-        Store store = storeClient.queryStoreById(competition.getStoreId());
-        competitionInfo.setStoreName(store.getName());
-        competitionInfo.setStoreAddress(store.getAddress());
-        competitionInfo.setStoreLon(store.getLon());
-        competitionInfo.setStoreLat(store.getLat());
-        competitionInfo.setStoreCoverDrawing(store.getCoverDrawing());
-        if(ToolUtil.isNotEmpty(lon) && ToolUtil.isNotEmpty(lat)){
-            Map<String, Double> distance = GeodesyUtil.getDistance(lon + "," + lat, store.getLon() + "," + store.getLat());
-            double wgs84 = new BigDecimal(distance.get("WGS84")).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-            competitionInfo.setDistance(wgs84);
+        if(null != competition.getStoreId()){
+            Store store = storeClient.queryStoreById(competition.getStoreId());
+            competitionInfo.setStoreName(store.getName());
+            competitionInfo.setStoreAddress(store.getAddress());
+            competitionInfo.setStoreLon(store.getLon());
+            competitionInfo.setStoreLat(store.getLat());
+            competitionInfo.setStoreCoverDrawing(store.getCoverDrawing());
+            if(ToolUtil.isNotEmpty(lon) && ToolUtil.isNotEmpty(lat)){
+                Map<String, Double> distance = GeodesyUtil.getDistance(lon + "," + lat, store.getLon() + "," + store.getLat());
+                double wgs84 = new BigDecimal(distance.get("WGS84")).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+                competitionInfo.setDistance(wgs84);
+            }
         }
         competitionInfo.setRegisterEndTime(sdf.format(competition.getRegisterEndTime()));
         competitionInfo.setStartTime(sdf.format(competition.getStartTime()));
@@ -127,11 +129,12 @@
         competitionInfo.setIntroduction(competition.getIntroduction());
         competitionInfo.setRegistrationNotes(competition.getRegistrationNotes());
         competitionInfo.setApply(0);
-        PaymentCompetition one = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>().eq("competitionId", id).eq("appUserId", uid).eq("payStatus", 2));
+        competitionInfo.setStatus(competition.getStatus());
+        PaymentCompetition one = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>().eq("competitionId", id).eq("appUserId", uid).ne("payStatus", 1).orderByDesc("insertTime").last(" limit 1"));
         if(null != one){
             competitionInfo.setApply(1);
             List<ParticipantVo> participant = new ArrayList<>();
-            List<UserCompetition> list = userCompetitionService.list(new QueryWrapper<UserCompetition>().eq("competitionId", id).eq("appUserId", uid));
+            List<UserCompetition> list = userCompetitionService.list(new QueryWrapper<UserCompetition>().eq("paymentCompetitionId", one.getId()));
             List<Integer> collect = list.stream().map(UserCompetition::getParticipantId).collect(Collectors.toList());
             List<Participant> participants = participantService.listByIds(collect);
             SimpleDateFormat sdf_year = new SimpleDateFormat("yyyy");
@@ -145,6 +148,9 @@
                 participant.add(participantVo);
             }
             competitionInfo.setParticipant(participant);
+            if(one.getPayStatus() == 3){
+                competitionInfo.setStatus(4);
+            }
         }
         return competitionInfo;
     }
@@ -369,4 +375,14 @@
         }
         return alipay;
     }
+
+
+    /**
+     * 定时任务修改赛事状态
+     */
+    @Override
+    public void taskSetStatus() {
+        this.baseMapper.taskSetStatusStart();
+        this.baseMapper.taskSetStatusEnd();
+    }
 }
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java
index 2e4e589..14bb0d3 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java
@@ -12,6 +12,7 @@
 import com.dsh.competition.model.ParticipantVo;
 import com.dsh.competition.model.SaveParticipant;
 import com.dsh.competition.service.IParticipantService;
+import com.dsh.competition.util.JuHeUtil;
 import com.dsh.competition.util.ResultUtil;
 import com.dsh.competition.util.ToolUtil;
 import org.springframework.beans.BeanUtils;
@@ -53,6 +54,13 @@
         if(null != one){
             return ResultUtil.error("电话号码重复");
         }
+        if(ToolUtil.isNotEmpty(addParticipant.getName()) && ToolUtil.isNotEmpty(addParticipant.getIdcard())){
+            Boolean aBoolean = JuHeUtil.idcardAuthentication(addParticipant.getIdcard(), addParticipant.getName());
+            if(!aBoolean){
+                return ResultUtil.error("身份证和姓名不匹配");
+            }
+        }
+
         Participant participant = new Participant();
         BeanUtils.copyProperties(addParticipant, participant);
         participant.setAppUserId(uid);
@@ -106,6 +114,12 @@
         if(null != one && one.getId().compareTo(editParticipant.getId()) != 0){
             return ResultUtil.error("电话号码重复");
         }
+        if(ToolUtil.isNotEmpty(editParticipant.getName()) && ToolUtil.isNotEmpty(editParticipant.getIdcard())){
+            Boolean aBoolean = JuHeUtil.idcardAuthentication(editParticipant.getIdcard(), editParticipant.getName());
+            if(!aBoolean){
+                return ResultUtil.error("身份证和姓名不匹配");
+            }
+        }
         Participant participant = this.getById(editParticipant.getId());
         participant.setHeight(editParticipant.getHeight());
         participant.setWeight(editParticipant.getWeight());
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java
index 6db453b..c2e3036 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java
@@ -135,6 +135,10 @@
             participant.add(participantVo);
         }
         competitionInfo.setParticipant(participant);
+        competitionInfo.setStatus(competition.getStatus());
+        if(paymentCompetition.getPayStatus() == 3){
+            competitionInfo.setStatus(4);
+        }
         return competitionInfo;
     }
 
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/util/JuHeUtil.java b/cloud-server-competition/src/main/java/com/dsh/competition/util/JuHeUtil.java
new file mode 100644
index 0000000..572ea37
--- /dev/null
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/util/JuHeUtil.java
@@ -0,0 +1,44 @@
+package com.dsh.competition.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.dsh.competition.util.httpClinet.HttpClientUtil;
+import com.dsh.competition.util.httpClinet.HttpResult;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 12:05
+ */
+public class JuHeUtil {
+
+
+    /**
+     * 校验实名认证
+     * @param idcard
+     * @param name
+     * @return
+     * @throws Exception
+     */
+    public static Boolean idcardAuthentication(String idcard, String name) throws Exception{
+        Map<String, Object> params = new HashMap<>();
+        params.put("idcard", idcard);
+        params.put("realname", name);
+        params.put("key", "29fec4bbe3108e4fbf52704e5a906fe0");
+        HttpResult httpResult = HttpClientUtil.pushHttpRequset("POST", "http://op.juhe.cn/idcard/query", params, null, "form");
+        if(httpResult.getCode() != 200){
+            return false;
+        }
+        JSONObject jsonObject = JSON.parseObject(httpResult.getData());
+        Integer error_code = jsonObject.getInteger("error_code");
+        if(0 == error_code){
+            JSONObject result = jsonObject.getJSONObject("result");
+            Integer res = result.getInteger("res");
+            return res == 1 ? true : false;
+        }
+        return false;
+    }
+
+}
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java b/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java
index 5a67746..e2c8a61 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java
@@ -41,13 +41,13 @@
  */
 @Component
 public class PayMoneyUtil {
-    private String aliAppid = "";//支付宝appid
+    private String aliAppid = "2021004103650328";//支付宝appid
 
-    private String appPrivateKey = "";//支付宝开发者应用私钥
+    private String appPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCSsBy+F6k1CTL4b0qQssuhf6x2aeqSn2eBmv0mJALK9iqRgA9EG0buYVnV/tsNGYvKCgX56onb+Cv+f9/TShZzp0FVGemIcgPhrjK0WW2RJBMq9EmPzc2x+7SkygKO1H6S3CwWhYdc7TCNL9OnFAHSEa+FfGNWXg0jM0mSXI7/me8icbWZd5mdiLTV+OWx5ONAE0GfVPhUPnb9faunE6gvZCamZnS+H6ACzzidO7ksVkZq5PBsI3Jew2oAcAJSktsljMZNqDrVknzUbvKBXSw80zZD66i5twx8+8els5VLo6qu9PD80l+K430r2eMqxzXm9mRXZSPSxoOm5c+0cNiHAgMBAAECggEAR+EIlJWfkp+JXHecgD88zUx0xCmuil6WJ8o81h27SJ1LyrSHxoXfQhxuGxChYk/sUfqLZyVonGOFm1Yp5a1eRxnkR8FE0FmeUU49Bmbz67VTty6xhUgBzX9by4w5qKezxl8hM4AHDqAjtGuFOU/yfG+yJKUJQF8h7OfK22+DmveglMt+W8buCf+IJahMyxYLWnA5eG8X1KjOC5PnpQEEBBB3g8fJpdbcoUteGGKzGhkSMKXuM//m2T8bU1sNZytnV+rDblg4E9IZIJwhory7WBxDzykEGpbM+RwJ6E6bAp6MXMUKbed1Uf/40d8C5yItWhjUh1a+ZDS0XbsMP+C/IQKBgQDmYhUr5wcqNQHqpKZWd0l/UZyR+Ykjk7WNvWFQIoMZmCWCGcepyQHAdXpk29evgTqcF9v9dlGDc7waFc93L2uxEYOaSk5UK8Sf6yoXHDocKwauY5DDvAuyy2b9QQDNqisi/MN872RaefBILz/DYN2ZbTtp8i/udSaRl01h6EXQfwKBgQCi/5+eIEcQZTa4zhq5CXKKVbcU2Y8uVsM1tgLaxOwQFr0Xd0ckQiJdkN7qhjgeSuOz0BOXo1xovzN4ZIKISB5sZDadgQCZi7O1YeKc8ElLPnV/WfKBGAxSBpURyMUOYH1mno5QG+QiGmTgH0/OhmqWfp+dVWHNwlx0EwMOpCBz+QKBgBRuVlpSXrxLfyQD/gxk/8uevTfk3VieXNd5GAw3Q1EdwRXMm3xfKxyaToRrSrFx0HTPWN8dgxUZSnE1xfRX7EEDwJwKQvAMAZ/9BvqNskmVNz537fqtzovIphWHkj6q/LBZoiyOPmQXtEtyhUEacgyNN1up8r4+/XCj7mTkaGyZAoGBAIx+GG6LE7WmB8yymYX0Bq4Fw5BNFYSzc/7PqxY1teMINmQLg15VQpmzTPCIT8aMdkd+ieSiAfynEQ4sU/ZzcwWqOwj3MDUonPUyMcljs0kPxObH+KYcvEHXOpXhnzgNIwlYkQGriK98YIZtdrRkV2rwKVPLTEm1xUqnOHNeNDrBAoGASnewOvqzZQVnzbGYur7nbEBQaMKWP2IYKozr57+EHQ40QFyTzFUx+jhxnQ2TIoXQEbozNp11eWGm9TZenHxUbOZmAmPKGq5DQzBgwj/V9QPNPpulCEkgjEqIn0gdCNaEilZXTpdsLPxmZ/J9IxGJt+y/5OYhbIwfSS9gbvVEook=";//支付宝开发者应用私钥
 
-    private String alipayPublicKey = "";//支付宝应用公钥
+    private String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwRiMpvwg288WxCwJTBxeqQcFlkZR1p+hZn3/GshrYgRKhGu34IfnRbEnb70YJBq0N1AmdJRU4tYMS1qqFcvKdXnUrdPz+yx4F/uWv+Vz7ftzAEZ1JJh1s9IhJ1ayE4NNWBczj12cIrinUcIHNoITmPFSpcizk9jGnzZZDK4u2oZQEontseu6QyLoc4bBXgy3J1Cux7Q3kO0m3unr0j14PSOAY6kMmgPOyAyuP5Vl655OFJz1x4YDiXs6c+fHLzEZh+Bmm4kCedE7PeJ69xpxSo+i0qia9mhiR4L3LmX7yAzDffHfSQHdxzN0UR34ZF9ChZi/tGOeGABbC35tzGiWWQIDAQAB";//支付宝应用公钥
 
-    private String alipay_public_key = "";//支付宝支付公钥
+    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
 
     private String appid = "";//微信appid
 
@@ -73,83 +73,83 @@
      * 支付宝支付
      */
     public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl){
-        //构造client
-        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
-        //设置网关地址
-        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
-        //设置应用Id
-        certAlipayRequest.setAppId(aliAppid);
-        //设置应用私钥
-        certAlipayRequest.setPrivateKey(appPrivateKey);
-        //设置请求格式,固定值json
-        certAlipayRequest.setFormat("json");
-        //设置字符集
-        certAlipayRequest.setCharset("UTF-8");
-        //设置签名类型
-        certAlipayRequest.setSignType("RSA2");
-        //设置应用公钥证书路径
-        certAlipayRequest.setCertPath(app_cert_path);
-        //设置支付宝公钥证书路径
-        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
-        //设置支付宝根证书路径
-        certAlipayRequest.setRootCertPath(alipay_root_cert_path);
-        //构造client
-        AlipayClient alipayClient = null;
-        try {
-            alipayClient = new DefaultAlipayClient(certAlipayRequest);
-        } catch (AlipayApiException e) {
-            e.printStackTrace();
-        }
-        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
-        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
-        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
-        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
-        model.setBody(body);
-        model.setSubject (subject);
-        model.setOutTradeNo (outTradeNo);
-        model.setTimeoutExpress ("30m" );
-        model.setTotalAmount (amount);
-        model.setProductCode ( "QUICK_MSECURITY_PAY" );
-        model.setPassbackParams(passbackParams);//自定义参数
-        request.setBizModel ( model );
-        request.setNotifyUrl (callbackPath + notifyUrl);
-        try  {
-            //这里和普通的接口调用不同,使用的是sdkExecute
-            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
-            Map<String, String> map = new HashMap<>();
-            map.put("orderString", response.getBody());
-            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
-            return ResultUtil.success(map);
-        }  catch (AlipayApiException e ) {
-            e.printStackTrace();
-        }
-
-
-//        //实例化客户端
-//        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
-//        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
-//        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
-//        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
-//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
-//        model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
-//        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
-//        model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
-//        model.setTimeoutExpress("30m");
-//        model.setTotalAmount(amount);//付款金额
-//        model.setProductCode("QUICK_MSECURITY_PAY");
-//        model.setPassbackParams(passbackParams);//自定义参数
-//        request.setBizModel(model);
-//        request.setNotifyUrl(callbackPath + notifyUrl);
+//        //构造client
+//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
+//        //设置网关地址
+//        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
+//        //设置应用Id
+//        certAlipayRequest.setAppId(aliAppid);
+//        //设置应用私钥
+//        certAlipayRequest.setPrivateKey(appPrivateKey);
+//        //设置请求格式,固定值json
+//        certAlipayRequest.setFormat("json");
+//        //设置字符集
+//        certAlipayRequest.setCharset("UTF-8");
+//        //设置签名类型
+//        certAlipayRequest.setSignType("RSA2");
+//        //设置应用公钥证书路径
+//        certAlipayRequest.setCertPath(app_cert_path);
+//        //设置支付宝公钥证书路径
+//        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
+//        //设置支付宝根证书路径
+//        certAlipayRequest.setRootCertPath(alipay_root_cert_path);
+//        //构造client
+//        AlipayClient alipayClient = null;
 //        try {
+//            alipayClient = new DefaultAlipayClient(certAlipayRequest);
+//        } catch (AlipayApiException e) {
+//            e.printStackTrace();
+//        }
+//        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
+//        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
+//        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
+//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
+//        model.setBody(body);
+//        model.setSubject (subject);
+//        model.setOutTradeNo (outTradeNo);
+//        model.setTimeoutExpress ("30m" );
+//        model.setTotalAmount (amount);
+//        model.setProductCode ( "QUICK_MSECURITY_PAY" );
+//        model.setPassbackParams(passbackParams);//自定义参数
+//        request.setBizModel ( model );
+//        request.setNotifyUrl (callbackPath + notifyUrl);
+//        try  {
 //            //这里和普通的接口调用不同,使用的是sdkExecute
 //            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
 //            Map<String, String> map = new HashMap<>();
 //            map.put("orderString", response.getBody());
 //            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
 //            return ResultUtil.success(map);
-//        } catch (AlipayApiException e) {
+//        }  catch (AlipayApiException e ) {
 //            e.printStackTrace();
 //        }
+
+
+        //实例化客户端
+        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
+        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
+        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
+        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
+        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+        model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
+        model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
+        model.setTimeoutExpress("30m");
+        model.setTotalAmount(amount);//付款金额
+        model.setProductCode("QUICK_MSECURITY_PAY");
+        model.setPassbackParams(passbackParams);//自定义参数
+        request.setBizModel(model);
+        request.setNotifyUrl(callbackPath + notifyUrl);
+        try {
+            //这里和普通的接口调用不同,使用的是sdkExecute
+            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
+            Map<String, String> map = new HashMap<>();
+            map.put("orderString", response.getBody());
+            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
+            return ResultUtil.success(map);
+        } catch (AlipayApiException e) {
+            e.printStackTrace();
+        }
         return null;
     }
 
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/util/TaskUtil.java b/cloud-server-competition/src/main/java/com/dsh/competition/util/TaskUtil.java
new file mode 100644
index 0000000..73a09f3
--- /dev/null
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/util/TaskUtil.java
@@ -0,0 +1,31 @@
+package com.dsh.competition.util;
+
+import com.dsh.competition.service.CompetitionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 8:39
+ */
+@Component
+public class TaskUtil {
+
+    @Autowired
+    private CompetitionService competitionService;
+
+
+    /**
+     * 每隔一分钟去处理的定时任务
+     */
+    @Scheduled(fixedRate = 60000)
+    public void taskMinute(){
+        try {
+            //定时修改赛事状态
+            competitionService.taskSetStatus();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml b/cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml
index df40070..dad9994 100644
--- a/cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml
+++ b/cloud-server-competition/src/main/resources/mapper/CompetitionMapper.xml
@@ -35,4 +35,14 @@
             order by aa.heat desc
         </if>
     </select>
+
+
+    <update id="taskSetStatusStart">
+        update t_competition set status = 2 where status = 1 and state = 1 and auditStatus = 2 and now() between startTime and endTime
+    </update>
+
+
+    <update id="taskSetStatusEnd">
+        update t_competition set status = 3 where status = 2 and state = 1 and auditStatus = 2 and now() >= endTime
+    </update>
 </mapper>
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
index a6579c8..30ff749 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
@@ -242,4 +242,21 @@
             e.printStackTrace();
         }
     }
+
+
+    /**
+     * 根据id获取课程数据
+     * @param id
+     * @return
+     */
+    @ResponseBody
+    @PostMapping("/course/queryCourseById")
+    public TCourse queryCourseById(@RequestBody Integer id){
+        try {
+            return courseService.getById(id);
+        }catch (Exception e){
+            e.printStackTrace();
+            return null;
+        }
+    }
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCourse.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCourse.java
index c499789..f29e090 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCourse.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCourse.java
@@ -5,6 +5,7 @@
 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 lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -70,6 +71,7 @@
      * 添加时间
      */
     @TableField("insertTime")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date insertTime;
 
 
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageList.java b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageList.java
index 847cb56..bd9c817 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageList.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/CoursePackageList.java
@@ -17,7 +17,7 @@
     private String lat;
     @ApiModelProperty(value = "课程类型id", dataType = "int", required = false)
     private Integer coursePackageTypeId;
-    @ApiModelProperty(value = "门店id", dataType = "int", required = false)
+    @ApiModelProperty(value = "门店id", dataType = "int", required = true)
     private Integer storeId;
     @ApiModelProperty(value = "搜索内容", dataType = "string", required = false)
     private String search;
diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java b/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
index 39debe3..656bdf7 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
@@ -42,13 +42,13 @@
  */
 @Component
 public class PayMoneyUtil {
-    private String aliAppid = "";//支付宝appid
+    private String aliAppid = "2021004103650328";//支付宝appid
 
-    private String appPrivateKey = "";//支付宝开发者应用私钥
+    private String appPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCSsBy+F6k1CTL4b0qQssuhf6x2aeqSn2eBmv0mJALK9iqRgA9EG0buYVnV/tsNGYvKCgX56onb+Cv+f9/TShZzp0FVGemIcgPhrjK0WW2RJBMq9EmPzc2x+7SkygKO1H6S3CwWhYdc7TCNL9OnFAHSEa+FfGNWXg0jM0mSXI7/me8icbWZd5mdiLTV+OWx5ONAE0GfVPhUPnb9faunE6gvZCamZnS+H6ACzzidO7ksVkZq5PBsI3Jew2oAcAJSktsljMZNqDrVknzUbvKBXSw80zZD66i5twx8+8els5VLo6qu9PD80l+K430r2eMqxzXm9mRXZSPSxoOm5c+0cNiHAgMBAAECggEAR+EIlJWfkp+JXHecgD88zUx0xCmuil6WJ8o81h27SJ1LyrSHxoXfQhxuGxChYk/sUfqLZyVonGOFm1Yp5a1eRxnkR8FE0FmeUU49Bmbz67VTty6xhUgBzX9by4w5qKezxl8hM4AHDqAjtGuFOU/yfG+yJKUJQF8h7OfK22+DmveglMt+W8buCf+IJahMyxYLWnA5eG8X1KjOC5PnpQEEBBB3g8fJpdbcoUteGGKzGhkSMKXuM//m2T8bU1sNZytnV+rDblg4E9IZIJwhory7WBxDzykEGpbM+RwJ6E6bAp6MXMUKbed1Uf/40d8C5yItWhjUh1a+ZDS0XbsMP+C/IQKBgQDmYhUr5wcqNQHqpKZWd0l/UZyR+Ykjk7WNvWFQIoMZmCWCGcepyQHAdXpk29evgTqcF9v9dlGDc7waFc93L2uxEYOaSk5UK8Sf6yoXHDocKwauY5DDvAuyy2b9QQDNqisi/MN872RaefBILz/DYN2ZbTtp8i/udSaRl01h6EXQfwKBgQCi/5+eIEcQZTa4zhq5CXKKVbcU2Y8uVsM1tgLaxOwQFr0Xd0ckQiJdkN7qhjgeSuOz0BOXo1xovzN4ZIKISB5sZDadgQCZi7O1YeKc8ElLPnV/WfKBGAxSBpURyMUOYH1mno5QG+QiGmTgH0/OhmqWfp+dVWHNwlx0EwMOpCBz+QKBgBRuVlpSXrxLfyQD/gxk/8uevTfk3VieXNd5GAw3Q1EdwRXMm3xfKxyaToRrSrFx0HTPWN8dgxUZSnE1xfRX7EEDwJwKQvAMAZ/9BvqNskmVNz537fqtzovIphWHkj6q/LBZoiyOPmQXtEtyhUEacgyNN1up8r4+/XCj7mTkaGyZAoGBAIx+GG6LE7WmB8yymYX0Bq4Fw5BNFYSzc/7PqxY1teMINmQLg15VQpmzTPCIT8aMdkd+ieSiAfynEQ4sU/ZzcwWqOwj3MDUonPUyMcljs0kPxObH+KYcvEHXOpXhnzgNIwlYkQGriK98YIZtdrRkV2rwKVPLTEm1xUqnOHNeNDrBAoGASnewOvqzZQVnzbGYur7nbEBQaMKWP2IYKozr57+EHQ40QFyTzFUx+jhxnQ2TIoXQEbozNp11eWGm9TZenHxUbOZmAmPKGq5DQzBgwj/V9QPNPpulCEkgjEqIn0gdCNaEilZXTpdsLPxmZ/J9IxGJt+y/5OYhbIwfSS9gbvVEook=";//支付宝开发者应用私钥
 
-    private String alipayPublicKey = "";//支付宝应用公钥
+    private String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwRiMpvwg288WxCwJTBxeqQcFlkZR1p+hZn3/GshrYgRKhGu34IfnRbEnb70YJBq0N1AmdJRU4tYMS1qqFcvKdXnUrdPz+yx4F/uWv+Vz7ftzAEZ1JJh1s9IhJ1ayE4NNWBczj12cIrinUcIHNoITmPFSpcizk9jGnzZZDK4u2oZQEontseu6QyLoc4bBXgy3J1Cux7Q3kO0m3unr0j14PSOAY6kMmgPOyAyuP5Vl655OFJz1x4YDiXs6c+fHLzEZh+Bmm4kCedE7PeJ69xpxSo+i0qia9mhiR4L3LmX7yAzDffHfSQHdxzN0UR34ZF9ChZi/tGOeGABbC35tzGiWWQIDAQAB";//支付宝应用公钥
 
-    private String alipay_public_key = "";//支付宝支付公钥
+    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
 
     private String appid = "";//微信appid
 
@@ -74,83 +74,83 @@
      * 支付宝支付
      */
     public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl){
-        //构造client
-        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
-        //设置网关地址
-        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
-        //设置应用Id
-        certAlipayRequest.setAppId(aliAppid);
-        //设置应用私钥
-        certAlipayRequest.setPrivateKey(appPrivateKey);
-        //设置请求格式,固定值json
-        certAlipayRequest.setFormat("json");
-        //设置字符集
-        certAlipayRequest.setCharset("UTF-8");
-        //设置签名类型
-        certAlipayRequest.setSignType("RSA2");
-        //设置应用公钥证书路径
-        certAlipayRequest.setCertPath(app_cert_path);
-        //设置支付宝公钥证书路径
-        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
-        //设置支付宝根证书路径
-        certAlipayRequest.setRootCertPath(alipay_root_cert_path);
-        //构造client
-        AlipayClient alipayClient = null;
-        try {
-            alipayClient = new DefaultAlipayClient(certAlipayRequest);
-        } catch (AlipayApiException e) {
-            e.printStackTrace();
-        }
-        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
-        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
-        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
-        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
-        model.setBody(body);
-        model.setSubject (subject);
-        model.setOutTradeNo (outTradeNo);
-        model.setTimeoutExpress ("30m" );
-        model.setTotalAmount (amount);
-        model.setProductCode ( "QUICK_MSECURITY_PAY" );
-        model.setPassbackParams(passbackParams);//自定义参数
-        request.setBizModel ( model );
-        request.setNotifyUrl (callbackPath + notifyUrl);
-        try  {
-            //这里和普通的接口调用不同,使用的是sdkExecute
-            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
-            Map<String, String> map = new HashMap<>();
-            map.put("orderString", response.getBody());
-            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
-            return ResultUtil.success(map);
-        }  catch (AlipayApiException e ) {
-            e.printStackTrace();
-        }
-
-
-//        //实例化客户端
-//        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
-//        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
-//        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
-//        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
-//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
-//        model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
-//        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
-//        model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
-//        model.setTimeoutExpress("30m");
-//        model.setTotalAmount(amount);//付款金额
-//        model.setProductCode("QUICK_MSECURITY_PAY");
-//        model.setPassbackParams(passbackParams);//自定义参数
-//        request.setBizModel(model);
-//        request.setNotifyUrl(callbackPath + notifyUrl);
+//        //构造client
+//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
+//        //设置网关地址
+//        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
+//        //设置应用Id
+//        certAlipayRequest.setAppId(aliAppid);
+//        //设置应用私钥
+//        certAlipayRequest.setPrivateKey(appPrivateKey);
+//        //设置请求格式,固定值json
+//        certAlipayRequest.setFormat("json");
+//        //设置字符集
+//        certAlipayRequest.setCharset("UTF-8");
+//        //设置签名类型
+//        certAlipayRequest.setSignType("RSA2");
+//        //设置应用公钥证书路径
+//        certAlipayRequest.setCertPath(app_cert_path);
+//        //设置支付宝公钥证书路径
+//        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
+//        //设置支付宝根证书路径
+//        certAlipayRequest.setRootCertPath(alipay_root_cert_path);
+//        //构造client
+//        AlipayClient alipayClient = null;
 //        try {
+//            alipayClient = new DefaultAlipayClient(certAlipayRequest);
+//        } catch (AlipayApiException e) {
+//            e.printStackTrace();
+//        }
+//        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
+//        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
+//        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
+//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
+//        model.setBody(body);
+//        model.setSubject (subject);
+//        model.setOutTradeNo (outTradeNo);
+//        model.setTimeoutExpress ("30m" );
+//        model.setTotalAmount (amount);
+//        model.setProductCode ( "QUICK_MSECURITY_PAY" );
+//        model.setPassbackParams(passbackParams);//自定义参数
+//        request.setBizModel ( model );
+//        request.setNotifyUrl (callbackPath + notifyUrl);
+//        try  {
 //            //这里和普通的接口调用不同,使用的是sdkExecute
 //            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
 //            Map<String, String> map = new HashMap<>();
 //            map.put("orderString", response.getBody());
 //            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
 //            return ResultUtil.success(map);
-//        } catch (AlipayApiException e) {
+//        }  catch (AlipayApiException e ) {
 //            e.printStackTrace();
 //        }
+
+
+        //实例化客户端
+        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
+        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
+        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
+        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
+        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+        model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
+        model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
+        model.setTimeoutExpress("30m");
+        model.setTotalAmount(amount);//付款金额
+        model.setProductCode("QUICK_MSECURITY_PAY");
+        model.setPassbackParams(passbackParams);//自定义参数
+        request.setBizModel(model);
+        request.setNotifyUrl(callbackPath + notifyUrl);
+        try {
+            //这里和普通的接口调用不同,使用的是sdkExecute
+            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
+            Map<String, String> map = new HashMap<>();
+            map.put("orderString", response.getBody());
+            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
+            return ResultUtil.success(map);
+        } catch (AlipayApiException e) {
+            e.printStackTrace();
+        }
         return null;
     }
 
diff --git a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/AuthService.java b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/AuthService.java
index 3c84935..b1aba3f 100644
--- a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/AuthService.java
+++ b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/AuthService.java
@@ -40,7 +40,7 @@
 
 			// 签名无 not sign
 			if (StringUtils.isBlank(sign) || !sign.equals(signUrlEncode)) {
-				return ResultUtil.sign();
+				return ResultUtil.sign(signUrl);
 			}
 		} catch (Exception e) {
 			e.printStackTrace();
diff --git a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/ResultUtil.java b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/ResultUtil.java
index 6894e2f..3a54146 100644
--- a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/ResultUtil.java
+++ b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/auth/ResultUtil.java
@@ -182,4 +182,9 @@
         return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN);
     }
 
+
+    public static <T> ResultUtil<T> sign(String msg){
+        return ResultUtil.getResult(ResultUtil.SIGN_ERROR, msg);
+    }
+
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java
new file mode 100644
index 0000000..f4d73c3
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java
@@ -0,0 +1,56 @@
+package com.dsh.other.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.dsh.other.entity.Banner;
+import com.dsh.other.model.BannerVo;
+import com.dsh.other.service.IBannerService;
+import com.dsh.other.util.ResultUtil;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:48
+ */
+@RestController
+@RequestMapping("")
+public class BannerController {
+
+    @Autowired
+    private IBannerService bannerService;
+
+
+
+
+    @ResponseBody
+    @PostMapping("/base/banner/queryBannerList")
+    @ApiOperation(value = "获取banner数据", tags = {"APP-加入玩湃"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "位置(1=首页,2=首页底部,3=线上课得积分,4=看视频得奖励,5=常见问题)", name = "position", dataType = "int", required = true),
+    })
+    public ResultUtil<List<BannerVo>> queryBannerList(Integer position){
+        try {
+            List<Banner> list = bannerService.list(new QueryWrapper<Banner>().eq("position", position).eq("state", 1).orderByAsc("sort"));
+            List<BannerVo> list1 = new ArrayList<>();
+            for (Banner banner : list) {
+                BannerVo bannerVo = new BannerVo();
+                BeanUtils.copyProperties(banner, bannerVo);
+                list1.add(bannerVo);
+            }
+            return ResultUtil.success(list1);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/Banner.java b/cloud-server-other/src/main/java/com/dsh/other/entity/Banner.java
new file mode 100644
index 0000000..a664590
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/entity/Banner.java
@@ -0,0 +1,53 @@
+package com.dsh.other.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:35
+ */
+@Data
+@TableName("t_banner")
+public class Banner {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 位置(1=首页,2=首页底部,3=线上课得积分,4=看视频得奖励,5=常见问题)
+     */
+    @TableField("position")
+    private Integer position;
+    /**
+     * 图片地址
+     */
+    @TableField("img")
+    private String img;
+    /**
+     * 跳转页面
+     */
+    @TableField("jumpPage")
+    private String jumpPage;
+    /**
+     * 排序
+     */
+    @TableField("sort")
+    private Integer sort;
+    /**
+     * 状态(1=正常,2=冻结,3=删除)
+     */
+    @TableField("state")
+    private Integer state;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/mapper/BannerMapper.java b/cloud-server-other/src/main/java/com/dsh/other/mapper/BannerMapper.java
new file mode 100644
index 0000000..0f3cbeb
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/mapper/BannerMapper.java
@@ -0,0 +1,11 @@
+package com.dsh.other.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dsh.other.entity.Banner;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:46
+ */
+public interface BannerMapper extends BaseMapper<Banner> {
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/BannerVo.java b/cloud-server-other/src/main/java/com/dsh/other/model/BannerVo.java
new file mode 100644
index 0000000..bb95ea3
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/BannerVo.java
@@ -0,0 +1,20 @@
+package com.dsh.other.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:50
+ */
+@Data
+@ApiModel
+public class BannerVo {
+    @ApiModelProperty("数据id")
+    private Integer id;
+    @ApiModelProperty("图片路径")
+    private String img;
+    @ApiModelProperty("跳转页面")
+    private String jumpPage;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java b/cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java
new file mode 100644
index 0000000..cf7c7d5
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java
@@ -0,0 +1,11 @@
+package com.dsh.other.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsh.other.entity.Banner;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:47
+ */
+public interface IBannerService extends IService<Banner> {
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java
new file mode 100644
index 0000000..7982499
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java
@@ -0,0 +1,15 @@
+package com.dsh.other.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.other.entity.Banner;
+import com.dsh.other.mapper.BannerMapper;
+import com.dsh.other.service.IBannerService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 17:47
+ */
+@Service
+public class BannerServiceImpl extends ServiceImpl<BannerMapper, Banner> implements IBannerService {
+}

--
Gitblit v1.7.1