44323
2024-05-16 8d90d3f271a9c28bf46f755b1561f07c163d8823
代码提交
3 文件已复制
4 文件已重命名
12个文件已修改
3个文件已删除
26个文件已添加
1692 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/TGoods.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUser.java 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TVipOrder.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/AppUserQuery.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/factory/StudyFallbackFactory.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/feignClient/StudyClient.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/AppUserVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/VipOrderVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Recipient.java 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Region.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TGoods.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RecipientMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RegionMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRecipientService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRegionService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/TGoodsVO.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RecipientMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RegionMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java 147 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUserMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/VipOrderMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUserService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/IVipOrderService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TUserServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/VipOrderServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUserMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TParentLoginController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUser.java 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TVipOrder.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/AppUserQuery.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/UserInfoQuery.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/VipOrderMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/IVipOrderService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/VipOrderServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/AppUserVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserGameRecordVO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserInfoVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/VipOrderVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TGameMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserMapper.xml 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/VipOrderMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/TGoods.java
@@ -2,6 +2,7 @@
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.ruoyi.common.core.web.domain.BaseModel;
@@ -30,6 +31,12 @@
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 已兑换数量
     */
    @ApiModelProperty(value = "已兑换数量")
    @TableField(exist = false)
    private Long inventory;
    /**
     * 商品名称
     */
    @ApiModelProperty(value = "商品名称")
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUser.java
New file
@@ -0,0 +1,208 @@
package com.ruoyi.study.api.domain;
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;
import java.util.Date;
/**
 * <p>
 * 用户表
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
@Data
@TableName("t_user")
public class TUser extends BaseModel {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户姓名
     */
    private String name;
    /**
     * 账号
     */
    private String account;
    /**
     * 电话
     */
    private String phone;
    /**
     * 密码
     */
    private String password;
    /**
     * 微信openId
     */
    private String openId;
    /**
     * 生日
     */
    private Date birthday;
    /**
     * 性别1男2女
     */
    private Integer gender;
    /**
     * 用户头像
     */
    private String headImg;
    /**
     * 积分
     */
    private Integer integral;
    /**
     * 状态1正常 2冻结 3删除
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
    /**
     * 会员到期时间 字段未空 则不是会员
     */
    private Date vipEndTime;
    /**
     * 充值会员时间 续费刷新该字段
     */
    private Date vipPayTime;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getOpenId() {
        return openId;
    }
    public void setOpenId(String openId) {
        this.openId = openId;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Integer getGender() {
        return gender;
    }
    public void setGender(Integer gender) {
        this.gender = gender;
    }
    public String getHeadImg() {
        return headImg;
    }
    public void setHeadImg(String headImg) {
        this.headImg = headImg;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    public Date getVipEndTime() {
        return vipEndTime;
    }
    public void setVipEndTime(Date vipEndTime) {
        this.vipEndTime = vipEndTime;
    }
    public Date getVipPayTime() {
        return vipPayTime;
    }
    public void setVipPayTime(Date vipPayTime) {
        this.vipPayTime = vipPayTime;
    }
    @Override
    public String toString() {
        return "TUser{" +
        ", id=" + id +
        ", name=" + name +
        ", account=" + account +
        ", phone=" + phone +
        ", password=" + password +
        ", openId=" + openId +
        ", birthday=" + birthday +
        ", gender=" + gender +
        ", headImg=" + headImg +
        ", integral=" + integral +
        ", state=" + state +
        ", insertTime=" + insertTime +
        ", vipEndTime=" + vipEndTime +
        ", vipPayTime=" + vipPayTime +
        "}";
    }
}
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TVipOrder.java
New file
@@ -0,0 +1,65 @@
package com.ruoyi.study.api.domain;
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 io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 系统设置
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
@Data
@TableName("t_vip_order")
public class TVipOrder extends BaseModel {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    @ApiModelProperty(value = "用户id")
    private Integer userId;
    /**
     * 支付金额
     */
    @ApiModelProperty(value = "支付金额")
    private BigDecimal money;
    /**
     * 支付时间
     */
    @ApiModelProperty(value = "支付时间")
    private Date payTime;
    /**
     * 订单状态1未支付2已支付3已退款
     */
    @ApiModelProperty(value = "订单状态1未支付2已支付3已退款")
    private Integer payState;
    /**
     * 退款时间
     */
    @ApiModelProperty(value = "退款时间")
    private Date backTime;
    /**
     * 有效期至
     */
    @ApiModelProperty(value = "有效期至")
    private Date time;
}
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/AppUserQuery.java
copy from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AppUserQuery.java copy to ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/AppUserQuery.java
File was copied from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AppUserQuery.java
@@ -1,4 +1,4 @@
package com.ruoyi.management.dto;
package com.ruoyi.study.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/factory/StudyFallbackFactory.java
@@ -20,6 +20,26 @@
    public StudyClient create(Throwable cause) {
        return new StudyClient() {
            @Override
            public R<PageInfo<AppUserVO>> couponReceive(AppUserQuery query) {
                return R.fail("获取用户列表查询失败" + cause.getMessage());
            }
            @Override
            public R<UserInfoVO> getUserInfo(UserInfoQuery dto) {
                return R.fail("获取用户详情信息" + cause.getMessage());
            }
            @Override
            public R freeze(Integer id) {
                return R.fail("冻结/解冻用户失败" + cause.getMessage());
            }
            @Override
            public R<PageInfo<VipOrderVO>> vipOrderList(AppUserQuery query) {
                return R.fail("获取会员管理列表失败" + cause.getMessage());
            }
            @Override
            public R<PageInfo<TStory>> storyList(ChoiceStory query) {
                return R.fail("选择故事列表获取失败" + cause.getMessage());
            }
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/feignClient/StudyClient.java
@@ -2,6 +2,7 @@
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.study.api.dto.*;
import com.ruoyi.study.api.factory.StudyFallbackFactory;
@@ -9,6 +10,7 @@
import com.ruoyi.study.api.model.TSubject;
import com.ruoyi.study.api.vo.StudyDTO;
import com.ruoyi.study.api.vo.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@@ -20,7 +22,14 @@
@FeignClient(contextId = "studyClient", value = ServiceNameConstants.STUDY_SERVICE, fallbackFactory = StudyFallbackFactory.class)
public interface StudyClient {
    @PostMapping("/base/user/userList")
    R<PageInfo<AppUserVO>> couponReceive(AppUserQuery query);
    @PostMapping("/base/user/getUserInfo")
     R<UserInfoVO> getUserInfo(UserInfoQuery dto);
    @PostMapping("/base/user/freeze")
     R freeze(Integer id);
    @PostMapping("/base/user/vipOrderList")
     R<PageInfo<VipOrderVO>> vipOrderList(AppUserQuery query);
    /**
     * 选择故事列表查询
     * @param query
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/AppUserVO.java
File was renamed from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/AppUserVO.java
@@ -1,4 +1,4 @@
package com.ruoyi.management.vo;
package com.ruoyi.study.api.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/VipOrderVO.java
copy from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipOrderVO.java copy to ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/VipOrderVO.java
File was copied from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipOrderVO.java
@@ -1,4 +1,4 @@
package com.ruoyi.management.vo;
package com.ruoyi.study.api.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
@@ -81,6 +81,10 @@
        }
        wrapper.orderByDesc("id");
        List<TGoods> list = goodsService.list(wrapper);
        for (TGoods tGoods : list) {
            long goodsId = orderService.count(new QueryWrapper<TOrder>().eq("goodsId", tGoods.getId()));
            tGoods.setInventory(goodsId);
        }
        PageInfo<TGoods> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
        res.setRecords(list);
        return R.ok(res);
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Recipient.java
New file
@@ -0,0 +1,163 @@
package com.ruoyi.goods.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * <p>
 * 收货地址
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@TableName("t_recipient")
@Data
public class Recipient extends Model<Recipient> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 收件人姓名
     */
    @ApiModelProperty(value = "收件人姓名")
    private String recipient;
    /**
     * 收件人姓名
     */
    @ApiModelProperty(value = "电话")
    private String recipientPhone;
    /**
     * 省
     */
    @ApiModelProperty(value = "省")
    private String province;
    /**
     * 省code
     */
    @ApiModelProperty(value = "省code")
    private String provinceCode;
    /**
     * 市
     */
    @ApiModelProperty(value = "市")
    private String city;
    /**
     * 市code
     */
    @ApiModelProperty(value = "市code")
    private String cityCode;
    /**
     * 地址
     */
    @ApiModelProperty(value = "详细地址")
    private String address;
    /**
     * 地址
     */
    @ApiModelProperty(value = "是否为默认地址0否1是")
    private Integer isDefault;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getRecipient() {
        return recipient;
    }
    public void setRecipient(String recipient) {
        this.recipient = recipient;
    }
    public String getRecipientPhone() {
        return recipientPhone;
    }
    public void setRecipientPhone(String recipientPhone) {
        this.recipientPhone = recipientPhone;
    }
    public String getProvince() {
        return province;
    }
    public void setProvince(String province) {
        this.province = province;
    }
    public String getProvinceCode() {
        return provinceCode;
    }
    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "Recipient{" +
        "id=" + id +
        ", userId=" + userId +
        ", recipient=" + recipient +
        ", recipientPhone=" + recipientPhone +
        ", province=" + province +
        ", provinceCode=" + provinceCode +
        ", city=" + city +
        ", cityCode=" + cityCode +
        ", address=" + address +
        "}";
    }
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Region.java
New file
@@ -0,0 +1,41 @@
package com.ruoyi.goods.domain;
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 io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 行政区域数据
* @author pzb
* @Date 2022/2/9 10:00
*/
@Data
@TableName("t_region")
public class Region {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 城市名称
     */
    @TableField("name")
    @ApiModelProperty("省/市 名称")
    private String name;
    /**
     * 城市code
     */
    @TableField("code")
    @ApiModelProperty("省/市 编码")
    private String code;
    /**
     * 父级id
     */
    @TableField("parent_id")
    private Integer parentId;
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TGoods.java
@@ -2,6 +2,7 @@
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.ruoyi.common.core.web.domain.BaseModel;
@@ -40,6 +41,12 @@
    @ApiModelProperty(value = "所需积分")
    private Integer integral;
    /**
     * 已兑换数量
     */
    @ApiModelProperty(value = "已兑换数量")
    @TableField(exist = false)
    private Long inventory;
    /**
     * 商品原价
     */
    @ApiModelProperty(value = "商品原价")
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RecipientMapper.java
New file
@@ -0,0 +1,17 @@
package com.ruoyi.goods.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.goods.domain.Recipient;
/**
 * <p>
 * 收货地址 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface RecipientMapper extends BaseMapper<Recipient> {
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RegionMapper.java
New file
@@ -0,0 +1,12 @@
package com.ruoyi.goods.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.goods.domain.Region;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface RegionMapper extends BaseMapper<Region> {
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRecipientService.java
New file
@@ -0,0 +1,17 @@
package com.ruoyi.goods.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.goods.domain.Recipient;
/**
 * <p>
 * 收货地址 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
public interface IRecipientService extends IService<Recipient> {
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRegionService.java
New file
@@ -0,0 +1,12 @@
package com.ruoyi.goods.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.goods.domain.Region;
import java.util.List;
public interface IRegionService extends IService<Region> {
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.goods.domain.Recipient;
import com.ruoyi.goods.mapper.RecipientMapper;
import com.ruoyi.goods.service.IRecipientService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 收货地址 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-02-06
 */
@Service
public class RecipientServiceImpl extends ServiceImpl<RecipientMapper, Recipient> implements IRecipientService {
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java
New file
@@ -0,0 +1,14 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.goods.domain.Region;
import com.ruoyi.goods.mapper.RegionMapper;
import com.ruoyi.goods.service.IRegionService;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements IRegionService {
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/TGoodsVO.java
@@ -21,8 +21,10 @@
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "剩余数量")
    @ApiModelProperty(value = "已兑换数量")
    private Long inventory;
    @ApiModelProperty(value = "基础已兑换数量")
    private Integer basicCount;
    /**
     * 主键id
     */
ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RecipientMapper.xml
New file
@@ -0,0 +1,24 @@
<?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.ruoyi.goods.mapper.RecipientMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.goods.domain.Recipient">
        <id column="id" property="id" />
        <result column="userId" property="userId" />
        <result column="recipient" property="recipient" />
        <result column="recipientPhone" property="recipientPhone" />
        <result column="province" property="province" />
        <result column="provinceCode" property="provinceCode" />
        <result column="city" property="city" />
        <result column="cityCode" property="cityCode" />
        <result column="address" property="address" />
        <result column="isDefault" property="isDefault" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, userId, recipient, recipientPhone, province, provinceCode, city, cityCode, address,isDefault
    </sql>
</mapper>
ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RegionMapper.xml
New file
@@ -0,0 +1,8 @@
<?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.ruoyi.goods.mapper.RegionMapper">
</mapper>
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java
@@ -2,20 +2,20 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.management.domain.TUser;
import com.ruoyi.management.domain.TVipSet;
import com.ruoyi.management.dto.AppUserQuery;
import com.ruoyi.management.service.ITUserService;
import com.ruoyi.management.service.ITVipSetService;
import com.ruoyi.management.service.IVipOrderService;
import com.ruoyi.management.vo.AppUserVO;
import com.ruoyi.management.vo.VipOrderVO;
import com.ruoyi.management.vo.VipSetVO;
import com.ruoyi.study.api.dto.AppUserQuery;
import com.ruoyi.study.api.dto.UserInfoQuery;
import com.ruoyi.study.api.vo.UserGameRecordVO;
import com.ruoyi.study.api.feignClient.StudyClient;
import com.ruoyi.study.api.vo.AppUserVO;
import com.ruoyi.study.api.vo.UserInfoVO;
import com.ruoyi.study.api.vo.VipOrderVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -24,9 +24,6 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@@ -44,75 +41,80 @@
    private ITUserService userService;
    @Autowired
    private ITVipSetService vipSetService;
    @Autowired
    private IVipOrderService vipOrderService;
    private StudyClient studyClient;
    @ResponseBody
    @PostMapping("/userList")
    @ApiOperation(value = "用户列表", tags = {"用户管理"})
    public AjaxResult<PageInfo<AppUserVO>> couponReceive(AppUserQuery query) {
        PageInfo<AppUserVO> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
        List<AppUserVO> list =  userService.listAll(query);
        for (AppUserVO appUserVO : list) {
            if (appUserVO.getVipEndTime() == null){
                appUserVO.setIsVip(0);
            }else{
                if (appUserVO.getVipEndTime().getTime() > System.currentTimeMillis()){
                    appUserVO.setIsVip(1);
                }else{
                    appUserVO.setIsVip(0);
                }
            }
        }
        res.setRecords(list);
        res.setTotal(list.size());
        return AjaxResult.success(res);
//        PageInfo<AppUserVO> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
////        List<AppUserVO> list =  userService.listAll(query);
////        for (AppUserVO appUserVO : list) {
////            if (appUserVO.getVipEndTime() == null){
////                appUserVO.setIsVip(0);
////            }else{
////                if (appUserVO.getVipEndTime().getTime() > System.currentTimeMillis()){
////                    appUserVO.setIsVip(1);
////                }else{
////                    appUserVO.setIsVip(0);
////                }
////            }
////        }
////        res.setRecords(list);
////        res.setTotal(list.size());
        R<PageInfo<AppUserVO>> pageInfoR = studyClient.couponReceive(query);
        return AjaxResult.success(pageInfoR);
    }
    @ResponseBody
    @PostMapping("/getUserInfo")
    @ApiOperation(value = "查看用户详情", tags = {"用户管理"})
    public AjaxResult<UserInfoVO> getUserInfo(UserInfoQuery dto) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
        UserInfoVO res = new UserInfoVO();
        PageInfo<UserGameRecordVO> list = new PageInfo<>(dto.getPageNumber(), dto.getPageSize());
//        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
//        UserInfoVO res = new UserInfoVO();
//        PageInfo<UserGameRecordVO> list = new PageInfo<>(dto.getPageNumber(), dto.getPageSize());
//
//
//        TUser byId = userService.getById(dto.getId());
//        String name = byId.getName();
//        String phone = byId.getPhone();
//        Date insertTime = byId.getInsertTime();
//        Date vipPayTime = byId.getVipPayTime();
//        Date vipEndTime = byId.getVipEndTime();
//        if (vipEndTime == null){
//            res.setIsVip(0);
//        }else{
//            if (vipEndTime.getTime() > System.currentTimeMillis()){
//                res.setIsVip(1);
//            }else{
//                res.setIsVip(0);
//            }
//        }
//        if (vipPayTime!=null){
//            res.setVipPayTime(format.format(vipPayTime));
//        }
//        res.setState(byId.getState());
//        res.setName(name);
//        res.setPhone(phone);
//        res.setInsertTime(format.format(insertTime));
//        res.setIntegral(byId.getIntegral());
//        // todo 查询进度
//        res.setCurrent(0);
//        res.setSurplus(0);
//        res.setTotalHours(0d);
//        res.setTodayHours(0d);
//        res.setWeekHours(0d);
//        res.setMonthHours(0d);
//        // todo 查询用户的游戏记录
//        List<UserGameRecordVO> userGameRecordVOS = new ArrayList<>();
//        list.setRecords(userGameRecordVOS);
//        list.setTotal(0);
//        res.setGameRecords(list);
        UserInfoVO data = studyClient.getUserInfo(dto).getData();
        TUser byId = userService.getById(dto.getId());
        String name = byId.getName();
        String phone = byId.getPhone();
        Date insertTime = byId.getInsertTime();
        Date vipPayTime = byId.getVipPayTime();
        Date vipEndTime = byId.getVipEndTime();
        if (vipEndTime == null){
            res.setIsVip(0);
        }else{
            if (vipEndTime.getTime() > System.currentTimeMillis()){
                res.setIsVip(1);
            }else{
                res.setIsVip(0);
            }
        }
        if (vipPayTime!=null){
            res.setVipPayTime(format.format(vipPayTime));
        }
        res.setState(byId.getState());
        res.setName(name);
        res.setPhone(phone);
        res.setInsertTime(format.format(insertTime));
        res.setIntegral(byId.getIntegral());
        // todo 查询进度
        res.setCurrent(0);
        res.setSurplus(0);
        res.setTotalHours(0d);
        res.setTodayHours(0d);
        res.setWeekHours(0d);
        res.setMonthHours(0d);
        // todo 查询用户的游戏记录
        List<UserGameRecordVO> userGameRecordVOS = new ArrayList<>();
        list.setRecords(userGameRecordVOS);
        list.setTotal(0);
        res.setGameRecords(list);
        return AjaxResult.success(res);
        return AjaxResult.success(data);
    }
    @ResponseBody
    @PostMapping("/freeze")
@@ -120,10 +122,10 @@
    public AjaxResult freeze(Integer id) {
        TUser byId = userService.getById(id);
        if (byId.getState() == 1) {
            byId.setState(2);
            studyClient.freeze(id);
            return AjaxResult.success("冻结成功");
        }else {
            byId.setState(1);
            studyClient.freeze(id);
            return AjaxResult.success("解冻成功");
        }
    }
@@ -146,18 +148,15 @@
            tVipSet.setInfo(info);
            vipSetService.save(tVipSet);
        }
        return AjaxResult.success("保存成功");
    }
    @ResponseBody
    @PostMapping("/vipOrderList")
    @ApiOperation(value = "列表查询", tags = {"会员管理"})
    public AjaxResult<PageInfo<AppUserVO>> vipOrderList(AppUserQuery query) {
        PageInfo<VipOrderVO> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
        List<VipOrderVO> list =  vipOrderService.listAll(query);
        res.setRecords(list);
        res.setTotal(list.size());
        return AjaxResult.success(res);
    public AjaxResult<PageInfo<VipOrderVO>> vipOrderList(AppUserQuery query) {
        PageInfo<VipOrderVO> data = studyClient.vipOrderList(query).getData();
        return AjaxResult.success(data);
    }
}
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUserMapper.java
@@ -2,8 +2,8 @@
import com.ruoyi.management.domain.TUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.management.dto.AppUserQuery;
import com.ruoyi.management.vo.AppUserVO;
import com.ruoyi.study.api.dto.AppUserQuery;
import com.ruoyi.study.api.vo.AppUserVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -18,6 +18,6 @@
 */
public interface TUserMapper extends BaseMapper<TUser> {
    List<AppUserVO> listAll(@Param("req") AppUserQuery query);
//    List<AppUserVO> listAll(@Param("req") AppUserQuery query);
}
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/VipOrderMapper.java
File was deleted
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUserService.java
@@ -2,10 +2,6 @@
import com.ruoyi.management.domain.TUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.management.dto.AppUserQuery;
import com.ruoyi.management.vo.AppUserVO;
import java.util.List;
/**
 * <p>
@@ -17,6 +13,6 @@
 */
public interface ITUserService extends IService<TUser> {
    List<AppUserVO> listAll(AppUserQuery query);
//    List<AppUserVO> listAll(AppUserQuery query);
}
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/IVipOrderService.java
File was deleted
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TUserServiceImpl.java
@@ -1,11 +1,11 @@
package com.ruoyi.management.service.impl;
import com.ruoyi.management.domain.TUser;
import com.ruoyi.management.dto.AppUserQuery;
import com.ruoyi.management.mapper.TUserMapper;
import com.ruoyi.management.service.ITUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.management.vo.AppUserVO;
import com.ruoyi.study.api.dto.AppUserQuery;
import com.ruoyi.study.api.vo.AppUserVO;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -21,8 +21,8 @@
@Service
public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser> implements ITUserService {
    @Override
    public List<AppUserVO> listAll(AppUserQuery query) {
        return this.baseMapper.listAll(query);
    }
//    @Override
//    public List<AppUserVO> listAll(AppUserQuery query) {
//        return this.baseMapper.listAll(query);
//    }
}
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/VipOrderServiceImpl.java
File was deleted
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUserMapper.xml
@@ -25,27 +25,6 @@
    <sql id="Base_Column_List">
        id, name, account, phone, password, openId, birthday, gender, headImg, integral, state, insertTime, vipEndTime, vipPayTime, isBack, backTime
    </sql>
    <select id="listAll" resultType="com.ruoyi.management.vo.AppUserVO">
        select *
        from t_user
        where 1=1
        <if test="req.name !=null and req.name!=''">
            AND name LIKE concat('%',#{req.name},'%')
        </if>
        <if test="req.phone !=null and req.phone!=''">
            AND phone LIKE concat('%',#{req.phone},'%')
        </if>
        <if test="req.state !=null ">
            AND state = #{req.state}
        </if>
        <if test="req.isVip !=null and req.isVip == 0 ">
            AND (isNull(vipEndTime) or vipEndTime &lt;= NOW())
        </if>
        <if test="req.isVip !=null and req.isVip == 1 ">
            AND (vipEndTime IS NOT NULL and vipEndTime &gt;= NOW())
        </if>
        and state!=3
        order by insertTime desc
    </select>
</mapper>
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TParentLoginController.java
New file
@@ -0,0 +1,54 @@
package com.ruoyi.study.controller;
import com.ruoyi.common.core.web.domain.AjaxResult;
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.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
 * 家长端登录 控制器
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
@Controller
@RequestMapping("/login/parent")
public class TParentLoginController {
    @ResponseBody
    @PostMapping("/loginSms")
    @ApiOperation(value = "短信验证码登录", tags = {"APP-登录注册"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true),
            @ApiImplicitParam(value = "短信验证码", name = "code", dataType = "string", required = true),
    })
    public AjaxResult<String> loginSms(String phone, String code) {
        return null;
    }
    @ResponseBody
    @PostMapping("/base/appUser/logout")
    @ApiOperation(value = "退出登录", tags = {"我的"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header")
    })
    public AjaxResult logout() {
        return AjaxResult.success("退出成功");
    }
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
New file
@@ -0,0 +1,135 @@
package com.ruoyi.study.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.study.domain.TUser;
import com.ruoyi.study.dto.AppUserQuery;
import com.ruoyi.study.dto.UserInfoQuery;
import com.ruoyi.study.service.ITUserService;
import com.ruoyi.study.service.IVipOrderService;
import com.ruoyi.study.vo.AppUserVO;
import com.ruoyi.study.vo.UserGameRecordVO;
import com.ruoyi.study.vo.UserInfoVO;
import com.ruoyi.study.vo.VipOrderVO;
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.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * <p>
 * 用户管理 控制器
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
@RestController
@RequestMapping("/base/user")
public class TUserController {
    @Autowired
    private ITUserService userService;
    @Autowired
    private IVipOrderService vipOrderService;
    @PostMapping("/userList")
    @ApiOperation(value = "用户列表", tags = {"用户管理"})
    public R<PageInfo<AppUserVO>> couponReceive(AppUserQuery query) {
        PageInfo<AppUserVO> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
        List<AppUserVO> list =  userService.listAll(query);
        for (AppUserVO appUserVO : list) {
            if (appUserVO.getVipEndTime() == null){
                appUserVO.setIsVip(0);
            }else{
                if (appUserVO.getVipEndTime().getTime() > System.currentTimeMillis()){
                    appUserVO.setIsVip(1);
                }else{
                    appUserVO.setIsVip(0);
                }
            }
        }
        res.setRecords(list);
        res.setTotal(list.size());
        return R.ok(res);
    }
    @PostMapping("/getUserInfo")
    @ApiOperation(value = "查看用户详情", tags = {"用户管理"})
    public R<UserInfoVO> getUserInfo(UserInfoQuery dto) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
        UserInfoVO res = new UserInfoVO();
        PageInfo<UserGameRecordVO> list = new PageInfo<>(dto.getPageNumber(), dto.getPageSize());
        TUser byId = userService.getById(dto.getId());
        String name = byId.getName();
        String phone = byId.getPhone();
        Date insertTime = byId.getInsertTime();
        Date vipPayTime = byId.getVipPayTime();
        Date vipEndTime = byId.getVipEndTime();
        if (vipEndTime == null){
            res.setIsVip(0);
        }else{
            if (vipEndTime.getTime() > System.currentTimeMillis()){
                res.setIsVip(1);
            }else{
                res.setIsVip(0);
            }
        }
        if (vipPayTime!=null){
            res.setVipPayTime(format.format(vipPayTime));
        }
        res.setState(byId.getState());
        res.setName(name);
        res.setPhone(phone);
        res.setInsertTime(format.format(insertTime));
        res.setIntegral(byId.getIntegral());
        // todo 查询进度
        res.setCurrent(0);
        res.setSurplus(0);
        res.setTotalHours(0d);
        res.setTodayHours(0d);
        res.setWeekHours(0d);
        res.setMonthHours(0d);
        // todo 查询用户的游戏记录
        List<UserGameRecordVO> userGameRecordVOS = new ArrayList<>();
        list.setRecords(userGameRecordVOS);
        list.setTotal(0);
        res.setGameRecords(list);
        return R.ok(res);
    }
    @PostMapping("/freeze")
    @ApiOperation(value = "冻结/解冻", tags = {"用户管理"})
    public R freeze(Integer id) {
        TUser byId = userService.getById(id);
        if (byId.getState() == 1) {
            byId.setState(2);
            return R.ok("冻结成功");
        }else {
            byId.setState(1);
            return R.ok("解冻成功");
        }
    }
    @PostMapping("/vipOrderList")
    @ApiOperation(value = "列表查询", tags = {"会员管理"})
    public R<PageInfo<VipOrderVO>> vipOrderList(AppUserQuery query) {
        PageInfo<VipOrderVO> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
        List<VipOrderVO> list =  vipOrderService.listAll(query);
        res.setRecords(list);
        res.setTotal(list.size());
        return R.ok(res);
    }
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUser.java
New file
@@ -0,0 +1,208 @@
package com.ruoyi.study.domain;
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;
import java.util.Date;
/**
 * <p>
 * 用户表
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
@Data
@TableName("t_user")
public class TUser extends BaseModel {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户姓名
     */
    private String name;
    /**
     * 账号
     */
    private String account;
    /**
     * 电话
     */
    private String phone;
    /**
     * 密码
     */
    private String password;
    /**
     * 微信openId
     */
    private String openId;
    /**
     * 生日
     */
    private Date birthday;
    /**
     * 性别1男2女
     */
    private Integer gender;
    /**
     * 用户头像
     */
    private String headImg;
    /**
     * 积分
     */
    private Integer integral;
    /**
     * 状态1正常 2冻结 3删除
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
    /**
     * 会员到期时间 字段未空 则不是会员
     */
    private Date vipEndTime;
    /**
     * 充值会员时间 续费刷新该字段
     */
    private Date vipPayTime;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getOpenId() {
        return openId;
    }
    public void setOpenId(String openId) {
        this.openId = openId;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Integer getGender() {
        return gender;
    }
    public void setGender(Integer gender) {
        this.gender = gender;
    }
    public String getHeadImg() {
        return headImg;
    }
    public void setHeadImg(String headImg) {
        this.headImg = headImg;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public Date getInsertTime() {
        return insertTime;
    }
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    public Date getVipEndTime() {
        return vipEndTime;
    }
    public void setVipEndTime(Date vipEndTime) {
        this.vipEndTime = vipEndTime;
    }
    public Date getVipPayTime() {
        return vipPayTime;
    }
    public void setVipPayTime(Date vipPayTime) {
        this.vipPayTime = vipPayTime;
    }
    @Override
    public String toString() {
        return "TUser{" +
        ", id=" + id +
        ", name=" + name +
        ", account=" + account +
        ", phone=" + phone +
        ", password=" + password +
        ", openId=" + openId +
        ", birthday=" + birthday +
        ", gender=" + gender +
        ", headImg=" + headImg +
        ", integral=" + integral +
        ", state=" + state +
        ", insertTime=" + insertTime +
        ", vipEndTime=" + vipEndTime +
        ", vipPayTime=" + vipPayTime +
        "}";
    }
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TVipOrder.java
New file
@@ -0,0 +1,65 @@
package com.ruoyi.study.domain;
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 io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 系统设置
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
@Data
@TableName("t_vip_order")
public class TVipOrder extends BaseModel {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 用户id
     */
    @ApiModelProperty(value = "用户id")
    private Integer userId;
    /**
     * 支付金额
     */
    @ApiModelProperty(value = "支付金额")
    private BigDecimal money;
    /**
     * 支付时间
     */
    @ApiModelProperty(value = "支付时间")
    private Date payTime;
    /**
     * 订单状态1未支付2已支付3已退款
     */
    @ApiModelProperty(value = "订单状态1未支付2已支付3已退款")
    private Integer payState;
    /**
     * 退款时间
     */
    @ApiModelProperty(value = "退款时间")
    private Date backTime;
    /**
     * 有效期至
     */
    @ApiModelProperty(value = "有效期至")
    private Date time;
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/AppUserQuery.java
File was renamed from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AppUserQuery.java
@@ -1,4 +1,4 @@
package com.ruoyi.management.dto;
package com.ruoyi.study.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/UserInfoQuery.java
New file
@@ -0,0 +1,17 @@
package com.ruoyi.study.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel
@Data
public class UserInfoQuery {
    @ApiModelProperty(value = "用户id")
    private Integer id;
    @ApiModelProperty(value = "页码,首页1", required = true)
    private Integer pageNumber;
    @ApiModelProperty(value = "页条数", required = true)
    private Integer pageSize;
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserMapper.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.study.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.study.domain.TUser;
import com.ruoyi.study.dto.AppUserQuery;
import com.ruoyi.study.vo.AppUserVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
public interface TUserMapper extends BaseMapper<TUser> {
    List<AppUserVO> listAll(@Param("req") AppUserQuery query);
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/VipOrderMapper.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.study.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.study.domain.TVipOrder;
import com.ruoyi.study.dto.AppUserQuery;
import com.ruoyi.study.vo.VipOrderVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 部门表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
public interface VipOrderMapper extends BaseMapper<TVipOrder> {
    List<VipOrderVO> listAll(@Param("req") AppUserQuery query);
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserService.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.study.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.study.domain.TUser;
import com.ruoyi.study.dto.AppUserQuery;
import com.ruoyi.study.vo.AppUserVO;
import java.util.List;
/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
public interface ITUserService extends IService<TUser> {
    List<AppUserVO> listAll(AppUserQuery query);
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/IVipOrderService.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.study.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.study.domain.TVipOrder;
import com.ruoyi.study.dto.AppUserQuery;
import com.ruoyi.study.vo.VipOrderVO;
import java.util.List;
/**
 * <p>
 * 部门表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
public interface IVipOrderService extends IService<TVipOrder> {
    List<VipOrderVO> listAll(AppUserQuery query);
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.study.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.vo.AppUserVO;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
@Service
public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser> implements ITUserService {
    @Override
    public List<AppUserVO> listAll(AppUserQuery query) {
        return this.baseMapper.listAll(query);
    }
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/VipOrderServiceImpl.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.study.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.study.domain.TVipOrder;
import com.ruoyi.study.dto.AppUserQuery;
import com.ruoyi.study.mapper.VipOrderMapper;
import com.ruoyi.study.service.IVipOrderService;
import com.ruoyi.study.vo.VipOrderVO;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 部门表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-04-26
 */
@Service
public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, TVipOrder> implements IVipOrderService {
    @Override
    public List<VipOrderVO> listAll(AppUserQuery query) {
        return this.baseMapper.listAll(query);
    }
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/AppUserVO.java
copy from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/AppUserVO.java copy to ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/AppUserVO.java
File was copied from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/AppUserVO.java
@@ -1,4 +1,4 @@
package com.ruoyi.management.vo;
package com.ruoyi.study.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserGameRecordVO.java
New file
@@ -0,0 +1,18 @@
package com.ruoyi.study.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "游戏数据VO")
public class UserGameRecordVO {
    @ApiModelProperty(value = "游戏时间")
    private Integer time;
    @ApiModelProperty(value = "游戏名称")
    private String gameName;
    @ApiModelProperty(value = "用时时间")
    private String useTime;
    @ApiModelProperty(value = "正确率")
    private String accuracy;
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserInfoVO.java
New file
@@ -0,0 +1,39 @@
package com.ruoyi.study.vo;
import com.ruoyi.common.core.web.page.PageInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "用户详情VO")
public class UserInfoVO {
    @ApiModelProperty(value = "用户状态 1正常 2冻结")
    private Integer state;
    @ApiModelProperty(value = "用户名称")
    private String name;
    @ApiModelProperty(value = "电话")
    private String phone;
    @ApiModelProperty(value = "注册时间")
    private String insertTime;
    @ApiModelProperty(value = "是否是会员 0否1是")
    private Integer isVip;
    @ApiModelProperty(value = "成为会员时间 没有则为空")
    private String vipPayTime;
    @ApiModelProperty(value = "剩余积分")
    private Integer integral;
    @ApiModelProperty(value = "当前进度")
    private Integer current;
    @ApiModelProperty(value = "剩余进度")
    private Integer surplus;
    @ApiModelProperty(value = "学习总时长")
    private Double totalHours;
    @ApiModelProperty(value = "今日学习时长")
    private Double todayHours;
    @ApiModelProperty(value = "本周学习时长")
    private Double weekHours;
    @ApiModelProperty(value = "本月学习时长")
    private Double monthHours;
    @ApiModelProperty(value = "游戏数据列表")
    private PageInfo<UserGameRecordVO> gameRecords;
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/VipOrderVO.java
File was renamed from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipOrderVO.java
@@ -1,4 +1,4 @@
package com.ruoyi.management.vo;
package com.ruoyi.study.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TGameMapper.xml
@@ -2,23 +2,6 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.study.mapper.TGameMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.study.domain.TGame">
        <id column="id" property="id" />
        <result column="week" property="week" />
        <result column="name" property="name" />
        <result column="difficulty" property="difficulty" />
        <result column="count" property="count" />
        <result column="integral" property="integral" />
        <result column="time" property="time" />
        <result column="answerTime" property="answerTime" />
        <result column="answerIntegral" property="answerIntegral" />
        <result column="answerCount" property="answerCount" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, week, name, difficulty, count, integral, time, answerTime, answerIntegral, answerCount
    </sql>
</mapper>
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserMapper.xml
New file
@@ -0,0 +1,51 @@
<?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.ruoyi.study.mapper.TUserMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.study.domain.TUser">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="account" property="account" />
        <result column="phone" property="phone" />
        <result column="password" property="password" />
        <result column="openId" property="openId" />
        <result column="birthday" property="birthday" />
        <result column="gender" property="gender" />
        <result column="headImg" property="headImg" />
        <result column="integral" property="integral" />
        <result column="state" property="state" />
        <result column="insertTime" property="insertTime" />
        <result column="vipEndTime" property="vipEndTime" />
        <result column="vipPayTime" property="vipPayTime" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, name, account, phone, password, openId, birthday, gender, headImg, integral, state, insertTime, vipEndTime, vipPayTime, isBack, backTime
    </sql>
    <select id="listAll" resultType="com.ruoyi.study.vo.AppUserVO">
        select *
        from t_user
        where 1=1
        <if test="req.name !=null and req.name!=''">
            AND name LIKE concat('%',#{req.name},'%')
        </if>
        <if test="req.phone !=null and req.phone!=''">
            AND phone LIKE concat('%',#{req.phone},'%')
        </if>
        <if test="req.state !=null ">
            AND state = #{req.state}
        </if>
        <if test="req.isVip !=null and req.isVip == 0 ">
            AND (isNull(vipEndTime) or vipEndTime &lt;= NOW())
        </if>
        <if test="req.isVip !=null and req.isVip == 1 ">
            AND (vipEndTime IS NOT NULL and vipEndTime &gt;= NOW())
        </if>
        and state!=3
        order by insertTime desc
    </select>
</mapper>
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/VipOrderMapper.xml
File was renamed from ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/VipOrderMapper.xml
@@ -1,8 +1,8 @@
<?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.ruoyi.management.mapper.VipOrderMapper">
<mapper namespace="com.ruoyi.study.mapper.VipOrderMapper">
    <select id="listAll" resultType="com.ruoyi.management.vo.VipOrderVO">
    <select id="listAll" resultType="com.ruoyi.study.vo.VipOrderVO">
        select t1.*,t2.`name`,t2.phone
        from t_vip_order
        left join t_user t2 on t1.id = t2.userid