diff --git a/src/main/java/com/example/caseData/controller/CaseExchangeDraftController.java b/src/main/java/com/example/caseData/controller/CaseExchangeDraftController.java index 75a40c0..74a28d2 100644 --- a/src/main/java/com/example/caseData/controller/CaseExchangeDraftController.java +++ b/src/main/java/com/example/caseData/controller/CaseExchangeDraftController.java @@ -19,8 +19,10 @@ import com.example.caseData.dto.userCommentCaseExchange.GetUserCaseExchangeComme import com.example.caseData.dto.userCommentCaseExchange.UserCommentCaseExchangeDto; import com.example.caseData.exception.BusinessException; import com.example.caseData.model.*; +import com.example.caseData.request.caseExchangeDraftRequest.addCaseExchangeDraft; import com.example.caseData.request.caseExchangeDraftRequest.getCaseExchangeDraftSearchPage; import com.example.caseData.request.caseExchangeRequest.*; +import com.example.caseData.service.CaseExchangeDraftService; import com.example.caseData.service.CaseExchangeService; import com.example.caseData.utils.IntToString; import com.example.caseData.utils.Replace; @@ -51,6 +53,9 @@ public class CaseExchangeDraftController { @Resource private CaseExchangeService caseExchangeService; + @Resource + private CaseExchangeDraftService caseExchangeDraftService; + @Resource private CaseExchangeDraftDao caseExchangeDraftDao; @@ -129,12 +134,12 @@ public class CaseExchangeDraftController { /** - * 病例交流-新增 + * 临床病例库-病例交流-草稿-新增 */ @PostMapping("/exchange/draft") - public Response AddCaseExchange( + public Response AddCaseExchangeDraft( @Validated() - @RequestBody addCaseExchange request + @RequestBody addCaseExchangeDraft request ) { String userId = (String) httpServletRequest.getAttribute("userId"); @@ -143,7 +148,7 @@ public class CaseExchangeDraftController { } try { - boolean res = caseExchangeService.AddCaseExchange(userId,request); + boolean res = caseExchangeDraftService.AddCaseExchangeDraft(request,userId); if (!res){ return Response.error("操作失败"); } @@ -154,11 +159,8 @@ public class CaseExchangeDraftController { return Response.success(); } - - - /** - * 病例交流-评论-删除 + * 病例交流-草稿-删除 */ @DeleteMapping("/exchange/draft/{draft_id}") public Response DeleteCaseExchangeComment( @@ -172,7 +174,7 @@ public class CaseExchangeDraftController { } try { - boolean res = caseExchangeService.DeleteCaseExchangeComment(draftId,userId); + boolean res = caseExchangeDraftService.DeleteCaseExchangeDraft(draftId,userId); if (!res){ return Response.error("操作失败"); } diff --git a/src/main/java/com/example/caseData/dao/CaseExchangeDraftDao.java b/src/main/java/com/example/caseData/dao/CaseExchangeDraftDao.java index 4b37a44..a695f67 100644 --- a/src/main/java/com/example/caseData/dao/CaseExchangeDraftDao.java +++ b/src/main/java/com/example/caseData/dao/CaseExchangeDraftDao.java @@ -5,6 +5,7 @@ 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.CaseExchangeDraftModel; import com.example.caseData.model.CaseExchangeModel; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -14,7 +15,7 @@ import java.util.List; import java.util.Map; @Mapper -public interface CaseExchangeDraftDao extends BaseMapper { +public interface CaseExchangeDraftDao extends BaseMapper { /** * 临床病例库-草稿箱-搜索 diff --git a/src/main/java/com/example/caseData/dto/caseExchangeDraft/CaseExchangeDraftDto.java b/src/main/java/com/example/caseData/dto/caseExchangeDraft/CaseExchangeDraftDto.java index be1ea57..cff177a 100644 --- a/src/main/java/com/example/caseData/dto/caseExchangeDraft/CaseExchangeDraftDto.java +++ b/src/main/java/com/example/caseData/dto/caseExchangeDraft/CaseExchangeDraftDto.java @@ -108,11 +108,8 @@ public class CaseExchangeDraftDto { @JsonProperty("vote_title") private String voteTitle; - /** - * 结束投票时间 - */ - @JsonProperty("end_time") - private LocalDateTime endTime; + @JsonProperty("valid_day") + private Integer validDay; // 投票有效期天数 /** * 选项 diff --git a/src/main/java/com/example/caseData/request/caseExchangeDraftRequest/addCaseExchangeDraft.java b/src/main/java/com/example/caseData/request/caseExchangeDraftRequest/addCaseExchangeDraft.java new file mode 100644 index 0000000..11818cc --- /dev/null +++ b/src/main/java/com/example/caseData/request/caseExchangeDraftRequest/addCaseExchangeDraft.java @@ -0,0 +1,81 @@ +package com.example.caseData.request.caseExchangeDraftRequest; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.util.List; + +@Data +public class addCaseExchangeDraft { + /** + * 标题 + */ + @NotEmpty(message = "请输入标题") + @JsonProperty("exchange_title") + private String exchangeTitle; + + /** + * 内容 + */ + @NotEmpty(message = "请输入内容") + @JsonProperty("exchange_content") + private String exchangeContent; + + /** + * 总结 + */ + @JsonProperty("exchange_summary") + private String exchangeSummary; + + /** + * 投票 + */ + @JsonProperty("case_exchange_vote") + private CaseExchangeVoteRequest caseExchangeVote; + + /** + * 标签 + */ + @JsonProperty("case_exchange_label") + private List caseExchangeLabel; + + /** + * 投票 + */ + @Data + public static class CaseExchangeVoteRequest { + @JsonProperty("vote_title") + @NotEmpty(message = "请输入投票标题") + private String voteTitle; // 选项标题 + + @JsonProperty("valid_day") + @Size(min = 1, max = 20, message = "有效期在1-20天内") + private Integer validDay; // 投票有效期天数 + + @JsonProperty("option") + private List option; + } + + /** + * 投票选项 + */ + @Data + public static class CaseExchangeVoteOptionRequest { + @JsonProperty("option_value") + private String optionValue; // 选项 + } + + /** + * 标签 + */ + @Data + public static class CaseExchangeLabelRequest { + @JsonProperty("app_iden") + private String appIden; // app唯一标识 + + @JsonProperty("label_name") + private String labelName; // 标签名称 + } +} diff --git a/src/main/java/com/example/caseData/service/CaseExchangeDraftService.java b/src/main/java/com/example/caseData/service/CaseExchangeDraftService.java new file mode 100644 index 0000000..63fdd44 --- /dev/null +++ b/src/main/java/com/example/caseData/service/CaseExchangeDraftService.java @@ -0,0 +1,96 @@ +package com.example.caseData.service; + +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.example.caseData.common.Response; +import com.example.caseData.dao.*; +import com.example.caseData.exception.BusinessException; +import com.example.caseData.model.*; +import com.example.caseData.request.caseExchangeDraftRequest.addCaseExchangeDraft; +import com.example.caseData.request.caseExchangeRequest.addCaseExchange; +import com.example.caseData.request.caseExchangeRequest.addCaseExchangeComment; +import com.example.caseData.utils.Replace; +import com.mysql.cj.protocol.Message; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +@Service +public class CaseExchangeDraftService { + @Resource + private CaseExchangeDraftDao caseExchangeDraftDao; + + /** + * 草稿-新增 + */ + @Transactional + public boolean AddCaseExchangeDraft(addCaseExchangeDraft request, String userId){ + try { + // 构造数据库实体 + CaseExchangeDraftModel data = new CaseExchangeDraftModel(); + data.setUserId(Long.valueOf(userId)); + data.setExchangeTitle(request.getExchangeTitle()); + data.setExchangeContent(request.getExchangeContent()); + data.setExchangeSummary(request.getExchangeSummary()); + + ObjectMapper objectMapper = new ObjectMapper(); + + // 投票信息转 JSON 字符串 + if (request.getCaseExchangeVote() != null) { + String voteJson = objectMapper.writeValueAsString(request.getCaseExchangeVote()); + data.setExchangeVoteJson(voteJson); + } + + // 标签信息转 JSON 字符串 + if (request.getCaseExchangeLabel() != null && !request.getCaseExchangeLabel().isEmpty()) { + String labelJson = objectMapper.writeValueAsString(request.getCaseExchangeLabel()); + data.setExchangeLabelJson(labelJson); + } + + data.setCreatedAt(LocalDateTime.now()); + data.setUpdatedAt(LocalDateTime.now()); + + // 保存到数据库 + int res = caseExchangeDraftDao.insert(data); + return res > 0; + } catch (Exception e) { + throw new BusinessException(e.getMessage()); + } + } + + /** + * 草稿-删除 + * @param draftId 草稿 + * @param userId 用户id + * @return bool + */ + @Transactional + public boolean DeleteCaseExchangeDraft(String draftId, String userId){ + // 获取数据 + CaseExchangeDraftModel draft = caseExchangeDraftDao.selectById(draftId); + if (draft == null) { + return false; + } + + // 检测用户是否病例交流作者 + if (!Objects.equals(draft.getUserId(), Long.valueOf(userId))){ + return false; + } + + // 删除 + int res = caseExchangeDraftDao.deleteById(draft.getDraftId()); + if (res <= 0){ + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return false; + } + + return true; + } +}