1111
This commit is contained in:
parent
dfce0a6b31
commit
ca409dcac6
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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 搜索关键词-标题/医生名称/标签名称
|
||||
|
||||
@ -48,6 +48,12 @@ public class StatsCaseClinicalDoctorModel {
|
||||
@TableField("article_comment_num")
|
||||
private Integer articleCommentNum;
|
||||
|
||||
/**
|
||||
* 最后一篇文章发表时间
|
||||
*/
|
||||
@TableField("last_push_date")
|
||||
private LocalDateTime lastPushDate;
|
||||
|
||||
/**
|
||||
* 数量-视频
|
||||
*/
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测作品状态
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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>
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user