新增了草稿搜索

This commit is contained in:
wucongxing8150 2025-06-10 14:19:54 +08:00
parent a899914fea
commit 8eb64d1c41
7 changed files with 510 additions and 1 deletions

View File

@ -0,0 +1,187 @@
package com.example.caseData.controller;
import cn.hutool.core.lang.Dict;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.caseData.common.Response;
import com.example.caseData.dao.*;
import com.example.caseData.dto.T;
import com.example.caseData.dto.caseExchange.CaseExchangeDto;
import com.example.caseData.dto.caseExchangeDraft.CaseExchangeDraftDto;
import com.example.caseData.dto.caseExchangeLabel.CaseExchangeLabelDto;
import com.example.caseData.dto.caseExchangeVote.CaseExchangeVoteDto;
import com.example.caseData.dto.caseExchangeVoteOption.CaseExchangeVoteOptionDto;
import com.example.caseData.dto.userCommentCaseExchange.GetUserCaseExchangeCommentPageDto;
import com.example.caseData.dto.userCommentCaseExchange.UserCommentCaseExchangeDto;
import com.example.caseData.exception.BusinessException;
import com.example.caseData.model.*;
import com.example.caseData.request.caseExchangeDraftRequest.getCaseExchangeDraftSearchPage;
import com.example.caseData.request.caseExchangeRequest.*;
import com.example.caseData.service.CaseExchangeService;
import com.example.caseData.utils.IntToString;
import com.example.caseData.utils.Replace;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.*;
@RestController
@RequestMapping("/api")
public class CaseExchangeDraftController {
@Resource
private HttpServletRequest httpServletRequest;
@Resource
private CaseExchangeDao caseExchangeDao;
@Resource
private UserDao userDao;
@Resource
private BasicHospitalDao basicHospitalDao;
@Resource
private CaseExchangeService caseExchangeService;
@Resource
private CaseExchangeDraftDao caseExchangeDraftDao;
@Resource
private CaseExchangeVoteDao caseExchangeVoteDao;
@Resource
private CaseExchangeLabelDao caseExchangeLabelDao;
@Resource
private CaseExchangeVoteOptionDao caseExchangeVoteOptionDao;
@Resource
private UserVoteExchangeDao userVoteExchangeDao;
@Resource
private UserCommentExchangeDao userCommentExchangeDao;
/**
* 临床病例库-病例交流-草稿-搜索
*/
@PostMapping("/exchange/draft/search")
public Response<Map<String, Object>> getCaseExchangeDraftSearchPage(
@Validated()
@RequestBody getCaseExchangeDraftSearchPage request
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
request.validateForPage();
Map<String, Object> resultMap = new HashMap<>();
Page<CaseExchangeDraftDto> page = new Page<>(request.getPage(), request.getPageSize());
IPage<CaseExchangeDraftDto> resultPage = caseExchangeDraftDao.getCaseExchangeDraftSearchPage(
page,
userId,
request.handleOrder()
);
for (CaseExchangeDraftDto dto : resultPage.getRecords()) {
// 处理标签
if (dto.getExchangeLabelJson() != null && !dto.getExchangeLabelJson().isEmpty()){
try {
JSONArray array = JSONUtil.parseArray(dto.getExchangeLabelJson());
List<CaseExchangeDraftDto.CaseExchangeLabelDto> caseExchangeLabelDto = JSONUtil.toList(array, CaseExchangeDraftDto.CaseExchangeLabelDto.class);
dto.setExchangeLabel(caseExchangeLabelDto);
dto.setExchangeLabelJson("");
} catch (Exception e) {
return Response.error(e.getMessage());
}
}
// 处理投票
if (dto.getExchangeVoteJson() != null && !dto.getExchangeVoteJson().isEmpty()){
try {
CaseExchangeDraftDto.ExchangeVoteDto caseExchangeVoteDto = JSONUtil.toBean(dto.getExchangeVoteJson(), CaseExchangeDraftDto.ExchangeVoteDto.class);
dto.setExchangeVote(caseExchangeVoteDto);
dto.setExchangeVoteJson("");
} catch (Exception e) {
return Response.error(e.getMessage());
}
}
}
resultMap.put("page", resultPage.getCurrent());
resultMap.put("pageSize", resultPage.getSize());
resultMap.put("total", resultPage.getTotal());
resultMap.put("data", resultPage.getRecords());
return Response.success(resultMap);
}
/**
* 病例交流-新增
*/
@PostMapping("/exchange/draft")
public Response<T> AddCaseExchange(
@Validated()
@RequestBody addCaseExchange request
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
try {
boolean res = caseExchangeService.AddCaseExchange(userId,request);
if (!res){
return Response.error("操作失败");
}
} catch (BusinessException e) {
return Response.error(e.getMessage());
}
return Response.success();
}
/**
* 病例交流-评论-删除
*/
@DeleteMapping("/exchange/draft/{draft_id}")
public Response<T> DeleteCaseExchangeComment(
@PathVariable("draft_id") String draftId
) {
String userId = (String) httpServletRequest.getAttribute("userId");
if (userId == null) {
return Response.error("操作失败");
}
try {
boolean res = caseExchangeService.DeleteCaseExchangeComment(draftId,userId);
if (!res){
return Response.error("操作失败");
}
} catch (BusinessException e) {
return Response.error(e.getMessage());
}
return Response.success();
}
}

View File

@ -0,0 +1,29 @@
package com.example.caseData.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.caseData.dto.caseExchange.CaseExchangeDto;
import com.example.caseData.dto.caseExchangeDraft.CaseExchangeDraftDto;
import com.example.caseData.model.CaseExchangeModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import java.util.List;
import java.util.Map;
@Mapper
public interface CaseExchangeDraftDao extends BaseMapper<CaseExchangeModel> {
/**
* 临床病例库-草稿箱-搜索
* @param page 分页数据
* @param order 排序
*/
IPage<CaseExchangeDraftDto> getCaseExchangeDraftSearchPage(
Page<?> page,
@Param("userId") String userId,
@Param("order") Map<String, String> order
);
}

View File

@ -0,0 +1,136 @@
package com.example.caseData.dto.caseExchangeDraft;
import com.example.caseData.dto.caseExchangeVoteOption.CaseExchangeVoteOptionDto;
import com.example.caseData.request.caseExchangeRequest.addCaseExchange;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@Data
public class CaseExchangeDraftDto {
/**
* 主键id
*/
@JsonProperty("draft_id")
private String draftId;
/**
* 用户id
*/
@JsonProperty("user_id")
private String userId;
/**
* 标题
*/
@JsonProperty("exchange_title")
private String exchangeTitle;
/**
* 内容
*/
@JsonProperty("exchange_content")
private String exchangeContent;
/**
* 总结
*/
@JsonProperty("exchange_summary")
private String exchangeSummary;
/**
* 标签id逗号分隔
*/
@JsonProperty("exchange_label_json")
private String exchangeLabelJson;
/**
* 标签
*/
@JsonProperty("exchange_label")
private List<CaseExchangeLabelDto> exchangeLabel;
/**
* 投票(json)
*/
@JsonProperty("exchange_vote_json")
private String exchangeVoteJson;
/**
* 投票
*/
@JsonProperty("exchange_vote")
private ExchangeVoteDto exchangeVote;
/**
* 创建时间
*/
@JsonProperty("created_at")
private LocalDateTime createdAt;
/**
* 修改时间
*/
@JsonProperty("updated_at")
private LocalDateTime updatedAt;
/**
* 标签
*/
@Data
public static class CaseExchangeLabelDto {
/**
* app唯一标识
*/
@JsonProperty("app_iden")
private String appIden;
/**
* 标签名称
*/
@JsonProperty("label_name")
private String labelName;
}
/**
* 标签
*/
@Data
public static class ExchangeVoteDto {
/**
* 选项标题
*/
@JsonProperty("vote_title")
private String voteTitle;
/**
* 结束投票时间
*/
@JsonProperty("end_time")
private LocalDateTime endTime;
/**
* 选项
*/
@JsonProperty("option")
private List<OptionDto> option;
}
/**
* 标签
*/
@Data
public static class OptionDto {
/**
* 选项
*/
@JsonProperty("option_value")
private String optionValue;
}
}

View File

@ -41,7 +41,7 @@ public class CaseExchangeVoteDto {
private LocalDateTime endTime;
/**
* 是否开启中0: 1:
* 是否开启中0: 1:过期状态
*/
@JsonProperty("is_enabled")
private Integer isEnabled;

View File

@ -0,0 +1,70 @@
package com.example.caseData.model;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 病例库-病例交流-草稿实体类
*/
@Data // Lombok注解用于自动生成getter/setter方法等
@TableName("`case_exchange_draft`") // 指定数据库表名
public class CaseExchangeDraftModel {
/**
* 主键id
*/
@TableId(type = IdType.ASSIGN_ID) // 使用MyBatis-Plus的ID生成策略
private Long draftId;
/**
* 用户id
*/
@TableField("user_id")
private Long userId;
/**
* 标题
*/
@TableField("exchange_title")
private String exchangeTitle;
/**
* 内容
*/
@TableField("exchange_content")
private String exchangeContent;
/**
* 总结
*/
@TableField("exchange_summary")
private String exchangeSummary;
/**
* 标签数据json
*/
@TableField("exchange_label_json")
private String exchangeLabelJson;
/**
* 投票json格式存储
*/
@TableField("exchange_vote_json")
private String exchangeVoteJson;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@JsonProperty("created_at")
private LocalDateTime createdAt;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonProperty("updated_at")
private LocalDateTime updatedAt;
}

View File

@ -0,0 +1,66 @@
package com.example.caseData.request.caseExchangeDraftRequest;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.Min;
import lombok.Data;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
@Data
public class getCaseExchangeDraftSearchPage {
// 分页参数
@Min(value = 1,message = "页码最小为 1")
private Integer page = 1;
@JsonProperty("page_size")
@Min(value = 1, message = "每页个数最小为 1")
private Integer pageSize = 20;
// 排序字段
private OrderRequest order;
/**
* 排序字段嵌套结构体
*/
@Data
public static class OrderRequest {
@JsonProperty("created_at")
private String createdAt; // 创建时间
public Map<String, String> toMap() {
Map<String, String> map = new HashMap<>();
if (StringUtils.hasText(createdAt)) {
map.put("a.created_at", createdAt);
}
// 默认排序如果用户未传递任何排序字段
if (map.isEmpty()) {
map.put("a.updated_at", "desc");
}
return map;
}
}
/**
* 获取排序字段若无用户输入则使用默认排序
*/
public Map<String, String> handleOrder() {
return order != null ? order.toMap() : new OrderRequest().toMap();
}
// 校验分页参数
public void validateForPage() {
// 如果 page 为空设为默认值 1
if (page == null) {
page = 1;
}
if (pageSize == null) {
pageSize = 20;
}
}
}

View File

@ -0,0 +1,21 @@
<?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.example.caseData.dao.CaseExchangeDraftDao">
<select id="getCaseExchangeDraftSearchPage" resultType="com.example.caseData.dto.caseExchangeDraft.CaseExchangeDraftDto">
SELECT
a.*
FROM case_exchange_draft a
LEFT JOIN user c ON c.user_id = a.user_id
<where>
<if test="userId != null and userId != ''">
AND c.user_id = #{userId}
</if>
</where>
<if test="order != null and !order.isEmpty()">
ORDER BY
<foreach item="entry" index="key" collection="order" separator=",">
${key} ${entry}
</foreach>
</if>
</select>
</mapper>