Commit 6d150b86 authored by 陈立彬's avatar 陈立彬

资料浏览记录

parent 0f6082f4
......@@ -8,6 +8,7 @@ import cn.breeze.elleai.domain.sparring.model.request.*;
import cn.breeze.elleai.domain.sparring.model.response.*;
import cn.breeze.elleai.domain.sparring.service.CommonService;
import cn.breeze.elleai.domain.sparring.service.ExamineService;
import cn.breeze.elleai.domain.sparring.service.WikiUserViewService;
import cn.breeze.elleai.exception.InternalException;
import cn.breeze.elleai.util.Codes;
import cn.breeze.elleai.util.UserPrincipal;
......@@ -56,6 +57,8 @@ public class AppExamineService {
private final CommonService commonService;
private final WikiUserViewService viewService;
/************************************************** 场景分类 **************************************************/
......@@ -938,8 +941,22 @@ public class AppExamineService {
return BeanUtil.copyProperties(model, WikiDto.class);
}
public WikiMobileDto wikiMobileDetail(Integer id) {
public WikiMobileDto wikiMobileDetail(UserPrincipal userPrincipal, Integer id) {
WikiResponseModel model = examineService.wikiDetail(id);
if(Objects.nonNull(model)) {
// 保存浏览记录
WikiUserViewSaveModel saveModel = new WikiUserViewSaveModel();
saveModel.setWikiId(id);
saveModel.setUserId(userPrincipal.getUserId());
saveModel.setViewCount(1);
WikiUserViewResponseModel view = viewService.viewDetail(userPrincipal.getUserId(), id);
if(Objects.nonNull(view)) {
saveModel.setViewCount(view.getViewCount() + 1);
saveModel.setId(view.getId());
}
viewService.saveView(saveModel);
}
return BeanUtil.copyProperties(model, WikiMobileDto.class);
}
......@@ -995,7 +1012,7 @@ public class AppExamineService {
* @param request
* @return
*/
public PageResult<WikiListMobileDto> wikiMobilePaginQuery(WikiRequestDto request) {
public PageResult<WikiListMobileDto> wikiMobilePaginQuery(UserPrincipal userPrincipal, WikiRequestDto request) {
WikiRequestModel requestModel = BeanUtil.copyProperties(request, WikiRequestModel.class);
requestModel.setStatus(1);
......@@ -1005,6 +1022,9 @@ public class AppExamineService {
PageResult<WikiListMobileDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<WikiUserViewResponseModel> viewList = viewService.viewList(userPrincipal.getUserId());
List<WikiListMobileDto> dtoList = page.getRecords().stream().map(v -> {
WikiListMobileDto dto = BeanUtil.copyProperties(v, WikiListMobileDto.class);
......@@ -1012,7 +1032,10 @@ public class AppExamineService {
if(Objects.nonNull(wikiCategoryDto)) {
dto.setWikiCategoryName(wikiCategoryDto.getName());
}
long count = viewList.stream().filter(w -> Objects.equals(w.getWikiId(), v.getId())).count();
if(count > 0) {
dto.setViewFlag(true);
}
return dto;
}).collect(Collectors.toList());
......
......@@ -37,14 +37,14 @@ public class WikiMobileController {
public ApiResponse<PageResult<WikiListMobileDto>> list(
@Parameter(hidden = true) UserPrincipal userPrincipal,
@QueryParam WikiRequestDto request) {
PageResult<WikiListMobileDto> pageResult = examineService.wikiMobilePaginQuery(request);
PageResult<WikiListMobileDto> pageResult = examineService.wikiMobilePaginQuery(userPrincipal, request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "获取资料详情")
@GetMapping("/detail/{id}")
public ApiResponse<WikiMobileDto> detail(@Schema(description = "资料ID") @PathVariable("id") Integer id) {
WikiMobileDto detail = examineService.wikiMobileDetail(id);
public ApiResponse<WikiMobileDto> detail(UserPrincipal userPrincipal, @Schema(description = "资料ID") @PathVariable("id") Integer id) {
WikiMobileDto detail = examineService.wikiMobileDetail(userPrincipal, id);
return ApiResponse.ok(detail);
}
}
......@@ -10,7 +10,6 @@ import java.util.Date;
@Data
public class WikiSaveModel implements Serializable {
@Id(keyType = KeyType.Auto)
private Integer id;
/**
......
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class WikiUserViewSaveModel implements Serializable {
private Integer id;
/**
* 资料ID
*/
private Integer wikiId;
/**
* 用户ID
*/
private String userId;
/**
* 浏览次数
*/
private Integer viewCount;
}
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class WikiUserViewResponseModel implements Serializable {
private Integer id;
/**
* 资料ID
*/
private Integer wikiId;
/**
* 用户ID
*/
private String userId;
/**
* 浏览次数
*/
private Integer viewCount;
private Date createTime;
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.KbVectorRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.KbVectorSaveModel;
import cn.breeze.elleai.domain.sparring.model.request.WikiUserViewSaveModel;
import cn.breeze.elleai.domain.sparring.model.response.KbVectorResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.WikiUserViewResponseModel;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import cn.breeze.elleai.infra.entity.WikiUserViewEntity;
import java.util.List;
/**
* 服务层。
*
* @author breeze
* @since 2024-10-24
*/
public interface WikiUserViewService extends IService<WikiUserViewEntity> {
/***************************************** 知识库集合 *****************************************/
List<WikiUserViewResponseModel> viewList(String userId);
WikiUserViewResponseModel viewDetail(String userId, Integer wikiId);
void saveView(WikiUserViewSaveModel dto);
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.WikiUserViewSaveModel;
import cn.breeze.elleai.domain.sparring.model.response.WikiUserViewResponseModel;
import cn.breeze.elleai.infra.entity.WikiUserViewEntity;
import cn.breeze.elleai.infra.mapper.WikiUserViewMapper;
import cn.hutool.core.bean.BeanUtil;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import static cn.breeze.elleai.infra.entity.table.WikiUserViewTableDef.WIKI_USER_VIEW_ENTITY;
/**
* 服务层实现。
*
* @author breeze
* @since 2024-10-24
*/
@Service
public class WikiUserViewServiceImpl extends ServiceImpl<WikiUserViewMapper, WikiUserViewEntity> implements WikiUserViewService {
@Override
public List<WikiUserViewResponseModel> viewList(String userId) {
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(WIKI_USER_VIEW_ENTITY.USER_ID.eq(userId));
queryWrapper.orderBy(WIKI_USER_VIEW_ENTITY.CREATE_TIME, false);
return mapper.selectListByQueryAs(queryWrapper, WikiUserViewResponseModel.class);
}
@Override
public void saveView(WikiUserViewSaveModel dto) {
WikiUserViewEntity entity = BeanUtil.toBean(dto, WikiUserViewEntity.class);
if(Objects.isNull(entity.getId())) {
entity.setCreateTime(new Date());
}
mapper.insertOrUpdateSelective(entity);
}
@Override
public WikiUserViewResponseModel viewDetail(String userId, Integer wikiId) {
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(WIKI_USER_VIEW_ENTITY.USER_ID.eq(userId));
queryWrapper.and(WIKI_USER_VIEW_ENTITY.WIKI_ID.eq(wikiId));
return mapper.selectOneByQueryAs(queryWrapper, WikiUserViewResponseModel.class);
}
}
package cn.breeze.elleai.infra.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 实体类。
*
* @author breeze
* @since 2024-10-24
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_wiki_user_view")
public class WikiUserViewEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 资料ID
*/
private Integer wikiId;
/**
* 用户ID
*/
private String userId;
/**
* 浏览次数
*/
private Integer viewCount;
private Date createTime;
}
package cn.breeze.elleai.infra.entity.table;
import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.table.TableDef;
import java.io.Serial;
/**
* 表定义层。
*
* @author breeze
* @since 2024-10-24
*/
public class WikiUserViewTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final WikiUserViewTableDef WIKI_USER_VIEW_ENTITY = new WikiUserViewTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 用户ID
*/
public final QueryColumn USER_ID = new QueryColumn(this, "user_id");
/**
* 资料ID
*/
public final QueryColumn WIKI_ID = new QueryColumn(this, "wiki_id");
/**
* 浏览次数
*/
public final QueryColumn VIEW_COUNT = new QueryColumn(this, "view_count");
public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, WIKI_ID, USER_ID, VIEW_COUNT, CREATE_TIME};
public WikiUserViewTableDef() {
super("", "ai_wiki_user_view");
}
private WikiUserViewTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public WikiUserViewTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new WikiUserViewTableDef("", "ai_wiki_user_view", alias));
}
}
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.WikiUserViewEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-10-24
*/
@Mapper
public interface WikiUserViewMapper extends BaseMapper<WikiUserViewEntity> {
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment