This commit is contained in:
wucongxing8150 2025-07-29 15:28:33 +08:00
parent dfce0a6b31
commit ca409dcac6
9 changed files with 472 additions and 85 deletions

View File

@ -2,10 +2,10 @@ package com.example.caseData.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.caseData.common.Response; import com.example.caseData.common.Response;
import com.example.caseData.dao.StatsCaseClinicalDao; import com.example.caseData.dao.*;
import com.example.caseData.dao.StatsCaseClinicalDoctorDao; import com.example.caseData.dto.caseClinicalArticle.CaseClinicalArticleDto;
import com.example.caseData.dao.StatsCaseClinicalHospitalDao; import com.example.caseData.dto.caseClinicalVideo.CaseClinicalVideoDto;
import com.example.caseData.dao.StatsCaseClinicalLabelDao; import com.example.caseData.dto.caseExchange.CaseExchangeDto;
import com.example.caseData.dto.statsCaseClinical.StatsCaseClinicalDto; import com.example.caseData.dto.statsCaseClinical.StatsCaseClinicalDto;
import com.example.caseData.dto.statsCaseClinicalDoctor.StatsCaseClinicalDoctorDto; import com.example.caseData.dto.statsCaseClinicalDoctor.StatsCaseClinicalDoctorDto;
import com.example.caseData.dto.statsCaseClinicalHospital.StatsCaseClinicalHospitalDto; import com.example.caseData.dto.statsCaseClinicalHospital.StatsCaseClinicalHospitalDto;
@ -17,6 +17,8 @@ import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController @RestController
@RequestMapping("/api") @RequestMapping("/api")
public class StatsCaseClinicalController extends BaseController { public class StatsCaseClinicalController extends BaseController {
@ -32,6 +34,12 @@ public class StatsCaseClinicalController extends BaseController {
@Resource @Resource
private StatsCaseClinicalLabelDao statsCaseClinicalLabelDao; private StatsCaseClinicalLabelDao statsCaseClinicalLabelDao;
@Resource
private CaseClinicalArticleDao caseClinicalArticleDao;
@Resource
private CaseClinicalVideoDao caseClinicalVideoDao;
/** /**
* 临床病例库-统计 * 临床病例库-统计
*/ */
@ -100,17 +108,42 @@ public class StatsCaseClinicalController extends BaseController {
public Response<StatsCaseClinicalLabelDto> getClinicalStatsLabel( public Response<StatsCaseClinicalLabelDto> getClinicalStatsLabel(
@Validated() @ModelAttribute getClinicalStatsLabel request @Validated() @ModelAttribute getClinicalStatsLabel request
){ ){
// 统计表-病例库-临床 Integer articleReadNum = 0;
LambdaQueryWrapper<StatsCaseClinicalLabelModel> statsCaseClinicalLabelQueryWrapper = new LambdaQueryWrapper<>(); Integer videoReadNum = 0;
statsCaseClinicalLabelQueryWrapper.eq(StatsCaseClinicalLabelModel::getLabelIden, request.getLabel_iden());
StatsCaseClinicalLabelModel statsCaseClinicalLabel = statsCaseClinicalLabelDao.selectOne(statsCaseClinicalLabelQueryWrapper);
StatsCaseClinicalLabelDto g = StatsCaseClinicalLabelDto.GetDto(statsCaseClinicalLabel); // 获取该标签下文章数据
List<CaseClinicalArticleDto> caseClinicalArticles = caseClinicalArticleDao.getCaseClinicalArticleSearchList(
if (g == null){ "",
return Response.success(new StatsCaseClinicalLabelDto()); "",
"",
request.getLabel_iden(),
null
);
for (CaseClinicalArticleDto article : caseClinicalArticles){
articleReadNum += article.getReadNum();
} }
// 获取该标签下视频数据
List<CaseClinicalVideoDto> caseClinicalVideos = caseClinicalVideoDao.getCaseClinicalVideoSearchList(
"",
"",
"",
request.getLabel_iden(),
null
);
for (CaseClinicalVideoDto video : caseClinicalVideos){
videoReadNum += video.getReadNum();
}
StatsCaseClinicalLabelDto g = new StatsCaseClinicalLabelDto();
g.setStatsId("1");
g.setArticleNum(caseClinicalArticles.size());
g.setArticleReadNum(articleReadNum);
g.setVideoNum(caseClinicalVideos.size());
g.setVideoReadNum(videoReadNum);
return Response.success(g); return Response.success(g);
} }
} }

View File

@ -9,6 +9,8 @@ import com.example.caseData.model.CaseClinicalArticleModel;
import org.apache.ibatis.annotations.*; import org.apache.ibatis.annotations.*;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map; import java.util.Map;
@Mapper @Mapper
@ -28,6 +30,20 @@ public interface CaseClinicalArticleDao extends BaseMapper<CaseClinicalArticleMo
@Param("order") Map<String, String> order @Param("order") Map<String, String> order
); );
/**
* 临床病例库-搜索
* @param keyword 搜索关键词-标题/医生名称/标签名称
* @param order 排序
*/
List<CaseClinicalArticleDto> getCaseClinicalArticleSearchList(
@Param("keyword") String keyword,
@Param("hospitalId") String hospitalId,
@Param("doctorId") String doctorId,
@Param("labelIden") String labelIden,
@Param("order") Map<String, String> order
);
/** /**
* 临床病例库-搜索-数量 * 临床病例库-搜索-数量
* @param keyword 搜索关键词-标题/医生名称/标签名称 * @param keyword 搜索关键词-标题/医生名称/标签名称
@ -61,4 +77,18 @@ public interface CaseClinicalArticleDao extends BaseMapper<CaseClinicalArticleMo
"SET ${field} = CASE WHEN ${field} >= #{numeral} THEN ${field} - #{numeral} ELSE 0 END " + "SET ${field} = CASE WHEN ${field} >= #{numeral} THEN ${field} - #{numeral} ELSE 0 END " +
"WHERE article_id = #{articleId}") "WHERE article_id = #{articleId}")
int dec(@Param("articleId") Long articleId, @Param("field") String field, @Param("numeral") int numeral); int dec(@Param("articleId") Long articleId, @Param("field") String field, @Param("numeral") int numeral);
/**
* 根据医院ID查询该医院最后一篇文章的发表时间
* @param hospitalId 医院ID
* @return 最新发表时间无数据时返回 null
*/
LocalDateTime selectLastArticlePushDateByHospitalId(@Param("hospitalId") Long hospitalId);
/**
* 根据医生ID查询该医生最后一篇文章的发表时间
* @param doctorId 医院ID
* @return 最新发表时间无数据时返回 null
*/
LocalDateTime selectLastArticlePushDateByDoctorId(@Param("doctorId") Long doctorId);
} }

View File

@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.Update;
import java.util.List;
import java.util.Map; import java.util.Map;
@Mapper @Mapper
@ -29,6 +30,19 @@ public interface CaseClinicalVideoDao extends BaseMapper<CaseClinicalVideoModel>
@Param("order") Map<String, String> order @Param("order") Map<String, String> order
); );
/**
* 临床病例库-搜索
* @param keyword 搜索关键词-标题/医生名称/标签名称
* @param order 排序
*/
List<CaseClinicalVideoDto> getCaseClinicalVideoSearchList(
@Param("keyword") String keyword,
@Param("hospitalId") String hospitalId,
@Param("doctorId") String doctorId,
@Param("labelIden") String labelIden,
@Param("order") Map<String, String> order
);
/** /**
* 临床病例库-搜索-数量 * 临床病例库-搜索-数量
* @param keyword 搜索关键词-标题/医生名称/标签名称 * @param keyword 搜索关键词-标题/医生名称/标签名称

View File

@ -48,6 +48,12 @@ public class StatsCaseClinicalDoctorModel {
@TableField("article_comment_num") @TableField("article_comment_num")
private Integer articleCommentNum; private Integer articleCommentNum;
/**
* 最后一篇文章发表时间
*/
@TableField("last_push_date")
private LocalDateTime lastPushDate;
/** /**
* 数量-视频 * 数量-视频
*/ */

View File

@ -86,7 +86,7 @@ public class CaseClinicalArticleService {
} }
// 新增统计字段 // 新增统计字段
boolean r = IncClinicalArticleStats(articleId,2); boolean r = IncClinicalArticleStats(articleId,2,1);
if (!r){ if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false; return false;
@ -117,7 +117,7 @@ public class CaseClinicalArticleService {
} }
// 减少文章的统计字段 // 减少文章的统计字段
boolean r = DecClinicalArticleStats(articleId,2); boolean r = DecClinicalArticleStats(articleId,2,1);
if (!r){ if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false; return false;
@ -175,7 +175,7 @@ public class CaseClinicalArticleService {
} }
// 新增文章的统计字段 // 新增文章的统计字段
boolean r = IncClinicalArticleStats(articleId,3); boolean r = IncClinicalArticleStats(articleId,3,1);
if (!r){ if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false; return false;
@ -222,7 +222,7 @@ public class CaseClinicalArticleService {
} }
// 减少文章的统计字段 // 减少文章的统计字段
boolean r = DecClinicalArticleStats(String.valueOf(comment.getArticleId()),2); boolean r = DecClinicalArticleStats(String.valueOf(comment.getArticleId()),2,1);
if (!r){ if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false; return false;
@ -370,7 +370,7 @@ public class CaseClinicalArticleService {
* @param type 类型1:阅读量 2收藏量 3:评论数 4:文章数 * @param type 类型1:阅读量 2收藏量 3:评论数 4:文章数
*/ */
@Transactional @Transactional
public boolean IncClinicalArticleStats(String articleId,Integer type){ public boolean IncClinicalArticleStats(String articleId,Integer type,Integer num){
try { try {
String caseClinicalArticleField = ""; // 具体文章 String caseClinicalArticleField = ""; // 具体文章
String statsCaseClinicalField = ""; // 全部文章 String statsCaseClinicalField = ""; // 全部文章
@ -414,9 +414,9 @@ public class CaseClinicalArticleService {
} }
if (!caseClinicalArticleField.isEmpty()){ if (!caseClinicalArticleField.isEmpty()){
caseClinicalArticleDao.inc(Long.valueOf(articleId),caseClinicalArticleField,1); caseClinicalArticleDao.inc(Long.valueOf(articleId),caseClinicalArticleField,num);
} }
statsCaseClinicalDao.inc(1L,statsCaseClinicalField,1); statsCaseClinicalDao.inc(1L,statsCaseClinicalField,num);
// 获取文章作者 // 获取文章作者
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
@ -427,10 +427,10 @@ public class CaseClinicalArticleService {
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 减少医生文章数 // 减少医生文章数
statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),statsCaseClinicalHospitalField,1); statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),statsCaseClinicalHospitalField,num);
// 减少医生文章数 // 减少医生文章数
statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,1); statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,num);
} }
// 获取文章标签数据 // 获取文章标签数据
@ -438,7 +438,7 @@ public class CaseClinicalArticleService {
labelQueryWrapper.eq(CaseClinicalArticleLabelModel::getArticleId, articleId); labelQueryWrapper.eq(CaseClinicalArticleLabelModel::getArticleId, articleId);
List<CaseClinicalArticleLabelModel> caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper); List<CaseClinicalArticleLabelModel> caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper);
for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) { for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) {
statsCaseClinicalLabelDao.inc(label.getAppIden(),statsCaseClinicalLabelField,1); statsCaseClinicalLabelDao.inc(label.getAppIden(),statsCaseClinicalLabelField,num);
} }
return true; return true;
@ -454,7 +454,7 @@ public class CaseClinicalArticleService {
* @param type 类型1:阅读量 2收藏量 3:评论数 4:文章数 * @param type 类型1:阅读量 2收藏量 3:评论数 4:文章数
*/ */
@Transactional @Transactional
public boolean DecClinicalArticleStats(String articleId,Integer type){ public boolean DecClinicalArticleStats(String articleId,Integer type,Integer num){
try { try {
String caseClinicalArticleField = ""; // 具体文章 String caseClinicalArticleField = ""; // 具体文章
String statsCaseClinicalField = ""; // 全部文章 String statsCaseClinicalField = ""; // 全部文章
@ -498,9 +498,9 @@ public class CaseClinicalArticleService {
} }
if (!caseClinicalArticleField.isEmpty()){ if (!caseClinicalArticleField.isEmpty()){
caseClinicalArticleDao.dec(Long.valueOf(articleId),caseClinicalArticleField,1); caseClinicalArticleDao.dec(Long.valueOf(articleId),caseClinicalArticleField,num);
} }
statsCaseClinicalDao.dec(1L,statsCaseClinicalField,1); statsCaseClinicalDao.dec(1L,statsCaseClinicalField,num);
// 获取文章作者 // 获取文章作者
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
@ -511,10 +511,10 @@ public class CaseClinicalArticleService {
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 减少医生文章数 // 减少医生文章数
statsCaseClinicalHospitalDao.dec(caseClinicalDoctor.getHospitalId(),statsCaseClinicalHospitalField,1); statsCaseClinicalHospitalDao.dec(caseClinicalDoctor.getHospitalId(),statsCaseClinicalHospitalField,num);
// 减少医生文章数 // 减少医生文章数
statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,1); statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,num);
} }
// 获取文章标签数据 // 获取文章标签数据
@ -522,7 +522,7 @@ public class CaseClinicalArticleService {
labelQueryWrapper.eq(CaseClinicalArticleLabelModel::getArticleId, articleId); labelQueryWrapper.eq(CaseClinicalArticleLabelModel::getArticleId, articleId);
List<CaseClinicalArticleLabelModel> caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper); List<CaseClinicalArticleLabelModel> caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper);
for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) { for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) {
statsCaseClinicalLabelDao.dec(label.getAppIden(),statsCaseClinicalLabelField,1); statsCaseClinicalLabelDao.dec(label.getAppIden(),statsCaseClinicalLabelField,num);
} }
return true; return true;
@ -532,61 +532,62 @@ public class CaseClinicalArticleService {
} }
} }
/** // /**
* 处理文章所属医院的数量统计 // * 处理文章所属医院的数量统计
*/ // */
@Transactional // @Transactional
public boolean handleHospitalStat(String doctorId,Long oldHospitalId,String newHospitalId){ // public boolean handleHospitalStat(String doctorId,Long oldHospitalId,String newHospitalId){
try { // try {
// 获取统计表医生数据 // // 获取统计表医生数据
LambdaQueryWrapper<StatsCaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>(); // LambdaQueryWrapper<StatsCaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>();
doctorQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId); // doctorQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId);
StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(doctorQueryWrapper); // StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(doctorQueryWrapper);
if (statsCaseClinicalDoctor == null){ // if (statsCaseClinicalDoctor == null){
return true; // return true;
} // }
//
// 获取旧医院数据 // // 获取旧医院数据
StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectById(oldHospitalId); // StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectById(oldHospitalId);
if (statsCaseClinicalHospital == null){ // if (statsCaseClinicalHospital == null){
throw new BusinessException("操作失败"); // throw new BusinessException("操作失败");
} // }
//
// 减少数-文章 // // 减少数-文章
statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_num",statsCaseClinicalDoctor.getArticleNum()); // statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_num",statsCaseClinicalDoctor.getArticleNum());
//
// 减少阅读数-文章 // // 减少阅读数-文章
statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_read_num",statsCaseClinicalDoctor.getArticleReadNum()); // statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_read_num",statsCaseClinicalDoctor.getArticleReadNum());
//
// 减少收藏数-文章 // // 减少收藏数-文章
statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_collect_num",statsCaseClinicalDoctor.getArticleCollectNum()); // statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_collect_num",statsCaseClinicalDoctor.getArticleCollectNum());
//
// 减少评论数-文章 // // 减少评论数-文章
statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_comment_num",statsCaseClinicalDoctor.getArticleCommentNum()); // statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_comment_num",statsCaseClinicalDoctor.getArticleCommentNum());
//
// 减少数-视频 // // 减少数-视频
statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_num",statsCaseClinicalDoctor.getVideoNum()); // statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_num",statsCaseClinicalDoctor.getVideoNum());
//
// 减少阅读数-视频 // // 减少阅读数-视频
statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_read_num",statsCaseClinicalDoctor.getVideoReadNum()); // statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_read_num",statsCaseClinicalDoctor.getVideoReadNum());
//
// 减少收藏数-视频 // // 减少收藏数-视频
statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_collect_num",statsCaseClinicalDoctor.getVideoCollectNum()); // statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_collect_num",statsCaseClinicalDoctor.getVideoCollectNum());
//
// 减少评论数-视频 // // 减少评论数-视频
statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_comment_num",statsCaseClinicalDoctor.getVideoCommentNum()); // statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_comment_num",statsCaseClinicalDoctor.getVideoCommentNum());
//
// 最后一篇文章发表时间 // // 最后一篇文章发表时间
//
} catch (Exception e) { // } catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false; // return false;
} // }
//
// return true;
//
// }
return true;
}
/** /**
* 检测作品状态 * 检测作品状态

View File

@ -1,15 +1,21 @@
package com.example.caseData.service; package com.example.caseData.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.caseData.dao.CaseClinicalArticleDao;
import com.example.caseData.dao.StatsCaseClinicalDoctorDao; import com.example.caseData.dao.StatsCaseClinicalDoctorDao;
import com.example.caseData.dao.StatsCaseClinicalHospitalDao; import com.example.caseData.dao.StatsCaseClinicalHospitalDao;
import com.example.caseData.dao.StatsCaseClinicalLabelDao; import com.example.caseData.dao.StatsCaseClinicalLabelDao;
import com.example.caseData.exception.BusinessException;
import com.example.caseData.model.CaseClinicalArticleModel;
import com.example.caseData.model.StatsCaseClinicalDoctorModel; import com.example.caseData.model.StatsCaseClinicalDoctorModel;
import com.example.caseData.model.StatsCaseClinicalHospitalModel; import com.example.caseData.model.StatsCaseClinicalHospitalModel;
import com.example.caseData.model.StatsCaseClinicalLabelModel; import com.example.caseData.model.StatsCaseClinicalLabelModel;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.time.LocalDateTime;
@Service @Service
public class CaseClinicalService { public class CaseClinicalService {
@ -22,6 +28,9 @@ public class CaseClinicalService {
@Resource @Resource
private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao; private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao;
@Resource
private CaseClinicalArticleDao caseClinicalArticleDao;
// 新增标签统计 // 新增标签统计
@Transactional @Transactional
public void AddStatsCaseClinicalLabel(String labelIden,String labelName){ public void AddStatsCaseClinicalLabel(String labelIden,String labelName){
@ -38,7 +47,7 @@ public class CaseClinicalService {
// 新增医生统计 // 新增医生统计
@Transactional @Transactional
public void AddStatsCaseClinicalDoctor(String doctorId){ public StatsCaseClinicalDoctorModel AddStatsCaseClinicalDoctor(String doctorId){
LambdaQueryWrapper<StatsCaseClinicalDoctorModel> mapQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<StatsCaseClinicalDoctorModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId); mapQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId);
StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(mapQueryWrapper); StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(mapQueryWrapper);
@ -47,11 +56,13 @@ public class CaseClinicalService {
statsCaseClinicalDoctor.setDoctorId(Long.valueOf(doctorId)); statsCaseClinicalDoctor.setDoctorId(Long.valueOf(doctorId));
statsCaseClinicalDoctorDao.insert(statsCaseClinicalDoctor); statsCaseClinicalDoctorDao.insert(statsCaseClinicalDoctor);
} }
return statsCaseClinicalDoctor;
} }
// 新增医院统计 // 新增医院统计
@Transactional @Transactional
public void AddStatsCaseClinicalHospital(String hospitalId){ public StatsCaseClinicalHospitalModel AddStatsCaseClinicalHospital(String hospitalId){
LambdaQueryWrapper<StatsCaseClinicalHospitalModel> mapQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<StatsCaseClinicalHospitalModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalHospitalModel::getHospitalId, hospitalId); mapQueryWrapper.eq(StatsCaseClinicalHospitalModel::getHospitalId, hospitalId);
StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(mapQueryWrapper); StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(mapQueryWrapper);
@ -60,5 +71,202 @@ public class CaseClinicalService {
statsCaseClinicalHospital.setHospitalId(Long.valueOf(hospitalId)); statsCaseClinicalHospital.setHospitalId(Long.valueOf(hospitalId));
statsCaseClinicalHospitalDao.insert(statsCaseClinicalHospital); statsCaseClinicalHospitalDao.insert(statsCaseClinicalHospital);
} }
return statsCaseClinicalHospital;
} }
/**
* 处理文章所属医院的数量统计
*/
@Transactional
public boolean handleHospitalStat(Long doctorId,Long oldHospitalId,Long newHospitalId){
try {
// 获取统计表医生数据
LambdaQueryWrapper<StatsCaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>();
doctorQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId);
StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(doctorQueryWrapper);
if (statsCaseClinicalDoctor == null){
return true;
}
// 获取旧医院数据
LambdaQueryWrapper<StatsCaseClinicalHospitalModel> hospitalQueryWrapper = new LambdaQueryWrapper<>();
hospitalQueryWrapper.eq(StatsCaseClinicalHospitalModel::getHospitalId, oldHospitalId);
StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(hospitalQueryWrapper);
if (statsCaseClinicalHospital == null){
throw new BusinessException("操作失败");
}
// 减少数-文章
statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_num",statsCaseClinicalDoctor.getArticleNum());
// 减少阅读数-文章
statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_read_num",statsCaseClinicalDoctor.getArticleReadNum());
// 减少收藏数-文章
statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_collect_num",statsCaseClinicalDoctor.getArticleCollectNum());
// 减少评论数-文章
statsCaseClinicalHospitalDao.dec(oldHospitalId,"article_comment_num",statsCaseClinicalDoctor.getArticleCommentNum());
// 减少数-视频
statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_num",statsCaseClinicalDoctor.getVideoNum());
// 减少阅读数-视频
statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_read_num",statsCaseClinicalDoctor.getVideoReadNum());
// 减少收藏数-视频
statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_collect_num",statsCaseClinicalDoctor.getVideoCollectNum());
// 减少评论数-视频
statsCaseClinicalHospitalDao.dec(oldHospitalId,"video_comment_num",statsCaseClinicalDoctor.getVideoCommentNum());
// 最后一篇文章发表时间
LocalDateTime lastPushDate = caseClinicalArticleDao.selectLastArticlePushDateByHospitalId(oldHospitalId);
if (lastPushDate != null){
statsCaseClinicalHospital.setLastPushDate(lastPushDate);
statsCaseClinicalHospitalDao.updateById(statsCaseClinicalHospital);
}
// 获取新医院数据
hospitalQueryWrapper = new LambdaQueryWrapper<>();
hospitalQueryWrapper.eq(StatsCaseClinicalHospitalModel::getHospitalId, newHospitalId);
statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(hospitalQueryWrapper);
if (statsCaseClinicalHospital == null){
// 新增新医院
statsCaseClinicalHospital = AddStatsCaseClinicalHospital(String.valueOf(newHospitalId));
}
// 增加数-文章
statsCaseClinicalHospitalDao.inc(newHospitalId,"article_num",statsCaseClinicalDoctor.getArticleNum());
// 增加阅读数-文章
statsCaseClinicalHospitalDao.inc(newHospitalId,"article_read_num",statsCaseClinicalDoctor.getArticleReadNum());
// 增加收藏数-文章
statsCaseClinicalHospitalDao.inc(newHospitalId,"article_collect_num",statsCaseClinicalDoctor.getArticleCollectNum());
// 增加评论数-文章
statsCaseClinicalHospitalDao.inc(newHospitalId,"article_comment_num",statsCaseClinicalDoctor.getArticleCommentNum());
// 增加数-视频
statsCaseClinicalHospitalDao.inc(newHospitalId,"video_num",statsCaseClinicalDoctor.getVideoNum());
// 增加阅读数-视频
statsCaseClinicalHospitalDao.inc(newHospitalId,"video_read_num",statsCaseClinicalDoctor.getVideoReadNum());
// 增加收藏数-视频
statsCaseClinicalHospitalDao.inc(newHospitalId,"video_collect_num",statsCaseClinicalDoctor.getVideoCollectNum());
// 增加评论数-视频
statsCaseClinicalHospitalDao.inc(newHospitalId,"video_comment_num",statsCaseClinicalDoctor.getVideoCommentNum());
// 最后一篇文章发表时间
lastPushDate = caseClinicalArticleDao.selectLastArticlePushDateByHospitalId(newHospitalId);
if (lastPushDate != null){
statsCaseClinicalHospital.setLastPushDate(lastPushDate);
statsCaseClinicalHospitalDao.updateById(statsCaseClinicalHospital);
}
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
return true;
}
/**
* 处理文章所属医生的数量统计
*/
@Transactional
public boolean handleDoctorStat(Long oldDoctorId,Long newDoctorId){
try {
// 获取统计表医生数据-
LambdaQueryWrapper<StatsCaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>();
doctorQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, oldDoctorId);
StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(doctorQueryWrapper);
if (statsCaseClinicalDoctor == null){
return true;
}
// 减少数-文章
statsCaseClinicalDoctorDao.dec(oldDoctorId,"article_num",statsCaseClinicalDoctor.getArticleNum());
// 减少阅读数-文章
statsCaseClinicalDoctorDao.dec(oldDoctorId,"article_read_num",statsCaseClinicalDoctor.getArticleReadNum());
// 减少收藏数-文章
statsCaseClinicalDoctorDao.dec(oldDoctorId,"article_collect_num",statsCaseClinicalDoctor.getArticleCollectNum());
// 减少评论数-文章
statsCaseClinicalDoctorDao.dec(oldDoctorId,"article_comment_num",statsCaseClinicalDoctor.getArticleCommentNum());
// 减少数-视频
statsCaseClinicalDoctorDao.dec(oldDoctorId,"video_num",statsCaseClinicalDoctor.getVideoNum());
// 减少阅读数-视频
statsCaseClinicalDoctorDao.dec(oldDoctorId,"video_read_num",statsCaseClinicalDoctor.getVideoReadNum());
// 减少收藏数-视频
statsCaseClinicalDoctorDao.dec(oldDoctorId,"video_collect_num",statsCaseClinicalDoctor.getVideoCollectNum());
// 减少评论数-视频
statsCaseClinicalDoctorDao.dec(oldDoctorId,"video_comment_num",statsCaseClinicalDoctor.getVideoCommentNum());
// 最后一篇文章发表时间
LocalDateTime lastPushDate = caseClinicalArticleDao.selectLastArticlePushDateByDoctorId(oldDoctorId);
if (lastPushDate != null){
statsCaseClinicalDoctor.setLastPushDate(lastPushDate);
statsCaseClinicalDoctorDao.updateById(statsCaseClinicalDoctor);
}
// 获取统计表医生数据-
doctorQueryWrapper = new LambdaQueryWrapper<>();
doctorQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, newDoctorId);
statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(doctorQueryWrapper);
if (statsCaseClinicalDoctor == null){
// 新增新医生
statsCaseClinicalDoctor = AddStatsCaseClinicalDoctor(String.valueOf(newDoctorId));
}
// 增加数-文章
statsCaseClinicalDoctorDao.inc(newDoctorId,"article_num",statsCaseClinicalDoctor.getArticleNum());
// 增加阅读数-文章
statsCaseClinicalDoctorDao.inc(newDoctorId,"article_read_num",statsCaseClinicalDoctor.getArticleReadNum());
// 增加收藏数-文章
statsCaseClinicalDoctorDao.inc(newDoctorId,"article_collect_num",statsCaseClinicalDoctor.getArticleCollectNum());
// 增加评论数-文章
statsCaseClinicalDoctorDao.inc(newDoctorId,"article_comment_num",statsCaseClinicalDoctor.getArticleCommentNum());
// 增加数-视频
statsCaseClinicalDoctorDao.inc(newDoctorId,"video_num",statsCaseClinicalDoctor.getVideoNum());
// 增加阅读数-视频
statsCaseClinicalDoctorDao.inc(newDoctorId,"video_read_num",statsCaseClinicalDoctor.getVideoReadNum());
// 增加收藏数-视频
statsCaseClinicalDoctorDao.inc(newDoctorId,"video_collect_num",statsCaseClinicalDoctor.getVideoCollectNum());
// 增加评论数-视频
statsCaseClinicalDoctorDao.inc(newDoctorId,"video_comment_num",statsCaseClinicalDoctor.getVideoCommentNum());
// 最后一篇文章发表时间
lastPushDate = caseClinicalArticleDao.selectLastArticlePushDateByDoctorId(newDoctorId);
if (lastPushDate != null){
statsCaseClinicalDoctor.setLastPushDate(lastPushDate);
statsCaseClinicalDoctorDao.updateById(statsCaseClinicalDoctor);
}
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
return true;
}
} }

View File

@ -65,7 +65,7 @@ public class UserCaseReadService {
// 文章 // 文章
if (request.getType() == 1){ if (request.getType() == 1){
// 新增统计字段 // 新增统计字段
boolean r = caseClinicalArticleService.IncClinicalArticleStats(request.getId(),1); boolean r = caseClinicalArticleService.IncClinicalArticleStats(request.getId(),1,1);
if (!r){ if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false; return false;

View File

@ -86,6 +86,49 @@
</if> </if>
</select> </select>
<select id="getCaseClinicalArticleSearchList" resultType="com.example.caseData.dto.caseClinicalArticle.CaseClinicalArticleDto">
SELECT
a.article_id,
a.article_title,
a.read_num,
a.collect_num,
a.push_date,
a.cert_image,
a.is_link,
a.is_link_url
FROM (
SELECT DISTINCT a.article_id
FROM case_clinical_article a
LEFT JOIN case_clinical_article_author caa ON a.article_id = caa.article_id
LEFT JOIN case_clinical_doctor d ON caa.doctor_id = d.doctor_id
LEFT JOIN case_clinical_article_label l ON a.article_id = l.article_id
WHERE a.article_status = 1
<if test="keyword != null and keyword != ''">
AND (
a.article_title LIKE CONCAT('%', #{keyword}, '%')
OR d.doctor_name LIKE CONCAT('%', #{keyword}, '%')
OR l.label_name LIKE CONCAT('%', #{keyword}, '%')
)
</if>
<if test="hospitalId != null and hospitalId != ''">
AND d.hospital_id = #{hospitalId}
</if>
<if test="doctorId != null and doctorId != ''">
AND d.doctor_id = #{doctorId}
</if>
<if test="labelIden != null and labelIden != ''">
AND l.app_iden = #{labelIden}
</if>
) AS result
JOIN case_clinical_article a ON a.article_id = result.article_id
<if test="order != null and !order.isEmpty()">
ORDER BY
<foreach item="entry" index="key" collection="order" separator=",">
${key} ${entry}
</foreach>
</if>
</select>
<select id="getCaseClinicalArticleSearchCount" resultType="long"> <select id="getCaseClinicalArticleSearchCount" resultType="long">
SELECT COUNT(DISTINCT a.article_id) SELECT COUNT(DISTINCT a.article_id)
FROM case_clinical_article a FROM case_clinical_article a
@ -110,4 +153,23 @@
AND l.app_iden = #{labelIden} AND l.app_iden = #{labelIden}
</if> </if>
</select> </select>
</mapper>
<select id="selectLastArticlePushDateByHospitalId" resultType="java.time.LocalDateTime">
SELECT MAX(ca.push_date) AS last_push_date
FROM case_clinical_article ca
INNER JOIN case_clinical_article_author caa ON ca.article_id = caa.article_id
INNER JOIN case_clinical_doctor cd ON caa.doctor_id = cd.doctor_id
WHERE cd.hospital_id = #{hospitalId}
AND ca.article_status = 1
AND ca.delete_status = 0
</select>
<select id="selectLastArticlePushDateByDoctorId" resultType="java.time.LocalDateTime">
SELECT MAX(ca.push_date) AS last_push_date
FROM case_clinical_article ca
INNER JOIN case_clinical_article_author caa ON ca.article_id = caa.article_id
WHERE caa.doctor_id = #{doctorId}
AND ca.article_status = 1
AND ca.delete_status = 0
</select>
</mapper>

View File

@ -52,6 +52,39 @@
</if> </if>
</select> </select>
<select id="getCaseClinicalVideoSearchList" resultType="com.example.caseData.dto.caseClinicalVideo.CaseClinicalVideoDto">
SELECT DISTINCT
a.video_id,
a.video_title,
a.read_num,
a.collect_num,
a.video_no,
a.push_date,
a.cert_image,
a.is_link,
a.is_link_url
FROM case_clinical_video a
LEFT JOIN case_clinical_video_author caa ON a.video_id = caa.video_id
LEFT JOIN case_clinical_doctor d ON caa.doctor_id = d.doctor_id
LEFT JOIN case_clinical_video_label l ON a.video_id = l.video_id
WHERE a.video_status = 1
<if test="hospitalId != null and hospitalId != ''">
AND d.hospital_id = #{hospitalId}
</if>
<if test="doctorId != null and doctorId != ''">
AND d.doctor_id = #{doctorId}
</if>
<if test="labelIden != null and labelIden != ''">
AND l.app_iden = #{labelIden}
</if>
<if test="order != null and !order.isEmpty()">
ORDER BY
<foreach item="entry" index="key" collection="order" separator=",">
${key} ${entry}
</foreach>
</if>
</select>
<select id="getCaseClinicalVideoSearchCount" resultType="long"> <select id="getCaseClinicalVideoSearchCount" resultType="long">
SELECT COUNT(DISTINCT a.video_id) SELECT COUNT(DISTINCT a.video_id)
FROM case_clinical_video a FROM case_clinical_video a