From 8d90d3f271a9c28bf46f755b1561f07c163d8823 Mon Sep 17 00:00:00 2001
From: 44323 <443237572@qq.com>
Date: 星期四, 16 五月 2024 17:41:39 +0800
Subject: [PATCH] 代码提交

---
 ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUserMapper.xml |   23 
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RegionMapper.java                              |   12 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/AppUserQuery.java                                 |    2 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/VipOrderMapper.java                            |   22 
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TGoods.java                                    |    7 
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TVipOrder.java                             |   65 ++
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TParentLoginController.java                |   54 +
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java             |  147 ++--
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Recipient.java                                 |  163 +++++
 ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/VipOrderMapper.xml                                  |    4 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/VipOrderServiceImpl.java                 |   28 +
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/VipOrderVO.java                                |    2 
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRegionService.java                           |   12 
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java                   |   14 
 ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RegionMapper.xml                                    |    8 
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUserService.java                  |    6 
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java                |   20 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/IVipOrderService.java                         |   22 
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RecipientMapper.java                           |   17 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TVipOrder.java                                 |   65 ++
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java                    |   28 +
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUserMapper.java                     |    6 
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/AppUserQuery.java                             |    2 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/AppUserVO.java                                     |    2 
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/AppUserVO.java                                 |    2 
 ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RecipientMapper.xml                                 |   24 
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/factory/StudyFallbackFactory.java                 |   20 
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java                      |    4 
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TUserServiceImpl.java          |   12 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserService.java                            |   23 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/UserInfoQuery.java                                |   17 
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/TGoods.java                                |    7 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUser.java                                     |  208 +++++++
 ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TGameMapper.xml                                     |   17 
 ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserMapper.xml                                     |   51 +
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserGameRecordVO.java                              |   18 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/VipOrderVO.java                                    |    2 
 /dev/null                                                                                                     |   32 -
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUser.java                                 |  208 +++++++
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Region.java                                    |   41 +
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java                       |  135 ++++
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRecipientService.java                        |   17 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserInfoVO.java                                    |   39 +
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/TGoodsVO.java                                      |    4 
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/feignClient/StudyClient.java                      |   11 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserMapper.java                               |   23 
 46 files changed, 1,477 insertions(+), 169 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/TGoods.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/TGoods.java
index 7fe4807..a2a0100 100644
--- a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/TGoods.java
+++ b/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 = "商品名称")
diff --git a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUser.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUser.java
new file mode 100644
index 0000000..7878ac2
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUser.java
@@ -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 +
+
+        "}";
+    }
+}
diff --git a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TVipOrder.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TVipOrder.java
new file mode 100644
index 0000000..26953e9
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TVipOrder.java
@@ -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;
+
+
+
+}
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AppUserQuery.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/AppUserQuery.java
similarity index 94%
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
index 5a31070..4142889 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AppUserQuery.java
+++ b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/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;
diff --git a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/factory/StudyFallbackFactory.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/factory/StudyFallbackFactory.java
index 1ce47f1..4d28c73 100644
--- a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/factory/StudyFallbackFactory.java
+++ b/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());
             }
diff --git a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/feignClient/StudyClient.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/feignClient/StudyClient.java
index 5ac294b..9ffab99 100644
--- a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/feignClient/StudyClient.java
+++ b/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
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/AppUserVO.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/AppUserVO.java
similarity index 95%
rename from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/AppUserVO.java
rename to ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/AppUserVO.java
index 772e920..c1243cc 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/AppUserVO.java
+++ b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/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;
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipOrderVO.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/VipOrderVO.java
similarity index 96%
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
index dba0c1b..37f209b 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipOrderVO.java
+++ b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/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;
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
index d74b507..22f61dc 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
+++ b/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);
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Recipient.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Recipient.java
new file mode 100644
index 0000000..ceadfb2
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Recipient.java
@@ -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 +
+        "}";
+    }
+}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Region.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Region.java
new file mode 100644
index 0000000..cf79817
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/Region.java
@@ -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;
+}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TGoods.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TGoods.java
index cf7df3a..fb1adc8 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TGoods.java
+++ b/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 = "商品原价")
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RecipientMapper.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RecipientMapper.java
new file mode 100644
index 0000000..9271081
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RecipientMapper.java
@@ -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> {
+
+}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RegionMapper.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RegionMapper.java
new file mode 100644
index 0000000..4493b68
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/RegionMapper.java
@@ -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> {
+
+
+}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRecipientService.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRecipientService.java
new file mode 100644
index 0000000..bcc273d
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRecipientService.java
@@ -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> {
+
+}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRegionService.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRegionService.java
new file mode 100644
index 0000000..8e32b7d
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IRegionService.java
@@ -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> {
+
+
+}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java
new file mode 100644
index 0000000..1903ed7
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java
@@ -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 {
+
+}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java
new file mode 100644
index 0000000..ba857bc
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RegionServiceImpl.java
@@ -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 {
+
+}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/TGoodsVO.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/TGoodsVO.java
index e0c2255..2e3319d 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/TGoodsVO.java
+++ b/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
      */
diff --git a/ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RecipientMapper.xml b/ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RecipientMapper.xml
new file mode 100644
index 0000000..5a4750d
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RecipientMapper.xml
@@ -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>
diff --git a/ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RegionMapper.xml b/ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RegionMapper.xml
new file mode 100644
index 0000000..7d7695d
--- /dev/null
+++ b/ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/RegionMapper.xml
@@ -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>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java
index cf1fb43..d63cb2f 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java
+++ b/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);
     }
 }
 
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUserMapper.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUserMapper.java
index 4d4a254..398c3f6 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUserMapper.java
+++ b/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);
 
 }
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/VipOrderMapper.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/VipOrderMapper.java
deleted file mode 100644
index 6f03352..0000000
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/VipOrderMapper.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.ruoyi.management.mapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.management.domain.SysDept;
-import com.ruoyi.management.domain.TVipOrder;
-import com.ruoyi.management.dto.AppUserQuery;
-import com.ruoyi.management.dto.DeptQuery;
-import com.ruoyi.management.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);
-
-}
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUserService.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUserService.java
index 80af5f3..a401331 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUserService.java
+++ b/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);
 
 }
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/IVipOrderService.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/IVipOrderService.java
deleted file mode 100644
index f6a83e6..0000000
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/IVipOrderService.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.ruoyi.management.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.management.domain.SysDept;
-import com.ruoyi.management.domain.TVipOrder;
-import com.ruoyi.management.dto.AppUserQuery;
-import com.ruoyi.management.dto.DeptQuery;
-import com.ruoyi.management.vo.VipOrderVO;
-
-import java.util.List;
-
-/**
- * <p>
- * 部门表 服务类
- * </p>
- *
- * @author 无关风月
- * @since 2024-04-26
- */
-public interface IVipOrderService extends IService<TVipOrder> {
-    List<VipOrderVO> listAll(AppUserQuery query);
-
-}
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TUserServiceImpl.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TUserServiceImpl.java
index 1922562..24b9959 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TUserServiceImpl.java
+++ b/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);
+//    }
 }
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/VipOrderServiceImpl.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/VipOrderServiceImpl.java
deleted file mode 100644
index 1e3275b..0000000
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/VipOrderServiceImpl.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.ruoyi.management.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.management.domain.SysDept;
-import com.ruoyi.management.domain.TVipOrder;
-import com.ruoyi.management.dto.AppUserQuery;
-import com.ruoyi.management.dto.DeptQuery;
-import com.ruoyi.management.mapper.SysDeptMapper;
-import com.ruoyi.management.mapper.VipOrderMapper;
-import com.ruoyi.management.service.ISysDeptService;
-import com.ruoyi.management.service.IVipOrderService;
-import com.ruoyi.management.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);
-    }
-}
diff --git a/ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUserMapper.xml b/ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUserMapper.xml
index a7861a3..26d6e4b 100644
--- a/ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUserMapper.xml
+++ b/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>
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TParentLoginController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TParentLoginController.java
new file mode 100644
index 0000000..f30ee1f
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TParentLoginController.java
@@ -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("退出成功");
+    }
+}
+
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
new file mode 100644
index 0000000..d477903
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
@@ -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);
+    }
+}
+
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUser.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUser.java
new file mode 100644
index 0000000..59c4fc8
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUser.java
@@ -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 +
+
+        "}";
+    }
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TVipOrder.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TVipOrder.java
new file mode 100644
index 0000000..8c544ee
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TVipOrder.java
@@ -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;
+
+
+
+}
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AppUserQuery.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/AppUserQuery.java
similarity index 94%
rename from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AppUserQuery.java
rename to ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/AppUserQuery.java
index 5a31070..d53312c 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AppUserQuery.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/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;
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/UserInfoQuery.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/UserInfoQuery.java
new file mode 100644
index 0000000..bae44ce
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/UserInfoQuery.java
@@ -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;
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserMapper.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserMapper.java
new file mode 100644
index 0000000..fac948a
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserMapper.java
@@ -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);
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/VipOrderMapper.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/VipOrderMapper.java
new file mode 100644
index 0000000..c56fd32
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/VipOrderMapper.java
@@ -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);
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserService.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserService.java
new file mode 100644
index 0000000..b78562c
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserService.java
@@ -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);
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/IVipOrderService.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/IVipOrderService.java
new file mode 100644
index 0000000..207e6ea
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/IVipOrderService.java
@@ -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);
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
new file mode 100644
index 0000000..0fcce24
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
@@ -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);
+    }
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/VipOrderServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/VipOrderServiceImpl.java
new file mode 100644
index 0000000..614fdba
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/VipOrderServiceImpl.java
@@ -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);
+    }
+}
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/AppUserVO.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/AppUserVO.java
similarity index 95%
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
index 772e920..9b6908d 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/AppUserVO.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/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;
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserGameRecordVO.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserGameRecordVO.java
new file mode 100644
index 0000000..dbcb012
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserGameRecordVO.java
@@ -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;
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserInfoVO.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserInfoVO.java
new file mode 100644
index 0000000..97b22f0
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/UserInfoVO.java
@@ -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;
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipOrderVO.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/VipOrderVO.java
similarity index 96%
rename from ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipOrderVO.java
rename to ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/VipOrderVO.java
index dba0c1b..05c6e23 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipOrderVO.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/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;
diff --git a/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TGameMapper.xml b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TGameMapper.xml
index 05a78f7..e068c76 100644
--- a/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TGameMapper.xml
+++ b/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>
diff --git a/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserMapper.xml b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserMapper.xml
new file mode 100644
index 0000000..7fd39ef
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserMapper.xml
@@ -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>
diff --git a/ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/VipOrderMapper.xml b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/VipOrderMapper.xml
similarity index 81%
rename from ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/VipOrderMapper.xml
rename to ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/VipOrderMapper.xml
index 21bea1a..35ff663 100644
--- a/ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/VipOrderMapper.xml
+++ b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/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

--
Gitblit v1.7.1