Merge remote-tracking branch 'origin/wzj-main' into wzj-main

# Conflicts:
#	ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java
#	ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/IFansService.java
#	ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java
This commit is contained in:
曹佳豪 2025-06-14 14:19:37 +08:00
commit e78c6d2b0d
75 changed files with 1553 additions and 856 deletions

11
pom.xml
View File

@ -59,6 +59,7 @@
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
<!-- 打包默认跳过测试 -->
<skipTests>true</skipTests>
<knife4j.version>3.03</knife4j.version>
</properties>
<profiles>
@ -429,6 +430,16 @@
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-springdoc-ui</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${springdoc.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

View File

@ -92,7 +92,7 @@ spring:
# 此属性控制池中连接的最长生命周期值0表示无限生命周期默认30分钟
maxLifetime: 1800000
# 多久检查一次连接的活性
keepaliveTime: 30000
keepaliveTime: 300000
--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
spring.data:

View File

@ -141,9 +141,11 @@ tenant:
- ums_member
- ums_member_address
- ums_feedback
- ums_member_account
- ums_member_login_info
- ums_member_cart
- ums_cart
- ums_account
- ums_account_change_record
- ums_fans
- oms_aftersale
- oms_aftersale_item
- oms_order
@ -158,6 +160,7 @@ tenant:
- pms_sku
- pms_sku_snapshot
# MyBatisPlus配置
# https://baomidou.com/config/
mybatis-plus:
@ -237,19 +240,21 @@ springdoc:
name: ${sa-token.token-name}
#这里定义了两个分组,可定义多个,也可以不定义
group-configs:
- group: 1.演示模块
packages-to-scan: org.dromara.demo
- group: 2.通用模块
packages-to-scan: org.dromara.web
- group: 3.系统模块
packages-to-scan: org.dromara.system
- group: 4.代码生成模块
packages-to-scan: org.dromara.generator
- group: 5.工作流模块
packages-to-scan: org.dromara.workflow
- group: 6.内容模块
- group: 1.会员模块
packages-to-scan: com.wzj.soopin.member
- group: 2.订单模块
packages-to-scan: com.wzj.soopin.order
- group: 3.商品模块
packages-to-scan: com.wzj.soopin.goods
- group: 4.内容模块
packages-to-scan: com.wzj.soopin.content
- group: 5.结算模块
packages-to-scan: com.wzj.soopin.pay
- group: 6.IM模块
packages-to-scan: com.wzj.soopin.im
- group: 7.系统模块
packages-to-scan: org.dromara.system
legacy-mode: true
# 防止XSS攻击
xss:
# 过滤开关

View File

@ -32,6 +32,17 @@ public interface CacheConstants {
*/
String MEMEBER="MEMEBER:";
/**
* 粉丝
*/
String MEMBER_FANS="MEMBER_FANS:";
/**
* 关注
*/
String MEMBER_FOLLOW="MEMBER_FOLLOW:";
String BLACK_LIST="BLACK_LIST:";
}

View File

@ -3,12 +3,26 @@ package org.dromara.common.core.domain;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import java.sql.Wrapper;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
@Data
public class BaseBO <T> {
protected LocalDateTime beginTime;
protected LocalDateTime endTime;
protected Map<String,String> orderBy = new HashMap<>();
/**
* bo转换成queryWrapper
*

View File

@ -26,6 +26,7 @@
<artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
</dependency>
<dependency>
<groupId>com.github.therapi</groupId>
<artifactId>therapi-runtime-javadoc</artifactId>
@ -36,6 +37,34 @@
<artifactId>jackson-module-kotlin</artifactId>
</dependency>
<!-- Swagger 2.0 注解兼容包 -->
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>2.2.15</version> <!-- 与 SpringDoc 版本匹配 -->
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-models</artifactId>
<version>2.2.15</version> <!-- 与 SpringDoc 版本匹配 -->
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-springdoc-ui</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -228,4 +228,6 @@ public class RedisCache
{
return redisTemplate.keys(pattern);
}
}

View File

@ -55,7 +55,7 @@ public class SecurityConfig implements WebMvcConfigurer {
HttpServletRequest request = ServletUtils.getRequest();
// 检查是否登录 是否有token
try {
StpUtil.checkLogin();
// StpUtil.checkLogin();
} catch (NotLoginException e) {
if (request.getRequestURI().contains("sse")) {
throw new SseException(e.getMessage(), e.getCode());

View File

@ -20,10 +20,10 @@
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-data-mongodb</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
@ -155,12 +155,7 @@
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>

View File

@ -169,7 +169,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
BeanUtils.copyProperties(v, vo);
if (StringUtils.isNotBlank(userId)) {
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, v.getVlogerId()));
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(Long.valueOf(userId), Long.valueOf(v.getVlogerId())));
vo.setDoILikeThisVlog(doILikeVlog(userId, v.getId()));
}

View File

@ -97,12 +97,6 @@
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sse</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
</dependencies>

View File

@ -97,17 +97,7 @@
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sse</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.github.pagehelper</groupId>-->
<!-- <artifactId>pagehelper-spring-boot-starter</artifactId>-->
<!-- <version>1.4.6</version>-->
<!-- </dependency>-->
</dependencies>
</project>

View File

@ -98,18 +98,6 @@
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sse</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-springdoc-ui</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->
<!-- <artifactId>ruoyi-goods</artifactId>-->
<!-- </dependency>-->
</dependencies>

View File

@ -1,282 +1,150 @@
package com.wzj.soopin.member.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberBlock;
import com.wzj.soopin.member.service.IFansService;
import com.wzj.soopin.member.service.IMemberBlockService;
import com.wzj.soopin.member.service.IMemberService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.dromara.common.core.constant.CacheConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j
@RequestMapping("/ums/fans")
@RequestMapping("/ums/fans/")
@RestController
@RequiredArgsConstructor
public class FansController {
public class FansController {
private final IMemberService memberService;
private final IFansService fansService;
// @PostMapping("follow")
// public R<IPage<FansVO>> follow(@RequestParam String myId,
// @RequestParam String vlogerId) {
// // 从redis中获取拉黑信息
// String redisKey = BaseInfoProperties.REDIS_USER_BLOCK + ":" + myId;
// Boolean hasKey = redis.keyIsExist(redisKey);
// if(hasKey){
// List<String> blockUserList = new ArrayList<>();
// ObjectMapper objectMapper = new ObjectMapper();
// List<String> reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录
private final IMemberBlockService memberBlockService;
@PostMapping("follow")
public R<Object> follow(@RequestParam Long myId,
@RequestParam Long vloggerId) {
// 判断两个id不能为空
if (myId ==null|| vloggerId==null) {
return R.fail("id不能为空");
}
// 获取拉黑数据
boolean hasblock = memberBlockService.hasBlocked(myId, vloggerId);
if (hasblock) {
return R.fail("已经拉黑");
}
// 判断当前用户自己不能关注自己
if (myId ==vloggerId) {
return R.fail("自己不能关注自己");
}
// 是否已经存在关系
boolean flow = fansService.queryDoIFollowVloger(myId, vloggerId);
if (flow) {
return R.fail("已经在关注列表里了");
}
// 判断两个id对应的用户是否存在
Member vlogger = memberService.getById(vloggerId);
Member myInfo = memberService.getById(myId);
if (myInfo == null || vlogger == null) {
return R.fail("用户不存在");
}
//
// for (String report : reports) {
// try {
// Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
// // 处理拉黑信息
// String queryvlogerId = (String) reportMap.get("vlogerId");
// blockUserList.add(queryvlogerId);
// } catch (JsonProcessingException e) {
// e.printStackTrace();
// }
// }
// System.out.println(blockUserList);
// Boolean isBlock = blockUserList.contains(vlogerId);
// if(isBlock){
// return GraceJSONResult.errorCustom(ResponseStatusEnum.ON_BLOCK);
// }
// }
//
// // 判断两个id不能为空
// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
// }
//
// // 判断当前用户自己不能关注自己
// if (myId.equalsIgnoreCase(vlogerId)) {
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);
// }
//
// // 是否已经存在关系
// Boolean flow = fansService.queryDoIFollowVloger(myId,vlogerId);
// if(flow){
// return GraceJSONResult.errorCustom(ResponseStatusEnum.FANS_INFO_UPDATED_ISFAN_EXIST_ERROR);
// }
//
// // 判断两个id对应的用户是否存在
// Users vloger = userService.getUser(vlogerId);
// Users myInfo = userService.getUser(myId);
//
// // fixme: 两个用户id的数据库查询后的判断是分开好还是合并判断好
// if (myInfo == null || vloger == null) {
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);
// }
////
// // 保存粉丝关系到数据库
// fansService.doFollow(myId, vlogerId);
//
// // 博主的粉丝+1我的关注+1
// redis.increment(BaseInfoProperties.REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
// redis.increment(BaseInfoProperties.REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
//
// // 我和博主的关联关系依赖redis不要存储数据库避免db的性能瓶颈
// redis.set(BaseInfoProperties.REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId, "1");
////
// return GraceJSONResult.ok();
// }
//
//// @PostMapping("cancel")
//// public GraceJSONResult cancel(@RequestParam String myId,
//// @RequestParam String vlogerId) {
//// // 判断两个id不能为空
//// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
//// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
//// }
//// // 是否已经存在关系
//// Boolean flow = fansService.queryDoIFollowVloger(myId,vlogerId);
//// if(!flow){
//// return GraceJSONResult.errorCustom(ResponseStatusEnum.FANS_INFO_UPDATED_ISFLOW_EXIST_ERROR);
//// }
//// // 删除业务的执行
//// fansService.doCancel(myId, vlogerId);
////
//// // 博主的粉丝-1我的关注-1
//// redis.decrement(BaseInfoProperties.REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
//// redis.decrement(BaseInfoProperties.REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
////
//// // 我和博主的关联关系依赖redis不要存储数据库避免db的性能瓶颈
//// redis.del(BaseInfoProperties.REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId);
////
//// return GraceJSONResult.ok();
//// }
//
// @GetMapping("queryBlockVloger")
// public GraceJSONResult queryBlockVloger(@RequestParam String myId,
// @RequestParam String vlogerId) {
// // 从redis中获取拉黑信息
// String redisKey = BaseInfoProperties.REDIS_USER_BLOCK + ":" + myId;
// Boolean hasKey = redis.keyIsExist(redisKey);
// if(hasKey){
// List<String> blockUserList = new ArrayList<>();
// ObjectMapper objectMapper = new ObjectMapper();
// List<String> reports = redis.lrange(redisKey, 0, -1); // 查询用户的所有举报记录
//
// for (String report : reports) {
// try {
// Map<String, Object> reportMap = objectMapper.readValue(report, new TypeReference<Map<String, Object>>() {});
// // 处理拉黑信息
// String queryvlogerId = (String) reportMap.get("vlogerId");
// blockUserList.add(queryvlogerId);
// } catch (JsonProcessingException e) {
// e.printStackTrace();
// }
// }
// System.out.println(blockUserList);
// return GraceJSONResult.ok(blockUserList.contains(vlogerId));
// }else{
// return GraceJSONResult.ok(false);
// }
// }
//
// @PostMapping("block")
// public GraceJSONResult block(@RequestParam String myId,
// @RequestParam String vlogerId) {
// // 先执行cancel
// // 判断两个id不能为空
// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
// }
// // 是否已经存在关系
// Boolean flow = fansService.queryDoIFollowVloger(myId,vlogerId);
// if(flow){
// // 删除业务的执行
// fansService.doCancel(myId, vlogerId);
//
// // 博主的粉丝-1我的关注-1
// redis.decrement(BaseInfoProperties.REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);
// redis.decrement(BaseInfoProperties.REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);
//
// // 我和博主的关联关系依赖redis不要存储数据库避免db的性能瓶颈
// redis.del(BaseInfoProperties.REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId);
// }
// // 拉黑
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// String blockTime = LocalDateTime.now().format(formatter);
// try{
// Map<String, String> blockInfo = new HashMap<>();
// blockInfo.put("vlogerId", vlogerId);
// blockInfo.put("myId", myId);
// blockInfo.put("time", blockTime);
// // 转成 JSON 字符串
// ObjectMapper objectMapper = new ObjectMapper();
// String blockJson = objectMapper.writeValueAsString(blockInfo);
// String redisKey = BaseInfoProperties.REDIS_USER_BLOCK + ":" + myId ;
// log.info("写入Redis => key: {}, value: {}", redisKey, blockJson);
// redis.rpush(redisKey , blockJson);
//
// return GraceJSONResult.ok();
// }catch (JsonProcessingException e){
// // 打日志或者抛出业务异常
// e.printStackTrace();
// throw new RuntimeException("JSON序列化失败: " + e.getMessage());
// }
// }
//
// @PostMapping("cancelBlock")
// public GraceJSONResult cancelBlock(@RequestParam String myId,
// @RequestParam String vlogerId) {
// // 判断两个id不能为空
// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
// }
// // 解除拉黑
// String redisKey = BaseInfoProperties.REDIS_USER_BLOCK + ":" + myId;
// Boolean hasKey = redis.keyIsExist(redisKey);
// if(hasKey){
// List<String> blockList = redis.lrange(redisKey, 0, -1);
// ObjectMapper objectMapper = new ObjectMapper();
// if (blockList != null && !blockList.isEmpty()) {
// for (String item : blockList) {
// try {
// Map<String, String> itemMap = objectMapper.readValue(item, new TypeReference<Map<String, String>>() {});
// String storedVlogerId = itemMap.get("vlogerId");
//
// if (storedVlogerId != null && storedVlogerId.equals(vlogerId)) {
// redis.lrem(redisKey, 1, item); // 删除找到的 JSON 字符串
// break;
// }
// }catch (JsonProcessingException e){
// e.printStackTrace();
// }
// }
// }
// return GraceJSONResult.ok();
// }else{
// return GraceJSONResult.error();
// }
// }
//
// @PostMapping("blockVideo")
// public GraceJSONResult blockVideo(@RequestParam String myId,
// @RequestParam String vlogId,
// @RequestParam String reason,
// @RequestParam(defaultValue = "") String description) {
// // 判断两个id不能为空
// if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogId)) {
// return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);
// }
// // 拉黑
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// String blockTime = LocalDateTime.now().format(formatter);
// //
// try{
// Map<String, String> blockInfo = new HashMap<>();
// blockInfo.put("vlogId", vlogId);
// blockInfo.put("reporter", myId);
// blockInfo.put("time", blockTime);
// blockInfo.put("reason", reason);
// blockInfo.put("description", description);
// // 转成 JSON 字符串
// ObjectMapper objectMapper = new ObjectMapper();
// String blockJson = objectMapper.writeValueAsString(blockInfo);
//
// String redisKey = BaseInfoProperties.REDIS_VIDEO_BLOCK + ":" + myId ;
// log.info("写入Redis => key: {}, value: {}", redisKey, blockJson);
// redis.rpush(redisKey , blockJson);
//
// return GraceJSONResult.ok();
// }catch (JsonProcessingException e){
// // 打日志或者抛出业务异常
// e.printStackTrace();
// throw new RuntimeException("JSON序列化失败: " + e.getMessage());
// }
// }
//
//
//
// @GetMapping("queryDoIFollowVloger")
// public GraceJSONResult queryDoIFollowVloger(@RequestParam String myId,
// @RequestParam String vlogerId) {
// return GraceJSONResult.ok(fansService.queryDoIFollowVloger(myId, vlogerId));
// }
//
// @GetMapping("queryMyFollows")
// public GraceJSONResult queryMyFollows(@RequestParam String myId,
// @RequestParam Integer page,
// @RequestParam Integer pageSize) {
// return GraceJSONResult.ok(
// fansService.queryMyFollows(
// myId,
// page,
// pageSize));
// }
//
// @GetMapping("queryMyFans")
// public GraceJSONResult queryMyFans(@RequestParam String myId,
// @RequestParam Integer page,
// @RequestParam Integer pageSize) {
// return GraceJSONResult.ok(
// fansService.queryMyFans(
// myId,
// page,
// pageSize));
// }
// 保存粉丝关系到数据库
fansService.doFollow(myId, vloggerId);
// 博主的粉丝+1我的关注+1
RedisUtils.incrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
RedisUtils.incrAtomicValue(CacheConstants.MEMBER_FOLLOW + ":" + myId);
return R.ok("关注成功");
}
@PostMapping("cancel")
public R<Object> cancel(@RequestParam Long myId,
@RequestParam Long vloggerId) {
// 判断两个id不能为空
if ( myId==null || vloggerId==null) {
return R.fail("id不能为空");
}
// 是否已经存在关系
boolean flow = fansService.queryDoIFollowVloger(myId, vloggerId);
if (!flow) {
return R.fail("没有关注信息");
}
// 删除业务的执行
fansService.doCancel(myId, vloggerId);
// 博主的粉丝-1我的关注-1
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FOLLOW + ":" + myId);
return R.ok("取消成功");
}
@GetMapping("block/list")
public R<List<MemberBlock>> queryBlockVloger(@RequestParam Long myId) {
return R.ok(memberBlockService.list(new LambdaQueryWrapper<MemberBlock>().eq(MemberBlock::getMemberId, myId)));
}
/**
* 添加黑名单
*
* @param myId
* @param vloggerId
* @return
*/
@PostMapping("block")
public R block(@RequestParam Long myId,
@RequestParam Long vloggerId) {
// 先执行cancel
// 判断两个id不能为空
if (myId == null || vloggerId==null) {
return R.ok("id不能为空");
}
// 是否已经存在关系
boolean flow = fansService.queryDoIFollowVloger(myId, vloggerId);
if (flow) {
// 删除业务的执行
fansService.doCancel(myId, vloggerId);
// 博主的粉丝-1我的关注-1
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FOLLOW + ":" + myId);
}
// 拉黑
memberBlockService.addBlock(myId, vloggerId);
return R.ok();
}
@PostMapping("cancelBlock")
public R cancelBlock(@RequestParam Long myId,
@RequestParam Long vloggerId) {
// 判断两个id不能为空
if (myId==null||vloggerId==null) {
R.fail("id不能为空");
}
memberBlockService.removeBlock(myId, vloggerId);
return R.ok();
}
}

View File

@ -1,26 +1,19 @@
package com.wzj.soopin.member.controller;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.FeedbackConvert;
import com.wzj.soopin.member.convert.MemberAccountConvert;
import com.wzj.soopin.member.domain.bo.FeedbackBO;
import com.wzj.soopin.member.domain.po.Feedback;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.vo.FeedbackVO;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import com.wzj.soopin.member.service.IFeedbackService;
import com.wzj.soopin.member.service.IMemberAccountService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -30,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
* @author zcc
* @date 2024-02-26
*/
@Api(description ="意见反馈接口列表")
@Tag(name ="意见反馈接口列表")
@RestController
@RequestMapping("/ums/feedback")
@RequiredArgsConstructor
@ -40,30 +33,35 @@ public class FeedbackController {
private final FeedbackConvert convert;
@ApiOperation("查询意见反馈列表")
@Tag(name ="查询意见反馈列表")
@PostMapping("/list")
public R<IPage<FeedbackVO>> list(@RequestBody FeedbackBO query, Page page) {
public R<IPage<FeedbackVO>> list(@RequestBody FeedbackBO query, @RequestBody Page page) {
Page<Feedback> feedBackPage= service.page(page,query.toWrapper());
return R.ok(convert.toVO( feedBackPage));
}
@ApiOperation("修改意见反馈备注信息")
@Tag(name ="修改意见反馈备注信息")
@Log(title = "意见反馈", businessType = BusinessType.UPDATE)
@PostMapping("/update")
public R editMark(@RequestBody FeedbackBO feedback) {
return R.ok(service.save(convert.toPo(feedback)));
}
@ApiOperation("修改意见反馈备注信息")
@Tag(name ="修改意见反馈备注信息")
@Log(title = "新增意见反馈", businessType = BusinessType.UPDATE)
@PostMapping("/add")
public R add(@RequestBody FeedbackBO feedback) {
return R.ok(service.save(convert.toPo(feedback)));
}
@Tag(name ="获取详细信息")
@GetMapping(value = "/{id}")
public R<FeedbackVO> getInfo(@PathVariable("id") Long id) {
return R.ok( service.selectById(id));
}
@ApiOperation(("修改状态"))
@Tag(name =("修改状态"))
@Log(title = "意见反馈", businessType = BusinessType.UPDATE)
@PostMapping("/handle/status/update")
public R changeStatus(@RequestBody FeedbackBO bo){
@ -71,10 +69,10 @@ public class FeedbackController {
}
@ApiOperation("删除意见反馈")
@Tag(name ="删除意见反馈")
@Log(title = "意见反馈", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Object> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.removeById(id));
public R<Object> remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -0,0 +1,100 @@
package com.wzj.soopin.member.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.MemberAccountChangeRecordConvert;
import com.wzj.soopin.member.convert.MemberConvert;
import com.wzj.soopin.member.domain.bo.MemberAccountChangeRecordBO;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.domain.vo.MemberAccountChangeRecordVO;
import com.wzj.soopin.member.domain.vo.MemberDataStatisticsVO;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.member.service.IMemberAccountChangeRecordService;
import com.wzj.soopin.member.service.IMemberService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 会员信息Controller
*
* @author zcc
* @date 2022-11-28
*/
@Tag(name = "会员账户变动接口列表")
@RequestMapping("/ums/account/change/record")
@RestController
@RequiredArgsConstructor
public class MemberAccountChangeRecordController extends BaseController {
private final IMemberAccountChangeRecordService service;
private final MemberAccountChangeRecordConvert convert;
@Tag(name = "查询账户变动列表")
@SaCheckPermission("ums:accountchange:list")
@PostMapping("list")
public R<Page<MemberAccountChangeRecordVO>> list(@RequestBody MemberAccountChangeRecordBO bo,
Page<MemberAccountChangeRecord> page) {
Page<MemberAccountChangeRecord> memberPage = service.page(page,bo.toWrapper());
return R.ok(convert.toVO(memberPage));
}
@Tag(name ="导出变动记录")
@SaCheckPermission("ums:accountchange:export")
@Log(title = "会员信息", businessType = BusinessType.EXPORT)
@PostMapping("export")
public ResponseEntity<String> export(MemberAccountChangeRecordBO query) {
List<MemberAccountChangeRecord> list = service.list(query.toWrapper());
ExcelUtil<MemberAccountChangeRecordVO> util = new ExcelUtil<>(MemberAccountChangeRecordVO.class);
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "会员变动记录"));
}
@Tag(name ="获取变动记录")
@SaCheckPermission("ums:accountchange:query")
@GetMapping(value = "{id}")
public R<MemberAccountChangeRecordVO> getInfo(@PathVariable("id") Long id) {
return R.ok(convert.toVO(service.getById(id)));
}
@Tag(name ="新增变动记录")
@SaCheckPermission("'ums:accountchange:add")
@Log(title = "新增变动记录", businessType = BusinessType.INSERT)
@PostMapping("add")
public R add(@RequestBody MemberAccountChangeRecordBO member) {
return R.ok(service.save(convert.toPo(member)));
}
@Tag(name ="修改变动记录")
@SaCheckPermission("ums:accountchange:edit")
@Log(title = "修改变动记录", businessType = BusinessType.UPDATE)
@PostMapping("update")
public R edit(@RequestBody MemberAccountChangeRecordBO member) {
return R.ok(service.updateById(convert.toPo(member)));
}
@Tag(name ="删除变动记录")
@SaCheckPermission("ums:accountchange:remove")
@Log(title = "删除变动记录", businessType = BusinessType.DELETE)
@DeleteMapping("{id}")
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
}

View File

@ -3,18 +3,16 @@ package com.wzj.soopin.member.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.MemberAccountConvert;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import com.wzj.soopin.member.service.IMemberAccountService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -25,23 +23,23 @@ import java.util.List;
* @author zcc
* @date 2024-03-01
*/
@Api(description ="会员账户表接口列表")
@Tag(name ="会员账户表接口列表")
@RestController
@RequestMapping("/ums/memberAccount")
@RequestMapping("/ums/member/account")
@RequiredArgsConstructor
public class MemberAccountController {
private final IMemberAccountService service;
private final MemberAccountConvert convert;
@ApiOperation("查询会员账户表列表")
@Tag(name ="查询会员账户表列表")
@PostMapping("/list")
public R<IPage<MemberAccountVO>> list(@RequestBody MemberAccountBO query, IPage page) {
Page<MemberAccount> list = (Page<MemberAccount>) service.page(page,query.toWrapper() );
public R<IPage<MemberAccountVO>> list(@RequestBody MemberAccountBO query, Page page) {
Page<MemberAccount> list = service.page(page,query.toWrapper() );
return R.ok(convert.toVO(list));
}
@ApiOperation("导出会员账户表列表")
@Tag(name ="导出会员账户表列表")
@Log(title = "会员账户表", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public ResponseEntity<String> export(MemberAccountBO query) {
@ -50,27 +48,27 @@ public class MemberAccountController {
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "会员账户表数据"));
}
@ApiOperation("获取会员账户表详细信息")
@Tag(name ="获取会员账户表详细信息")
@GetMapping(value = "/{memberId}")
public ResponseEntity<MemberAccount> getInfo(@PathVariable("memberId") Long memberId) {
return ResponseEntity.ok(service.getById(memberId));
public ResponseEntity<MemberAccountVO> getInfo(@PathVariable("memberId") Long memberId) {
return ResponseEntity.ok(convert.toVO(service.getById(memberId)));
}
@ApiOperation("新增会员账户表")
@Tag(name ="新增会员账户表")
@Log(title = "会员账户表", businessType = BusinessType.INSERT)
@PostMapping("/add")
public ResponseEntity<Object> add(@RequestBody MemberAccountBO memberAccount) {
return ResponseEntity.ok(service.save(convert.toPo(memberAccount)));
}
@ApiOperation("修改会员账户表")
@Tag(name ="修改会员账户表")
@Log(title = "会员账户表", businessType = BusinessType.UPDATE)
@PutMapping("/update")
public ResponseEntity<Object> edit(@RequestBody MemberAccountBO memberAccount) {
return ResponseEntity.ok(service.updateById(convert.toPo(memberAccount)));
}
@ApiOperation("删除会员账户表")
@Tag(name ="删除会员账户表")
@Log(title = "会员账户表", businessType = BusinessType.DELETE)
@DeleteMapping("/{memberId}")

View File

@ -4,20 +4,16 @@ package com.wzj.soopin.member.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.MemberAddressConvert;
import com.wzj.soopin.member.domain.po.MemberAddress;
import com.wzj.soopin.member.domain.bo.MemberAddressBO;
import com.wzj.soopin.member.domain.po.MemberAddress;
import com.wzj.soopin.member.domain.vo.MemberAddressVO;
import com.wzj.soopin.member.service.IMemberAddressService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -29,7 +25,7 @@ import java.util.List;
* @author zcc
* @date 2022-11-28
*/
@Api(description ="会员收货地址接口列表")
@Tag(name ="会员收货地址接口列表")
@RestController
@RequestMapping("/ums/memberAddress")
@RequiredArgsConstructor
@ -39,14 +35,14 @@ public class MemberAddressController {
private final MemberAddressConvert convert;
@ApiOperation("查询会员收货地址列表")
@Tag(name ="查询会员收货地址列表")
@PostMapping("/list")
public R list(@RequestBody MemberAddressBO query, IPage page) {
Page<MemberAddress> list =(Page<MemberAddress> ) service.page(page,query.toWrapper());
return R.ok(convert.toVO(list));
}
@ApiOperation("导出会员收货地址列表")
@Tag(name ="导出会员收货地址列表")
@Log(title = "会员收货地址", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public ResponseEntity<String> export(MemberAddressBO query) {
@ -55,20 +51,20 @@ public class MemberAddressController {
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "会员收货地址数据"));
}
@ApiOperation("获取会员收货地址详细信息")
@Tag(name ="获取会员收货地址详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<MemberAddress> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.getById(id));
}
@ApiOperation("新增会员收货地址")
@Tag(name ="新增会员收货地址")
@Log(title = "会员收货地址", businessType = BusinessType.INSERT)
@PostMapping("/add")
public ResponseEntity<Object> add(@RequestBody MemberAddress memberAddress) {
return ResponseEntity.ok(service.save(memberAddress));
}
@ApiOperation("修改会员收货地址")
@Tag(name ="修改会员收货地址")
@Log(title = "会员收货地址", businessType = BusinessType.UPDATE)
@PostMapping("/update")
public ResponseEntity edit(@RequestBody MemberAddress memberAddress) {
@ -76,7 +72,7 @@ public class MemberAddressController {
return ResponseEntity.ok(null);
}
@ApiOperation("删除会员收货地址")
@Tag(name ="删除会员收货地址")
@Log(title = "会员收货地址", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public ResponseEntity<Object> remove(@PathVariable Long id) {

View File

@ -5,19 +5,16 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.MemberCartConvert;
import com.wzj.soopin.member.domain.po.MemberCart;
import com.wzj.soopin.member.domain.bo.MemberCartBO;
import com.wzj.soopin.member.domain.po.MemberCart;
import com.wzj.soopin.member.domain.vo.MemberCartVO;
import com.wzj.soopin.member.service.IMemberCartService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.dromara.common.core.domain.R;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
@ -26,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
* @author zcc
* @date 2022-11-29
*/
@Api(description ="购物车接口列表")
@Tag(name = "购物车接口列表")
@RestController
@RequestMapping("/ums/memberCart")
public class MemberCartController extends BaseController {
@ -35,14 +32,14 @@ public class MemberCartController extends BaseController {
@Autowired
private MemberCartConvert convert;
@ApiOperation("查询购物车列表")
@Tag(name = "查询购物车列表")
@PostMapping("/list")
public R<Page<MemberCartVO>> list(@RequestBody MemberCartBO query, IPage page) {
Page<MemberCart> userPage=(Page<MemberCart>) service.page(page,new QueryWrapper<MemberCart>());
Page<MemberCart> userPage = (Page<MemberCart>) service.page(page, new QueryWrapper<MemberCart>());
return R.ok(convert.toVO(userPage));
}
@ApiOperation("导出购物车列表")
@Tag(name = "导出购物车列表")
@Log(title = "购物车", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public R<String> export(MemberCartBO query) {
@ -52,29 +49,29 @@ public class MemberCartController extends BaseController {
return null;
}
@ApiOperation("获取购物车详细信息")
@Tag(name = "获取购物车详细信息")
@GetMapping(value = "/{id}")
public R<MemberCart> getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
}
@ApiOperation("新增购物车")
@Tag(name = "新增购物车")
@Log(title = "购物车", businessType = BusinessType.INSERT)
@PostMapping("/add")
public R add(@RequestBody MemberCartBO memberCart) {
return R.ok(service.save(convert.toPo(memberCart)));
}
@ApiOperation("修改购物车")
@Tag(name = "修改购物车")
@Log(title = "购物车", businessType = BusinessType.UPDATE)
@PostMapping("/update")
public R edit(@RequestBody MemberCartBO memberCart) {
return R.ok(service.updateById(convert.toPo(memberCart)));
}
@ApiOperation("删除购物车")
@Tag(name = "删除购物车")
@Log(title = "购物车", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
@DeleteMapping("/{id}")
public R remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}

View File

@ -2,7 +2,6 @@ package com.wzj.soopin.member.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.MemberConvert;
import com.wzj.soopin.member.domain.bo.MemberBO;
@ -11,8 +10,7 @@ import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.vo.MemberDataStatisticsVO;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.member.service.IMemberService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
@ -30,7 +28,7 @@ import java.util.List;
* @author zcc
* @date 2022-11-28
*/
@Api(description ="会员信息接口列表")
@Tag(name = "会员信息接口列表")
@RequestMapping("/ums/member/")
@RestController
public class MemberController extends BaseController {
@ -40,7 +38,7 @@ public class MemberController extends BaseController {
private MemberConvert convert;
@ApiOperation("查询会员信息列表")
@Tag(name = "查询会员信息列表")
@SaCheckPermission("ums:member:list")
@PostMapping("list")
public R<Page<MemberVO>> list(@RequestBody MemberBO bo, Page<Member> page) {
@ -49,7 +47,7 @@ public class MemberController extends BaseController {
return R.ok(convert.toVO(memberPage));
}
@ApiOperation("导出会员信息列表")
@Tag(name ="导出会员信息列表")
@SaCheckPermission("ums:member:export")
@Log(title = "会员信息", businessType = BusinessType.EXPORT)
@PostMapping("export")
@ -59,14 +57,14 @@ public class MemberController extends BaseController {
return ResponseEntity.ok(util.writeExcel(convert.toVO(list), "会员信息数据"));
}
@ApiOperation("获取会员信息详细信息")
@Tag(name ="获取会员信息详细信息")
@SaCheckPermission("ums:member:query")
@GetMapping(value = "{id}")
public ResponseEntity<MemberVO> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(convert.toVO(service.getById(id)));
}
@ApiOperation("新增会员信息")
@Tag(name ="新增会员信息")
@SaCheckPermission("'ums:member:add")
@Log(title = "会员信息", businessType = BusinessType.INSERT)
@PostMapping("add")
@ -74,7 +72,7 @@ public class MemberController extends BaseController {
return R.ok(service.save(convert.toPo(member)));
}
@ApiOperation("修改会员信息")
@Tag(name ="修改会员信息")
@SaCheckPermission("ums:member:edit")
@Log(title = "会员信息", businessType = BusinessType.UPDATE)
@PostMapping("update")
@ -82,15 +80,15 @@ public class MemberController extends BaseController {
return R.ok(service.updateById(convert.toPo(member)));
}
@ApiOperation("修改会员备注信息")
@Tag(name ="修改会员备注信息")
@SaCheckPermission("ums:member:edit")
@Log(title = "会员备注信息", businessType = BusinessType.UPDATE)
@PostMapping("mark/update")
public ResponseEntity<Integer> editMark(@RequestBody Member member) {
return ResponseEntity.ok(service.updateMark(member));
public R<Integer> editMark(@RequestBody MemberBO member) {
return R.ok(service.updateMark(member));
}
@ApiOperation("删除会员信息")
@Tag(name ="删除会员信息")
@SaCheckPermission("ums:member:remove")
@Log(title = "会员信息", businessType = BusinessType.DELETE)
@DeleteMapping("{id}")
@ -98,20 +96,20 @@ public class MemberController extends BaseController {
return R.ok(service.removeById(id));
}
@ApiOperation(("修改会员账户状态"))
@Tag(name =("修改会员账户状态"))
@Log(title = "会员信息", businessType = BusinessType.UPDATE)
@PostMapping("status/change")
public ResponseEntity<Integer> changeStatus(@RequestBody ChangeMemberStatusForm form){
return ResponseEntity.ok(service.changeStatus(form));
public R<Integer> changeStatus(@RequestBody MemberBO memberBO){
return R.ok(service.changeStatus(memberBO));
}
@ApiOperation("会员手机号解密")
@Tag(name ="会员手机号解密")
@GetMapping("phone/decrypt/{phoneEncrypted}")
public ResponseEntity<String> getPhoneDecrypted(@PathVariable String phoneEncrypted){
return ResponseEntity.ok(service.getPhoneDecrypted(phoneEncrypted));
}
@ApiOperation("查看会员统计数据")
@Tag(name ="查看会员统计数据")
@GetMapping("view/statistics/{memberId}")
public ResponseEntity<MemberDataStatisticsVO> viewStatistics(@PathVariable Long memberId){
// return ResponseEntity.ok(service.viewStatistics(memberId));

View File

@ -8,8 +8,7 @@ import com.wzj.soopin.member.domain.bo.MemberLoginInfoBO;
import com.wzj.soopin.member.domain.po.MemberLoginInfo;
import com.wzj.soopin.member.domain.vo.MemberLoginInfoVO;
import com.wzj.soopin.member.service.IMemberLoginInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
@ -26,7 +25,7 @@ import java.util.List;
* @author zcc
* @date 2023-07-26
*/
@Api(description ="会员登录记录接口列表")
@Tag(name ="会员登录记录接口列表")
@RestController
@RequestMapping("/ums/member/loginInfo/")
@RequiredArgsConstructor
@ -34,7 +33,7 @@ public class MemberLoginInfoController extends BaseController {
private final IMemberLoginInfoService service;
private final MemberLoginInfoConvert convert;
@ApiOperation("查询会员登录记录列表")
@Tag(name ="查询会员登录记录列表")
@SaCheckPermission("ums:memberlogininfo:list")
@PostMapping("list")
public R<Page<MemberLoginInfoVO>> list(@RequestBody MemberLoginInfoBO query, Page page) {
@ -42,7 +41,7 @@ public class MemberLoginInfoController extends BaseController {
return R.ok(convert.toVO(list));
}
@ApiOperation("导出会员登录记录列表")
@Tag(name ="导出会员登录记录列表")
@SaCheckPermission("ums:memberlogininfo:export")
@Log(title = "会员登录记录", businessType = BusinessType.EXPORT)
@PostMapping("export")
@ -52,14 +51,23 @@ public class MemberLoginInfoController extends BaseController {
return R.ok(util.writeExcel(convert.toVO(list), "会员登录记录数据"));
}
@ApiOperation("获取会员登录记录详细信息")
@Tag(name ="导出会员登录记录列表")
@SaCheckPermission("ums:memberlogininfo:export")
@Log(title = "会员登录记录", businessType = BusinessType.EXPORT)
@PostMapping("add")
public R<Boolean> add(@RequestBody MemberLoginInfoBO bo) {
return R.ok(service.save(convert.toPo(bo)));
}
@Tag(name ="获取会员登录记录详细信息")
@SaCheckPermission("ums:memberlogininfo:query")
@GetMapping(value = "{id}")
public R<MemberLoginInfoVO> getInfo(@PathVariable("id") Long id) {
return R.ok(convert.toVO(service.getById(id)));
}
@ApiOperation("修改会员登录记录")
@Tag(name ="修改会员登录记录")
@SaCheckPermission("ums:memberlogininfo:edit")
@Log(title = "会员登录记录", businessType = BusinessType.UPDATE)
@PostMapping("/update")
@ -67,7 +75,7 @@ public class MemberLoginInfoController extends BaseController {
return R.ok(service.updateById(convert.toPo(memberLoginInfo)));
}
@ApiOperation("删除会员登录记录")
@Tag(name ="删除会员登录记录")
@SaCheckPermission("ums:memberlogininfo:remove")
@Log(title = "会员登录记录", businessType = BusinessType.DELETE)
@DeleteMapping("{id}")

View File

@ -0,0 +1,20 @@
package com.wzj.soopin.member.convert;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.bo.MemberAccountChangeRecordBO;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.domain.vo.MemberAccountChangeRecordVO;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
/**
* 会员账户表 DO <=> DTO <=> VO / BO / Query
*
* @author zcc
*/
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface MemberAccountChangeRecordConvert extends BaseConverter<MemberAccountChangeRecordVO, MemberAccountChangeRecordBO, MemberAccountChangeRecord> {
}

View File

@ -1,10 +1,11 @@
package com.wzj.soopin.member.domain.bo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wzj.soopin.member.domain.po.Feedback;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.poi.ss.formula.functions.T;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.domain.BaseBO;
import java.time.LocalDateTime;
@ -14,34 +15,76 @@ import java.time.LocalDateTime;
*
* @author zcc
*/
@ApiModel(description="意见反馈 查询 对象")
@Schema(description = "意见反馈 查询 对象")
@Data
public class FeedbackBO extends BaseBO {
@ApiModelProperty("类型 精确匹配")
private String type;
@Schema(description ="ID")
private Long id;
@ApiModelProperty("具体说明 精确匹配")
@Schema(description ="类型")
private Integer type;
@Schema(description ="具体说明")
private String content;
@ApiModelProperty("图片 精确匹配")
@Schema(description ="图片")
private String images;
@ApiModelProperty("联系电话 精确匹配")
@Schema(description ="联系电话")
private String phone;
@ApiModelProperty("处理状态 0未处理 1已处理 精确匹配")
private Integer handleStatus;
@Schema(description ="处理状态 0未处理 1已处理")
private Integer status;
@ApiModelProperty("处理时间 精确匹配")
@Schema(description ="备注")
private String remark;
@Schema(description ="处理时间")
private LocalDateTime handleTime;
private String beginTime;
private String endTime;
@Schema(description ="反馈对象ID")
private Long aimId;
@Schema(description ="反馈分类")
private Integer category;
@Schema(description ="会员ID")
private String memberId;
@Schema(description ="处理人")
private Long handlerId;
@Schema(description ="处理结果类型 0文本 1图片")
private Integer resultType;
@Schema(description ="处理结果")
private String resultContent;
@Schema(description ="反馈对象类型")
private String aimType;
@Override
public LambdaQueryWrapper toWrapper() {
return super.toWrapper();
return new LambdaQueryWrapper<Feedback>()
.eq(type!=null,Feedback::getType, type)
.eq(content!=null,Feedback::getContent, content)
.eq(images!=null,Feedback::getImages, images)
.eq(phone!=null,Feedback::getPhone, phone)
.eq(status!=null,Feedback::getStatus, status)
.eq(remark!=null,Feedback::getRemark, remark)
.eq(handleTime!=null,Feedback::getHandleTime, handleTime)
.eq(aimId!=null,Feedback::getAimId, aimId)
.eq(category!=null,Feedback::getCategory, category)
.eq(memberId!=null,Feedback::getMemberId, memberId)
.eq(handlerId!=null,Feedback::getHandlerId, handlerId)
.eq(resultType!=null,Feedback::getResultType, resultType)
.eq(resultContent!=null,Feedback::getResultContent, resultContent)
.ge(beginTime!=null,Feedback::getCreateTime, beginTime)
.lt(endTime!=null,Feedback::getCreateTime, endTime)
.eq(aimType!=null,Feedback::getAimType, aimType)
.orderByDesc(Feedback::getId)
;
}
}

View File

@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.member.domain.po.MemberAccount;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
@ -16,25 +16,36 @@ import java.math.BigDecimal;
*
* @author zcc
*/
@ApiModel(description="会员账户表 查询 对象")
@Schema(description="会员账户表 查询 对象")
@Data
public class MemberAccountBO extends BaseBO {
@ApiModelProperty("积分余额 精确匹配")
@Schema(description ="积分余额 精确匹配")
private BigDecimal integralBalance;
@ApiModelProperty("历史总共积分 精确匹配")
@Schema(description ="历史总共积分 精确匹配")
private BigDecimal totalIntegralBalance;
@ApiModelProperty("MEMBER_ID")
@TableId(value="member_id", type = IdType.ASSIGN_ID)
@Schema(description ="MEMBER_ID")
private Long memberId;
@Schema(description ="钱包")
private BigDecimal wallet;
@Schema(description ="营收")
private BigDecimal revenue;
@Schema(description ="余额")
private BigDecimal moneyBalance;
public LambdaQueryWrapper<MemberAccount> toWrapper() {
LambdaQueryWrapper<MemberAccount> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MemberAccount::getIntegralBalance, integralBalance);
queryWrapper.eq(MemberAccount::getTotalIntegralBalance, totalIntegralBalance);
queryWrapper.eq(MemberAccount::getMemberId, memberId);
queryWrapper.eq(getIntegralBalance() != null,MemberAccount::getIntegralBalance, integralBalance);
queryWrapper.eq(getTotalIntegralBalance() != null,MemberAccount::getTotalIntegralBalance, totalIntegralBalance);
queryWrapper.eq(getMemberId() != null,MemberAccount::getMemberId, memberId)
;
return queryWrapper;
}

View File

@ -0,0 +1,61 @@
package com.wzj.soopin.member.domain.bo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
/**
* 会员账户表对象 ums_member_account
*
* @author zcc
*/
@Schema(description="会员账户变动记录")
@Data
public class MemberAccountChangeRecordBO extends BaseBO<MemberAccountChangeRecord> {
private Long id;
@Schema(description ="MEMBER_ID")
private Long memberId;
@Schema(description ="余额")
private BigDecimal moneyBalance;
@Schema(description ="变动前余额")
private BigDecimal beforeBalance;
@Schema(description ="变动后余额")
private BigDecimal afterBalance;
@Schema(description ="变动金额")
private BigDecimal changeAmount;
@Schema(description ="变动类型")
private Integer changeType;
@Schema(description ="变动描述")
private String changeDesc;
@Schema(description ="来源")
private Integer source;
@Override
public LambdaQueryWrapper<MemberAccountChangeRecord> toWrapper() {
return new LambdaQueryWrapper<MemberAccountChangeRecord>()
.eq(getMemberId() != null,MemberAccountChangeRecord::getMemberId,memberId)
.eq(getChangeType() != null,MemberAccountChangeRecord::getChangeType,changeType)
.eq(getSource() != null,MemberAccountChangeRecord::getSource,source);
}
}

View File

@ -1,6 +1,6 @@
package com.wzj.soopin.member.domain.bo;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
@ -17,14 +17,14 @@ import lombok.Data;
public class MemberAddDTO {
@NotEmpty(message = "会员用户名必填")
@Size(max = 30,message = "会员用户名最长30位")
@ApiModelProperty(value = "会员用户名")
@Schema(description = "会员用户名")
private String username;
@ApiModelProperty(value = "会员密码")
@Schema(description = "会员密码")
private String password;
@NotEmpty(message = "手机号码不能为空")
@ApiModelProperty(value = "手机号码", required = true)
@Schema(description ="手机号码", required = true)
@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
private String mobile;
}

View File

@ -2,11 +2,8 @@ package com.wzj.soopin.member.domain.bo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.ser.Serializers;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberAddress;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
@ -15,37 +12,37 @@ import org.dromara.common.core.domain.BaseBO;
*
* @author zcc
*/
@ApiModel(description="会员收货地址 查询 对象")
@Schema(description="会员收货地址 查询 对象")
@Data
public class MemberAddressBO extends BaseBO {
@ApiModelProperty("MEMBER_ID 精确匹配")
@Schema(description ="MEMBER_ID 精确匹配")
private Long memberId;
@ApiModelProperty("收货人名称 精确匹配")
@Schema(description ="收货人名称 精确匹配")
private String nameLike;
@ApiModelProperty("PHONE 精确匹配")
@Schema(description ="PHONE 精确匹配")
private String phone;
@ApiModelProperty("是否为默认 精确匹配")
@Schema(description ="是否为默认 精确匹配")
private Integer defaultStatus;
@ApiModelProperty("邮政编码 精确匹配")
@Schema(description ="邮政编码 精确匹配")
private String postCode;
@ApiModelProperty("省份/直辖市 精确匹配")
@Schema(description ="省份/直辖市 精确匹配")
private String province;
@ApiModelProperty("城市 精确匹配")
@Schema(description ="城市 精确匹配")
private String city;
@ApiModelProperty("区 精确匹配")
@Schema(description ="区 精确匹配")
private String district;
@ApiModelProperty("详细地址 精确匹配")
@Schema(description ="详细地址 精确匹配")
private String detailAddress;
@ApiModelProperty("是否默认 精确匹配")
@Schema(description ="是否默认 精确匹配")
private Integer isDefault;
@Override

View File

@ -2,8 +2,7 @@ package com.wzj.soopin.member.domain.bo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wzj.soopin.member.domain.po.Member;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.core.domain.BaseBO;
@ -17,88 +16,85 @@ import java.time.LocalDateTime;
*
* @author zcc
*/
@ApiModel(description="会员信息 查询 对象")
@Schema(description = "会员信息 查询 对象")
@Data
public class MemberBO extends BaseBO {
@ApiModelProperty("昵称 精确匹配")
public class MemberBO extends BaseBO {
@Schema(description = "id")
private Long id;
@Schema(description = "昵称 精确匹配")
private String nickname;
@ApiModelProperty("密码 精确匹配")
@Schema(description = "密码 精确匹配")
private String password;
@ApiModelProperty("手机号码 精确匹配")
@Schema(description = "手机号码 精确匹配")
private String phone;
@ApiModelProperty("有无备注 1有备注 0无备注")
@Schema(description = "有无备注 1有备注 0无备注")
private Integer hasMark;
@ApiModelProperty("用户备注 精确匹配")
@Schema(description = "用户备注 精确匹配")
private String mark;
@ApiModelProperty("帐号启用状态:0->禁用1->启用 精确匹配")
@Schema(description = "帐号启用状态:0->禁用1->启用 精确匹配")
private Integer status;
@ApiModelProperty("头像 精确匹配")
@Schema(description = "头像 精确匹配")
private String avatar;
@ApiModelProperty("性别0->未知1->男2->女 精确匹配")
@Schema(description = "性别0->未知1->男2->女 精确匹配")
private Integer gender;
@ApiModelProperty("用户所在城市 精确匹配")
@Schema(description = "用户所在城市 精确匹配")
private String city;
@ApiModelProperty("用户所在省份 精确匹配")
@Schema(description = "用户所在省份 精确匹配")
private String province;
@ApiModelProperty("用户所在国家 精确匹配")
@Schema(description = "用户所在国家 精确匹配")
private String country;
@ApiModelProperty("生日 精确匹配")
@Schema(description = "生日 精确匹配")
private LocalDate birthday;
@ApiModelProperty("推广员id 精确匹配")
@Schema(description = "推广员id 精确匹配")
private Long spreadUid;
@ApiModelProperty("推广员关联时间 精确匹配")
@Schema(description = "推广员关联时间 精确匹配")
private LocalDateTime spreadTime;
@ApiModelProperty("等级 精确匹配")
@Schema(description = "等级 精确匹配")
private Integer level;
@ApiModelProperty("用户剩余积分 精确匹配")
@Schema(description = "用户剩余积分 精确匹配")
private BigDecimal integral;
private String beginTime;
private String endTime;
public QueryWrapper<Member> toWapper(){
public QueryWrapper<Member> toWapper() {
QueryWrapper<Member> qw = new QueryWrapper<>();
qw.lambda().like(!StringUtils.isEmpty(this.getNickname()),Member::getNickname, this.getNickname());
String phone = this.getPhone();
if (!StringUtils.isEmpty(phone)) {
qw.eq("phone_encrypted", phone);
}
if (!StringUtils.isEmpty(this.getBeginTime()) && !StringUtils.isEmpty(this.getEndTime())){
qw.ge("create_time", this.getBeginTime());
qw.lt("create_time", this.getEndTime());
}
qw.lambda()
.like(StringUtils.isNotEmpty(this.getNickname()), Member::getNickname, this.getNickname())
.eq(getId() != null, Member::getId, this.getId())
.eq(status != null, Member::getStatus, status)
.eq(StringUtils.isNotEmpty(this.getPhone()), Member::getPhoneEncrypted, phone);
qw.ge(getBeginTime() != null, "create_time", this.getBeginTime());
qw.lt(getEndTime() != null, "create_time", this.getEndTime());
if (this.getHasMark() != null) {
switch (this.getHasMark()) {
case 0:
qw.isNull("mark").or().eq("mark","");
qw.isNull("mark").or().eq("mark", "");
break;
case 1:
qw.isNotNull("mark").ne("mark","");
qw.isNotNull("mark").ne("mark", "");
break;
default:
break;
}
}
if (this.getStatus() != null){
qw.eq("status", this.getStatus());
}
return qw;
}
}

View File

@ -1,7 +1,6 @@
package com.wzj.soopin.member.domain.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
@ -9,34 +8,34 @@ import lombok.Data;
*
* @author zcc
*/
@ApiModel(description="购物车 查询 对象")
@Schema(description="购物车 查询 对象")
@Data
public class MemberCartBO {
@ApiModelProperty("0->失效1->有效 精确匹配")
@Schema(description ="0->失效1->有效 精确匹配")
private Integer status;
@ApiModelProperty("用户ID 精确匹配")
@Schema(description ="用户ID 精确匹配")
private Long memberId;
@ApiModelProperty("商品ID 精确匹配")
@Schema(description ="商品ID 精确匹配")
private Long productId;
@ApiModelProperty("展示图片 精确匹配")
@Schema(description ="展示图片 精确匹配")
private String pic;
@ApiModelProperty("SKU ID 精确匹配")
@Schema(description ="SKU ID 精确匹配")
private Long skuId;
@ApiModelProperty("商品名称 精确匹配")
@Schema(description ="商品名称 精确匹配")
private String productName;
@ApiModelProperty("商品属性 精确匹配")
@Schema(description ="商品属性 精确匹配")
private String spData;
@ApiModelProperty("商品数量 精确匹配")
@Schema(description ="商品数量 精确匹配")
private Integer quantity;
@ApiModelProperty("用户手机号")
@Schema(description ="用户手机号")
private String phone;
}

View File

@ -1,7 +1,7 @@
package com.wzj.soopin.member.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
@ -21,31 +21,31 @@ import java.util.Date;
public class MemberEditDTO {
@ApiModelProperty(value = "昵称", required = true)
@Schema(description = "昵称", required = true)
@Size(min = 2, max = 20, message = "会员昵称必须为2到20位之间")
private String nickName;
@ApiModelProperty(value = "会员地址ID")
@Schema(description = "会员地址ID")
private String regionId;
@ApiModelProperty(value = "会员地址")
@Schema(description = "会员地址")
private String region;
@Min(message = "必须为数字且1为男,0为女", value = 0)
@Max(message = "必须为数字且1为男,0为女", value = 1)
@NotNull(message = "会员性别不能为空")
@ApiModelProperty(value = "会员性别,1为男0为女", required = true)
@Schema(description = "会员性别,1为男0为女", required = true)
private Integer sex;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "会员生日")
@Schema(description = "会员生日")
private Date birthday;
@ApiModelProperty(value = "详细地址")
@Schema(description = "详细地址")
private String address;
@ApiModelProperty(value = "会员头像")
@Schema(description = "会员头像")
private String face;
}

View File

@ -2,8 +2,7 @@ package com.wzj.soopin.member.domain.bo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.member.domain.po.MemberLoginInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
@ -14,34 +13,30 @@ import java.time.LocalDateTime;
*
* @author zcc
*/
@ApiModel(description="会员登录记录 查询 对象")
@Schema(description="会员登录记录 查询 对象")
@Data
public class MemberLoginInfoBO extends BaseBO<MemberLoginInfo> {
@ApiModelProperty("会员手机号 精确匹配")
@Schema(description ="会员手机号 精确匹配")
private String phone;
@ApiModelProperty("会员id 精确匹配")
@Schema(description ="会员id 精确匹配")
private Long memberId;
@ApiModelProperty("登录IP地址 精确匹配")
@Schema(description ="登录IP地址 精确匹配")
private String ipaddr;
@ApiModelProperty("登录地点 精确匹配")
@Schema(description ="登录地点 精确匹配")
private String loginLocation;
@ApiModelProperty("浏览器类型 精确匹配")
@Schema(description ="浏览器类型 精确匹配")
private String browser;
@ApiModelProperty("操作系统 精确匹配")
@Schema(description ="操作系统 精确匹配")
private String os;
@ApiModelProperty("登陆时间 精确匹配")
@Schema(description ="登陆时间 精确匹配")
private LocalDateTime loginTime;
private String beginTime;
private String endTime;
@Override
public LambdaQueryWrapper<MemberLoginInfo> toWrapper() {
return super.toWrapper();

View File

@ -1,7 +1,6 @@
package com.wzj.soopin.member.domain.bo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@ -11,46 +10,46 @@ import java.time.LocalDateTime;
*
* @author zcc
*/
@ApiModel(description="用户微信信息 查询 对象")
@Schema(description="用户微信信息 查询 对象")
@Data
public class MemberWechatBO {
@ApiModelProperty("MEMBER_ID 精确匹配")
@Schema(description ="MEMBER_ID 精确匹配")
private Long memberId;
@ApiModelProperty("只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段 精确匹配")
@Schema(description ="只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段 精确匹配")
private String unionid;
@ApiModelProperty("用户的标识,对当前公众号唯一 精确匹配")
@Schema(description ="用户的标识,对当前公众号唯一 精确匹配")
private String openid;
@ApiModelProperty("小程序唯一身份ID 精确匹配")
@Schema(description ="小程序唯一身份ID 精确匹配")
private String routineOpenid;
@ApiModelProperty("用户所在的分组ID兼容旧的用户分组接口 精确匹配")
@Schema(description ="用户所在的分组ID兼容旧的用户分组接口 精确匹配")
private Integer groupid;
@ApiModelProperty("用户被打上的标签ID列表 精确匹配")
@Schema(description ="用户被打上的标签ID列表 精确匹配")
private String tagidList;
@ApiModelProperty("用户是否订阅该公众号标识 精确匹配")
@Schema(description ="用户是否订阅该公众号标识 精确匹配")
private Integer subscribe;
@ApiModelProperty("关注公众号时间 精确匹配")
@Schema(description ="关注公众号时间 精确匹配")
private Integer subscribeTime;
@ApiModelProperty("小程序用户会话密匙 精确匹配")
@Schema(description ="小程序用户会话密匙 精确匹配")
private String sessionKey;
@ApiModelProperty("token 精确匹配")
@Schema(description ="token 精确匹配")
private String accessToken;
@ApiModelProperty("过期时间 精确匹配")
@Schema(description ="过期时间 精确匹配")
private Integer expiresIn;
@ApiModelProperty("刷新token 精确匹配")
@Schema(description ="刷新token 精确匹配")
private String refreshToken;
@ApiModelProperty("过期时间 精确匹配")
@Schema(description ="过期时间 精确匹配")
private LocalDateTime expireTime;
}

View File

@ -1,42 +1,33 @@
package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import org.dromara.common.mybatis.core.domain.BaseEntity;
/**
* 地址对象
*
*/
@ApiModel(description="地址对象")
@Schema(description="地址对象")
@Data
@TableName("address")
public class Address extends BaseAudit {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@Schema(description ="ID")
private Integer id;
@ApiModelProperty("地区邮编")
@Excel(name = "地区邮编")
@Schema(description ="地区邮编")
private Long code;
@ApiModelProperty("父地区邮编")
@Excel(name = "父地区邮编")
@Schema(description ="父地区邮编")
private Long parentCode;
@ApiModelProperty("地区名")
@Excel(name = "地区名")
@Schema(description ="地区名")
private String name;
@ApiModelProperty("地区层级")
@Excel(name = "地区层级")
@Schema(description ="地区层级")
private Integer level;
}

View File

@ -3,13 +3,10 @@ package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.tenant.core.TenantEntity;
import java.util.Date;
@TableName( "ums_fans")
@Data
@ -17,14 +14,15 @@ import java.util.Date;
public class Fans extends BaseAudit {
@ApiModelProperty("ID")
@Schema(description ="ID")
@TableId
private Long id;
/**
* 作家用户id
*/
@TableField( "vloger_id")
private String vlogerId;
@TableField( "vlogger_id")
private Long vloggerId;
@ -32,12 +30,18 @@ public class Fans extends BaseAudit {
/**
* 粉丝用户id
*/
private String fanId;
@Schema(description ="粉丝id")
private Long fanId;
/**
* 粉丝是否是vloger的朋友如果成为朋友则本表的双方此字段都需要设置为1如果有一人取关则两边都需要设置为0
*/
private Integer isFanFriendOfMine;
@Schema(description ="是否是好友")
private Integer friendFlag;
@Schema(description ="是否互相关注")
private Integer bothFriend;
}

View File

@ -1,12 +1,10 @@
package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.time.LocalDateTime;
/**
@ -14,41 +12,60 @@ import java.time.LocalDateTime;
*
* @author zcc
*/
@ApiModel(description="意见反馈对象")
@Schema(description="意见反馈对象")
@Data
@TableName("ums_feedback")
public class Feedback extends BaseAudit {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@Schema(description ="ID")
private Long id;
@ApiModelProperty("类型")
@Excel(name = "类型")
private String type;
@Schema(description ="类型")
private Integer type;
@ApiModelProperty("具体说明")
@Excel(name = "具体说明")
@Schema(description ="具体说明")
private String content;
@ApiModelProperty("图片")
@Excel(name = "图片")
@Schema(description ="图片")
private String images;
@ApiModelProperty("联系电话")
@Excel(name = "联系电话")
@Schema(description ="联系电话")
private String phone;
@ApiModelProperty("处理状态 0未处理 1已处理")
@Excel(name = "处理状态 0未处理 1已处理")
private Integer handleStatus;
@Schema(description ="处理状态 0未处理 1已处理")
private Integer status;
@ApiModelProperty("备注")
@Excel(name = "备注")
@Schema(description ="备注")
private String remark;
@ApiModelProperty("处理时间")
@Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@Schema(description ="处理时间")
private LocalDateTime handleTime;
@Schema(description ="反馈对象ID")
private Long aimId;
@Schema(description ="反馈对象类型 0 会员 1 群组 2 评论 3 视频 4 聊天" )
private Integer aimType;
@Schema(description ="反馈分类")
private Integer category;
@Schema(description ="会员ID")
private Long memberId;
@Schema(description ="处理人")
private Long handlerId;
@Schema(description ="处理结果类型 0文本 1图片")
private Integer resultType;
@Schema(description ="处理结果")
private String resultContent;
}

View File

@ -1,14 +1,12 @@
package com.wzj.soopin.member.domain.po;
import cn.dev33.satoken.annotation.SaCheckHttpDigest;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
import java.time.LocalDate;
@ -18,102 +16,84 @@ import java.time.LocalDateTime;
*
* @author zcc
*/
@ApiModel(description="会员信息对象")
@Schema(description="会员信息对象")
@Data
@Builder
@TableName("ums_member")
public class Member extends BaseAudit {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@Schema(description = "会员id")
@TableId
private Long id;
@ApiModelProperty("用户名")
@Excel(name = "用户名")
@Schema(description = "用户名")
private String userName;
@ApiModelProperty("昵称")
@Excel(name = "昵称")
@Schema(description ="昵称")
private String nickname;
@ApiModelProperty("密码")
@Excel(name = "密码")
@Schema(description ="密码")
private String password;
@ApiModelProperty("加密手机号")
@Schema(description ="加密手机号")
private String phoneEncrypted;
@ApiModelProperty("隐藏前三位后四位的手机号")
@Schema(description ="隐藏前三位后四位的手机号")
private String phoneHidden;
@ApiModelProperty("用户备注")
@Excel(name = "用户备注")
@Schema(description ="用户备注")
private String mark;
@ApiModelProperty("帐号启用状态:0->禁用1->启用")
@Excel(name = "帐号启用状态:0->禁用1->启用")
@Schema(description ="帐号启用状态:0->禁用1->启用")
private Integer status;
@ApiModelProperty("头像")
@Excel(name = "头像")
@Schema(description ="头像")
private String avatar;
@ApiModelProperty("性别0->未知1->男2->女")
@Excel(name = "性别0->未知1->男2->女")
@Schema(description ="性别0->未知1->男2->女")
private Integer gender;
@ApiModelProperty("用户所在城市")
@Excel(name = "用户所在城市")
@Schema(description ="用户所在城市")
private String city;
@ApiModelProperty("用户所在省份")
@Excel(name = "用户所在省份")
@Schema(description ="用户所在省份")
private String province;
@ApiModelProperty("用户所在国家")
@Excel(name = "用户所在国家")
@Schema(description ="用户所在国家")
private String country;
@ApiModelProperty("公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注")
@Excel(name = "公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注")
@Schema(description ="公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注")
private String remark;
@ApiModelProperty("生日")
@Excel(name = "生日", width = 30, dateFormat = "yyyy-MM-dd")
@Schema(description ="生日")
private LocalDate birthday;
@ApiModelProperty("推广员id")
@Excel(name = "推广员id")
@Schema(description ="推广员id")
private Long spreadUid;
@ApiModelProperty("推广员关联时间")
@Excel(name = "推广员关联时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@Schema(description ="推广员关联时间")
private LocalDateTime spreadTime;
@ApiModelProperty("等级")
@Excel(name = "等级")
@Schema(description ="等级")
private Integer level;
@ApiModelProperty("用户剩余积分")
@Excel(name = "用户剩余积分")
@Schema(description ="用户剩余积分")
private BigDecimal integral;
@ApiModelProperty("im签名")
@Excel(name = "im签名")
@Schema(description ="im签名")
private String userSig; // 添加 UserSig 属性
@ApiModelProperty("发布视频")
@Excel(name = "发布视频")
@Schema(description ="发布视频")
private Integer vlogCount;
@ApiModelProperty("粉丝数")
@Excel(name = "粉丝数")
@Schema(description ="粉丝数")
private Integer fansCount;
@ApiModelProperty("关注数")
@Excel(name = "关注数")
@Schema(description ="关注数")
private Integer followCount;
@Schema(description ="好友数")
private Integer friendsCount;
@Schema(description ="微信openId")
private Long openId;
}

View File

@ -3,38 +3,44 @@ package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 会员账户表对象 ums_member_account
*
* @author zcc
*/
@ApiModel(description="会员账户表对象")
@Schema(description="会员账户表对象")
@Data
@TableName("ums_member_account")
@TableName("ums_account")
@Builder(toBuilder = true)
public class MemberAccount extends BaseAudit {
private static final long serialVersionUID = 1L;
@ApiModelProperty("MEMBER_ID")
@TableId(value="member_id", type = IdType.ASSIGN_ID)
@Schema(description ="MEMBER_ID")
@TableId(value="member_id")
private Long memberId;
@ApiModelProperty("积分余额")
@Excel(name = "积分余额")
@Schema(description ="积分余额")
private BigDecimal integralBalance;
@ApiModelProperty("历史总共积分")
@Excel(name = "历史总共积分")
@Schema(description ="历史总共积分")
private BigDecimal totalIntegralBalance;
@Schema(description ="余额")
private BigDecimal moneyBalance;
@Schema(description ="钱包")
private BigDecimal wallet;
@Schema(description ="营收")
private BigDecimal revenue;
}

View File

@ -0,0 +1,57 @@
package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
/**
* 会员账户表对象 ums_member_account
*
* @author zcc
*/
@Schema(description="会员账户变动记录")
@Data
@TableName("ums_account_change_record")
public class MemberAccountChangeRecord extends BaseAudit {
@Schema(description ="主键")
@TableId(value="id")
private Long id;
@Schema(description ="会员id")
private Long memberId;
@Schema(description ="余额")
private BigDecimal moneyBalance;
@Schema(description ="变动前余额")
private BigDecimal beforeBalance;
@Schema(description ="变动后余额")
private BigDecimal afterBalance;
@Schema(description ="变动金额")
@Excel(name = "变动金额")
private BigDecimal changeAmount;
@Schema(description ="变动类型")
private Integer changeType;
@Schema(description ="变动描述")
private String changeDesc;
@Schema(description ="来源")
private Integer source;
}

View File

@ -1,81 +1,77 @@
package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import org.dromara.common.mybatis.core.domain.BaseEntity;
/**
* 会员收货地址对象 ums_member_address
*
* @author zcc
*/
@ApiModel(description="会员收货地址对象")
@Schema(description="会员收货地址对象")
@Data
@TableName("ums_member_address")
public class MemberAddress extends BaseAudit {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@Schema(description ="ID")
private Long id;
@ApiModelProperty("MEMBER_ID")
@Schema(description ="MEMBER_ID")
@Excel(name = "MEMBER_ID")
private Long memberId;
@ApiModelProperty("收货人名称")
@Schema(description ="收货人名称")
@Excel(name = "收货人名称")
private String name;
@ApiModelProperty("隐藏前三位后四位的手机号")
@Schema(description ="隐藏前三位后四位的手机号")
@Excel(name = "隐藏前三位后四位的手机号")
private String phoneHidden;
@ApiModelProperty("加密的手机号")
@Schema(description ="加密的手机号")
@Excel(name = "加密的手机号")
private String phoneEncrypted;
@ApiModelProperty("是否为默认")
@Schema(description ="是否为默认")
@Excel(name = "是否为默认")
private Integer defaultStatus;
private Integer defaultFlag;
@ApiModelProperty("邮政编码")
@Schema(description ="邮政编码")
@Excel(name = "邮政编码")
private String postCode;
@ApiModelProperty("省份/直辖市")
@Schema(description ="省份/直辖市")
@Excel(name = "省份/直辖市")
private String province;
@ApiModelProperty("城市")
@Schema(description ="城市")
@Excel(name = "城市")
private String city;
@ApiModelProperty("")
@Schema(description ="")
@Excel(name = "")
private String district;
@ApiModelProperty("省份/直辖市id")
@Schema(description ="省份/直辖市id")
@Excel(name = "省份/直辖市id")
private Long provinceId;
@ApiModelProperty("城市id")
@Schema(description ="城市id")
@Excel(name = "城市id")
private Long cityId;
@ApiModelProperty("区id")
@Schema(description ="区id")
@Excel(name = "区id")
private Long districtId;
@ApiModelProperty("详细地址(街道)")
@Schema(description ="详细地址(街道)")
@Excel(name = "详细地址(街道)")
private String detailAddress;
@ApiModelProperty("是否默认")
@Excel(name = "是否默认")
private Integer isDefault;
}

View File

@ -0,0 +1,30 @@
package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
/**
* 黑名单
*
*/
@Schema(description="黑名单")
@Data
@TableName("ums_block")
@Builder(toBuilder = true)
public class MemberBlock extends BaseAudit {
@Schema(description ="ID")
@TableId
private Long id;
@Schema(description ="用户id")
private Long memberId;
@Schema(description ="被拉黑人id")
private Long blockMemberId;
}

View File

@ -1,56 +1,56 @@
package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import org.dromara.common.mybatis.core.domain.BaseEntity;
/**
* 购物车对象 ums_member_cart
*
* @author zcc
*/
@ApiModel(description="购物车对象")
@Schema(description="购物车对象")
@Data
@TableName("ums_member_cart")
public class MemberCart extends BaseAudit {
private static final long serialVersionUID = 1L;
@ApiModelProperty("购物车表ID")
@Schema(description ="购物车表ID")
@TableId
private Long id;
@ApiModelProperty("0->失效1->有效")
@Schema(description ="0->失效1->有效")
@Excel(name = "0->失效1->有效")
private Integer status;
@ApiModelProperty("用户ID")
@Schema(description ="用户ID")
@Excel(name = "用户ID")
private Long memberId;
@ApiModelProperty("商品ID")
@Schema(description ="商品ID")
@Excel(name = "商品ID")
private Long productId;
@ApiModelProperty("展示图片")
@Schema(description ="展示图片")
@Excel(name = "展示图片")
private String pic;
@ApiModelProperty("SKU ID")
@Schema(description ="SKU ID")
@Excel(name = "SKU ID")
private Long skuId;
@ApiModelProperty("PRODUCT_NAME")
@Schema(description ="PRODUCT_NAME")
@Excel(name = "PRODUCT_NAME")
private String productName;
@ApiModelProperty("商品属性")
@Schema(description ="商品属性")
@Excel(name = "商品属性")
private String spData;
@ApiModelProperty("商品数量")
@Schema(description ="商品数量")
@Excel(name = "商品数量")
private Integer quantity;

View File

@ -1,8 +1,8 @@
package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.excel.annotation.Excel;
@ -12,40 +12,41 @@ import java.time.LocalDateTime;
*
* @author zcc
*/
@ApiModel(description="会员登录记录对象")
@Schema(description="会员登录记录对象")
@Data
@TableName("ums_member_login_info")
public class MemberLoginInfo {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@Schema(description ="ID")
@TableId
private Long id;
@ApiModelProperty("会员手机号")
@Schema(description ="会员手机号")
@Excel(name = "会员手机号")
private String phone;
@ApiModelProperty("会员id")
@Schema(description ="会员id")
@Excel(name = "会员id")
private Long memberId;
@ApiModelProperty("登录IP地址")
@Schema(description ="登录IP地址")
@Excel(name = "登录IP地址")
private String ipaddr;
@ApiModelProperty("登录地点")
@Schema(description ="登录地点")
@Excel(name = "登录地点")
private String loginLocation;
@ApiModelProperty("浏览器类型")
@Schema(description ="浏览器类型")
@Excel(name = "浏览器类型")
private String browser;
@ApiModelProperty("操作系统")
@Schema(description ="操作系统")
@Excel(name = "操作系统")
private String os;
@ApiModelProperty("登陆时间")
@Schema(description ="登陆时间")
@Excel(name = "登陆时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime loginTime;

View File

@ -1,12 +1,10 @@
package com.wzj.soopin.member.domain.po;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.time.LocalDateTime;
/**
@ -14,64 +12,64 @@ import java.time.LocalDateTime;
*
* @author zcc
*/
@ApiModel(description="用户微信信息对象")
@Schema(description="用户微信信息对象")
@Data
@TableName("ums_member_wechat")
public class MemberWechat extends BaseAudit {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@Schema(description ="ID")
private Long id;
@ApiModelProperty("MEMBER_ID")
@Schema(description ="MEMBER_ID")
@Excel(name = "MEMBER_ID")
private Long memberId;
@ApiModelProperty("只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段")
@Schema(description ="只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段")
@Excel(name = "只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段")
private String unionid;
@ApiModelProperty("用户的标识,对当前公众号唯一")
@Schema(description ="用户的标识,对当前公众号唯一")
@Excel(name = "用户的标识,对当前公众号唯一")
private String openid;
@ApiModelProperty("小程序唯一身份ID")
@Schema(description ="小程序唯一身份ID")
@Excel(name = "小程序唯一身份ID")
private String routineOpenid;
@ApiModelProperty("用户所在的分组ID兼容旧的用户分组接口")
@Schema(description ="用户所在的分组ID兼容旧的用户分组接口")
@Excel(name = "用户所在的分组ID", readConverterExp = "兼=容旧的用户分组接口")
private Integer groupid;
@ApiModelProperty("用户被打上的标签ID列表")
@Schema(description ="用户被打上的标签ID列表")
@Excel(name = "用户被打上的标签ID列表")
private String tagidList;
@ApiModelProperty("用户是否订阅该公众号标识")
@Schema(description ="用户是否订阅该公众号标识")
@Excel(name = "用户是否订阅该公众号标识")
private Integer subscribe;
@ApiModelProperty("关注公众号时间")
@Schema(description ="关注公众号时间")
@Excel(name = "关注公众号时间")
private Integer subscribeTime;
@ApiModelProperty("小程序用户会话密匙")
@Schema(description ="小程序用户会话密匙")
@Excel(name = "小程序用户会话密匙")
private String sessionKey;
@ApiModelProperty("token")
@Schema(description ="token")
@Excel(name = "token")
private String accessToken;
@ApiModelProperty("过期时间")
@Schema(description ="过期时间")
@Excel(name = "过期时间")
private Integer expiresIn;
@ApiModelProperty("刷新token")
@Schema(description ="刷新token")
@Excel(name = "刷新token")
private String refreshToken;
@ApiModelProperty("过期时间")
@Schema(description ="过期时间")
@Excel(name = "过期时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime expireTime;

View File

@ -1,19 +1,40 @@
package com.wzj.soopin.member.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.dromara.common.excel.annotation.Excel;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Schema(description ="粉丝")
public class FansVO {
@Schema(description ="博主id")
@Excel(name = "博主id")
private String vlogerId;
@Schema(description ="粉丝id")
@Excel(name = "粉丝id")
private String fanId;
@Schema(description ="昵称")
@Excel(name = "昵称")
private String nickname;
@Schema(description ="头像")
@Excel(name = "头像")
private String face;
private boolean isFriend = false;
@Schema(description ="是否是好友")
@Excel(name = "是否是好友")
private boolean friendFlag = false;
@Schema(description ="是否互相关注")
@Excel(name = "是否互相关注")
private int bothFriend;
@Schema(description ="创建时间")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private String createdTime;
}

View File

@ -1,6 +1,7 @@
package com.wzj.soopin.member.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.excel.annotation.Excel;
@ -11,12 +12,13 @@ import java.time.LocalDateTime;
* @author zcc
*/
@Data
@Schema(description ="反馈")
public class FeedbackVO {
/** ID */
private Long id;
/** 类型 */
@Excel(name = "类型")
private String type;
private Integer type;
/** 具体说明 */
@Excel(name = "具体说明")
private String content;
@ -27,7 +29,7 @@ public class FeedbackVO {
@Excel(name = "联系电话")
private String phone;
/** 创建人 */
private Long createBy;
private Long createBy;
/** 创建时间 */
private LocalDateTime createTime;
/** 处理状态 0未处理 1已处理 */
@ -40,4 +42,36 @@ public class FeedbackVO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime handleTime;
@Schema(description ="反馈对象ID")
@Excel(name = "反馈对象ID")
private Long aimId;
@Schema(description ="反馈对象类型 0 会员 1 群组 2 评论 3 视频 4 聊天" )
private Integer aimType;
@Schema(description ="反馈对象")
private Object aimObject;
@Schema(description ="反馈分类")
private Integer category;
@Schema(description ="会员ID")
@Excel(name = "会员ID")
private Long memberId;
private MemberVO member;
@Schema(description ="处理人")
@Excel(name = "处理人")
private Long handlerId;
@Schema(description ="处理结果类型 0文本 1图片")
@Excel(name = "处理结果类型 0不予处理 1已处理")
private Integer resultType;
@Schema(description ="处理结果")
@Excel(name = "处理结果")
private String resultContent;
}

View File

@ -0,0 +1,61 @@
package com.wzj.soopin.member.domain.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
/**
* 会员账户表对象 ums_member_account
*
* @author zcc
*/
@Schema(description="会员账户变动记录")
@Data
public class MemberAccountChangeRecordVO extends BaseAudit {
private Long id;
@Schema(description ="MEMBER_ID")
@TableId(value="member_id", type = IdType.ASSIGN_ID)
private Long memberId;
@Schema(description ="余额")
@Excel(name = "余额")
private BigDecimal moneyBalance;
@Schema(description ="变动前余额")
@Excel(name = "变动前余额")
private BigDecimal beforeBalance;
@Schema(description ="变动后余额")
@Excel(name = "变动后余额")
private BigDecimal afterBalance;
@Schema(description ="变动金额")
@Excel(name = "变动金额")
private BigDecimal changeAmount;
@Schema(description ="变动类型")
@Excel(name = "变动类型")
private String changeType;
@Schema(description ="变动描述")
@Excel(name = "变动描述")
private String changeDesc;
@Schema(description ="来源")
@Excel(name = "来源")
private Integer source;
}

View File

@ -1,5 +1,6 @@
package com.wzj.soopin.member.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.excel.annotation.Excel;
@ -20,8 +21,18 @@ public class MemberAccountVO {
/** 历史总共积分 */
@Excel(name = "历史总共积分")
private BigDecimal totalIntegralBalance;
/** 修改时间 */
private LocalDateTime updateTime;
/** 创建时间 */
private LocalDateTime createTime;
@Schema(description ="余额")
@Excel(name = "余额")
private BigDecimal moneyBalance;
@Schema(description ="钱包")
@Excel(name = "钱包")
private BigDecimal wallet;
@Schema(description ="营收")
@Excel(name = "营收")
private BigDecimal revenue;
}

View File

@ -0,0 +1,27 @@
package com.wzj.soopin.member.domain.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.model.BaseAudit;
/**
* 黑名单
*
*/
@Schema(description="黑名单")
@Data
public class MemberBlockVO extends BaseAudit {
@Schema(description ="ID")
@TableId
private Long id;
@Schema(description ="用户id")
private Long memberId;
@Schema(description ="被拉黑人id")
private Long blockMemberId;
}

View File

@ -1,20 +1,19 @@
package com.wzj.soopin.member.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel("会员下单数据统计对象")
@Schema(description ="会员下单数据统计对象")
public class MemberDataStatisticsVO {
@ApiModelProperty("购物车数")
@Schema(description ="购物车数")
private Integer cartCount;
@ApiModelProperty("订单数")
@Schema(description ="订单数")
private Integer orderCount;
@ApiModelProperty("下单金额")
@Schema(description ="下单金额")
private BigDecimal orderAmount;
@ApiModelProperty("售后数")
@Schema(description ="售后数")
private Integer aftersaleCount;
}

View File

@ -1,83 +1,140 @@
package com.wzj.soopin.member.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.excel.annotation.Excel;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 会员信息 数据视图对象
*
* @author zcc
*/
@Data
public class MemberVO {
/** ID */
@Schema(description = "会员信息")
public class MemberVO {
/** 会员唯一标识 ID */
@Schema(description = "会员唯一标识 ID")
private Long id;
/** 昵称 */
/** 会员昵称 */
@Excel(name = "昵称")
@Schema(description = "会员昵称")
private String nickname;
/** 手机号 */
/** 会员手机号 */
@Schema(description = "会员手机号")
private String phone;
/** 隐藏前三位后四位的手机号 */
/** 隐藏部分信息后的手机号138****1234 */
@Schema(description = "隐藏前三位后四位的手机号")
private String phoneHidden;
/** 用户备注 */
/** 用户备注信息 */
@Excel(name = "用户备注")
@Schema(description = "用户备注信息")
private String mark;
/** 帐号启用状态:0->禁用1->启用 */
/** 帐号启用状态0->禁用1->启用 */
@Excel(name = "帐号启用状态:0->禁用1->启用")
@Schema(description = "帐号启用状态0->禁用1->启用")
private Integer status;
/** 头像 */
/** 头像地址 */
@Excel(name = "头像")
@Schema(description = "头像地址")
private String avatar;
/** 性别0->未知1->男2->女 */
/** 性别0->未知1->男2->女 */
@Excel(name = "性别0->未知1->男2->女")
@Schema(description = "性别0->未知1->男2->女")
private Integer gender;
/** 用户所在城市 */
/** 用户所在城市名称 */
@Excel(name = "用户所在城市")
@Schema(description = "用户所在城市名称")
private String city;
/** 用户所在省份 */
/** 用户所在省份名称 */
@Excel(name = "用户所在省份")
@Schema(description = "用户所在省份名称")
private String province;
/** 用户所在国家 */
/** 用户所在国家名称 */
@Excel(name = "用户所在国家")
@Schema(description = "用户所在国家名称")
private String country;
/** 公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注 */
/** 公众号运营者对粉丝的备注 */
@Excel(name = "公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注")
@Schema(description = "公众号运营者对粉丝的备注")
private String remark;
/** 生日 */
/** 生日日期格式yyyy-MM-dd */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "生日", width = 30, dateFormat = "yyyy-MM-dd")
@Schema(description = "生日日期格式yyyy-MM-dd")
private LocalDate birthday;
/** 推广员id */
/** 推广员用户 ID */
@Excel(name = "推广员id")
@Schema(description = "推广员用户 ID")
private Long spreadUid;
/** 推广员关联时间 */
@Excel(name = "推广员二维码")
@Schema(description = "推广员二维码")
private String spreadCode;
/** 推广员关联时间格式yyyy-MM-dd HH:mm:ss */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "推广员关联时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "推广员关联时间格式yyyy-MM-dd HH:mm:ss")
private LocalDateTime spreadTime;
/** 等级 */
/** 会员等级 */
@Excel(name = "等级")
@Schema(description = "会员等级")
private Integer level;
/** 用户剩余积分 */
/** 用户剩余积分 */
@Excel(name = "用户剩余积分")
@Schema(description = "用户剩余积分")
private BigDecimal integral;
/** openId */
/** 微信 OpenID */
@Excel(name = "openId")
@Schema(description = "微信 OpenID")
private String openId;
/** openId */
/** 用户名 */
@Excel(name = "userName")
@Schema(description = "用户名")
private String userName;
/** 视频数量 */
@Schema(description = "视频数")
@Excel(name = "视频数")
private Integer vlogCount;
@ApiModelProperty("im签名")
@Excel(name = "im签名")
/** 粉丝数量 */
@Schema(description = "粉丝数")
@Excel(name = "粉丝数")
private Integer fansCount;
@ApiModelProperty("im签名")
@Excel(name = "im签名")
/** 关注数量 */
@Schema(description = "关注数")
@Excel(name = "关注数")
private Integer followCount;
/** 好友数量 */
@Schema(description = "好友数")
@Excel(name = "好友数")
private Integer friendsCount;
}

View File

@ -0,0 +1,22 @@
package com.wzj.soopin.member.enums;
import lombok.Getter;
/**
* 反馈对象类型枚举
*/
@Getter
public enum FeedbackAimTypeEnums {
MEMBER(0, "会员"),
GROUP(1, "群组"),
COMMENT(2, "评论"),
VIDEO(3, "视频"),
CHAT(4, "聊天");
private final int code;
private final String message;
FeedbackAimTypeEnums(int code, String message) {
this.code = code;
this.message = message;
}
}

View File

@ -0,0 +1,42 @@
package com.wzj.soopin.member.enums;
import lombok.Data;
import lombok.Getter;
/**
* 举报原因枚举
*/
@Getter
public enum FeedbackReasonEnums {
OTHER(0, "其他"),
ABUSE(1, "辱骂"),
VIOLATION(2, "违反社区 Guidelines"),
SPAM(3, "垃圾信息"),
HARASSMENT(4, "骚扰"),
INAPPROPRIATE_CONTENT(5, "不恰当内容"),
INAPPROPRIATE_USERNAME(6, "不恰当用户名"),
INAPPROPRIATE_PROFILE_PICTURE(7, "不恰当头像"),
INAPPROPRIATE_BACKGROUND_PICTURE(8, "不恰当背景");
private final int code;
private final String message;
FeedbackReasonEnums(int code, String message) {
this.code = code;
this.message = message;
}
}

View File

@ -15,8 +15,4 @@ import java.util.Map;
public interface FansMapper extends BaseMapperPlus<Fans, FansVO> {
public List<Map<String, Object>> getFollowedVlogerIds(@Param("currentUserId")String currentUserId,@Param("vlogerIds")List<String> vlogerIds);
/**
* 根据vlogerId统计粉丝数量
*/
int countFansByVlogerId(@Param("vlogerId") String vlogerId);
}

View File

@ -0,0 +1,18 @@
package com.wzj.soopin.member.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
* 会员账户表Mapper接口
*
* @author zcc
*/
public interface MemberAccountChangeRecordMapper extends BaseMapper<MemberAccountChangeRecord> {
}

View File

@ -0,0 +1,10 @@
package com.wzj.soopin.member.mapper;
import com.wzj.soopin.member.domain.po.MemberBlock;
import com.wzj.soopin.member.domain.vo.MemberBlockVO;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
public interface MemberBlockMapper extends BaseMapperPlus<MemberBlock, MemberBlockVO> {
}

View File

@ -9,27 +9,27 @@ public interface IFansService {
/**
* 关注
*/
public void doFollow(String myId, String vlogerId);
public void doFollow(Long myId, Long vloggerId);
/**
* 取关
*/
public void doCancel(String myId, String vlogerId);
public void doCancel(Long myId, Long vloggerId);
/**
* 查询用户是否关注博主
*/
public boolean queryDoIFollowVloger(String myId, String vlogerId);
public boolean queryDoIFollowVloger(Long myId, Long vloggerId);
public boolean queryDoIFollowVloger(String myId, String vloggerId);
/**
* 查询我的粉丝列表
*/
public IPage<FansVO> queryMyFans(String myId,
public IPage<FansVO> queryMyFans(Long myId,
Integer page,
Integer pageSize);
// Integer countFansByVlogerId(String vlogerId);
Long countFansByVloggerId(Long vloggerId);
}

View File

@ -2,6 +2,11 @@ package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.po.Feedback;
import com.wzj.soopin.member.domain.vo.FeedbackVO;
import java.io.Serializable;
public interface IFeedbackService extends IService<Feedback> {
FeedbackVO selectById(Serializable id);
}

View File

@ -0,0 +1,9 @@
package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
public interface IMemberAccountChangeRecordService extends IService<MemberAccountChangeRecord> {
}

View File

@ -2,6 +2,9 @@ package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
public interface IMemberAccountService extends IService<MemberAccount> {
MemberAccount getMemberAccount(Long memberId);
}

View File

@ -0,0 +1,15 @@
package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.po.MemberBlock;
public interface IMemberBlockService extends IService<MemberBlock> {
boolean hasBlocked(Long myId, Long vloggerId);
boolean addBlock(Long myId, Long vloggerId);
void removeBlock(Long myId, Long vloggerId);
}

View File

@ -1,16 +1,23 @@
package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.form.ChangeMemberStatusForm;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.vo.MemberVO;
import org.dromara.common.core.constant.ResultCode;
import java.util.List;
public interface IMemberService extends IService<Member> {
Integer changeStatus(ChangeMemberStatusForm dto);
int updateMark(Member member);
Integer changeStatus(MemberBO dto);
int updateMark(MemberBO member);
boolean usernameExists(String username); // 确保这个方法在接口中定义

View File

@ -31,20 +31,22 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
@Transactional
@Override
public void doFollow(String myId, String vlogerId) {
public void doFollow(Long myId, Long vloggerId) {
Fans fans = new Fans();
fans.setFanId(myId);
fans.setVlogerId(vlogerId);
fans.setVloggerId(vloggerId);
// 判断对方是否关注我如果关注我那么双方都要互为朋友关系
Fans vloger = queryFansRelationship(vlogerId, myId);
Fans vloger = queryFansRelationship(vloggerId, myId);
if (vloger != null) {
fans.setIsFanFriendOfMine(YesOrNo.YES.type);
vloger.setIsFanFriendOfMine(YesOrNo.YES.type);
fans.setFriendFlag(YesOrNo.YES.type);
fans.setBothFriend(YesOrNo.YES.type);
vloger.setFriendFlag(YesOrNo.YES.type);
vloger.setBothFriend(YesOrNo.YES.type);
baseMapper.updateById(vloger);
} else {
fans.setIsFanFriendOfMine(YesOrNo.NO.type);
fans.setFriendFlag(YesOrNo.NO.type);
}
baseMapper.insert(fans);
@ -55,9 +57,9 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
// rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_MSG, "sys.msg." + MessageEnum.FOLLOW_YOU.enValue, JsonUtils.objectToJson(messageMO));
}
public Fans queryFansRelationship(String fanId, String vlogerId) {
public Fans queryFansRelationship(Long fanId, Long vlogerId) {
LambdaQueryWrapper<Fans> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Fans::getVlogerId, vlogerId)
queryWrapper.eq(Fans::getVloggerId, vlogerId)
.eq(Fans::getFanId, fanId);
return baseMapper.selectOne(queryWrapper);
@ -65,13 +67,13 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
@Transactional
@Override
public void doCancel(String myId, String vlogerId) {
public void doCancel(Long myId, Long vloggerId) {
// 判断我们是否朋友关系如果是则需要取消双方的关系
Fans fan = queryFansRelationship(myId, vlogerId);
if (fan != null && fan.getIsFanFriendOfMine() == YesOrNo.YES.type) {
Fans fan = queryFansRelationship(myId, vloggerId);
if (fan != null && fan.getFriendFlag() == YesOrNo.YES.type) {
// 抹除双方的朋友关系自己的关系删除即可
Fans pendingFan = queryFansRelationship(vlogerId, myId);
pendingFan.setIsFanFriendOfMine(YesOrNo.NO.type);
Fans pendingFan = queryFansRelationship(vloggerId, myId);
pendingFan.setFriendFlag(YesOrNo.NO.type);
baseMapper.updateById(pendingFan);
}
@ -82,15 +84,19 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
}
@Override
public boolean queryDoIFollowVloger(String myId, String vlogerId) {
Fans vloger = queryFansRelationship(myId, vlogerId);
return vloger != null;
public boolean queryDoIFollowVloger(Long myId, Long vloggerId) {
Fans vlogger = queryFansRelationship(myId, vloggerId);
return vlogger != null;
}
@Override
public boolean queryDoIFollowVloger(String myId, String vloggerId) {
Fans vlogger = queryFansRelationship(Long.valueOf(myId), Long.valueOf(vloggerId));
return vlogger != null;
}
@Override
public IPage<FansVO> queryMyFans(String myId, Integer pageNo, Integer pageSize) {
public IPage<FansVO> queryMyFans(Long myId, Integer pageNo, Integer pageSize) {
Map<String, Object> map = new HashMap<>();
map.put("myId", myId);
// 查询粉丝列表
@ -101,15 +107,15 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
String relationship = redisCache.getCacheObject(
CacheConstants.MEMBER_FANS + ":" + myId + ":" + f.getFanId());
if (StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")) {
f.setFriend(true);
f.setFriendFlag(true);
}
}
return null;
}
// @Override
// public Integer countFansByVlogerId(String vlogerId) {
// return baseMapper.countFansByVlogerId(vlogerId);
// }
@Override
public Long countFansByVloggerId(Long vloggerId) {
return baseMapper.selectCount(new LambdaQueryWrapper<Fans>().eq(Fans::getVloggerId, vloggerId));
}
}

View File

@ -4,82 +4,99 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.convert.FeedbackConvert;
import com.wzj.soopin.member.convert.MemberConvert;
import com.wzj.soopin.member.domain.po.Feedback;
import com.wzj.soopin.member.domain.bo.FeedbackBO;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.vo.FeedbackVO;
import com.wzj.soopin.member.mapper.FeedbackMapper;
import com.wzj.soopin.member.mapper.MemberMapper;
import com.wzj.soopin.member.service.IFeedbackService;
import com.wzj.soopin.member.util.MemberCacheHelper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.dromara.common.redis.redis.RedisCache;
import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 意见反馈Service业务层处理
*
*
* @author zcc
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> implements IFeedbackService {
private final MemberMapper memberMapper;
private final MemberConvert memberConvert;
private final FeedbackConvert feedbackConvert;
private final MemberCacheHelper memberCacheHelper;
/**
* 查询意见反馈列表
*
* @param query 查询条件
* @param page 分页条件
* @param page 分页条件
* @return 意见反馈
*/
public IPage<Feedback> selectList(FeedbackBO query, IPage page) {
QueryWrapper<Feedback> qw = new QueryWrapper<>();
String type = query.getType();
if (!StringUtils.isEmpty(type)) {
qw.eq("type", type);
}
String content = query.getContent();
if (!StringUtils.isEmpty(content)) {
qw.eq("content", content);
}
String images = query.getImages();
if (!StringUtils.isEmpty(images)) {
qw.eq("images", images);
}
String phone = query.getPhone();
if (!StringUtils.isEmpty(phone)) {
qw.eq("phone", phone);
}
Integer handleStatus = query.getHandleStatus();
if (handleStatus != null) {
qw.eq("handle_status", handleStatus);
}
LocalDateTime handleTime = query.getHandleTime();
if (handleTime != null) {
qw.eq("handle_time", handleTime);
}
if (!StringUtils.isEmpty(query.getBeginTime()) && !StringUtils.isEmpty(query.getEndTime())){
qw.ge("create_time", query.getBeginTime());
qw.lt("create_time", query.getEndTime());
}
qw.orderByDesc("id");
return baseMapper.selectPage(page,qw);
return baseMapper.selectPage(page, query.toWrapper());
}
@Override
public FeedbackVO selectById(Serializable id) {
Feedback feedback = super.getById(id);
if (feedback == null) {
return null;
}
FeedbackVO vo = feedbackConvert.toVO(feedback);
//判断是投诉对象是什么类型
if (feedback.getAimType() != null) {
// 如果是人员则取人员信息
// 0 会员 1 群组 2 评论 3 视频 4 聊天
switch (feedback.getAimType()) {
case 0:
Member member = memberMapper.selectById(feedback.getAimId());
vo.setAimObject(memberConvert.toVO(member));
break;
}
// 如果是订单则取订单信息
// 如果是视频则取视频信息
}
//从redis中获取用户信息
Member memberInfo = memberCacheHelper.getMemberInfo(feedback.getMemberId());
vo.setMember(memberConvert.toVO(memberInfo));
return vo;
}
public Integer updateMark(Feedback feedback) {
UpdateWrapper<Feedback> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("remark",feedback.getRemark())
.eq("id",feedback.getId());
return baseMapper.update(null,updateWrapper);
updateWrapper.set("remark", feedback.getRemark())
.eq("id", feedback.getId());
return baseMapper.update(null, updateWrapper);
}
public Integer changeStatus(Feedback dto) {
UpdateWrapper<Feedback> wrapper = new UpdateWrapper<>();
wrapper.eq("id", dto.getId());
wrapper.set("handle_status", dto.getHandleStatus())
.set("handle_time",LocalDateTime.now());
wrapper.set("handle_status", dto.getStatus())
.set("handle_time", LocalDateTime.now());
return baseMapper.update(null, wrapper);
}
}

View File

@ -0,0 +1,31 @@
package com.wzj.soopin.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.po.MemberAccountChangeRecord;
import com.wzj.soopin.member.mapper.MemberAccountChangeRecordMapper;
import com.wzj.soopin.member.mapper.MemberAccountMapper;
import com.wzj.soopin.member.service.IMemberAccountChangeRecordService;
import com.wzj.soopin.member.service.IMemberAccountService;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
* 会员账户表Service业务层处理
*
*
* @author zcc
*/
@Service
public class MemberAccountChangeRecordServiceImpl extends
ServiceImpl<MemberAccountChangeRecordMapper, MemberAccountChangeRecord> implements IMemberAccountChangeRecordService {
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import com.wzj.soopin.member.mapper.MemberAccountMapper;
import com.wzj.soopin.member.service.IMemberAccountService;
import org.springframework.stereotype.Service;
@ -20,14 +21,10 @@ import java.math.BigDecimal;
@Service
public class MemberAccountServiceImpl extends ServiceImpl<MemberAccountMapper,MemberAccount> implements IMemberAccountService {
/**
* 查询会员账户表
*
* @param memberId 会员账户表主键
* @return 会员账户表
*/
public MemberAccount selectByMemberId(Long memberId) {
return baseMapper.selectById(memberId);
@Override
public MemberAccount getMemberAccount(Long memberId) {
return baseMapper.selectOne(new QueryWrapper<MemberAccount>().lambda().eq(MemberAccount::getMemberId,memberId));
}
/**

View File

@ -0,0 +1,56 @@
package com.wzj.soopin.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.convert.FeedbackConvert;
import com.wzj.soopin.member.convert.MemberConvert;
import com.wzj.soopin.member.domain.bo.FeedbackBO;
import com.wzj.soopin.member.domain.po.Feedback;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberBlock;
import com.wzj.soopin.member.domain.vo.FeedbackVO;
import com.wzj.soopin.member.mapper.FeedbackMapper;
import com.wzj.soopin.member.mapper.MemberBlockMapper;
import com.wzj.soopin.member.mapper.MemberMapper;
import com.wzj.soopin.member.service.IFeedbackService;
import com.wzj.soopin.member.service.IMemberBlockService;
import com.wzj.soopin.member.util.MemberCacheHelper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 意见反馈Service业务层处理
*
* @author zcc
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class MemberBlockServiceImpl extends ServiceImpl<MemberBlockMapper, MemberBlock> implements IMemberBlockService {
@Override
public boolean hasBlocked(Long myId, Long vloggerId) {
return this.count(new UpdateWrapper<MemberBlock>()
.eq("member_id", myId)
.eq("block_member_id", vloggerId)) > 0;
}
@Override
public boolean addBlock(Long myId, Long vloggerId) {
return this.save( MemberBlock.builder().memberId(myId).blockMemberId(vloggerId).build());
}
@Override
public void removeBlock(Long myId, Long vloggerId) {
baseMapper.delete(new UpdateWrapper<MemberBlock>()
.eq("member_id", myId)
.eq("block_member_id", vloggerId));
}
}

View File

@ -6,8 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.form.ChangeMemberStatusForm;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.mapper.MemberAccountMapper;
import com.wzj.soopin.member.mapper.MemberCartMapper;
import com.wzj.soopin.member.mapper.MemberMapper;
import com.wzj.soopin.member.service.IMemberService;
@ -45,11 +48,24 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
private final RedisCache redisCache;
private final MemberAccountMapper memberAccountMapper;
@Override
public boolean usernameExists(String username) {
return baseMapper.countByUsername(username) > 0; // 确保实现
}
@Override
public boolean save(Member entity) {
super.save(entity);
MemberAccount account=MemberAccount.builder().memberId(entity.getId()).build();
memberAccountMapper.insert(account);
return true;
}
@Override
public Member findByUsername(String userName) {
QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
@ -69,7 +85,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
return true;
}
public int updateMark(Member member) {
public int updateMark(MemberBO member) {
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("mark",member.getMark())
.set("update_time",LocalDateTime.now())
@ -79,10 +95,10 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
public Integer changeStatus(ChangeMemberStatusForm dto) {
public Integer changeStatus(MemberBO bo) {
UpdateWrapper<Member> wrapper = new UpdateWrapper<>();
wrapper.eq("id", dto.getMemberId());
wrapper.set("status", dto.getStatus());
wrapper.eq("id", bo.getId());
wrapper.set("status", bo.getStatus());
return baseMapper.update(null, wrapper);
}

View File

@ -0,0 +1,33 @@
package com.wzj.soopin.member.util;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.mapper.MemberMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.redis.redis.RedisCache;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@Component
@Slf4j
@RequiredArgsConstructor
public class MemberCacheHelper {
public static final String MEMBER_INFO_CACHE = "member:info:";
public static final String MEMBER_ACCOUNT_CACHE = "member:account:";
private final RedisCache redisCache;
private final MemberMapper memberMapper;
public Member getMemberInfo(Long memberId) {
Member member= redisCache.getCacheObject(MEMBER_INFO_CACHE + memberId);
if(member==null){
member=memberMapper.selectById(memberId);
redisCache.setCacheObject(MEMBER_INFO_CACHE + memberId,member);
}
return member;
}
}

View File

@ -0,0 +1,5 @@
<?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.wzj.soopin.member.mapper.MemberAccountChangeRecordMapper" >
</mapper>

View File

@ -0,0 +1,5 @@
<?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.wzj.soopin.member.mapper.MemberBlockMapper" >
</mapper>

View File

@ -97,18 +97,7 @@
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sse</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.github.pagehelper</groupId>-->
<!-- <artifactId>pagehelper</artifactId>-->
<!-- <version>5.3.2</version>-->
<!-- <scope>compile</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-member</artifactId>

View File

@ -57,7 +57,7 @@ public class OrderController extends BaseController {
@ApiOperation("查询订单售后列表")
@ApiOperation("查询订单列表")
@PostMapping("/list")
public R<Page<OrderVO>> list(@RequestBody OrderBo query, Page<Order> page) {
Page<Order> list = service.page(page,query.toWrapper() );

View File

@ -52,7 +52,7 @@ public class OrderDeliveryHistoryController extends BaseController {
// return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
// }
@ApiOperation("查询订单列表")
@ApiOperation("查询订单发货列表")
@PostMapping("/list")
public R<IPage<OrderDeliveryHistoryVO>> list(@RequestBody OrderDeliveryHistoryBo query, Page<OrderDeliveryHistory> page) {
Page<OrderDeliveryHistory> list = historyService.page(page,query.toWrapper() );

View File

@ -24,7 +24,8 @@ public class OrderItem extends BaseAudit {
@ApiModelProperty("ID")
@TableId(type = IdType.ASSIGN_ID)
private Long id;
@Excel(name = "商家备注")
private String merchantNote;
@ApiModelProperty("订单id")
@Excel(name = "订单id")
private Long orderId;

View File

@ -31,6 +31,7 @@ public class OrderVO extends BaseAudit {
/** 用户帐号 */
@Excel(name = "用户帐号")
private String memberUsername;
/** 商家备注 */
@Excel(name = "商家备注")
private String merchantNote;