Commit ba28a800 authored by 杨翌文's avatar 杨翌文

Merge remote-tracking branch 'origin/feature/20240918_chain' into feature/20240918_chain

parents a2db1885 d4a1e3b9
......@@ -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;
/************************************************** 场景分类 **************************************************/
......@@ -484,7 +487,7 @@ public class AppExamineService {
if(CollectionUtil.isNotEmpty(recordList)) {
examCount = recordList.stream().filter(v -> Objects.equals(v.getExamineMode(), 1)).count();
examTotalCount = recordList.size();
practiceCount = examTotalCount - examTotalCount;
practiceCount = examTotalCount - examCount;
maxOverallScore = recordList.stream().filter(v -> Objects.nonNull(v.getOverallScore())).mapToDouble(ExamineRecordResponseModel::getOverallScore).max().getAsDouble();
}
......@@ -651,7 +654,7 @@ public class AppExamineService {
* @param request
* @return
*/
public PageResult<ExamineMobileDto> examineMobilePaginQuery(ExamineRequestDto request) {
public PageResult<ExamineMobileDto> examineMobilePaginQuery(UserPrincipal userPrincipal, ExamineRequestDto request) {
ExamineRequestModel requestModel = BeanUtil.copyProperties(request, ExamineRequestModel.class);
requestModel.setStatus(1);
......@@ -667,14 +670,32 @@ public class AppExamineService {
ExamineMobileDto dto = BeanUtil.copyProperties(v, ExamineMobileDto.class);
// 已考人数
long examTotalCount = 0;
// 考试次数
long examCount = 0;
long practiceCount = 0;
double maxOverallScore = 0;
ExamineRecordRequestModel req = new ExamineRecordRequestModel();
req.setExamineId(v.getId());
List<ExamineRecordResponseModel> recordList = examineService.examineRecordList(req);
if(CollectionUtil.isNotEmpty(recordList)) {
examCount = recordList.size();
examTotalCount = recordList.size();
examCount = recordList.stream().filter(r -> Objects.equals(r.getExamineMode(), 1)).count();
practiceCount = examTotalCount - examCount;
maxOverallScore = recordList.stream().filter(r -> Objects.nonNull(r.getOverallScore())).mapToDouble(ExamineRecordResponseModel::getOverallScore).max().getAsDouble();
// 是否已考
long count = recordList.stream().filter(r -> Objects.equals(r.getUserId(), userPrincipal.getUserId())).count();
if(count > 0) {
dto.setExamFlag(true);
}
}
dto.setExamTotalCount(examCount);
dto.setExamTotalCount(examTotalCount);
dto.setMaxOverallScore(maxOverallScore);
dto.setExamCount(examCount);
dto.setPracticeCount(practiceCount);
return dto;
}).collect(Collectors.toList());
......@@ -709,11 +730,12 @@ public class AppExamineService {
* @param request
* @return
*/
public PageResult<ExamineRecordMobileDto> examineRecordMobilePaginQuery(ExamineRecordMobileRequestDto request) {
public PageResult<ExamineRecordMobileDto> examineRecordMobilePaginQuery(UserPrincipal userPrincipal, ExamineRecordMobileRequestDto request) {
ExamineRecordRequestModel requestModel = BeanUtil.copyProperties(request, ExamineRecordRequestModel.class);
requestModel.setSortColumn("create_time");
requestModel.setSortAsc(false);
requestModel.setUserId(userPrincipal.getUserId());
Page<ExamineRecordResponseModel> page = examineService.examineRecordPaginQuery(requestModel);
......@@ -744,8 +766,15 @@ public class AppExamineService {
* @return
*/
public PageResult<ExamineRecordDto> examineRecordPaginQuery(ExamineRecordRequestDto request) {
ExamineRecordRequestModel requestModel = BeanUtil.copyProperties(request, ExamineRecordRequestModel.class);
ExamineRequestModel rm = new ExamineRequestModel();
rm.setName(request.getUserName());
examineService.examineList(rm);
Page<ExamineRecordResponseModel> page = examineService.examineRecordPaginQuery(requestModel);
PageResult<ExamineRecordDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
......@@ -920,8 +949,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);
}
......@@ -977,7 +1020,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);
......@@ -987,6 +1030,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);
......@@ -994,7 +1040,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());
......
......@@ -44,7 +44,7 @@ public class ExamineMobileController {
public ApiResponse<PageResult<ExamineMobileDto>> list(
@Parameter(hidden = true) UserPrincipal userPrincipal,
@QueryParam ExamineRequestDto request) {
PageResult<ExamineMobileDto> pageResult = examineService.examineMobilePaginQuery(request);
PageResult<ExamineMobileDto> pageResult = examineService.examineMobilePaginQuery(userPrincipal, request);
return ApiResponse.ok(pageResult);
}
......@@ -60,8 +60,7 @@ public class ExamineMobileController {
public ApiResponse<PageResult<ExamineRecordMobileDto>> recordList(
@Parameter(hidden = true) UserPrincipal userPrincipal,
@QueryParam ExamineRecordMobileRequestDto request) {
PageResult<ExamineRecordMobileDto> pageResult = examineService.examineRecordMobilePaginQuery(request);
PageResult<ExamineRecordMobileDto> pageResult = examineService.examineRecordMobilePaginQuery(userPrincipal, request);
return ApiResponse.ok(pageResult);
}
......
......@@ -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;
}
......@@ -465,17 +465,17 @@ public class ExamineServiceImpl implements ExamineService {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
QueryWrapper queryWrapper = QueryWrapper.create()
.where(USER_EXAMINE_RECORD_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getUserId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.USER_ID.eq(request.getUserId()));
queryWrapper.and(USER_EXAMINE_RECORD_ENTITY.USER_ID.eq(request.getUserId()));
}
if(Objects.nonNull(request.getExamineMode())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_MODE.eq(request.getExamineMode()));
queryWrapper.and(USER_EXAMINE_RECORD_ENTITY.EXAMINE_MODE.eq(request.getExamineMode()));
}
if(Objects.nonNull(request.getExamineId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_ID.eq(request.getExamineId()));
queryWrapper.and(USER_EXAMINE_RECORD_ENTITY.EXAMINE_ID.eq(request.getExamineId()));
}
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.DELETED.eq(0));
queryWrapper.orderBy(USER_EXAMINE_RECORD_ENTITY.CREATE_TIME, false);
Page<ExamineRecordResponseModel> page = userExamineRecordMapper.paginateAs(pageNo, pageSize, queryWrapper, ExamineRecordResponseModel.class);
......@@ -486,17 +486,16 @@ public class ExamineServiceImpl implements ExamineService {
@Override
public List<ExamineRecordResponseModel> examineRecordList(ExamineRecordRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create();
QueryWrapper queryWrapper = QueryWrapper.create().where(USER_EXAMINE_RECORD_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getUserId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.USER_ID.eq(request.getUserId()));
queryWrapper.and(USER_EXAMINE_RECORD_ENTITY.USER_ID.eq(request.getUserId()));
}
if(Objects.nonNull(request.getExamineMode())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_MODE.eq(request.getExamineMode()));
queryWrapper.and(USER_EXAMINE_RECORD_ENTITY.EXAMINE_MODE.eq(request.getExamineMode()));
}
if(Objects.nonNull(request.getExamineId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_ID.eq(request.getExamineId()));
queryWrapper.and(USER_EXAMINE_RECORD_ENTITY.EXAMINE_ID.eq(request.getExamineId()));
}
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.DELETED.eq(0));
return userExamineRecordMapper.selectListByQueryAs(queryWrapper, ExamineRecordResponseModel.class);
}
......
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