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

View File

@ -9,6 +9,8 @@ import com.example.caseData.model.CaseClinicalArticleModel;
import org.apache.ibatis.annotations.*;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@Mapper
@ -28,6 +30,20 @@ public interface CaseClinicalArticleDao extends BaseMapper<CaseClinicalArticleMo
@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 搜索关键词-标题/医生名称/标签名称
@ -61,4 +77,18 @@ public interface CaseClinicalArticleDao extends BaseMapper<CaseClinicalArticleMo
"SET ${field} = CASE WHEN ${field} >= #{numeral} THEN ${field} - #{numeral} ELSE 0 END " +
"WHERE article_id = #{articleId}")
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.Update;
import java.util.List;
import java.util.Map;
@Mapper
@ -29,6 +30,19 @@ public interface CaseClinicalVideoDao extends BaseMapper<CaseClinicalVideoModel>
@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 搜索关键词-标题/医生名称/标签名称

View File

@ -48,6 +48,12 @@ public class StatsCaseClinicalDoctorModel {
@TableField("article_comment_num")
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){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
@ -117,7 +117,7 @@ public class CaseClinicalArticleService {
}
// 减少文章的统计字段
boolean r = DecClinicalArticleStats(articleId,2);
boolean r = DecClinicalArticleStats(articleId,2,1);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
@ -175,7 +175,7 @@ public class CaseClinicalArticleService {
}
// 新增文章的统计字段
boolean r = IncClinicalArticleStats(articleId,3);
boolean r = IncClinicalArticleStats(articleId,3,1);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
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){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
@ -370,7 +370,7 @@ public class CaseClinicalArticleService {
* @param type 类型1:阅读量 2收藏量 3:评论数 4:文章数
*/
@Transactional
public boolean IncClinicalArticleStats(String articleId,Integer type){
public boolean IncClinicalArticleStats(String articleId,Integer type,Integer num){
try {
String caseClinicalArticleField = ""; // 具体文章
String statsCaseClinicalField = ""; // 全部文章
@ -414,9 +414,9 @@ public class CaseClinicalArticleService {
}
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<>();
@ -427,10 +427,10 @@ public class CaseClinicalArticleService {
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);
List<CaseClinicalArticleLabelModel> caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper);
for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) {
statsCaseClinicalLabelDao.inc(label.getAppIden(),statsCaseClinicalLabelField,1);
statsCaseClinicalLabelDao.inc(label.getAppIden(),statsCaseClinicalLabelField,num);
}
return true;
@ -454,7 +454,7 @@ public class CaseClinicalArticleService {
* @param type 类型1:阅读量 2收藏量 3:评论数 4:文章数
*/
@Transactional
public boolean DecClinicalArticleStats(String articleId,Integer type){
public boolean DecClinicalArticleStats(String articleId,Integer type,Integer num){
try {
String caseClinicalArticleField = ""; // 具体文章
String statsCaseClinicalField = ""; // 全部文章
@ -498,9 +498,9 @@ public class CaseClinicalArticleService {
}
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<>();
@ -511,10 +511,10 @@ public class CaseClinicalArticleService {
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);
List<CaseClinicalArticleLabelModel> caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper);
for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) {
statsCaseClinicalLabelDao.dec(label.getAppIden(),statsCaseClinicalLabelField,1);
statsCaseClinicalLabelDao.dec(label.getAppIden(),statsCaseClinicalLabelField,num);
}
return true;
@ -532,61 +532,62 @@ public class CaseClinicalArticleService {
}
}
/**
* 处理文章所属医院的数量统计
*/
@Transactional
public boolean handleHospitalStat(String doctorId,Long oldHospitalId,String newHospitalId){
try {
// 获取统计表医生数据
LambdaQueryWrapper<StatsCaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>();
doctorQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId);
StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(doctorQueryWrapper);
if (statsCaseClinicalDoctor == null){
return true;
}
// 获取旧医院数据
StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectById(oldHospitalId);
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());
// 最后一篇文章发表时间
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
// /**
// * 处理文章所属医院的数量统计
// */
// @Transactional
// public boolean handleHospitalStat(String doctorId,Long oldHospitalId,String newHospitalId){
// try {
// // 获取统计表医生数据
// LambdaQueryWrapper<StatsCaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>();
// doctorQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId);
// StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(doctorQueryWrapper);
// if (statsCaseClinicalDoctor == null){
// return true;
// }
//
// // 获取旧医院数据
// StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectById(oldHospitalId);
// 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());
//
// // 最后一篇文章发表时间
//
// } catch (Exception e) {
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// return false;
// }
//
// return true;
//
// }
return true;
}
/**
* 检测作品状态

View File

@ -1,15 +1,21 @@
package com.example.caseData.service;
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.StatsCaseClinicalHospitalDao;
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.StatsCaseClinicalHospitalModel;
import com.example.caseData.model.StatsCaseClinicalLabelModel;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.time.LocalDateTime;
@Service
public class CaseClinicalService {
@ -22,6 +28,9 @@ public class CaseClinicalService {
@Resource
private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao;
@Resource
private CaseClinicalArticleDao caseClinicalArticleDao;
// 新增标签统计
@Transactional
public void AddStatsCaseClinicalLabel(String labelIden,String labelName){
@ -38,7 +47,7 @@ public class CaseClinicalService {
// 新增医生统计
@Transactional
public void AddStatsCaseClinicalDoctor(String doctorId){
public StatsCaseClinicalDoctorModel AddStatsCaseClinicalDoctor(String doctorId){
LambdaQueryWrapper<StatsCaseClinicalDoctorModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId);
StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(mapQueryWrapper);
@ -47,11 +56,13 @@ public class CaseClinicalService {
statsCaseClinicalDoctor.setDoctorId(Long.valueOf(doctorId));
statsCaseClinicalDoctorDao.insert(statsCaseClinicalDoctor);
}
return statsCaseClinicalDoctor;
}
// 新增医院统计
@Transactional
public void AddStatsCaseClinicalHospital(String hospitalId){
public StatsCaseClinicalHospitalModel AddStatsCaseClinicalHospital(String hospitalId){
LambdaQueryWrapper<StatsCaseClinicalHospitalModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalHospitalModel::getHospitalId, hospitalId);
StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(mapQueryWrapper);
@ -60,5 +71,202 @@ public class CaseClinicalService {
statsCaseClinicalHospital.setHospitalId(Long.valueOf(hospitalId));
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){
// 新增统计字段
boolean r = caseClinicalArticleService.IncClinicalArticleStats(request.getId(),1);
boolean r = caseClinicalArticleService.IncClinicalArticleStats(request.getId(),1,1);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;

View File

@ -86,6 +86,49 @@
</if>
</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 COUNT(DISTINCT a.article_id)
FROM case_clinical_article a
@ -110,4 +153,23 @@
AND l.app_iden = #{labelIden}
</if>
</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>
</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 COUNT(DISTINCT a.video_id)
FROM case_clinical_video a