新增了积分发放

This commit is contained in:
wucongxing8150 2025-07-30 09:54:42 +08:00
parent cc7c07aa4a
commit 1bc315902f
16 changed files with 930 additions and 390 deletions

View File

@ -9,8 +9,11 @@ import com.example.caseData.exception.BusinessException;
import com.example.caseData.extend.app.UserPoint.UserPoint;
import com.example.caseData.extend.app.UserPoint.UserPointResponse;
import com.example.caseData.model.*;
import com.example.caseData.request.CaseClinicalArticleRequest.addClinicalArticleComment;
import com.example.caseData.request.UserRequest.ReportUserScoreRequest;
import com.example.caseData.request.UserRequest.UserRequest;
import com.example.caseData.service.RewardPointService;
import com.example.caseData.service.UserService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.validation.annotation.Validated;
@ -55,6 +58,9 @@ public class UserController extends BaseController {
@Resource
private UserPoint userPoint;
@Resource
private UserService userService;
// // 查询所有用户
// @GetMapping("/users")
// public Response<Map<String, Object>> getUserPage(@Validated({UserRequest.Page.class}) @ModelAttribute UserRequest request) {
@ -148,5 +154,4 @@ public class UserController extends BaseController {
return Response.success(point);
}
}

View File

@ -91,4 +91,11 @@ public interface CaseClinicalArticleDao extends BaseMapper<CaseClinicalArticleMo
* @return 最新发表时间无数据时返回 null
*/
LocalDateTime selectLastArticlePushDateByDoctorId(@Param("doctorId") Long doctorId);
/**
* 根据医院ID查询该医院最后一篇文章的发表时间
* @param labelIden 标签唯一标识
* @return 最新发表时间无数据时返回 null
*/
LocalDateTime selectLastArticlePushDateByLabelId(@Param("labelIden") String labelIden);
}

View File

@ -0,0 +1,11 @@
package com.example.caseData.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.caseData.model.CaseClinicalRecordScoreModel;
import com.example.caseData.model.StatsCaseClinicalModel;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
public interface CaseClinicalRecordScoreDao extends BaseMapper<CaseClinicalRecordScoreModel> {
}

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.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@ -77,4 +78,25 @@ public interface CaseClinicalVideoDao extends BaseMapper<CaseClinicalVideoModel>
"SET ${field} = CASE WHEN ${field} >= #{numeral} THEN ${field} - #{numeral} ELSE 0 END " +
"WHERE video_id = #{videoId}")
int dec(@Param("videoId") Long articleId, @Param("field") String field, @Param("numeral") int numeral);
/**
* 根据医院ID查询该医院最后一篇文章的发表时间
* @param hospitalId 医院ID
* @return 最新发表时间无数据时返回 null
*/
LocalDateTime selectLastVideoPushDateByHospitalId(@Param("hospitalId") Long hospitalId);
/**
* 根据医生ID查询该医生最后一篇文章的发表时间
* @param doctorId 医院ID
* @return 最新发表时间无数据时返回 null
*/
LocalDateTime selectLastVideoPushDateByDoctorId(@Param("doctorId") Long doctorId);
/**
* 根据医院ID查询该医院最后一篇文章的发表时间
* @param labelIden 标签唯一标识
* @return 最新发表时间无数据时返回 null
*/
LocalDateTime selectLastVideoPushDateByLabelId(@Param("labelIden") String labelIden);
}

View File

@ -0,0 +1,22 @@
package com.example.caseData.extend.app.Score;
import lombok.Data;
@Data
public class ReportUserScoreResponse
{
/** 接口调用状态。200正常其它值调用出错 */
private int code;
/** 结果说明。如果接口调用出错,那么返回错误描述。成功则返回 ok */
private String msg;
/** 接口是否调用成功 */
private boolean success;
/** 错误信息或提示信息 */
private String message;
/** 接口返回的数据 */
private Integer data;
}

View File

@ -0,0 +1,67 @@
package com.example.caseData.extend.app.Score;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.example.caseData.config.AppConfig;
import com.example.caseData.exception.BusinessException;
import com.example.caseData.extend.app.Base;
import com.example.caseData.extend.app.UserPoint.UserPointResponse;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@Slf4j
@Component
public class Score extends Base {
@Resource
private AppConfig appConfig;
// 上报用户积分
public ReportUserScoreResponse ReportUserScore(String uuid,Integer bonuspoints,String bonuspointsNote) throws BusinessException {
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
// 处理参数
Map<String, Object> requestData = new HashMap<>();
requestData.put("bonuspoints_note", bonuspointsNote);
requestData.put("bonuspoints", bonuspoints);
requestData.put("user_uuid", uuid);
requestData.put("platform", appConfig.getPlatform());
requestData.put("timestamp", timestamp);
// 生成签名
String sign = genSignature(requestData,appConfig.getSecretKey());
String url = appConfig.getApiUrl() + "/expert-api/addBonusPoints";
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
ReportUserScoreResponse result = JSONUtil.toBean(response.body(), ReportUserScoreResponse.class);
log.info("获取app数据返回:{}",result);
if (result.getCode() != 200){
if (!Objects.equals(result.getMsg(), "")){
throw new BusinessException(result.getMsg());
}else{
throw new BusinessException("失败");
}
}
return result;
}
}
}

View File

@ -0,0 +1,76 @@
package com.example.caseData.model;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 积分发放记录实体类
*/
@TableName("`case_clinical_record_score`")
@Data
public class CaseClinicalRecordScoreModel {
/**
* 主键id
*/
@TableId(value = "score_id", type = IdType.NONE)
private Long scoreId;
/**
* id(根据type不同对应不同类型)
*/
@TableField("id")
private Long id;
/**
* 类型1:文章 2:视频 3:病例交流
*/
@TableField("type")
private Integer type;
/**
* 用户id
*/
@TableField("user_id")
private Long userId;
/**
* 用户名称
*/
@TableField("user_name")
private String userName;
/**
* 积分类型1:完成阅读 2:阅读时间满足 3:优质留言 4:再次优质留言 5:病例互动-病例库
*/
@TableField("score_type")
private Integer scoreType;
/**
* 获取积分节点名称(阅读时间足够)
*/
@TableField("node_name")
private String nodeName;
/**
* 积分
*/
@TableField("score")
private Integer score;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@JsonProperty("created_at")
private LocalDateTime createdAt;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonProperty("updated_at")
private LocalDateTime updatedAt;
}

View File

@ -0,0 +1,22 @@
package com.example.caseData.request.UserRequest;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.*;
import lombok.Data;
@Data
public class ReportUserScoreRequest {
/**
* 主键id根据type不同对应不同数据表
*/
@JsonProperty("id")
@NotEmpty(message = "参数错误")
private String id;
/**
* 类型1:文章 2:视频 3:病例交流
*/
@JsonProperty("type")
@NotNull(message = "参数错误")
private Integer type;
}

View File

@ -1,6 +1,7 @@
package com.example.caseData.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.caseData.common.Response;
import com.example.caseData.dao.*;
import com.example.caseData.exception.BusinessException;
import com.example.caseData.model.*;
@ -50,6 +51,9 @@ public class CaseClinicalArticleService {
@Resource
private UserDao userDao;
@Resource
private UserService userService;
@Resource
private CaseClinicalArticleLabelDao caseClinicalArticleLabelDao;
@ -181,6 +185,9 @@ public class CaseClinicalArticleService {
return false;
}
// 发放积分
userService.ReportUserScore(1,userId);
return true;
}
@ -374,43 +381,28 @@ public class CaseClinicalArticleService {
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()){
@ -418,29 +410,6 @@ public class CaseClinicalArticleService {
}
statsCaseClinicalDao.inc(1L,statsCaseClinicalField,num);
// 获取文章作者
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId);
List<CaseClinicalArticleAuthorModel> caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 减少医生文章数
statsCaseClinicalHospitalDao.inc(caseClinicalDoctor.getHospitalId(),statsCaseClinicalHospitalField,num);
// 减少医生文章数
statsCaseClinicalDoctorDao.inc(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,num);
}
// 获取文章标签数据
LambdaQueryWrapper<CaseClinicalArticleLabelModel> labelQueryWrapper = new LambdaQueryWrapper<>();
labelQueryWrapper.eq(CaseClinicalArticleLabelModel::getArticleId, articleId);
List<CaseClinicalArticleLabelModel> caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper);
for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) {
statsCaseClinicalLabelDao.inc(label.getAppIden(),statsCaseClinicalLabelField,num);
}
return true;
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@ -458,43 +427,28 @@ public class CaseClinicalArticleService {
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()){
@ -502,29 +456,6 @@ public class CaseClinicalArticleService {
}
statsCaseClinicalDao.dec(1L,statsCaseClinicalField,num);
// 获取文章作者
LambdaQueryWrapper<CaseClinicalArticleAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalArticleAuthorModel::getArticleId, articleId);
List<CaseClinicalArticleAuthorModel> caseClinicalArticleAuthors = caseClinicalArticleAuthorDao.selectList(authorQueryWrapper);
for (CaseClinicalArticleAuthorModel author : caseClinicalArticleAuthors) {
// 查询医生
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectById(author.getDoctorId());
// 减少医生文章数
statsCaseClinicalHospitalDao.dec(caseClinicalDoctor.getHospitalId(),statsCaseClinicalHospitalField,num);
// 减少医生文章数
statsCaseClinicalDoctorDao.dec(caseClinicalDoctor.getDoctorId(),statsCaseClinicalDoctorField,num);
}
// 获取文章标签数据
LambdaQueryWrapper<CaseClinicalArticleLabelModel> labelQueryWrapper = new LambdaQueryWrapper<>();
labelQueryWrapper.eq(CaseClinicalArticleLabelModel::getArticleId, articleId);
List<CaseClinicalArticleLabelModel> caseClinicalArticleLabels = caseClinicalArticleLabelDao.selectList(labelQueryWrapper);
for (CaseClinicalArticleLabelModel label : caseClinicalArticleLabels) {
statsCaseClinicalLabelDao.dec(label.getAppIden(),statsCaseClinicalLabelField,num);
}
return true;
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

View File

@ -1,10 +1,7 @@
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.dao.*;
import com.example.caseData.exception.BusinessException;
import com.example.caseData.model.CaseClinicalArticleModel;
import com.example.caseData.model.StatsCaseClinicalDoctorModel;
@ -31,9 +28,19 @@ public class CaseClinicalService {
@Resource
private CaseClinicalArticleDao caseClinicalArticleDao;
// 新增标签统计
@Resource
private CaseClinicalVideoDao caseClinicalVideoDao;
/**
* 新增标签统计
* @param labelIden
* @param labelName
* @param type 类型 1:文章 2:视频
* @param lastPushDate
* @return
*/
@Transactional
public void AddStatsCaseClinicalLabel(String labelIden,String labelName){
public StatsCaseClinicalLabelModel IncStatsCaseClinicalLabel(String labelIden,String labelName,Integer type,LocalDateTime lastPushDate){
LambdaQueryWrapper<StatsCaseClinicalLabelModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalLabelModel::getLabelIden, labelIden);
StatsCaseClinicalLabelModel statsCaseClinicalLabel = statsCaseClinicalLabelDao.selectOne(mapQueryWrapper);
@ -41,20 +48,126 @@ public class CaseClinicalService {
statsCaseClinicalLabel = new StatsCaseClinicalLabelModel();
statsCaseClinicalLabel.setLabelIden(labelIden);
statsCaseClinicalLabel.setLabelName(labelName);
if (type == 1){
statsCaseClinicalLabel.setArticleNum(1);
}else if(type == 2){
statsCaseClinicalLabel.setVideoNum(1);
}
if (lastPushDate!=null){
statsCaseClinicalLabel.setLastPushDate(lastPushDate);
}
statsCaseClinicalLabelDao.insert(statsCaseClinicalLabel);
}else{
if (type == 1){
statsCaseClinicalLabelDao.inc(statsCaseClinicalLabel.getLabelIden(),"article_num",1);
}else{
statsCaseClinicalLabelDao.inc(statsCaseClinicalLabel.getLabelIden(),"video_num",1);
}
}
return statsCaseClinicalLabel;
}
/**
* 减少标签统计
* @param labelIden
* @param type 类型 1:文章 2:视频
* @return
*/
@Transactional
public StatsCaseClinicalLabelModel DecStatsCaseClinicalLabel(String labelIden,Integer type){
LambdaQueryWrapper<StatsCaseClinicalLabelModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalLabelModel::getLabelIden, labelIden);
StatsCaseClinicalLabelModel statsCaseClinicalLabel = statsCaseClinicalLabelDao.selectOne(mapQueryWrapper);
if (statsCaseClinicalLabel == null) {
return null;
}else{
if (type == 1){
// 最后一篇文章发表时间
LocalDateTime lastPushDate = caseClinicalArticleDao.selectLastArticlePushDateByLabelId(labelIden);
if (lastPushDate != null){
statsCaseClinicalLabel.setLastPushDate(lastPushDate);
statsCaseClinicalLabelDao.updateById(statsCaseClinicalLabel);
}
statsCaseClinicalLabelDao.inc(statsCaseClinicalLabel.getLabelIden(),"article_num",1);
}else{
// 最后一篇文章发表时间
LocalDateTime lastPushDate = caseClinicalVideoDao.selectLastVideoPushDateByLabelId(labelIden);
if (lastPushDate != null){
statsCaseClinicalLabel.setLastPushDate(lastPushDate);
statsCaseClinicalLabelDao.updateById(statsCaseClinicalLabel);
}
statsCaseClinicalLabelDao.inc(statsCaseClinicalLabel.getLabelIden(),"video_num",1);
}
}
return statsCaseClinicalLabel;
}
// 新增医生统计
@Transactional
public StatsCaseClinicalDoctorModel AddStatsCaseClinicalDoctor(String doctorId){
public StatsCaseClinicalDoctorModel IncStatsCaseClinicalDoctor(String doctorId,Integer type,LocalDateTime lastPushDate){
LambdaQueryWrapper<StatsCaseClinicalDoctorModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId);
StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(mapQueryWrapper);
if (statsCaseClinicalDoctor == null) {
statsCaseClinicalDoctor = new StatsCaseClinicalDoctorModel();
statsCaseClinicalDoctor.setDoctorId(Long.valueOf(doctorId));
if (type == 1){
statsCaseClinicalDoctor.setArticleNum(1);
}else if(type == 2){
statsCaseClinicalDoctor.setVideoNum(1);
}
if (lastPushDate!=null){
statsCaseClinicalDoctor.setLastPushDate(lastPushDate);
}
statsCaseClinicalDoctorDao.insert(statsCaseClinicalDoctor);
}else{
if (type == 1){
statsCaseClinicalDoctorDao.inc(statsCaseClinicalDoctor.getDoctorId(),"article_num",1);
}else{
statsCaseClinicalDoctorDao.inc(statsCaseClinicalDoctor.getDoctorId(),"video_num",1);
}
}
return statsCaseClinicalDoctor;
}
/**
* 减少医生统计
* @param doctorId
* @param type 类型 1:文章 2:视频
* @return
*/
@Transactional
public StatsCaseClinicalDoctorModel DecStatsCaseClinicalDoctor(String doctorId,Integer type){
LambdaQueryWrapper<StatsCaseClinicalDoctorModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalDoctorModel::getDoctorId, doctorId);
StatsCaseClinicalDoctorModel statsCaseClinicalDoctor = statsCaseClinicalDoctorDao.selectOne(mapQueryWrapper);
if (statsCaseClinicalDoctor == null) {
return null;
}else{
if (type == 1){
// 最后一篇文章发表时间
LocalDateTime lastPushDate = caseClinicalArticleDao.selectLastArticlePushDateByDoctorId(Long.valueOf(doctorId));
if (lastPushDate != null){
statsCaseClinicalDoctor.setLastPushDate(lastPushDate);
statsCaseClinicalDoctorDao.updateById(statsCaseClinicalDoctor);
}
statsCaseClinicalDoctorDao.inc(statsCaseClinicalDoctor.getDoctorId(),"article_num",1);
}else{
// 最后一篇文章发表时间
LocalDateTime lastPushDate = caseClinicalVideoDao.selectLastVideoPushDateByDoctorId(Long.valueOf(doctorId));
if (lastPushDate != null){
statsCaseClinicalDoctor.setLastPushDate(lastPushDate);
statsCaseClinicalDoctorDao.updateById(statsCaseClinicalDoctor);
}
statsCaseClinicalDoctorDao.inc(statsCaseClinicalDoctor.getDoctorId(),"video_num",1);
}
}
return statsCaseClinicalDoctor;
@ -62,211 +175,264 @@ public class CaseClinicalService {
// 新增医院统计
@Transactional
public StatsCaseClinicalHospitalModel AddStatsCaseClinicalHospital(String hospitalId){
public StatsCaseClinicalHospitalModel IncStatsCaseClinicalHospital(String hospitalId,Integer type,LocalDateTime lastPushDate){
LambdaQueryWrapper<StatsCaseClinicalHospitalModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalHospitalModel::getHospitalId, hospitalId);
StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(mapQueryWrapper);
if (statsCaseClinicalHospital == null) {
statsCaseClinicalHospital = new StatsCaseClinicalHospitalModel();
statsCaseClinicalHospital.setHospitalId(Long.valueOf(hospitalId));
if (type == 1){
statsCaseClinicalHospital.setArticleNum(1);
}else if(type == 2){
statsCaseClinicalHospital.setVideoNum(1);
}
if (lastPushDate!=null){
statsCaseClinicalHospital.setLastPushDate(lastPushDate);
}
statsCaseClinicalHospitalDao.insert(statsCaseClinicalHospital);
}else{
if (type == 1){
statsCaseClinicalHospitalDao.inc(statsCaseClinicalHospital.getHospitalId(),"article_num",1);
}else{
statsCaseClinicalHospitalDao.inc(statsCaseClinicalHospital.getHospitalId(),"video_num",1);
}
}
return statsCaseClinicalHospital;
}
/**
* 处理文章所属医院的数量统计
* 减少医院统计
* @param hospitalId
* @param type 类型 1:文章 2:视频
* @return
*/
@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;
public StatsCaseClinicalHospitalModel DecStatsCaseClinicalHospital(String hospitalId,Integer type){
LambdaQueryWrapper<StatsCaseClinicalHospitalModel> mapQueryWrapper = new LambdaQueryWrapper<>();
mapQueryWrapper.eq(StatsCaseClinicalHospitalModel::getHospitalId, hospitalId);
StatsCaseClinicalHospitalModel statsCaseClinicalHospital = statsCaseClinicalHospitalDao.selectOne(mapQueryWrapper);
if (statsCaseClinicalHospital == null) {
return null;
}else{
if (type == 1){
// 最后一篇文章发表时间
LocalDateTime lastPushDate = caseClinicalArticleDao.selectLastArticlePushDateByHospitalId(Long.valueOf(hospitalId));
if (lastPushDate != null){
statsCaseClinicalHospital.setLastPushDate(lastPushDate);
statsCaseClinicalHospitalDao.updateById(statsCaseClinicalHospital);
}
statsCaseClinicalHospitalDao.inc(statsCaseClinicalHospital.getHospitalId(),"article_num",1);
}else{
// 最后一篇文章发表时间
LocalDateTime lastPushDate = caseClinicalVideoDao.selectLastVideoPushDateByHospitalId(Long.valueOf(hospitalId));
if (lastPushDate != null){
statsCaseClinicalHospital.setLastPushDate(lastPushDate);
statsCaseClinicalHospitalDao.updateById(statsCaseClinicalHospital);
}
statsCaseClinicalHospitalDao.inc(statsCaseClinicalHospital.getHospitalId(),"video_num",1);
}
// 获取旧医院数据
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;
return statsCaseClinicalHospital;
}
/**
* 处理文章所属医生的数量统计
*/
@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;
}
// /**
// * 处理文章所属医院的数量统计
// */
// @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

@ -109,7 +109,7 @@ public class CaseClinicalVideoService {
}
// 新增统计字段
boolean r = IncClinicalVideoStats(videoId,2);
boolean r = IncClinicalVideoStats(videoId,2,1);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
@ -140,7 +140,7 @@ public class CaseClinicalVideoService {
}
// 减少视频的统计字段
boolean r = DecClinicalVideoStats(videoId,2);
boolean r = DecClinicalVideoStats(videoId,2,1);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
@ -198,12 +198,15 @@ public class CaseClinicalVideoService {
}
// 新增文章的统计字段
boolean r = IncClinicalVideoStats(videoId,3);
boolean r = IncClinicalVideoStats(videoId,3,1);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
// 发放积分
userService.ReportUserScore(2,userId);
return true;
}
@ -245,7 +248,7 @@ public class CaseClinicalVideoService {
}
// 减少文章的统计字段
boolean r = DecClinicalVideoStats(String.valueOf(comment.getVideoId()),2);
boolean r = DecClinicalVideoStats(String.valueOf(comment.getVideoId()),2,1);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
@ -393,54 +396,39 @@ public class CaseClinicalVideoService {
* @param type 类型1:阅读量 2收藏量 3:评论数 4:文章数
*/
@Transactional
public boolean IncClinicalVideoStats(String videoId,Integer type){
public boolean IncClinicalVideoStats(String videoId,Integer type,Integer num){
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.inc(Long.valueOf(videoId),caseClinicalVideoField,1);
caseClinicalVideoDao.inc(Long.valueOf(videoId),caseClinicalVideoField,num);
}
statsCaseClinicalDao.inc(1L,statsCaseClinicalField,1);
statsCaseClinicalDao.inc(1L,statsCaseClinicalField,num);
return true;
} catch (Exception e) {
@ -455,54 +443,39 @@ public class CaseClinicalVideoService {
* @param type 类型1:阅读量 2收藏量 3:评论数 4:文章数
*/
@Transactional
public boolean DecClinicalVideoStats(String videoId,Integer type){
public boolean DecClinicalVideoStats(String videoId,Integer type,Integer num){
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,num);
}
statsCaseClinicalDao.dec(1L,statsCaseClinicalField,1);
statsCaseClinicalDao.dec(1L,statsCaseClinicalField,num);
return true;
} catch (Exception e) {
@ -550,7 +523,6 @@ public class CaseClinicalVideoService {
// 检测签名
Video.checkSign(request,"26e8675f44565b1ed4eaaa0fcf3531d7",r,objectMapper);
// 获取视频数据
LambdaQueryWrapper<CaseClinicalVideoModel> videoQueryWrapper = new LambdaQueryWrapper<>();
videoQueryWrapper.eq(CaseClinicalVideoModel::getVideoNo, r.getVideoNo());
@ -594,7 +566,7 @@ public class CaseClinicalVideoService {
}
// 新增标签统计
caseClinicalService.AddStatsCaseClinicalLabel(label.getAppIden(),label.getLabelName());
caseClinicalService.IncStatsCaseClinicalLabel(label.getAppIden(),label.getLabelName(),2,LocalDateTime.parse(r.getPushDate()));
}
// 新增作者
@ -610,15 +582,15 @@ public class CaseClinicalVideoService {
caseClinicalVideoAuthorDao.insert(caseClinicalVideoAuthor);
// 新增作者统计
caseClinicalService.AddStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId()));
caseClinicalService.IncStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId()),2,LocalDateTime.parse(r.getPushDate()));
// 新增医院统计
caseClinicalService.AddStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()));
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2,LocalDateTime.parse(r.getPushDate()));
}
}
// 新增统计
IncClinicalVideoStats(String.valueOf(caseClinicalVideo.getVideoId()),4);
IncClinicalVideoStats(String.valueOf(caseClinicalVideo.getVideoId()),4,1);
}
// 修改
@ -642,82 +614,235 @@ public class CaseClinicalVideoService {
caseClinicalVideoDao.updateById(caseClinicalVideo);
// 获取全部作者
List<String> aList = new ArrayList<>();
List<String> bList = new ArrayList<>();
// 作者处理
AddClinicalVideoAppAuthor(caseClinicalVideo,r);
LambdaQueryWrapper<CaseClinicalVideoAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, caseClinicalVideo.getVideoId());
List<CaseClinicalVideoAuthorModel> caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper);
for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors){
// 获取医生数据
LambdaQueryWrapper<CaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>();
doctorQueryWrapper.eq(CaseClinicalDoctorModel::getDoctorId, author.getDoctorId());
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectOne(doctorQueryWrapper);
if (caseClinicalDoctor == null) {
throw new BusinessException("-1", "无法完成此操作");
}
aList.add(caseClinicalDoctor.getDoctorIden());
}
for (addClinicalVideoApp.Author author : r.getAuthor()){
bList.add(author.getDoctorIden());
}
// 1. 删除的a 中有b 中没有
List<String> deleted = new ArrayList<>();
for (String s : aList) {
if (!bList.contains(s)) {
deleted.add(s);
}
}
// 2. 新增的b 中有a 中没有
List<String> added = new ArrayList<>();
for (String s : bList) {
if (!aList.contains(s)) {
added.add(s);
}
}
// 删除
if (!deleted.isEmpty()) {
}
// 新增
if (!added.isEmpty()) {
for (String appIden : added){
// 获取app用户数据
GetUserInfoResponse result = userInfo.getUserInfoByUuid(appIden);
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()));
}
}
// 标签处理
AddClinicalVideoAppLabel(caseClinicalVideo,r);
}
// 删除
if (Objects.equals(r.getAction(), "delete")){
if (caseClinicalVideo == null){
throw new BusinessException("-1", "无法完成此操作");
}
deleteClinicalVideo(caseClinicalVideo);
}
throw new BusinessException("-1", "错误");
} catch (Exception e) {
throw new BusinessException("-1", e.getMessage());
}
// return true;
return true;
}
/**
* 临床病例库-视频-同步app视频-作者处理
* @param caseClinicalVideo
* @param r
*/
@Transactional
public void AddClinicalVideoAppAuthor(CaseClinicalVideoModel caseClinicalVideo,addClinicalVideoApp r){
// 处理作者
List<String> aAuthorList = new ArrayList<>();
List<String> bAuthorList = new ArrayList<>();
// 获取全部作者
LambdaQueryWrapper<CaseClinicalVideoAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, caseClinicalVideo.getVideoId());
List<CaseClinicalVideoAuthorModel> caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper);
for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors){
// 获取医生数据
LambdaQueryWrapper<CaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>();
doctorQueryWrapper.eq(CaseClinicalDoctorModel::getDoctorId, author.getDoctorId());
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectOne(doctorQueryWrapper);
if (caseClinicalDoctor == null) {
throw new BusinessException("-1", "无法完成此操作");
}
aAuthorList.add(caseClinicalDoctor.getDoctorIden());
}
for (addClinicalVideoApp.Author author : r.getAuthor()){
bAuthorList.add(author.getDoctorIden());
}
// 1. 删除的a 中有b 中没有
List<String> deleted = new ArrayList<>();
for (String s : aAuthorList) {
if (!bAuthorList.contains(s)) {
deleted.add(s);
}
}
// 2. 新增的b 中有a 中没有
List<String> added = new ArrayList<>();
for (String s : bAuthorList) {
if (!aAuthorList.contains(s)) {
added.add(s);
}
}
// 删除
if (!deleted.isEmpty()) {
for (String s : deleted) {
// 获取医生数据
LambdaQueryWrapper<CaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>();
doctorQueryWrapper.eq(CaseClinicalDoctorModel::getDoctorIden,s);
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectOne(doctorQueryWrapper);
if (caseClinicalDoctor == null) {
throw new BusinessException("-1", "无法完成此操作");
}
// 删除视频作者
LambdaQueryWrapper<CaseClinicalVideoAuthorModel> videoAuthorQueryWrapper = new LambdaQueryWrapper<>();
videoAuthorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, caseClinicalVideo.getVideoId());
videoAuthorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getDoctorId, caseClinicalDoctor.getDoctorId());
caseClinicalVideoAuthorDao.delete(videoAuthorQueryWrapper);
// 减少作者统计
caseClinicalService.DecStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId()),2);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2);
}
}
// 新增
if (!added.isEmpty()) {
for (String appIden : added){
// 获取app用户数据
GetUserInfoResponse result = userInfo.getUserInfoByUuid(appIden);
CaseClinicalDoctorModel caseClinicalDoctor = userService.GetCaseClinicalDoctor(result);
CaseClinicalVideoAuthorModel caseClinicalVideoAuthor = new CaseClinicalVideoAuthorModel();
caseClinicalVideoAuthor.setVideoId(caseClinicalVideo.getVideoId());
caseClinicalVideoAuthor.setDoctorId(String.valueOf(caseClinicalDoctor.getDoctorId()));
caseClinicalVideoAuthorDao.insert(caseClinicalVideoAuthor);
// 新增作者统计
caseClinicalService.IncStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId()),2,LocalDateTime.parse(r.getPushDate()));
// 新增医院统计
caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2,LocalDateTime.parse(r.getPushDate()));
}
}
}
/**
* 临床病例库-视频-同步app视频-标签处理
* @param caseClinicalVideo
* @param r
*/
@Transactional
public void AddClinicalVideoAppLabel(CaseClinicalVideoModel caseClinicalVideo,addClinicalVideoApp r){
List<String> aList = new ArrayList<>();
List<String> bList = new ArrayList<>();
// 获取全部b标签
LambdaQueryWrapper<CaseClinicalVideoLabelModel> labelQueryWrapper = new LambdaQueryWrapper<>();
labelQueryWrapper.eq(CaseClinicalVideoLabelModel::getVideoId, caseClinicalVideo.getVideoId());
List<CaseClinicalVideoLabelModel> caseClinicalVideoLabels = caseClinicalVideoLabelDao.selectList(labelQueryWrapper);
for (CaseClinicalVideoLabelModel label : caseClinicalVideoLabels){
aList.add(label.getAppIden());
}
for (addClinicalVideoApp.Label label : r.getLabel()){
bList.add(label.getAppIden());
}
// 1. 删除的a 中有b 中没有
List<String> deleted = new ArrayList<>();
for (String s : aList) {
if (!bList.contains(s)) {
deleted.add(s);
}
}
// 2. 新增的b 中有a 中没有
List<String> added = new ArrayList<>();
for (String s : bList) {
if (!aList.contains(s)) {
added.add(s);
}
}
// 删除
if (!deleted.isEmpty()) {
for (String s : deleted) {
// 删除视频标签
LambdaQueryWrapper<CaseClinicalVideoLabelModel> videoLabelQueryWrapper = new LambdaQueryWrapper<>();
videoLabelQueryWrapper.eq(CaseClinicalVideoLabelModel::getVideoId, caseClinicalVideo.getVideoId());
videoLabelQueryWrapper.eq(CaseClinicalVideoLabelModel::getAppIden, s);
caseClinicalVideoLabelDao.delete(videoLabelQueryWrapper);
// 减少标签统计
caseClinicalService.DecStatsCaseClinicalLabel(s,2);
}
}
// 新增
if (!added.isEmpty()) {
for (String appIden : added){
CaseClinicalVideoLabelModel caseClinicalVideoLabel = new CaseClinicalVideoLabelModel();
caseClinicalVideoLabel.setVideoId(caseClinicalVideo.getVideoId());
caseClinicalVideoLabel.setAppIden(appIden);
String labelName = "";
LocalDateTime pushDate = LocalDateTime.parse("");
for (addClinicalVideoApp.Label label : r.getLabel()){
if (Objects.equals(appIden, label.getAppIden())){
caseClinicalVideoLabel.setLabelName(label.getLabelName());
}
}
caseClinicalVideoLabel.setLabelName(labelName);
caseClinicalVideoLabelDao.insert(caseClinicalVideoLabel);
// 新增标签统计
caseClinicalService.IncStatsCaseClinicalLabel(appIden,caseClinicalVideoLabel.getLabelName(),2,pushDate);
}
}
}
// 删除视频数据
@Transactional
public void deleteClinicalVideo(CaseClinicalVideoModel caseClinicalVideo){
// 修改视频为删除
caseClinicalVideo.setDeleteStatus(1);
caseClinicalVideoDao.updateById(caseClinicalVideo);
// 修改视频统计数量
DecClinicalVideoStats(String.valueOf(caseClinicalVideo.getVideoId()),4,1);
// 获取视频标签数据
LambdaQueryWrapper<CaseClinicalVideoLabelModel> labelQueryWrapper = new LambdaQueryWrapper<>();
labelQueryWrapper.eq(CaseClinicalVideoLabelModel::getVideoId, caseClinicalVideo.getVideoId());
List<CaseClinicalVideoLabelModel> caseClinicalVideoLabels = caseClinicalVideoLabelDao.selectList(labelQueryWrapper);
for (CaseClinicalVideoLabelModel label : caseClinicalVideoLabels){
// 减少标签统计
caseClinicalService.DecStatsCaseClinicalLabel(String.valueOf(caseClinicalVideo.getVideoId()),2);
}
// 获取视频作者数据
LambdaQueryWrapper<CaseClinicalVideoAuthorModel> authorQueryWrapper = new LambdaQueryWrapper<>();
authorQueryWrapper.eq(CaseClinicalVideoAuthorModel::getVideoId, caseClinicalVideo.getVideoId());
List<CaseClinicalVideoAuthorModel> caseClinicalVideoAuthors = caseClinicalVideoAuthorDao.selectList(authorQueryWrapper);
for (CaseClinicalVideoAuthorModel author : caseClinicalVideoAuthors){
// 获取医生数据
LambdaQueryWrapper<CaseClinicalDoctorModel> doctorQueryWrapper = new LambdaQueryWrapper<>();
doctorQueryWrapper.eq(CaseClinicalDoctorModel::getDoctorId,author.getDoctorId());
CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectOne(doctorQueryWrapper);
if (caseClinicalDoctor == null) {
throw new BusinessException("-1", "无法完成此操作");
}
// 减少医生统计
caseClinicalService.DecStatsCaseClinicalDoctor(author.getDoctorId(),2);
// 减少医院统计
caseClinicalService.DecStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2);
}
}
}

View File

@ -54,6 +54,9 @@ public class CaseExchangeService {
@Resource
private UserDao userDao;
@Resource
private UserService userService;
@Resource
private RegularUtil regularUtil;
@ -300,7 +303,6 @@ public class CaseExchangeService {
return true;
}
/**
* 删除-病例交流
* @param exchangeId 病例交流id
@ -355,7 +357,6 @@ public class CaseExchangeService {
return true;
}
/**
* 新增收藏-病例交流
* @param exchangeId 病例交流id
@ -481,6 +482,10 @@ public class CaseExchangeService {
return false;
}
// 发放积分
userService.ReportUserScore(3,userId);
return true;
}
@ -755,8 +760,6 @@ public class CaseExchangeService {
throw new BusinessException("操作失败");
}
// 阅读量
if (type == 1){
//
@ -767,8 +770,6 @@ public class CaseExchangeService {
// 用户
statsCaseExchangeUserDao.dec(statsCaseExchangeUser.getUserId(),"exchange_read_num",num);
}
// 收藏量

View File

@ -75,7 +75,7 @@ public class UserCaseReadService {
// 视频
if (request.getType() == 2){
// 新增统计字段
boolean r = caseClinicalVideoService.IncClinicalVideoStats(request.getId(),1);
boolean r = caseClinicalVideoService.IncClinicalVideoStats(request.getId(),1,1);
if (!r){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;

View File

@ -2,29 +2,36 @@ package com.example.caseData.service;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.caseData.dao.BasicHospitalDao;
import com.example.caseData.dao.CaseClinicalDoctorDao;
import com.example.caseData.dao.CaseClinicalRecordScoreDao;
import com.example.caseData.dao.UserDao;
import com.example.caseData.dto.publicDto.LoginDto;
import com.example.caseData.exception.BusinessException;
import com.example.caseData.extend.app.Hospital.GetHospitalByUuidResponse;
import com.example.caseData.extend.app.Hospital.Hospital;
import com.example.caseData.extend.app.Score.Score;
import com.example.caseData.extend.app.UserInfo.GetUserInfoResponse;
import com.example.caseData.extend.app.UserInfo.UserInfo;
import com.example.caseData.model.BasicHospitalModel;
import com.example.caseData.model.CaseClinicalDoctorModel;
import com.example.caseData.model.UserModel;
import com.example.caseData.model.*;
import com.example.caseData.request.UserRequest.ReportUserScoreRequest;
import com.example.caseData.utils.JwtUtil;
import com.example.caseData.utils.Replace;
import com.example.caseData.utils.StringToInt;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import static com.baomidou.mybatisplus.extension.toolkit.Db.save;
@Slf4j
@Service
public class UserService {
@Resource
@ -39,12 +46,18 @@ public class UserService {
@Resource
private CaseClinicalDoctorDao caseClinicalDoctorDao;
@Resource
private CaseClinicalRecordScoreDao caseClinicalRecordScoreDao;
@Resource
private Hospital hospital;
@Resource
private JwtUtil jwtUtil;
@Resource
private Score score;
/**
* 用户登陆-手机号
* @return UserModel
@ -268,5 +281,40 @@ public class UserService {
return caseClinicalDoctor;
}
// 发放积分
public boolean ReportUserScore(Integer type,String userId) throws BusinessException{
// 获取积分发放记录
// 获取今天的日期并设置时间为 00:00:00
LocalDateTime startOfToday = LocalDate.now().atStartOfDay(); // 例如2025-07-30 00:00:00
QueryWrapper<CaseClinicalRecordScoreModel> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", userId)
.ge("created_at", startOfToday) // created_at >= 今天 00:00:00
.orderByDesc("created_at"); // 最新的在前
List<CaseClinicalRecordScoreModel> caseClinicalRecordScores = caseClinicalRecordScoreDao.selectList(queryWrapper);
if (caseClinicalRecordScores.size() > 3){
return true;
}
// 获取用户数据
UserModel user = userDao.selectById(userId);
if (user == null){
throw new BusinessException("积分");
}
// 发放积分
score.ReportUserScore(user.getUserIden(),5,"病例库-病例互动");
// 添加打赏记录
CaseClinicalRecordScoreModel data = new CaseClinicalRecordScoreModel();
data.setUserId(Long.valueOf(userId));
data.setScore(5);
data.setUserName(user.getUserName());
data.setNodeName("病例库-病例互动");
data.setType(type);
data.setScoreType(5);
caseClinicalRecordScoreDao.insert(data);
return true;
}
}

View File

@ -172,4 +172,13 @@
AND ca.article_status = 1
AND ca.delete_status = 0
</select>
<select id="selectLastArticlePushDateByLabelId" resultType="java.time.LocalDateTime">
SELECT MAX(ca.push_date) AS last_push_date
FROM case_clinical_article ca
INNER JOIN case_clinical_article_label cd ON caa.article_id = cd.article_id
WHERE cd.app_iden = #{labelIden}
AND ca.article_status = 1
AND ca.delete_status = 0
</select>
</mapper>

View File

@ -109,4 +109,32 @@
AND l.app_iden = #{labelIden}
</if>
</select>
<select id="selectLastVideoPushDateByHospitalId" resultType="java.time.LocalDateTime">
SELECT MAX(ca.push_date) AS last_push_date
FROM case_clinical_video ca
INNER JOIN case_clinical_video_author caa ON ca.video_id = caa.video_id
INNER JOIN case_clinical_doctor cd ON caa.doctor_id = cd.doctor_id
WHERE cd.hospital_id = #{hospitalId}
AND ca.video_status = 1
AND ca.delete_status = 0
</select>
<select id="selectLastVideoPushDateByDoctorId" resultType="java.time.LocalDateTime">
SELECT MAX(ca.push_date) AS last_push_date
FROM case_clinical_video ca
INNER JOIN case_clinical_video_author caa ON ca.video_id = caa.video_id
WHERE caa.doctor_id = #{doctorId}
AND ca.video_status = 1
AND ca.delete_status = 0
</select>
<select id="selectLastVideoPushDateByLabelId" resultType="java.time.LocalDateTime">
SELECT MAX(ca.push_date) AS last_push_date
FROM case_clinical_video ca
INNER JOIN case_clinical_video_label cd ON ca.video_id = cd.video_id
WHERE cd.app_iden = #{labelIden}
AND ca.video_status = 1
AND ca.delete_status = 0
</select>
</mapper>