hjl
2024-05-22 883d04c8d038ba0e45c1630f760f4aa642286f45
feat: 微信分享更改;接口返回更改;接口参数描述
14个文件已修改
1个文件已添加
322 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/factory/TManagementFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/feignClient/ManagementClient.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TSysSet.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TSysSetController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TSysSet.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/CompleteStudyDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserShareMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserShareService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserShareServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserShareMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/factory/TManagementFallbackFactory.java
@@ -4,6 +4,7 @@
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.management.api.feignClient.ManagementClient;
import com.ruoyi.management.api.model.TFeedback;
import com.ruoyi.management.api.model.TSysSet;
import com.ruoyi.management.api.model.TUseGuide;
import com.ruoyi.management.api.model.TVipSet;
import com.ruoyi.management.api.query.UseGuideQuery;
@@ -54,6 +55,11 @@
            }
            @Override
            public R<TSysSet> shareInfo() {
                return R.fail("获取分享信息失败"+cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/feignClient/ManagementClient.java
@@ -4,13 +4,11 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.management.api.factory.TManagementFallbackFactory;
import com.ruoyi.management.api.model.TFeedback;
import com.ruoyi.management.api.model.TPage;
import com.ruoyi.management.api.model.TUseGuide;
import com.ruoyi.management.api.model.TVipSet;
import com.ruoyi.management.api.model.*;
import com.ruoyi.management.api.query.UseGuideQuery;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -35,4 +33,13 @@
    @PostMapping("/tSysSet/agreement1/{type}")
    R<String> agreement1(@PathVariable("type") Integer type);
    /**
     * 获取分享图片、标题及可获积分数
     *
     * @return 获取分享图片、标题及可获积分数
     */
    @GetMapping("/tSysSet/shareInfo")
    @ApiOperation(value = "获取分享图片、标题及可获积分数", tags = {"获取分享图片、标题及可获积分数"})
    R<TSysSet> shareInfo();
}
ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TSysSet.java
New file
@@ -0,0 +1,60 @@
package com.ruoyi.management.api.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.web.domain.BaseModel;
import lombok.Data;
/**
 * <p>
 * 系统设置
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
@TableName("t_sys_set")
@Data
public class TSysSet extends BaseModel {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 客服电话 多个逗号隔开
     */
    private String phone;
    /**
     * 分享设置 标题
     */
    private String title;
    /**
     * 分享设置 图片
     */
    private String img;
    /**
     * 音效设置 正确
     */
    private String correct;
    /**
     * 音效设置 错误
     */
    private String error;
    /**
     * 积分设置 每在线x分钟
     */
    private String time;
    /**
     * 积分设置 可获积分
     */
    private String integral;
    /**
     * 分享可获得积分
     */
    private String integralShare;
}
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TSysSetController.java
@@ -177,5 +177,12 @@
        useGuideService.removeById(id);
        return AjaxResult.success("删除成功");
    }
    @GetMapping("/shareInfo")
    @ApiOperation(value = "获取分享图片、标题及可获积分数", tags = {"获取分享图片、标题及可获积分数"})
    public R<TSysSet> shareInfo() {
        return R.ok(sysSetService.lambdaQuery().one());
    }
}
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TSysSet.java
@@ -53,4 +53,8 @@
     * 积分设置 可获积分
     */
    private String integral;
    /**
     * 分享可获得积分
     */
    private String integralShare;
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
@@ -943,7 +943,7 @@
     * @param completeStudy 完成学习信息
     */
    @PostMapping("/completeLearning")
    @ApiOperation(value = "完成学习", tags = {"完成学习"})
    @ApiOperation(value = "完成学习", tags = {"完成学习/其他积分来源(分享...)"})
    public AjaxResult<Boolean> completeLearning(@RequestBody CompleteStudyDTO completeStudy) {
        // 登录用户id
        Integer userId = tokenService.getLoginUserStudy().getUserid();
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
@@ -12,17 +12,16 @@
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.management.api.feignClient.ManagementClient;
import com.ruoyi.management.api.model.TFeedback;
import com.ruoyi.management.api.model.TPage;
import com.ruoyi.management.api.model.TUseGuide;
import com.ruoyi.management.api.model.TVipSet;
import com.ruoyi.management.api.model.*;
import com.ruoyi.management.api.query.UseGuideQuery;
import com.ruoyi.study.domain.TUser;
import com.ruoyi.study.domain.TUserShare;
import com.ruoyi.study.domain.TVipOrder;
import com.ruoyi.study.dto.AppUserQuery;
import com.ruoyi.study.dto.UserInfoQuery;
import com.ruoyi.study.request.RegisterPhoneRequest;
import com.ruoyi.study.service.ITUserService;
import com.ruoyi.study.service.ITUserShareService;
import com.ruoyi.study.service.IVipOrderService;
import com.ruoyi.study.utils.PayMoneyUtil;
import com.ruoyi.study.utils.UUIDUtil;
@@ -65,6 +64,8 @@
    private TokenService tokenService;
    @Resource
    private RedisService redisService;
    @Resource
    private ITUserShareService userShareService;
    @PostMapping("/vipInfo")
    @ApiOperation(value = "会员中心-获取会员说明、当前登录用户是否为会员、会员购买规格", tags = {"家长端-个人中心"})
@@ -301,6 +302,7 @@
        }
        return AjaxResult.success();
    }
    @PostMapping("/parentPage")
    @ApiOperation(value = "平板", tags = {"家长端-启动页"})
    public AjaxResult<String> parentPage() {
@@ -312,6 +314,7 @@
        }
        return AjaxResult.success();
    }
    @PostMapping("/parentPage1")
    @ApiOperation(value = "手机", tags = {"家长端-启动页"})
    public AjaxResult<String> parentPage1() {
@@ -323,6 +326,7 @@
        }
        return AjaxResult.success();
    }
    @PostMapping("/getProtocol")
    @ApiOperation(value = "获取协议", tags = {"家长端-协议"})
    @ApiImplicitParams({
@@ -367,9 +371,21 @@
                return AjaxResult.error("登录失败,您的账号已被冻结!");
            }
        } else {
            // todo 验证码校验
            tUser1 = getUser(phone);
            userService.save(tUser1);
            // 手机验证码校验
            Object redisPhoneCode = redisService.getCacheObject(RedisConstants.PHONE_CODE + phone);
            if (null == redisPhoneCode) {
                return AjaxResult.error("登录失败,手机验证码已过期!");
            } else {
                // redis 验证码的value 为 code:时间戳
                String rCodeAndTime = String.valueOf(redisPhoneCode);
                String rCode = rCodeAndTime.split(":")[0];
                if (!rCode.equalsIgnoreCase(phoneCode)) {
                    return AjaxResult.error("登录失败,手机验证码输入有误!");
                } else {
                    tUser1 = getUser(phone);
                    userService.save(tUser1);
                }
            }
        }
        LoginUserParent loginUserParent = new LoginUserParent();
        loginUserParent.setName(tUser1.getName());
@@ -455,17 +471,29 @@
    }
    /**
     * 家长端 学习端都可用
     *
     * @param url app网页链接
     * 分享图片、标题及可获积分数
     */
    @GetMapping("/weiXinShare")
    @ApiOperation(value = "微信分享", tags = {"微信分享"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "应用分享url地址", name = "url", dataType = "string", required = true),
    })
    public AjaxResult weiXinShare(@RequestParam String url) {
        return AjaxResult.success(userService.weiXinShare(url));
    @GetMapping("/shareInfo")
    @ApiOperation(value = "微信分享信息", tags = {"微信分享信息"})
    public AjaxResult shareInfo() {
        // 分享信息
        TSysSet data = managementClient.shareInfo().getData();
        Integer userid = tokenService.getLoginUserStudy().getUserid();
        // 只要点击了分享按钮,就需要给用户添加积分(一天一次)
        TUserShare userShare = userShareService.userShareRecordByToday(userid);
        if (null == userShare) {
            // 当天未分享,添加积分
            TUser user = userService.getById(userid);
            int integral = Integer.parseInt(data.getIntegralShare());
            user.setIntegral(user.getIntegral() + integral);
            userService.updateById(user);
            // 添加分享记录
            TUserShare record = new TUserShare();
            record.setIntegral(integral);
            record.setUserId(userid);
            userShareService.save(record);
        }
        return AjaxResult.success();
    }
    @PostMapping("/deleteUser")
@@ -544,6 +572,7 @@
        userService.saveOrUpdate(byId);
        return AjaxResult.success("修改成功");
    }
    @ResponseBody
    @PostMapping("/base/wxRefund")
    public void cancelMySiteCallback(HttpServletRequest request, HttpServletResponse response) {
@@ -566,12 +595,12 @@
                        .eq("payState", 2)
                        .orderByDesc("createTime"));
                int size = list.size();
                if (size == 0){
                if (size == 0) {
                    // 证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空
                    byId1.setVipEndTime(null);
                    byId1.setVipPayTime(null);
                    userService.updateById(byId1);
                }else{
                } else {
                    // 最近的一次充值会员时间
                    TVipOrder tVipOrder = list.get(0);
                    // 将会员到期时间回退到上一次
@@ -588,6 +617,7 @@
            e.printStackTrace();
        }
    }
    @PostMapping("/vipBack/{id}")
    @ApiOperation(value = "会员退款", tags = {"管理后台-会员退款"})
    public R vipBack(@PathVariable("id") Integer id) throws AlipayApiException {
@@ -596,7 +626,7 @@
        String transactionId = byId.getTransactionId();
        // 内部订单号
        String outTradeNo = byId.getOutTradeNo();
        switch (byId.getPayType()){
        switch (byId.getPayType()) {
            case 1:
                // 微信退款
                Map<String, String> stringStringMap = payMoneyUtil.wxRefund(transactionId, outTradeNo, byId.getMoney().toString(), byId.getMoney().toString(), "/base/wxRefund");
@@ -611,7 +641,7 @@
                vipOrderService.updateById(byId);
            case 2:
                // 支付宝退款
                Map<String, String> stringStringMap1 = payMoneyUtil.aliRefund(transactionId,byId.getMoney().toString());
                Map<String, String> stringStringMap1 = payMoneyUtil.aliRefund(transactionId, byId.getMoney().toString());
                if (null == stringStringMap1) {
                    return R.fail("取消退款异常");
                }
@@ -635,12 +665,12 @@
                        .eq("payState", 2)
                        .orderByDesc("createTime"));
                int size = list.size();
                if (size == 0){
                if (size == 0) {
                    // 证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空
                    byId1.setVipEndTime(null);
                    byId1.setVipPayTime(null);
                    userService.updateById(byId1);
                }else{
                } else {
                    // 最近的一次充值会员时间
                    TVipOrder tVipOrder = list.get(0);
                    // 将会员到期时间回退到上一次
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/CompleteStudyDTO.java
@@ -20,7 +20,7 @@
    /**
     * 完成听故事、完成游戏、完成答题、完成每日学习、商城消费
     */
    @ApiModelProperty("完成听故事、完成游戏、完成答题、完成每日学习、商城消费")
    @ApiModelProperty("完成听故事、完成游戏、完成答题、完成每日学习、商城消费、分享")
    private String method;
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserShareMapper.java
@@ -1,7 +1,6 @@
package com.ruoyi.study.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.study.domain.TGame;
import com.ruoyi.study.domain.TUserShare;
/**
@@ -14,4 +13,11 @@
 */
public interface TUserShareMapper extends BaseMapper<TUserShare> {
    /**
     * 根据用户id和当日
     *
     * @param userid 用户id
     * @return 用户分享记录
     */
    TUserShare userShareRecordByToday(Integer userid);
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserService.java
@@ -7,7 +7,6 @@
import com.ruoyi.study.vo.AppUserVO;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -36,11 +35,4 @@
     */
    Boolean isVip();
    /**
     * 微信分享app
     *
     * @param url app网页链接
     * @return 返回信息
     */
    Map<String, Object> weiXinShare(String url);
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserShareService.java
@@ -1,7 +1,6 @@
package com.ruoyi.study.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.study.domain.TGame;
import com.ruoyi.study.domain.TUserShare;
/**
@@ -14,4 +13,11 @@
 */
public interface ITUserShareService extends IService<TUserShare> {
    /**
     * 根据用户id和当日
     *
     * @param userid 用户id
     * @return 用户分享记录
     */
    TUserShare userShareRecordByToday(Integer userid);
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java
@@ -112,8 +112,12 @@
        TStudyAnswer data = answerList.get(rand.nextInt(answerList.size()));
        // 获取问题题目 和 回答题目
        Map<String, Object> result = new HashMap<>(8);
        List<String> ids = new ArrayList<>();
        ids.add(String.valueOf(data.getSubject()));
        ids.add(String.valueOf(data.getAnswerSubject()));
        result.put("data", data);
        // todo 有问有答
        // 有问有答
        result.put("subject", getSubjects(ids.toArray(ids.toArray(new String[0]))));
        return result;
    }
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
@@ -1,37 +1,22 @@
package com.ruoyi.study.service.impl;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.constant.RedisConstants;
import com.ruoyi.common.core.constant.TokenConstants;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.study.domain.TUser;
import com.ruoyi.study.dto.AppUserQuery;
import com.ruoyi.study.mapper.TUserMapper;
import com.ruoyi.study.service.ITUserService;
import com.ruoyi.study.utils.RandomVxUtil;
import com.ruoyi.study.utils.SignatureUtil;
import com.ruoyi.study.vo.AppUserVO;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
@@ -49,18 +34,6 @@
    private RedisTemplate<String, Object> redisTemplate;
    @Resource
    private TokenService tokenService;
    /**
     * 微信公众号的appid
     */
    @Value("wx.appId")
    private String appId;
    /**
     * 微信公众号的appSecret
     */
    @Value("wx.secret")
    private String secret;
    @Override
    public List<AppUserVO> listAll(AppUserQuery query) {
@@ -103,7 +76,7 @@
    @Override
    public Boolean isVip() {
        TUser user = lambdaQuery().eq(TUser::getId, tokenService.getLoginUserStudy().getUserid())
                .eq(TUser::getDisabled, 0).one();
                .eq(TUser::getDisabled, 0).eq(TUser::getState,1).one();
        // 是否为vip 逻辑
        if (null == user) {
            return false;
@@ -111,83 +84,6 @@
        // vip过期时间,字段为空也表示 当前用户不是vip
        Date vipEndTime = user.getVipEndTime();
        return null != vipEndTime && System.currentTimeMillis() <= vipEndTime.getTime();
    }
    @Override
    public Map<String, Object> weiXinShare(String url) {
        // 初始化微信API,并注册AppID
        long timestamp = System.currentTimeMillis() / 1000;
        String noncestr = RandomVxUtil.createRandomString(16);
        String ticket = getTicket(getToken(appId, secret));
        String str = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;
        // 获取加密后的签名
        String signature = SignatureUtil.getSignature(str);
        Map<String, Object> map = new HashMap<>();
        map.put("appId", appId);
        map.put("timestamp", timestamp);
        map.put("nonceStr", noncestr);
        map.put("signature", signature);
        return map;
    }
    public String getToken(String appid, String secret) {
        //拼接访问地址
        String apiUrl = String.format(TokenConstants.VX_TOKEN_API_PREFIX, appid, secret);
        HttpClient client = HttpClients.createDefault();
        //get请求
        HttpGet get = new HttpGet(apiUrl);
        // 初始化解析json格式的对象
        String result = null;
        try {
            HttpResponse res = client.execute(get);
            // 初始化响应内容
            String responseContent;
            HttpEntity entity = res.getEntity();
            //设置编码格式
            responseContent = EntityUtils.toString(entity, "UTF-8");
            // 将json字符串转换为json对象
            JSONObject json = JSONObject.parseObject(responseContent);
            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                if (json.get(Constants.ERR_CODE) != null) {
                    // 错误时微信会返回错误码等信息,{"errcode":40013,"errmsg":"invalid appid"}
                    throw new GlobalException("微信授权失败!");
                } else {
                    // 正常情况下{"access_token":"ACCESS_TOKEN","expires_in":7200}
                    result = String.valueOf(json.get("access_token"));
                }
            }
            return result;
        } catch (IOException e) {
            throw new GlobalException("微信授权失败!");
        }
    }
    public static String getTicket(String accessToken) {
        String turl = String.format(TokenConstants.VX_TICKET_API_PREFIX, accessToken);
        HttpClient client = HttpClients.createDefault();
        HttpGet get = new HttpGet(turl);
        String result = null;
        try {
            HttpResponse res = client.execute(get);
            // 响应内容
            String responseContent;
            HttpEntity entity = res.getEntity();
            responseContent = EntityUtils.toString(entity, "UTF-8");
            JSONObject jsonObject = JSONObject.parseObject(responseContent);
            // 将json字符串转换为json对象
            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                if (jsonObject.get(Constants.ERR_CODE) == null) {
                    // 错误时微信会返回错误码等信息,{"errcode":40013,"errmsg":"invalid appid"}
                    throw new GlobalException("微信授权失败!");
                } else {
                    // 正常情况下{"access_token":"ACCESS_TOKEN","expires_in":7200}
                    result = String.valueOf(jsonObject.get("ticket"));
                }
            }
            return result;
        } catch (IOException e) {
            throw new GlobalException("微信授权失败!");
        }
    }
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserShareServiceImpl.java
@@ -1,11 +1,8 @@
package com.ruoyi.study.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.study.domain.TGame;
import com.ruoyi.study.domain.TUserShare;
import com.ruoyi.study.mapper.TGameMapper;
import com.ruoyi.study.mapper.TUserShareMapper;
import com.ruoyi.study.service.ITGameService;
import com.ruoyi.study.service.ITUserShareService;
import org.springframework.stereotype.Service;
@@ -20,4 +17,8 @@
@Service
public class TUserShareServiceImpl extends ServiceImpl<TUserShareMapper, TUserShare> implements ITUserShareService {
    @Override
    public TUserShare userShareRecordByToday(Integer userid) {
        return baseMapper.userShareRecordByToday(userid);
    }
}
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserShareMapper.xml
@@ -2,6 +2,9 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.study.mapper.TUserShareMapper">
    <select id="userShareRecordByToday" resultType="com.ruoyi.study.domain.TUserShare">
        SELECT integral, createTime
        FROM t_user_share
        WHERE DATE(createTime) = CURDATE()
    </select>
</mapper>