This commit is contained in:
dute7liang
2023-12-24 00:31:21 +08:00
parent 7973aa1582
commit cc467a1105
19 changed files with 357 additions and 17 deletions

View File

@@ -0,0 +1,96 @@
package com.ruoyi.cai.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.CaiUserCount;
import com.ruoyi.cai.service.CaiUserCountService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.enums.BusinessType;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
/**
* 用户信息数量统计
*
* @author 77
* @date 2023-12-24
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/cai/userCount")
public class CaiUserCountController extends BaseController {
private final CaiUserCountService caiUserCountService;
/**
* 查询用户信息数量统计列表
*/
@SaCheckPermission("cai:userCount:list")
@GetMapping("/list")
public TableDataInfo<CaiUserCount> list(CaiUserCount bo, PageQuery pageQuery) {
Page<CaiUserCount> page = caiUserCountService.page(pageQuery.build(), Wrappers.lambdaQuery(bo));
return TableDataInfo.build(page);
}
/**
* 获取用户信息数量统计详细信息
*
* @param userId 主键
*/
@SaCheckPermission("cai:userCount:query")
@GetMapping("/{userId}")
public R<CaiUserCount> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Integer userId) {
return R.ok(caiUserCountService.getById(userId));
}
/**
* 新增用户信息数量统计
*/
@SaCheckPermission("cai:userCount:add")
@Log(title = "用户信息数量统计", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody CaiUserCount bo) {
return toAjax(caiUserCountService.save(bo));
}
/**
* 修改用户信息数量统计
*/
@SaCheckPermission("cai:userCount:edit")
@Log(title = "用户信息数量统计", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody CaiUserCount bo) {
return toAjax(caiUserCountService.updateById(bo));
}
/**
* 删除用户信息数量统计
*
* @param userIds 主键串
*/
@SaCheckPermission("cai:userCount:remove")
@Log(title = "用户信息数量统计", businessType = BusinessType.DELETE)
@DeleteMapping("/{userIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Integer[] userIds) {
return toAjax(caiUserCountService.removeBatchByIds(Arrays.asList(userIds), true));
}
}

View File

@@ -2,7 +2,7 @@ package com.ruoyi.cai.controller.app;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.dto.app.query.StarQuery; import com.ruoyi.cai.dto.app.query.StarQuery;
import com.ruoyi.cai.dto.app.query.StarRes; import com.ruoyi.cai.dto.app.query.StarOrVisitorRes;
import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList; import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList;
import com.ruoyi.cai.service.CaiUserFollowService; import com.ruoyi.cai.service.CaiUserFollowService;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
@@ -20,14 +20,14 @@ public class CaiUserStartAppController {
private CaiUserFollowService userFollowService; private CaiUserFollowService userFollowService;
@PostMapping("/star") @PostMapping("/star")
public R<Boolean> star(StarRes starRes){ public R<Boolean> star(StarOrVisitorRes starOrVisitorRes){
boolean bool = userFollowService.star(starRes); boolean bool = userFollowService.star(starOrVisitorRes);
return R.ok(bool); return R.ok(bool);
} }
@PostMapping("/unstar") @PostMapping("/unstar")
public R<Boolean> unStar(StarRes starRes){ public R<Boolean> unStar(StarOrVisitorRes starOrVisitorRes){
boolean bool = userFollowService.unStar(starRes); boolean bool = userFollowService.unStar(starOrVisitorRes);
return R.ok(bool); return R.ok(bool);
} }

View File

@@ -0,0 +1,41 @@
package com.ruoyi.cai.controller.app;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.dto.app.query.StarOrVisitorRes;
import com.ruoyi.cai.dto.app.query.VisitorQuery;
import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList;
import com.ruoyi.cai.service.CaiUserVisitorService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController("/user/visitor")
@Slf4j
public class CaiUserVisitorAppController {
@Autowired
private CaiUserVisitorService userVisitorService;
// 除网络问题不返回异常。避免影响业务
@PostMapping("/visitor")
public R<Boolean> visitor(StarOrVisitorRes starOrVisitorRes){
try {
boolean bool = userVisitorService.visitor(starOrVisitorRes);
}catch (Exception e){
log.error("记录访客失败",e);
}
return R.ok(true);
}
@GetMapping("/page")
public TableDataInfo<UserStarOrVisitorList> page(VisitorQuery query, PageQuery pageQuery){
Page<UserStarOrVisitorList> res = userVisitorService.pageApp(pageQuery,query);
return TableDataInfo.build(res);
}
}

View File

@@ -0,0 +1,58 @@
package com.ruoyi.cai.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 用户信息数量统计对象 cai_user_count
*
* @author 77
* @date 2023-12-24
*/
@Data
@TableName("cai_user_count")
public class CaiUserCount implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
@TableId(value = "user_id")
private Integer userId;
/**
* 粉丝总数
*/
private Integer fansCount;
/**
* 关注数
*/
private Integer followCount;
/**
* 访客数
*/
private Integer visitorCount;
/**
* 相册数量
*/
private Integer photoCount;
/**
* 发帖数量
*/
private Integer dynamicCount;
/**
* 收到的礼物数量
*/
private Integer receiveGiftCount;
/**
* 送礼总数量
*/
private Integer giveGiftCount;
private LocalDateTime createTime;
}

View File

@@ -27,7 +27,7 @@ public class CaiUserVisitor implements Serializable {
/** /**
* 被访用户ID * 被访用户ID
*/ */
private Integer userId; private Long userId;
/** /**
* 访客用户ID * 访客用户ID
*/ */

View File

@@ -3,6 +3,6 @@ package com.ruoyi.cai.dto.app.query;
import lombok.Data; import lombok.Data;
@Data @Data
public class StarRes { public class StarOrVisitorRes {
private Long toUserId; private Long toUserId;
} }

View File

@@ -0,0 +1,11 @@
package com.ruoyi.cai.dto.app.query;
import lombok.Data;
@Data
public class VisitorQuery {
// 1=查询我的足迹 2=查询我的访客
private Integer type = 1;
private Long userId;
}

View File

@@ -8,4 +8,6 @@ import java.time.LocalDateTime;
public class UserStarOrVisitorList { public class UserStarOrVisitorList {
private LocalDateTime happenTime; private LocalDateTime happenTime;
private Integer isWatch;
} }

View File

@@ -0,0 +1,14 @@
package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.cai.domain.CaiUserCount;
/**
* 用户信息数量统计Mapper接口
*
* @author 77
* @date 2023-12-24
*/
public interface CaiUserCountMapper extends BaseMapper<CaiUserCount> {
}

View File

@@ -1,7 +1,11 @@
package com.ruoyi.cai.mapper; package com.ruoyi.cai.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.cai.domain.CaiUserVisitor; import com.ruoyi.cai.domain.CaiUserVisitor;
import com.ruoyi.cai.dto.app.query.VisitorQuery;
import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList;
import org.apache.ibatis.annotations.Param;
/** /**
* 用户来访记录Mapper接口 * 用户来访记录Mapper接口
@@ -11,4 +15,5 @@ import com.ruoyi.cai.domain.CaiUserVisitor;
*/ */
public interface CaiUserVisitorMapper extends BaseMapper<CaiUserVisitor> { public interface CaiUserVisitorMapper extends BaseMapper<CaiUserVisitor> {
Page<UserStarOrVisitorList> pageApp(@Param("build") Page<Object> build, @Param("query") VisitorQuery query);
} }

View File

@@ -0,0 +1,14 @@
package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.CaiUserCount;
/**
* 用户信息数量统计Service接口
*
* @author 77
* @date 2023-12-24
*/
public interface CaiUserCountService extends IService<CaiUserCount> {
}

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.CaiUserFollow; import com.ruoyi.cai.domain.CaiUserFollow;
import com.ruoyi.cai.dto.app.query.StarQuery; import com.ruoyi.cai.dto.app.query.StarQuery;
import com.ruoyi.cai.dto.app.query.StarRes; import com.ruoyi.cai.dto.app.query.StarOrVisitorRes;
import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList; import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
@@ -20,9 +20,9 @@ public interface CaiUserFollowService extends IService<CaiUserFollow> {
boolean checkStar(Long userId, Long followUserId); boolean checkStar(Long userId, Long followUserId);
boolean star(StarRes starRes); boolean star(StarOrVisitorRes starOrVisitorRes);
boolean unStar(StarRes starRes); boolean unStar(StarOrVisitorRes starOrVisitorRes);
Page<UserStarOrVisitorList> pageApp(PageQuery pageQuery, StarQuery query); Page<UserStarOrVisitorList> pageApp(PageQuery pageQuery, StarQuery query);
} }

View File

@@ -1,7 +1,12 @@
package com.ruoyi.cai.service; package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.CaiUserVisitor; import com.ruoyi.cai.domain.CaiUserVisitor;
import com.ruoyi.cai.dto.app.query.StarOrVisitorRes;
import com.ruoyi.cai.dto.app.query.VisitorQuery;
import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList;
import com.ruoyi.common.core.domain.PageQuery;
/** /**
* 用户来访记录Service接口 * 用户来访记录Service接口
@@ -11,4 +16,7 @@ import com.ruoyi.cai.domain.CaiUserVisitor;
*/ */
public interface CaiUserVisitorService extends IService<CaiUserVisitor> { public interface CaiUserVisitorService extends IService<CaiUserVisitor> {
boolean visitor(StarOrVisitorRes starOrVisitorRes);
Page<UserStarOrVisitorList> pageApp(PageQuery pageQuery, VisitorQuery query);
} }

View File

@@ -0,0 +1,20 @@
package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.CaiUserCount;
import com.ruoyi.cai.mapper.CaiUserCountMapper;
import com.ruoyi.cai.service.CaiUserCountService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
* 用户信息数量统计Service业务层处理
*
* @author 77
* @date 2023-12-24
*/
@RequiredArgsConstructor
@Service
public class CaiUserCountServiceImpl extends ServiceImpl<CaiUserCountMapper,CaiUserCount> implements CaiUserCountService {
}

View File

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.CaiUserFollow; import com.ruoyi.cai.domain.CaiUserFollow;
import com.ruoyi.cai.dto.app.query.StarQuery; import com.ruoyi.cai.dto.app.query.StarQuery;
import com.ruoyi.cai.dto.app.query.StarRes; import com.ruoyi.cai.dto.app.query.StarOrVisitorRes;
import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList; import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList;
import com.ruoyi.cai.mapper.CaiUserFollowMapper; import com.ruoyi.cai.mapper.CaiUserFollowMapper;
import com.ruoyi.cai.service.CaiUserFollowService; import com.ruoyi.cai.service.CaiUserFollowService;
@@ -43,24 +43,24 @@ public class CaiUserFollowServiceImpl extends ServiceImpl<CaiUserFollowMapper,Ca
} }
@Override @Override
public boolean star(StarRes starRes) { public boolean star(StarOrVisitorRes starOrVisitorRes) {
Long fromUserId = LoginHelper.getUserId(); Long fromUserId = LoginHelper.getUserId();
this.remove(Wrappers.lambdaQuery(CaiUserFollow.class) this.remove(Wrappers.lambdaQuery(CaiUserFollow.class)
.eq(CaiUserFollow::getUserId,fromUserId) .eq(CaiUserFollow::getUserId,fromUserId)
.eq(CaiUserFollow::getFollowUser,starRes.getToUserId())); .eq(CaiUserFollow::getFollowUser, starOrVisitorRes.getToUserId()));
CaiUserFollow userFollow = new CaiUserFollow(); CaiUserFollow userFollow = new CaiUserFollow();
userFollow.setUserId(fromUserId); userFollow.setUserId(fromUserId);
userFollow.setFollowUser(starRes.getToUserId()); userFollow.setFollowUser(starOrVisitorRes.getToUserId());
this.save(userFollow); this.save(userFollow);
return true; return true;
} }
@Override @Override
public boolean unStar(StarRes starRes) { public boolean unStar(StarOrVisitorRes starOrVisitorRes) {
Long fromUserId = LoginHelper.getUserId(); Long fromUserId = LoginHelper.getUserId();
this.remove(Wrappers.lambdaQuery(CaiUserFollow.class) this.remove(Wrappers.lambdaQuery(CaiUserFollow.class)
.eq(CaiUserFollow::getUserId,fromUserId) .eq(CaiUserFollow::getUserId,fromUserId)
.eq(CaiUserFollow::getFollowUser,starRes.getToUserId())); .eq(CaiUserFollow::getFollowUser, starOrVisitorRes.getToUserId()));
return true; return true;
} }

View File

@@ -1,12 +1,23 @@
package com.ruoyi.cai.service.impl; package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.CaiUserFollow;
import com.ruoyi.cai.domain.CaiUserVisitor; import com.ruoyi.cai.domain.CaiUserVisitor;
import com.ruoyi.cai.dto.app.query.StarOrVisitorRes;
import com.ruoyi.cai.dto.app.query.VisitorQuery;
import com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList;
import com.ruoyi.cai.mapper.CaiUserVisitorMapper; import com.ruoyi.cai.mapper.CaiUserVisitorMapper;
import com.ruoyi.cai.service.CaiUserVisitorService; import com.ruoyi.cai.service.CaiUserVisitorService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.helper.LoginHelper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/** /**
* 用户来访记录Service业务层处理 * 用户来访记录Service业务层处理
* *
@@ -16,4 +27,26 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class CaiUserVisitorServiceImpl extends ServiceImpl<CaiUserVisitorMapper,CaiUserVisitor> implements CaiUserVisitorService { public class CaiUserVisitorServiceImpl extends ServiceImpl<CaiUserVisitorMapper,CaiUserVisitor> implements CaiUserVisitorService {
@Override
public boolean visitor(StarOrVisitorRes starOrVisitorRes) {
Long fromUserId = LoginHelper.getUserId();
CaiUserVisitor userVisitor = this.getOne(Wrappers.lambdaQuery(CaiUserVisitor.class)
.eq(CaiUserVisitor::getVisitorId, fromUserId)
.eq(CaiUserVisitor::getUserId, starOrVisitorRes.getToUserId())
.last("limit 1"));
if(userVisitor == null){
userVisitor = new CaiUserVisitor();
userVisitor.setVisitorId(fromUserId);
userVisitor.setUserId(starOrVisitorRes.getToUserId());
}
userVisitor.setCreateTime(LocalDateTime.now());
this.saveOrUpdate(userVisitor);
return true;
}
@Override
public Page<UserStarOrVisitorList> pageApp(PageQuery pageQuery, VisitorQuery query) {
query.setUserId(LoginHelper.getUserId());
return baseMapper.pageApp(pageQuery.build(),query);
}
} }

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.cai.mapper.CaiUserCountMapper">
<resultMap type="com.ruoyi.cai.domain.CaiUserCount" id="CaiUserCountResult">
<result property="userId" column="user_id"/>
<result property="fansCount" column="fans_count"/>
<result property="newFansCount" column="new_fans_count"/>
<result property="followCount" column="follow_count"/>
<result property="visitorCount" column="visitor_count"/>
<result property="newVisitorCount" column="new_visitor_count"/>
<result property="photoCount" column="photo_count"/>
<result property="dynamicCount" column="dynamic_count"/>
<result property="receiveGiftCount" column="receive_gift_count"/>
<result property="giveGiftCount" column="give_gift_count"/>
<result property="createTime" column="create_time"/>
</resultMap>
</mapper>

View File

@@ -13,7 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<select id="pageApp" resultType="com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList"> <select id="pageApp" resultType="com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList">
select select
t1.create_time as happen_time, t1.create_time as happen_time,t1.is_watch,
t2.avatar,t2.gender,t2.city,t2.nickname,t2.usercode,t2.age t2.avatar,t2.gender,t2.city,t2.nickname,t2.usercode,t2.age
from cai_user_follow t1 from cai_user_follow t1
join cai_user t2 on t1.user_id = t2.id join cai_user t2 on t1.user_id = t2.id

View File

@@ -11,6 +11,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="isWatch" column="is_watch"/> <result property="isWatch" column="is_watch"/>
<result property="createTime" column="create_time"/> <result property="createTime" column="create_time"/>
</resultMap> </resultMap>
<select id="pageApp" resultType="com.ruoyi.cai.dto.app.vo.UserStarOrVisitorList">
select
t1.create_time as happen_time,t1.is_watch,
t2.avatar,t2.gender,t2.city,t2.nickname,t2.usercode,t2.age
from cai_user_visitor t1
join cai_user t2 on t1.user_id = t2.id
<where>
<if test="query.type == 1">
and t1.visitor_id = #{query.userId}
</if>
<if test="query.type == 2">
and t1.user_id = #{query.userId}
</if>
</where>
order by create_time desc
</select>
</mapper> </mapper>