diff --git a/src/main/java/com/example/caseData/dao/StatsCaseClinicalLabelDao.java b/src/main/java/com/example/caseData/dao/StatsCaseClinicalLabelDao.java index ba46d98..3a444e4 100644 --- a/src/main/java/com/example/caseData/dao/StatsCaseClinicalLabelDao.java +++ b/src/main/java/com/example/caseData/dao/StatsCaseClinicalLabelDao.java @@ -35,7 +35,7 @@ public interface StatsCaseClinicalLabelDao extends BaseMapper= #{numeral} THEN ${field} - #{numeral} ELSE 0 END " + "WHERE label_iden = #{labelIden}") - int dec(@Param("labelIden") Long labelIden, @Param("field") String field, @Param("numeral") int numeral); + int dec(@Param("labelIden") String labelIden, @Param("field") String field, @Param("numeral") int numeral); } diff --git a/src/main/java/com/example/caseData/extend/app/UserInfo/UserInfo.java b/src/main/java/com/example/caseData/extend/app/UserInfo/UserInfo.java index 434f531..2338e70 100644 --- a/src/main/java/com/example/caseData/extend/app/UserInfo/UserInfo.java +++ b/src/main/java/com/example/caseData/extend/app/UserInfo/UserInfo.java @@ -111,4 +111,50 @@ public class UserInfo extends Base { return result; } } + + // 根据唯一标识获取信息V3 + public GetUserInfoResponse getUserInfoByUuid(String uuid) throws BusinessException { + String timestamp = String.valueOf(System.currentTimeMillis() / 1000); + + // 处理参数 + Map requestData = new HashMap<>(); + requestData.put("uuid", uuid); + requestData.put("platform", appConfig.getPlatform()); + requestData.put("timestamp", timestamp); + + // 生成签名 + String sign = genSignature(requestData,appConfig.getSecretKey()); + + String url = appConfig.getApiUrl() + "/expert-api/getInfoByUuid"; + String jsonBody = JSONUtil.toJsonStr(requestData); + log.info("获取app数据参数:{}",jsonBody); + + try(HttpResponse response = HttpRequest.post(url) + .header("Content-Type", "application/json") + .header("sign", sign) + .body(jsonBody) + .execute()){ + + if (response.getStatus() != 200) { + throw new BusinessException("失败"); + } + + // 反序列化 JSON + GetUserInfoResponse result = JSONUtil.toBean(response.body(), GetUserInfoResponse.class); + log.info("获取app数据返回:{}",result); + if (result.getCode() != 200){ + if (!Objects.equals(result.getMsg(), "")){ + throw new BusinessException(result.getMsg()); + }else{ + throw new BusinessException("失败"); + } + } + + if (result.getData() == null){ + throw new BusinessException("失败"); + } + + return result; + } + } } diff --git a/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java b/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java index dbf5424..1c2307a 100644 --- a/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java +++ b/src/main/java/com/example/caseData/service/CaseClinicalArticleService.java @@ -50,6 +50,12 @@ public class CaseClinicalArticleService { @Resource private UserDao userDao; + @Resource + private CaseClinicalArticleLabelDao caseClinicalArticleLabelDao; + + @Resource + private StatsCaseClinicalLabelDao statsCaseClinicalLabelDao; + /** * 新增收藏-临床病例库-文章 * @param articleId 文章id @@ -361,85 +367,16 @@ public class CaseClinicalArticleService { /** * 新增文章的统计字段 * @param articleId 文章id - * @param type 类型:1:阅读量 2:收藏量 3:评论数 + * @param type 类型:1:阅读量 2:收藏量 3:评论数 4:文章数 */ @Transactional public boolean IncClinicalArticleStats(String articleId,Integer type){ - try { - // 获取文章作者 - LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); - authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId); - List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); - - // 阅读量 - if (type == 1){ - caseClinicalArticleDao.inc(Long.valueOf(articleId),"read_num",1); - statsCaseClinicalDao.inc(1L,"article_read_num",1); - - for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { - // 查询医生 - CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); - - // 增加医院文章收藏数 - statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_read_num",1); - - // 增加医生文章收藏数 - statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_read_num",1); - } - } - - // 收藏量 - if (type == 2){ - caseClinicalArticleDao.inc(Long.valueOf(articleId),"collect_num",1); - statsCaseClinicalDao.inc(1L,"article_collect_num",1); - - for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { - // 查询医生 - CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); - - // 增加医院文章收藏数 - statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_collect_num",1); - - // 增加医生文章收藏数 - statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_collect_num",1); - } - } - - // 评论数 - if (type == 3){ - caseClinicalArticleDao.inc(Long.valueOf(articleId),"comment_num",1); - statsCaseClinicalDao.inc(1L,"article_comment_num",1); - - for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { - // 查询医生 - CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); - - // 增加医院文章评论数 - statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"article_comment_num",1); - - // 增加医生文章评论数 - statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"article_comment_num",1); - } - } - - return true; - } catch (Exception e) { - return false; - } - } - - /** - * 减少文章的统计字段 - * @param articleId 文章id - * @param type 类型:1:阅读量 2:收藏量 3:评论数 - */ - @Transactional - public boolean DecClinicalArticleStats(String articleId,Integer type){ try { String caseClinicalArticleField = ""; // 具体文章 String statsCaseClinicalField = ""; // 全部文章 String statsCaseClinicalHospitalField = ""; // 医院 String statsCaseClinicalDoctorField = ""; // 医生 + String statsCaseClinicalLabelField = ""; // 标签 // 阅读 if (type == 1){ @@ -447,6 +384,7 @@ public class CaseClinicalArticleService { statsCaseClinicalField = "article_read_num"; // 全部文章 statsCaseClinicalHospitalField = "article_read_num"; // 医院 statsCaseClinicalDoctorField = "article_read_num"; // 医生 + statsCaseClinicalLabelField = "article_read_num"; // 标签 } // 收藏 @@ -455,6 +393,7 @@ public class CaseClinicalArticleService { statsCaseClinicalField = "article_collect_num"; // 全部文章 statsCaseClinicalHospitalField = "article_collect_num"; // 医院 statsCaseClinicalDoctorField = "article_collect_num"; // 医生 + statsCaseClinicalLabelField = "article_collect_num"; // 标签 } // 评论 @@ -463,9 +402,104 @@ public class CaseClinicalArticleService { statsCaseClinicalField = "article_comment_num"; // 全部文章 statsCaseClinicalHospitalField = "article_comment_num"; // 医院 statsCaseClinicalDoctorField = "article_comment_num"; // 医生 + statsCaseClinicalLabelField = "article_comment_num"; // 标签 } - caseClinicalArticleDao.dec(Long.valueOf(articleId),caseClinicalArticleField,1); + // 文章数 + if (type == 4){ + statsCaseClinicalField = "article_num"; // 全部文章 + statsCaseClinicalHospitalField = "article_num"; // 医院 + statsCaseClinicalDoctorField = "article_num"; // 医生 + statsCaseClinicalLabelField = "article_num"; // 标签 + } + + if (!caseClinicalArticleField.isEmpty()){ + caseClinicalArticleDao.inc(Long.valueOf(articleId),caseClinicalArticleField,1); + } + statsCaseClinicalDao.inc(1L,statsCaseClinicalField,1); + + // 获取文章作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId); + List caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + + // 减少医生文章数 + statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),statsCaseClinicalHospitalField,1); + + // 减少医生文章数 + statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,1); + } + + // 获取文章标签数据 + LambdaQueryWrapper labelQueryWrapper = new LambdaQueryWrapper<>(); + labelQueryWrapper.eq(CaseClinicalArticleLabelModel::getArticleId, articleId); + List caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper); + for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) { + statsCaseClinicalLabelDao.inc(label.getAppIden(),statsCaseClinicalLabelField,1); + } + + return true; + } catch (Exception e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return false; + } + } + + /** + * 减少文章的统计字段 + * @param articleId 文章id + * @param type 类型:1:阅读量 2:收藏量 3:评论数 4:文章数 + */ + @Transactional + public boolean DecClinicalArticleStats(String articleId,Integer type){ + try { + String caseClinicalArticleField = ""; // 具体文章 + String statsCaseClinicalField = ""; // 全部文章 + String statsCaseClinicalHospitalField = ""; // 医院 + String statsCaseClinicalDoctorField = ""; // 医生 + String statsCaseClinicalLabelField = ""; // 标签 + + // 阅读 + if (type == 1){ + caseClinicalArticleField = "read_num"; // 具体文章 + statsCaseClinicalField = "article_read_num"; // 全部文章 + statsCaseClinicalHospitalField = "article_read_num"; // 医院 + statsCaseClinicalDoctorField = "article_read_num"; // 医生 + statsCaseClinicalLabelField = "article_read_num"; // 标签 + } + + // 收藏 + if (type == 2){ + caseClinicalArticleField = "collect_num"; // 具体文章 + statsCaseClinicalField = "article_collect_num"; // 全部文章 + statsCaseClinicalHospitalField = "article_collect_num"; // 医院 + statsCaseClinicalDoctorField = "article_collect_num"; // 医生 + statsCaseClinicalLabelField = "article_collect_num"; // 标签 + } + + // 评论 + if (type == 3){ + caseClinicalArticleField = "comment_num"; // 具体文章 + statsCaseClinicalField = "article_comment_num"; // 全部文章 + statsCaseClinicalHospitalField = "article_comment_num"; // 医院 + statsCaseClinicalDoctorField = "article_comment_num"; // 医生 + statsCaseClinicalLabelField = "article_comment_num"; // 标签 + } + + // 文章数 + if (type == 4){ + statsCaseClinicalField = "article_num"; // 全部文章 + statsCaseClinicalHospitalField = "article_num"; // 医院 + statsCaseClinicalDoctorField = "article_num"; // 医生 + statsCaseClinicalLabelField = "article_num"; // 标签 + } + + if (!caseClinicalArticleField.isEmpty()){ + caseClinicalArticleDao.dec(Long.valueOf(articleId),caseClinicalArticleField,1); + } statsCaseClinicalDao.dec(1L,statsCaseClinicalField,1); // 获取文章作者 @@ -483,6 +517,14 @@ public class CaseClinicalArticleService { statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,1); } + // 获取文章标签数据 + LambdaQueryWrapper labelQueryWrapper = new LambdaQueryWrapper<>(); + labelQueryWrapper.eq(CaseClinicalArticleLabelModel::getArticleId, articleId); + List caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper); + for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) { + statsCaseClinicalLabelDao.dec(label.getAppIden(),statsCaseClinicalLabelField,1); + } + return true; } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); diff --git a/src/main/java/com/example/caseData/service/CaseClinicalLabelService.java b/src/main/java/com/example/caseData/service/CaseClinicalLabelService.java new file mode 100644 index 0000000..d94a55d --- /dev/null +++ b/src/main/java/com/example/caseData/service/CaseClinicalLabelService.java @@ -0,0 +1,22 @@ +package com.example.caseData.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.example.caseData.dao.StatsCaseClinicalLabelDao; +import com.example.caseData.exception.BusinessException; +import com.example.caseData.model.CaseClinicalArticleAuthorModel; +import com.example.caseData.model.CaseClinicalDoctorModel; +import com.example.caseData.model.CaseClinicalVideoModel; +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.util.List; + +@Service +public class CaseClinicalLabelService { + + + +} diff --git a/src/main/java/com/example/caseData/service/CaseClinicalService.java b/src/main/java/com/example/caseData/service/CaseClinicalService.java new file mode 100644 index 0000000..8ee4eae --- /dev/null +++ b/src/main/java/com/example/caseData/service/CaseClinicalService.java @@ -0,0 +1,64 @@ +package com.example.caseData.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.example.caseData.dao.StatsCaseClinicalDoctorDao; +import com.example.caseData.dao.StatsCaseClinicalHospitalDao; +import com.example.caseData.dao.StatsCaseClinicalLabelDao; +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; + +@Service +public class CaseClinicalService { + @Resource + private StatsCaseClinicalLabelDao statsCaseClinicalLabelDao; + + @Resource + private StatsCaseClinicalDoctorDao statsCaseClinicalDoctorDao; + + @Resource + private StatsCaseClinicalHospitalDao statsCaseClinicalHospitalDao; + + // 新增标签统计 + @Transactional + public void AddStatsCaseClinicalLabel(String labelIden,String labelName){ + LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); + mapQueryWrapper.eq(StatsCaseClinicalLabelModel::getLabelIden, labelIden); + StatsCaseClinicalLabelModel statsCaseClinicalLabel = statsCaseClinicalLabelDao.selectOne(mapQueryWrapper); + if (statsCaseClinicalLabel == null) { + statsCaseClinicalLabel = new StatsCaseClinicalLabelModel(); + statsCaseClinicalLabel.setLabelIden(labelIden); + statsCaseClinicalLabel.setLabelName(labelName); + statsCaseClinicalLabelDao.insert(statsCaseClinicalLabel); + } + } + + // 新增医生统计 + @Transactional + public void AddStatsCaseClinicalDoctor(String doctorId){ + LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); + mapQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId); + StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(mapQueryWrapper); + if (statsCaseClinicalDoctor == null) { + statsCaseClinicalDoctor = new StatsCaseClinicalDoctorModel(); + statsCaseClinicalDoctor.setDoctorId(Long.valueOf(doctorId)); + statsCaseClinicalDoctorDao.insert(statsCaseClinicalDoctor); + } + } + + // 新增医院统计 + @Transactional + public void AddStatsCaseClinicalHospital(String hospitalId){ + LambdaQueryWrapper mapQueryWrapper = new LambdaQueryWrapper<>(); + mapQueryWrapper.eq(StatsCaseClinicalHospitalModel::getHospitalId, hospitalId); + StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(mapQueryWrapper); + if (statsCaseClinicalHospital == null) { + statsCaseClinicalHospital = new StatsCaseClinicalHospitalModel(); + statsCaseClinicalHospital.setHospitalId(Long.valueOf(hospitalId)); + statsCaseClinicalHospitalDao.insert(statsCaseClinicalHospital); + } + } +} diff --git a/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java b/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java index ada0db0..4138935 100644 --- a/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java +++ b/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.example.caseData.dao.*; import com.example.caseData.exception.BusinessException; import com.example.caseData.extend.app.Base; +import com.example.caseData.extend.app.UserInfo.GetUserInfoResponse; +import com.example.caseData.extend.app.UserInfo.UserInfo; import com.example.caseData.extend.app.UserPoint.UserPoint; import com.example.caseData.extend.app.Video.Video; import com.example.caseData.model.*; @@ -24,10 +26,8 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.time.LocalDateTime; +import java.util.*; //import static com.baomidou.mybatisplus.extension.toolkit.Db.removeById; //import static com.baomidou.mybatisplus.extension.toolkit.Db.save; @@ -40,6 +40,9 @@ public class CaseClinicalVideoService { @Resource private CaseClinicalVideoDao caseClinicalVideoDao; + @Resource + private CaseClinicalVideoLabelDao caseClinicalVideoLabelDao; + @Resource private StatsCaseClinicalDao statsCaseClinicalDao; @@ -64,9 +67,24 @@ public class CaseClinicalVideoService { @Resource private UserCommentClinicalVideoDao userCommentClinicalVideoDao; + @Resource + private CaseClinicalLabelService caseClinicalLabelService; + + @Resource + private StatsCaseClinicalLabelDao statsCaseClinicalLabelDao; + @Resource private Video Video; + @Resource + private UserInfo userInfo; + + @Resource + private UserService userService; + + @Resource + private CaseClinicalService caseClinicalService; + /** * 新增收藏-临床病例库-视频 * @param videoId 视频id @@ -372,85 +390,16 @@ public class CaseClinicalVideoService { /** * 新增视频的统计字段 * @param videoId 视频id - * @param type 类型:1:阅读量 2:收藏量 3:评论数 + * @param type 类型:1:阅读量 2:收藏量 3:评论数 4:文章数 */ @Transactional public boolean IncClinicalVideoStats(String videoId,Integer type){ - try { - // 获取文章作者 - LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); - authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, videoId); - List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); - - // 阅读量 - if (type == 1){ - caseClinicalVideoDao.inc(Long.valueOf(videoId),"read_num",1); - statsCaseClinicalDao.inc(1L,"video_read_num",1); - - for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { - // 查询医生 - CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); - - // 增加医院文章收藏数 - statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"video_read_num",1); - - // 增加医生文章收藏数 - statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"video_read_num",1); - } - } - - // 收藏量 - if (type == 2){ - caseClinicalVideoDao.inc(Long.valueOf(videoId),"collect_num",1); - statsCaseClinicalDao.inc(1L,"video_collect_num",1); - - for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { - // 查询医生 - CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); - - // 增加医院文章收藏数 - statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"video_collect_num",1); - - // 增加医生文章收藏数 - statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"video_collect_num",1); - } - } - - // 评论数 - if (type == 3){ - caseClinicalVideoDao.inc(Long.valueOf(videoId),"comment_num",1); - statsCaseClinicalDao.inc(1L,"video_comment_num",1); - - for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { - // 查询医生 - CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); - - // 增加医院文章收藏数 - statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),"video_comment_num",1); - - // 增加医生文章收藏数 - statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),"video_comment_num",1); - } - } - - return true; - } catch (Exception e) { - return false; - } - } - - /** - * 减少视频的统计字段 - * @param videoId 文章id - * @param type 类型:1:阅读量 2:收藏量 3:评论数 - */ - @Transactional - public boolean DecClinicalVideoStats(String videoId,Integer type){ try { String caseClinicalVideoField = ""; // 具体文章 String statsCaseClinicalField = ""; // 全部文章 String statsCaseClinicalHospitalField = ""; // 医院 String statsCaseClinicalDoctorField = ""; // 医生 + String statsCaseClinicalLabelField = ""; // 标签 // 阅读 if (type == 1){ @@ -458,6 +407,7 @@ public class CaseClinicalVideoService { statsCaseClinicalField = "video_read_num"; // 全部文章 statsCaseClinicalHospitalField = "video_read_num"; // 医院 statsCaseClinicalDoctorField = "video_read_num"; // 医生 + statsCaseClinicalLabelField = "article_read_num"; // 标签 } // 收藏 @@ -466,6 +416,7 @@ public class CaseClinicalVideoService { statsCaseClinicalField = "video_collect_num"; // 全部文章 statsCaseClinicalHospitalField = "video_collect_num"; // 医院 statsCaseClinicalDoctorField = "video_collect_num"; // 医生 + statsCaseClinicalLabelField = "article_collect_num"; // 标签 } // 评论 @@ -474,9 +425,104 @@ public class CaseClinicalVideoService { statsCaseClinicalField = "video_comment_num"; // 全部文章 statsCaseClinicalHospitalField = "video_comment_num"; // 医院 statsCaseClinicalDoctorField = "video_comment_num"; // 医生 + statsCaseClinicalLabelField = "article_comment_num"; // 标签 + } + + // 文章数 + if (type == 4){ + statsCaseClinicalField = "article_num"; // 全部文章 + statsCaseClinicalHospitalField = "article_num"; // 医院 + statsCaseClinicalDoctorField = "article_num"; // 医生 + statsCaseClinicalLabelField = "article_num"; // 标签 + } + + if (!caseClinicalVideoField.isEmpty()){ + caseClinicalVideoDao.inc(Long.valueOf(videoId),caseClinicalVideoField,1); + } + + statsCaseClinicalDao.inc(1L,statsCaseClinicalField,1); + + // 获取文章作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, videoId); + List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); + for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors) { + // 查询医生 + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId()); + + // 获取医院统计数据 + statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),statsCaseClinicalHospitalField,1); + statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,1); + } + + // 获取文章标签数据 + LambdaQueryWrapper labelQueryWrapper = new LambdaQueryWrapper<>(); + labelQueryWrapper.eq(CaseClinicalVideoLabelModel::getVideoId, videoId); + List caseClinicalArticleLabels = caseClinicalVideoLabelDao.selectList(labelQueryWrapper); + for (CaseClinicalVideoLabelModel label : caseClinicalArticleLabels) { + statsCaseClinicalLabelDao.inc(label.getAppIden(),statsCaseClinicalLabelField,1); + } + + return true; + } catch (Exception e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return false; + } + } + + /** + * 减少视频的统计字段 + * @param videoId 文章id + * @param type 类型:1:阅读量 2:收藏量 3:评论数 4:文章数 + */ + @Transactional + public boolean DecClinicalVideoStats(String videoId,Integer type){ + try { + String caseClinicalVideoField = ""; // 具体文章 + String statsCaseClinicalField = ""; // 全部文章 + String statsCaseClinicalHospitalField = ""; // 医院 + String statsCaseClinicalDoctorField = ""; // 医生 + String statsCaseClinicalLabelField = ""; // 标签 + + // 阅读 + if (type == 1){ + caseClinicalVideoField = "read_num"; // 具体文章 + statsCaseClinicalField = "video_read_num"; // 全部文章 + statsCaseClinicalHospitalField = "video_read_num"; // 医院 + statsCaseClinicalDoctorField = "video_read_num"; // 医生 + statsCaseClinicalLabelField = "article_read_num"; // 标签 + } + + // 收藏 + if (type == 2){ + caseClinicalVideoField = "collect_num"; // 具体文章 + statsCaseClinicalField = "video_collect_num"; // 全部文章 + statsCaseClinicalHospitalField = "video_collect_num"; // 医院 + statsCaseClinicalDoctorField = "video_collect_num"; // 医生 + statsCaseClinicalLabelField = "article_collect_num"; // 标签 + } + + // 评论 + if (type == 3){ + caseClinicalVideoField = "comment_num"; // 具体文章 + statsCaseClinicalField = "video_comment_num"; // 全部文章 + statsCaseClinicalHospitalField = "video_comment_num"; // 医院 + statsCaseClinicalDoctorField = "video_comment_num"; // 医生 + statsCaseClinicalLabelField = "article_comment_num"; // 标签 + } + + // 文章数 + if (type == 4){ + statsCaseClinicalField = "article_num"; // 全部文章 + statsCaseClinicalHospitalField = "article_num"; // 医院 + statsCaseClinicalDoctorField = "article_num"; // 医生 + statsCaseClinicalLabelField = "article_num"; // 标签 + } + + if (!caseClinicalVideoField.isEmpty()){ + caseClinicalVideoDao.dec(Long.valueOf(videoId),caseClinicalVideoField,1); } - caseClinicalVideoDao.dec(Long.valueOf(videoId),caseClinicalVideoField,1); statsCaseClinicalDao.dec(1L,statsCaseClinicalField,1); // 获取文章作者 @@ -492,6 +538,14 @@ public class CaseClinicalVideoService { statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,1); } + // 获取文章标签数据 + LambdaQueryWrapper labelQueryWrapper = new LambdaQueryWrapper<>(); + labelQueryWrapper.eq(CaseClinicalVideoLabelModel::getVideoId, videoId); + List caseClinicalArticleLabels = caseClinicalVideoLabelDao.selectList(labelQueryWrapper); + for (CaseClinicalVideoLabelModel label : caseClinicalArticleLabels) { + statsCaseClinicalLabelDao.dec(label.getAppIden(),statsCaseClinicalLabelField,1); + } + return true; } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); @@ -538,45 +592,137 @@ public class CaseClinicalVideoService { // 检测签名 Video.checkSign(request,"26e8675f44565b1ed4eaaa0fcf3531d7",r,objectMapper); -// // 处理业务逻辑 -// // 获取视频数据 -// LambdaQueryWrapper videoQueryWrapper = new LambdaQueryWrapper<>(); -// videoQueryWrapper.eq(CaseClinicalVideoModel::getVideoNo, r.getVideoNo()); -// CaseClinicalVideoModel caseClinicalVideo = caseClinicalVideoDao.selectOne(videoQueryWrapper); -// -// // 新增 -// if (Objects.equals(r.getAction(), "add")){ -// if (caseClinicalVideo != null){ -// // 已存在该视频 -// return true; + // 获取视频数据 + LambdaQueryWrapper videoQueryWrapper = new LambdaQueryWrapper<>(); + videoQueryWrapper.eq(CaseClinicalVideoModel::getVideoNo, r.getVideoNo()); + CaseClinicalVideoModel caseClinicalVideo = caseClinicalVideoDao.selectOne(videoQueryWrapper); + + // 修改 + if (Objects.equals(r.getAction(), "update")){ + if (caseClinicalVideo == null){ + r.setAction("add"); + } + } + + // 新增 + if (Objects.equals(r.getAction(), "add")){ + if (caseClinicalVideo != null){ + // 已存在该视频 + return true; + } + + // 新增视频 + caseClinicalVideo = new CaseClinicalVideoModel(); + caseClinicalVideo.setVideoTitle(r.getVideoTitle()); + caseClinicalVideo.setVideoNo(r.getVideoNo()); + caseClinicalVideo.setPushDate(LocalDateTime.parse(r.getPushDate())); + caseClinicalVideo.setIsLink(r.getIsLink()); + caseClinicalVideo.setIsLinkUrl(r.getIsLinkUrl()); + int res = caseClinicalVideoDao.insert(caseClinicalVideo); + if (res <= 0){ + throw new BusinessException("-1", "内部错误,添加视频失败"); + } + + // 新增标签 + for (addClinicalVideoApp.Label label : r.getLabel()){ + CaseClinicalVideoLabelModel caseClinicalVideoLabel = new CaseClinicalVideoLabelModel(); + caseClinicalVideoLabel.setVideoId(caseClinicalVideo.getVideoId()); + caseClinicalVideoLabel.setAppIden(label.getAppIden()); + caseClinicalVideoLabel.setLabelName(label.getLabelName()); + res = caseClinicalVideoLabelDao.insert(caseClinicalVideoLabel); + if (res <= 0){ + throw new BusinessException("-1", "内部错误,添加视频标签失败"); + } + + // 新增标签统计 + caseClinicalService.AddStatsCaseClinicalLabel(label.getAppIden(),label.getLabelName()); + } + + // 新增作者 + for (addClinicalVideoApp.Author author : r.getAuthor()){ + // 获取app用户数据 + GetUserInfoResponse result = userInfo.getUserInfoByUuid(author.getDoctorIden()); + CaseClinicalDoctorModel caseClinicalDoctor = userService.GetCaseClinicalDoctor(result); + + CaseClinicalVideoAuthorModel caseClinicalVideoAuthor = new CaseClinicalVideoAuthorModel(); + caseClinicalVideoAuthor.setVideoId(caseClinicalVideo.getVideoId()); + caseClinicalVideoAuthor.setDoctorId(String.valueOf(caseClinicalDoctor.getDoctorId())); + caseClinicalVideoAuthorDao.insert(caseClinicalVideoAuthor); + + // 新增作者统计 + caseClinicalService.AddStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId())); + + // 新增医院统计 + caseClinicalService.AddStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId())); + } + + // 新增统计 + IncClinicalVideoStats(String.valueOf(caseClinicalVideo.getVideoId()),4); + } + + // 修改 + if (Objects.equals(r.getAction(), "update")){ + if (caseClinicalVideo == null){ + throw new BusinessException("-1", "无法完成此操作"); + } + + // 文章主体 + if (!Objects.equals(caseClinicalVideo.getVideoNo(), r.getVideoNo())){ + caseClinicalVideo.setVideoNo(r.getVideoNo()); + } + + if (!Objects.equals(caseClinicalVideo.getIsLink(), r.getIsLink())){ + caseClinicalVideo.setIsLink(r.getIsLink()); + + if (!Objects.equals(caseClinicalVideo.getIsLinkUrl(), r.getIsLinkUrl())){ + caseClinicalVideo.setIsLinkUrl(r.getIsLinkUrl()); + } + } + + caseClinicalVideoDao.updateById(caseClinicalVideo); + + // 作者 + // 获取全部作者 + LambdaQueryWrapper authorQueryWrapper = new LambdaQueryWrapper<>(); + authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, caseClinicalVideo.getVideoId()); + List caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper); + + List addList = new ArrayList<>(); + List deleteList = new ArrayList<>(); + +// // 新增作者和删除作者判断 +// // 构建现有作者的唯一标识集合 +// Map existingAuthorsMap = new HashMap<>(); +// for (CaseClinicalVideoAuthorModel a : caseClinicalVideoAuthors) { +// String key = a.getCaseClinicalDoctor().getDoctorIden(); +// existingAuthorsMap.put(key, a); // } -// -// // 新增视频 -// caseClinicalVideo = new CaseClinicalVideoModel(); -// caseClinicalVideo.setVideoTitle(r.getVideoTitle()); -// caseClinicalVideo.setVideoNo(r.getVideoNo()); -// caseClinicalVideo.setPushDate(r.getPushDate()); -// caseClinicalVideo.setIsLink(r.getIsLink()); -// caseClinicalVideo.setIsLinkUrl(r.getIsLinkUrl()); -// int res = caseClinicalVideoDao.insert(caseClinicalVideo); -// if (res <= 0){ -// throw new BusinessException("-1", "内部错误,添加视频失败"); +// // 构建新作者的唯一标识集合 +// Map newAuthorsMap = new HashMap<>(); +// for (addClinicalVideoApp.Author a : r.getAuthor()) { +// String key = a.getDoctorIden(); +// newAuthorsMap.put(key, a); // } -// -// // 新增标签 -// CaseClinicalVideoLabelModel caseClinicalVideoLabel = new CaseClinicalVideoLabelModel(); -// caseClinicalVideoLabel.setVideoId(caseClinicalVideo.getVideoId()); -// } -// -// // 修改 -// if (Objects.equals(r.getAction(), "update")){ -// -// } -// -// // 删除 -// if (Objects.equals(r.getAction(), "delete")){ -// -// } +// // 找出需要新增的作者 +// for (addClinicalVideoApp.Author a : r.getAuthor()) { +// String key = a.getDoctorIden(); +// if (!existingAuthorsMap.containsKey(key)) { +// addList.add(a); +// } +// } +// // 找出需要删除的作者 +// for (CaseClinicalVideoAuthorModel a : caseClinicalVideoAuthors) { +// String key = a.getDoctorIden(); +// if (!newAuthorsMap.containsKey(key)) { +// deleteList.add(a); +// } +// } + } + + // 删除 + if (Objects.equals(r.getAction(), "delete")){ + + } diff --git a/src/main/java/com/example/caseData/service/CaseExchangeService.java b/src/main/java/com/example/caseData/service/CaseExchangeService.java index a129645..e882fdc 100644 --- a/src/main/java/com/example/caseData/service/CaseExchangeService.java +++ b/src/main/java/com/example/caseData/service/CaseExchangeService.java @@ -60,6 +60,9 @@ public class CaseExchangeService { @Resource private UserVoteExchangeDao userVoteExchangeDao; + @Resource + private StatsCaseClinicalLabelDao statsCaseClinicalLabelDao; + /** * 新增-病例交流 * @param userId 用户id @@ -472,7 +475,7 @@ public class CaseExchangeService { } // 新增统计字段 - boolean r = IncCaseExchangeStats(exchangeId,2); + boolean r = IncCaseExchangeStats(exchangeId,3); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; @@ -518,7 +521,7 @@ public class CaseExchangeService { } // 减少统计字段 - boolean r = DecCaseExchangeStats(String.valueOf(comment.getExchangeId()),1,1); + boolean r = DecCaseExchangeStats(String.valueOf(comment.getExchangeId()),3,1); if (!r){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return false; @@ -752,6 +755,8 @@ public class CaseExchangeService { throw new BusinessException("操作失败"); } + + // 阅读量 if (type == 1){ // 总 @@ -762,6 +767,8 @@ public class CaseExchangeService { // 用户 statsCaseExchangeUserDao.dec(statsCaseExchangeUser.getUserId(),"exchange_read_num",num); + + } // 收藏量 diff --git a/src/main/java/com/example/caseData/service/UserService.java b/src/main/java/com/example/caseData/service/UserService.java index 791ced2..017e2ae 100644 --- a/src/main/java/com/example/caseData/service/UserService.java +++ b/src/main/java/com/example/caseData/service/UserService.java @@ -229,5 +229,44 @@ public class UserService { return basicHospital; } + /** + * 获取临床医生数据 + * @return UserModel + */ + public CaseClinicalDoctorModel GetCaseClinicalDoctor(GetUserInfoResponse r) throws BusinessException { + GetUserInfoResponse.ResponsData data = r.getData(); + + // 获取app医院数据 + BasicHospitalModel basicHospital = GetAppHospital(data.getHospitalUuid()); + + // 获取对应医生数据 + LambdaQueryWrapper caseClinicalDoctorWrapper = new LambdaQueryWrapper<>(); + caseClinicalDoctorWrapper.eq(CaseClinicalDoctorModel::getDoctorIden, data.getUuid()); + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectOne(caseClinicalDoctorWrapper); + if (caseClinicalDoctor == null){ + CaseClinicalDoctorModel c = new CaseClinicalDoctorModel(); + c.setDoctorName(data.getRealname()); + c.setDoctorIden(data.getUuid()); + c.setHospitalId(basicHospital.getHospitalId()); + c.setAvatar(data.getPhoto()); + int res = caseClinicalDoctorDao.insert(c); + if (res <= 0){ + throw new BusinessException("操作失败"); + } + }else{ + if (!Objects.equals(caseClinicalDoctor.getDoctorName(), data.getRealname())){ + caseClinicalDoctor.setDoctorName(data.getRealname()); + } + + if (!Objects.equals(basicHospital.getHospitalId(), caseClinicalDoctor.getHospitalId())){ + caseClinicalDoctor.setHospitalId(basicHospital.getHospitalId()); + } + + caseClinicalDoctorDao.updateById(caseClinicalDoctor); + } + + return caseClinicalDoctor; + } + } \ No newline at end of file