[fix]修改粉丝与关注

This commit is contained in:
王庆祥 2025-06-16 17:05:03 +08:00
parent 64cabd4de5
commit 3757b5562a
23 changed files with 423 additions and 112 deletions

View File

@ -146,6 +146,7 @@ tenant:
- ums_account
- ums_account_change_record
- ums_fans
- ums_block
- oms_aftersale
- oms_aftersale_item
- oms_order

View File

@ -30,7 +30,7 @@ public interface CacheConstants {
/**
* 用户
*/
String MEMEBER="MEMEBER:";
String MEMBER ="MEMBER:";
/**
* 粉丝
@ -45,4 +45,16 @@ public interface CacheConstants {
String BLACK_LIST="BLACK_LIST:";
String GROUP="GROUP:";
String GROUP_MEMBER="GROUP_MEMBER:";
String VLOG="VLOG:";
String COMMENT="COMMENT:";
String CHAT="CHAT:";
}

View File

@ -26,6 +26,6 @@ public class BaseBO <T> {
* @return
*/
public LambdaQueryWrapper<T> toWrapper() {
return null;
return new LambdaQueryWrapper<T>();
}
}

View File

@ -0,0 +1,4 @@
package org.dromara.common.web.core;
public interface MemberFill {
}

View File

@ -98,7 +98,24 @@
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sse</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-order</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-goods</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-content</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
</build>
</project>

View File

@ -2,16 +2,29 @@ package com.wzj.soopin.member.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.FansConvert;
import com.wzj.soopin.member.convert.FeedbackConvert;
import com.wzj.soopin.member.domain.bo.FansBO;
import com.wzj.soopin.member.domain.bo.FeedbackBO;
import com.wzj.soopin.member.domain.po.Fans;
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.FansVO;
import com.wzj.soopin.member.domain.vo.FeedbackVO;
import com.wzj.soopin.member.service.IFansService;
import com.wzj.soopin.member.service.IMemberBlockService;
import com.wzj.soopin.member.service.IMemberService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.redis.utils.RedisUtils;
import org.springframework.web.bind.annotation.*;
@ -21,15 +34,46 @@ import java.util.List;
@RequestMapping("/ums/fans/")
@RestController
@RequiredArgsConstructor
@Tag(name ="粉丝与关注")
public class FansController {
private final IMemberService memberService;
private final IFansService fansService;
private final IFansService service;
private final FansConvert convert;
private final IMemberBlockService memberBlockService;
@Tag(name ="粉丝列表")
@PostMapping("/list")
public R<IPage<FansVO>> fansList(@RequestBody FansBO query, @RequestBody Page page) {
Page<Fans> fans= service.page(page,query.toWrapper());
return R.ok(convert.toVO( fans));
}
@Tag(name ="获取详细信息")
@GetMapping(value = "/{id}")
public R<FansVO> getInfo(@PathVariable("id") Long id) {
return R.ok( convert.toVO(service.getById(id)));
}
@Tag(name ="删除粉丝信息")
@Log(title = "意见反馈", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public R<Object> remove(@PathVariable Long id) {
return R.ok(service.removeById(id));
}
@PostMapping("follow")
public R<Object> follow(@RequestParam Long myId,
@RequestParam Long vloggerId) {
@ -39,35 +83,28 @@ public class FansController {
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);
boolean flow = service.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("用户不存在");
}
//
// 保存粉丝关系到数据库
fansService.doFollow(myId, vloggerId);
service.doFollow(myId, vloggerId);
// 博主的粉丝+1我的关注+1
RedisUtils.incrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
@ -83,12 +120,12 @@ public class FansController {
return R.fail("id不能为空");
}
// 是否已经存在关系
boolean flow = fansService.queryDoIFollowVloger(myId, vloggerId);
boolean flow = service.queryDoIFollowVloger(myId, vloggerId);
if (!flow) {
return R.fail("没有关注信息");
}
// 删除业务的执行
fansService.doCancel(myId, vloggerId);
service.doCancel(myId, vloggerId);
// 博主的粉丝-1我的关注-1
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
@ -119,10 +156,10 @@ public class FansController {
return R.ok("id不能为空");
}
// 是否已经存在关系
boolean flow = fansService.queryDoIFollowVloger(myId, vloggerId);
boolean flow = service.queryDoIFollowVloger(myId, vloggerId);
if (flow) {
// 删除业务的执行
fansService.doCancel(myId, vloggerId);
service.doCancel(myId, vloggerId);
// 博主的粉丝-1我的关注-1
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
@ -130,6 +167,12 @@ public class FansController {
}
// 拉黑
//检查是否已在黑名单中
boolean hasblock = memberBlockService.hasBlocked(myId, vloggerId);
if (hasblock) {
return R.fail("已经拉黑");
}
memberBlockService.addBlock(myId, vloggerId);
return R.ok();
}

View File

@ -4,26 +4,31 @@ 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.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.vo.FeedbackVO;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import com.wzj.soopin.member.service.IFeedbackService;
import com.wzj.soopin.member.service.IMemberService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.springframework.http.ResponseEntity;
import org.dromara.common.redis.utils.RedisUtils;
import org.springframework.web.bind.annotation.*;
import java.util.stream.Collectors;
/**
* 意见反馈Controller
*
* @author zcc
* @date 2024-02-26
*/
@Tag(name ="意见反馈接口列表")
@Tag(name = "意见反馈接口列表")
@RestController
@RequestMapping("/ums/feedback")
@RequiredArgsConstructor
@ -31,45 +36,90 @@ public class FeedbackController {
private final IFeedbackService service;
private final FeedbackConvert convert;
private final MemberConvert memberConvert;
private final IMemberService memberService;
@Tag(name ="查询意见反馈列表")
@Tag(name = "查询意见反馈列表")
@PostMapping("/list")
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));
Page<Feedback> feedBackPage = service.page(page, query.toWrapper());
Page<FeedbackVO> feedbackVOList = convert.toVO(feedBackPage);
//从redis中获取用户信息和投诉对象信息
feedbackVOList.setRecords(feedBackPage.getRecords().stream().map(feedback -> {
//构建用户信息
FeedbackVO feedbackVO = convert.toVO(feedback);
Member member = memberService.getById(feedback.getMemberId());
feedbackVO.setMember(memberConvert.toVO(member));
//构建对象信息
switch (feedback.getAimType()) {
case 0://会员
feedbackVO.setAimObject(memberService.getById(feedback.getAimId()));
break;
case 1://群组
feedbackVO.setAimObject(RedisUtils.getCacheObject(CacheConstants.GROUP + feedback.getAimId()));
break;
case 2://评论
feedbackVO.setAimObject(RedisUtils.getCacheObject(
CacheConstants.COMMENT + feedback.getAimId()
));
break;
case 3://视频
feedbackVO.setAimObject(RedisUtils.getCacheObject(CacheConstants.VLOG + feedback.getAimId()));
break;
case 4://聊天
feedbackVO.setAimObject(RedisUtils.getCacheObject(
CacheConstants.CHAT + feedback.getAimId()
));
break;
}
@Tag(name ="修改意见反馈备注信息")
return feedbackVO;
}).collect(Collectors.toList()));
return R.ok(feedbackVOList);
}
@Tag(name = "修改意见反馈备注信息")
@Log(title = "意见反馈", businessType = BusinessType.UPDATE)
@PostMapping("/update")
public R editMark(@RequestBody FeedbackBO feedback) {
return R.ok(service.save(convert.toPo(feedback)));
}
@Tag(name ="修改意见反馈备注信息")
@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 ="获取详细信息")
@Tag(name = "获取详细信息")
@GetMapping(value = "/{id}")
public R<FeedbackVO> getInfo(@PathVariable("id") Long id) {
return R.ok( service.selectById(id));
return R.ok(service.selectById(id));
}
@Tag(name =("修改状态"))
@Tag(name = ("处理"))
@Log(title = "意见反馈", businessType = BusinessType.UPDATE)
@PostMapping("/handle/status/update")
public R changeStatus(@RequestBody FeedbackBO bo){
return R.ok(service.updateById(convert.toPo(bo)));
@PostMapping("/handle/handle")
public R changeStatus(@RequestBody FeedbackBO bo) {
service.handle(convert.toPo(bo));
return R.ok();
}
@Tag(name ="删除意见反馈")
@Tag(name = "删除意见反馈")
@Log(title = "意见反馈", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public R<Object> remove(@PathVariable Long id) {

View File

@ -25,7 +25,7 @@ import org.springframework.web.bind.annotation.*;
*/
@Tag(name = "购物车接口列表")
@RestController
@RequestMapping("/ums/memberCart")
@RequestMapping("/ums/cart")
public class MemberCartController extends BaseController {
@Autowired
private IMemberCartService service;
@ -34,15 +34,15 @@ public class MemberCartController extends BaseController {
@Tag(name = "查询购物车列表")
@PostMapping("/list")
public R<Page<MemberCartVO>> list(@RequestBody MemberCartBO query, @RequestBody IPage page) {
Page<MemberCart> userPage = (Page<MemberCart>) service.page(page, new QueryWrapper<MemberCart>());
public R<IPage<MemberCartVO>> list(@RequestBody MemberCartBO bo, @RequestBody Page page) {
Page<MemberCart> userPage = service.page(page, bo.toWrapper());
return R.ok(convert.toVO(userPage));
}
@Tag(name = "导出购物车列表")
@Log(title = "购物车", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public R<String> export(MemberCartBO query) {
public R<String> export() {
// List<MemberCart> list = service.selectList(query, null);
// ExcelUtil<MemberCartVO> util = new ExcelUtil<>(MemberCartVO.class);
// return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "购物车数据"));
@ -51,8 +51,8 @@ public class MemberCartController extends BaseController {
@Tag(name = "获取购物车详细信息")
@GetMapping(value = "/{id}")
public R<MemberCart> getInfo(@PathVariable("id") Long id) {
return R.ok(service.getById(id));
public R<MemberCartVO> getInfo(@PathVariable("id") Long id) {
return R.ok(convert.toVO(service.getById(id)));
}
@Tag(name = "新增购物车")

View File

@ -0,0 +1,27 @@
package com.wzj.soopin.member.convert;
import com.wzj.soopin.member.domain.bo.FansBO;
import com.wzj.soopin.member.domain.bo.FeedbackBO;
import com.wzj.soopin.member.domain.po.Fans;
import com.wzj.soopin.member.domain.po.Feedback;
import com.wzj.soopin.member.domain.vo.FansVO;
import com.wzj.soopin.member.domain.vo.FeedbackVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
/**
* 粉丝与关注 DO <=> VO / BO
*
* @author zcc
*/
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface FansConvert extends BaseConverter<FansVO, FansBO, Fans> {
@Override
@Mapping(target = "vlogger.id",source = "vloggerId")
@Mapping(target = "fan.id", source = "fanId")
@Mapping(target = "fanId", source = "fanId")
@Mapping(target = "vloggerId", source = "vloggerId")
FansVO toVO(Fans fans);
}

View File

@ -6,6 +6,7 @@ import com.wzj.soopin.member.domain.po.Feedback;
import com.wzj.soopin.member.domain.vo.FeedbackVO;
import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import java.util.List;
/**
@ -16,4 +17,8 @@ import java.util.List;
@Mapper(componentModel = "spring",uses = BaseConverter.class)
public interface FeedbackConvert extends BaseConverter<FeedbackVO, FeedbackBO, Feedback> {
@Override
@Mapping(target = "member.id", ignore = true,source = "memberId")
@Mapping(target = "memberId", ignore = true,source = "memberId")
FeedbackVO toVO(Feedback feedback);
}

View File

@ -0,0 +1,54 @@
package com.wzj.soopin.member.domain.bo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.member.domain.po.Fans;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.dromara.common.core.domain.BaseBO;
import org.dromara.common.excel.annotation.Excel;
import org.springframework.boot.actuate.integration.IntegrationGraphEndpoint;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Schema(description ="粉丝")
public class FansBO extends BaseBO<Fans> {
/**
* 博主id
*/
@Schema(description ="博主id")
private String vloggerId;
/**
* 粉丝id
*/
@Schema(description ="粉丝id")
private String fanId;
/**
* 是否互相关注
*/
@Schema(description ="是否是好友")
private Integer friendFlag ;
/**
* 是否互相关注
*/
@Schema(description ="是否互相关注")
private Integer bothFriend;
@Override
public LambdaQueryWrapper<Fans> toWrapper() {
return super.toWrapper()
.eq(vloggerId!=null,Fans::getVloggerId,vloggerId)
.eq(fanId!=null,Fans::getFanId,fanId)
.eq(friendFlag!=null,Fans::getFriendFlag,friendFlag)
.eq(bothFriend!=null,Fans::getBothFriend,bothFriend);
}
}

View File

@ -21,10 +21,10 @@ public class FeedbackBO extends BaseBO {
@Schema(description ="ID")
private Long id;
@Schema(description ="类型")
@Schema(description ="类型 1 举报 2 投诉 3 建议")
private Integer type;
@Schema(description ="具体说明")
@Schema(description ="内容")
private String content;
@Schema(description ="图片")
@ -47,8 +47,8 @@ public class FeedbackBO extends BaseBO {
@Schema(description ="反馈对象ID")
private Long aimId;
@Schema(description ="反馈分类")
private Integer category;
@Schema(description ="原因")
private Integer reasonType;
@Schema(description ="会员ID")
private String memberId;
@ -62,8 +62,8 @@ public class FeedbackBO extends BaseBO {
@Schema(description ="处理结果")
private String resultContent;
@Schema(description ="反馈对象类型")
private String aimType;
@Schema(description ="反馈对象类型 1 会员 2 群组 3 评论 4 视频 5 聊天" )
private Integer aimType;
@Override
public LambdaQueryWrapper toWrapper() {
@ -76,7 +76,7 @@ public class FeedbackBO extends BaseBO {
.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(reasonType!=null,Feedback::getReasonType, reasonType)
.eq(memberId!=null,Feedback::getMemberId, memberId)
.eq(handlerId!=null,Feedback::getHandlerId, handlerId)
.eq(resultType!=null,Feedback::getResultType, resultType)

View File

@ -1,7 +1,10 @@
package com.wzj.soopin.member.domain.bo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wzj.soopin.member.domain.po.MemberCart;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
/**
* 购物车 查询 对象
@ -10,7 +13,8 @@ import lombok.Data;
*/
@Schema(description="购物车 查询 对象")
@Data
public class MemberCartBO {
public class MemberCartBO extends BaseBO<MemberCart> {
@Schema(description ="0->失效1->有效 精确匹配")
private Integer status;
@ -38,4 +42,16 @@ public class MemberCartBO {
@Schema(description ="用户手机号")
private String phone;
@Override
public LambdaQueryWrapper<MemberCart> toWrapper() {
return super.toWrapper()
.eq(status!=null,MemberCart::getStatus,status)
.eq(memberId!=null,MemberCart::getMemberId,memberId)
.eq(productId!=null,MemberCart::getProductId,productId)
.eq(pic!=null,MemberCart::getPic,pic)
.eq(skuId!=null,MemberCart::getSkuId,skuId)
.eq(productName!=null,MemberCart::getProductName,productName)
.eq(spData!=null,MemberCart::getSpData,spData)
.eq(quantity!=null,MemberCart::getQuantity,quantity);
}
}

View File

@ -21,7 +21,7 @@ public class Feedback extends BaseAudit {
@Schema(description ="ID")
private Long id;
@Schema(description ="类型")
@Schema(description ="类型 1 举报 2 投诉 3 建议")
private Integer type;
@Schema(description ="具体说明")
@ -47,11 +47,11 @@ public class Feedback extends BaseAudit {
@Schema(description ="反馈对象ID")
private Long aimId;
@Schema(description ="反馈对象类型 0 会员 1 群组 2 评论 3 视频 4 聊天" )
@Schema(description ="反馈对象类型 1 会员 2 群组 3 评论 4 视频 5 聊天" )
private Integer aimType;
@Schema(description ="反馈分类")
private Integer category;
@Schema(description ="原因 1 恶意行为 2 内容违规")
private Integer reasonType;
@Schema(description ="会员ID")
private Long memberId;

View File

@ -14,44 +14,35 @@ import org.dromara.common.excel.annotation.Excel;
*/
@Schema(description="购物车对象")
@Data
@TableName("ums_member_cart")
@TableName("ums_cart")
public class MemberCart extends BaseAudit {
private static final long serialVersionUID = 1L;
@Schema(description ="购物车表ID")
@TableId
private Long id;
@Schema(description ="0->失效1->有效")
@Excel(name = "0->失效1->有效")
private Integer status;
@Schema(description ="用户ID")
@Excel(name = "用户ID")
private Long memberId;
@Schema(description ="商品ID")
@Excel(name = "商品ID")
private Long productId;
@Schema(description ="展示图片")
@Excel(name = "展示图片")
private String pic;
@Schema(description ="SKU ID")
@Excel(name = "SKU ID")
private Long skuId;
@Schema(description ="PRODUCT_NAME")
@Excel(name = "PRODUCT_NAME")
private String productName;
@Schema(description ="商品属性")
@Excel(name = "商品属性")
private String spData;
@Schema(description ="商品数量")
@Excel(name = "商品数量")
private Integer quantity;
}

View File

@ -17,23 +17,33 @@ public class FansVO {
@Schema(description ="博主id")
@Excel(name = "博主id")
private String vlogerId;
private MemberVO vlogger;
@Schema(description ="博主id")
private Long vloggerId;
@Schema(description ="粉丝id")
@Excel(name = "粉丝id")
private String fanId;
@Schema(description ="昵称")
@Excel(name = "昵称")
private String nickname;
@Schema(description ="头像")
@Excel(name = "头像")
private String face;
private MemberVO fan;
@Schema(description ="粉丝id")
@Excel(name = "粉丝id")
private Long fanId;
@Schema(description ="是否是好友")
@Excel(name = "是否是好友")
private boolean friendFlag = false;
private Integer friendFlag ;
@Schema(description ="是否互相关注")
@Excel(name = "是否互相关注")
private int bothFriend;
private Integer bothFriend;
@Schema(description ="创建时间")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private String createdTime;

View File

@ -3,6 +3,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.core.domain.model.BaseAudit;
import org.dromara.common.excel.annotation.Excel;
import java.time.LocalDateTime;
@ -17,10 +18,10 @@ public class FeedbackVO {
/** ID */
private Long id;
/** 类型 */
@Excel(name = "类型")
@Excel(name = "类型 1 举报 2 投诉 3 建议")
private Integer type;
/** 具体说明 */
@Excel(name = "具体说明")
@Excel(name = "内容")
private String content;
/** 图片 */
@Excel(name = "图片")
@ -34,7 +35,7 @@ public class FeedbackVO {
private LocalDateTime createTime;
/** 处理状态 0未处理 1已处理 */
@Excel(name = "处理状态 0未处理 1已处理")
private Integer handleStatus;
private Integer status;
/** 备注 */
@Excel(name = "备注")
private String remark;
@ -47,27 +48,28 @@ public class FeedbackVO {
@Excel(name = "反馈对象ID")
private Long aimId;
@Schema(description ="反馈对象类型 0 会员 1 群组 2 评论 3 视频 4 聊天" )
@Schema(description ="反馈对象类型 1 会员 2 群组 3 评论 4 视频 5 聊天" )
private BaseAudit aimObject;
@Schema(description ="反馈对象类型")
private Integer aimType;
@Schema(description ="反馈对象")
private Object aimObject;
@Schema(description ="反馈分类")
private Integer category;
@Schema(description ="原因 1 恶意行为 2 内容违规")
private Integer reasonType;
@Schema(description ="会员ID")
@Excel(name = "会员ID")
private Long memberId;
@Excel(name = "会员")
private MemberVO member;
@Schema(description ="会员ID")
@Excel(name = "会员")
private Long memberId;
@Schema(description ="处理人")
@Excel(name = "处理人")
private Long handlerId;
@Schema(description ="处理结果类型 0文本 1图片")
@Schema(description ="处理结果类型 0不予处理 1已处理")
@Excel(name = "处理结果类型 0不予处理 1已处理")
private Integer resultType;

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;
@ -12,41 +13,97 @@ import java.time.LocalDateTime;
* @author zcc
*/
@Data
@Schema(description = "购物车")
public class MemberCartVO {
/** 购物车表ID */
/**
* 购物车表ID
*/
@Schema(description = "id")
private Long id;
/** 0->失效1->有效 */
/**
* 0->失效1->有效
*/
@Excel(name = "0->失效1->有效")
@Schema(description = "status")
private Integer status;
/** 用户ID */
/**
* 用户ID
*/
@Excel(name = "用户ID")
@Schema(description = "用户ID")
private Long memberId;
@Schema(description ="会员")
@Excel(name = "会员")
private MemberVO member;
@Excel(name = "会员")
@Schema(description = "会员")
private String nickname;
@Excel(name = "备注")
@Schema(description = "备注")
private String mark;
/** 商品ID */
/**
* 商品ID
*/
@Excel(name = "商品ID")
@Schema(description = "商品ID")
private Long productId;
/** 展示图片 */
/**
* 展示图片
*/
@Schema(description = "展示图片")
@Excel(name = "展示图片")
private String pic;
/** SKU ID */
/**
* SKU ID
*/
@Schema(description = "SKU ID")
@Excel(name = "SKU ID")
private Long skuId;
/** PRODUCT_NAME */
/**
* PRODUCT_NAME
*/
@Schema(description = "PRODUCT_NAME")
@Excel(name = "PRODUCT_NAME")
private String productName;
/** 商品属性 */
/**
* 商品属性
*/
@Schema(description = "商品属性")
@Excel(name = "商品属性")
private String spData;
/** 商品数量 */
/**
* 商品数量
*/
@Excel(name = "商品数量")
@Schema(description = "商品数量")
private Integer quantity;
/** 加入时间 */
/**
* 加入时间
*/
@Excel(name = "加入时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "加入时间")
private LocalDateTime createTime;
/** sku价格 */
/**
* sku价格
*/
@Excel(name = "sku价格")
@Schema(description = "sku价格")
private BigDecimal price;
/** sku是否存在 */
/**
* sku是否存在
*/
@Excel(name = "sku是否存在")
@Schema(description = "sku是否存在")
private Integer skuIfExist;
/** 隐藏四位的手机号 */
/**
* 隐藏四位的手机号
*/
@Excel(name = "隐藏四位的手机号")
@Schema(description = "隐藏四位的手机号")
private String phoneHidden;
}

View File

@ -2,9 +2,11 @@ package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.po.Fans;
import com.wzj.soopin.member.domain.vo.FansVO;
public interface IFansService {
public interface IFansService extends IService<Fans> {
/**
* 关注

View File

@ -9,4 +9,6 @@ import java.io.Serializable;
public interface IFeedbackService extends IService<Feedback> {
FeedbackVO selectById(Serializable id);
void handle(Feedback entity);
}

View File

@ -46,7 +46,7 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
vloger.setBothFriend(YesOrNo.YES.type);
baseMapper.updateById(vloger);
} else {
fans.setFriendFlag(YesOrNo.NO.type);
fans.setFriendFlag(YesOrNo.YES.type);
}
baseMapper.insert(fans);
@ -73,7 +73,7 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
if (fan != null && fan.getFriendFlag() == YesOrNo.YES.type) {
// 抹除双方的朋友关系自己的关系删除即可
Fans pendingFan = queryFansRelationship(vloggerId, myId);
pendingFan.setFriendFlag(YesOrNo.NO.type);
pendingFan.setBothFriend(YesOrNo.NO.type);
baseMapper.updateById(pendingFan);
}
@ -105,9 +105,9 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
page.setSize(pageSize);
for (FansVO f : page.getRecords()) {
String relationship = redisCache.getCacheObject(
CacheConstants.MEMBER_FANS + ":" + myId + ":" + f.getFanId());
CacheConstants.MEMBER_FANS + ":" + myId + ":" + f.getFan().getId());
if (StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")) {
f.setFriendFlag(true);
f.setFriendFlag(YesOrNo.YES.type);
}
}

View File

@ -1,6 +1,7 @@
package com.wzj.soopin.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -71,7 +72,6 @@ public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> i
switch (feedback.getAimType()) {
case 0:
Member member = memberMapper.selectById(feedback.getAimId());
vo.setAimObject(memberConvert.toVO(member));
break;
}
// 如果是订单则取订单信息
@ -85,11 +85,13 @@ public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> i
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);
public void handle(Feedback feedback) {
LambdaUpdateWrapper<Feedback> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(Feedback::getRemark, feedback.getRemark())
.set(Feedback::getStatus, feedback.getStatus())
.set(Feedback::getResultContent, feedback.getResultContent())
.eq(Feedback::getId, feedback.getId());
baseMapper.update(null, updateWrapper);
}
public Integer changeStatus(Feedback dto) {

View File

@ -16,6 +16,7 @@ import com.wzj.soopin.member.mapper.MemberMapper;
import com.wzj.soopin.member.service.IMemberService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.CacheConstants;
import org.dromara.common.core.constant.CachePrefix;
import org.dromara.common.core.constant.ResultCode;
import org.dromara.common.core.domain.model.LoginUser;
@ -23,9 +24,12 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.redis.redis.RedisCache;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;
@ -57,6 +61,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
@Override
@CachePut(value = CacheConstants.MEMBER, key = "#id")
public boolean save(Member entity) {
super.save(entity);
@ -85,6 +90,8 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
return true;
}
@CachePut(value = CacheConstants.MEMBER, key = "#id")
public int updateMark(MemberBO member) {
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("mark",member.getMark())
@ -95,6 +102,8 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
@CachePut(value = CacheConstants.MEMBER, key = "#id")
public Integer changeStatus(MemberBO bo) {
UpdateWrapper<Member> wrapper = new UpdateWrapper<>();
wrapper.eq("id", bo.getId());
@ -236,4 +245,11 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
public String getPhoneDecrypted(String phoneEncrypted) {
return phoneEncrypted;
}
@Override
// @Cacheable (cacheNames = CacheConstants.MEMBER, key = "#id")
public Member getById(Serializable id) {
return super.getById(id);
}
}