图文问诊和聊天记录代码优化

This commit is contained in:
HaoWang 2023-09-26 14:52:41 +08:00
parent 51808f6aa0
commit b072fb0d05
16 changed files with 639 additions and 172 deletions

View File

@ -68,6 +68,10 @@ xinelu:
person-certificate-check-url: /personCertificateCheckUrl
# 护理站二维码存放地址
station-wechat-code-url: /stationWechatCodeUrl
#问诊文件地址
consultation-file-url: /consultationFileUrl
#聊天图片地址
chat-record-file-url: /chatRecordFileUrl
# 开发环境配置
server:

View File

@ -207,6 +207,32 @@ public class XinELuConfig {
*/
private String stationWechatCodeUrl;
/**
* 问诊文件地址
*/
private String consultationFileUrl;
/**
* 聊天图片地址
*/
private String chatRecordFileUrl;
public String getConsultationFileUrl() {
return consultationFileUrl;
}
public void setConsultationFileUrl(String consultationFileUrl) {
this.consultationFileUrl = consultationFileUrl;
}
public String getChatRecordFileUrl() {
return chatRecordFileUrl;
}
public void setChatRecordFileUrl(String chatRecordFileUrl) {
this.chatRecordFileUrl = chatRecordFileUrl;
}
public String getStationWechatCodeUrl() {
return stationWechatCodeUrl;
}
@ -550,4 +576,4 @@ public class XinELuConfig {
public void setItemDirectoryUrl(String itemDirectoryUrl) {
this.itemDirectoryUrl = itemDirectoryUrl;
}
}
}

View File

@ -0,0 +1,81 @@
package com.xinelu.applet.controller.chatrecord;
import com.xinelu.applet.dto.chatrecord.ChatRecordDTO;
import com.xinelu.applet.service.chatRecord.IChatRecordService;
import com.xinelu.common.annotation.Log;
import com.xinelu.common.constant.Constants;
import com.xinelu.common.core.controller.BaseController;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.enums.BusinessType;
import com.xinelu.common.socket.WebSocketUtils;
import com.xinelu.manage.domain.chatRecord.ChatRecord;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Objects;
/**
* 图文咨询-聊天记录表
*
* @author wanghao
* @create 2023/9/26 0026
*/
@RestController
@RequestMapping("/nurseApplet/chatRecord")
public class ChatRecordController extends BaseController {
@Autowired
private IChatRecordService chatRecordService;
/**
* 查询聊天记录
*/
@GetMapping("/getChatRecord")
public AjaxResult getChatRecord(ChatRecord chatRecord) {
return AjaxResult.success(chatRecordService.selectChatRecordList(chatRecord));
}
/**
* 修改已读状态
*/
@Log(title = "图文咨询-聊天记录", businessType = BusinessType.UPDATE)
@PutMapping(value = "updateReadStatus")
public AjaxResult updateReadStatus(@RequestBody ChatRecord chatRecord) {
return toAjax(chatRecordService.updateChatRecord(chatRecord));
}
@ApiOperation(value = "发送即时消息", notes = "向接收方发送即时消息")
@PostMapping("/sendMessage")
@Transactional
public AjaxResult sendMessage(@RequestBody ChatRecordDTO chatRecordDTO) {
if (chatRecordService.insertChatRecord(chatRecordDTO) > 0) {
// 判断接收人是否在线
if (WebSocketUtils.clients.get(chatRecordDTO.getRecipientId().toString()) == null) {
return AjaxResult.success();
} else {
return chatRecordService.sendMessage(chatRecordDTO) ? AjaxResult.success() : AjaxResult.error();
}
} else {
return AjaxResult.success();
}
}
/**
* 问诊聊天上传文件接口
*/
@PostMapping("/uploadChatRecordFile")
public AjaxResult uploadChatRecordFile(@RequestParam("file") MultipartFile multipartFile, @RequestParam(value = "consultationId") Long consultationId) throws Exception {
if (Objects.isNull(multipartFile) || StringUtils.isBlank(multipartFile.getOriginalFilename())) {
return AjaxResult.error("当前文件不存在,无法上传!");
}
if (multipartFile.getOriginalFilename().contains(Constants.EMPTY)) {
return AjaxResult.error("当前文件名含有空格,请先去除空格在上传!");
}
return chatRecordService.uploadChatRecordFile(multipartFile, consultationId);
}
}

View File

@ -1,22 +1,24 @@
package com.xinelu.manage.controller.consultationInfo;
package com.xinelu.applet.controller.consultationInfo;
import com.xinelu.applet.dto.consultationInfo.ConsultationInfoDTO;
import com.xinelu.applet.service.consultationInfo.IConsultationInfoService;
import com.xinelu.common.annotation.Log;
import com.xinelu.common.constant.Constants;
import com.xinelu.common.core.controller.BaseController;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.core.page.TableDataInfo;
import com.xinelu.common.custominterface.Insert;
import com.xinelu.common.enums.BusinessType;
import com.xinelu.common.socket.WebSocketUtils;
import com.xinelu.manage.domain.chatRecord.ChatRecord;
import com.xinelu.manage.domain.consultationInfo.ConsultationInfo;
import com.xinelu.manage.service.chatRecord.IChatRecordService;
import com.xinelu.manage.service.consultationInfo.IConsultationInfoService;
import com.xinelu.manage.vo.consultationInfo.ConsultationInfoVO;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Objects;
/**
* 在线问诊-问诊信息Controller
@ -25,22 +27,20 @@ import java.util.List;
* @date 2023-09-25
*/
@RestController
@RequestMapping("/system/consultationInfo")
@RequestMapping("/nurseApplet/consultationInfo")
public class ConsultationInfoController extends BaseController {
@Autowired
private IConsultationInfoService consultationInfoService;
@Autowired
private IChatRecordService chatRecordService;
/**
* 查询在线问诊-问诊信息列表
*/
//@PreAuthorize("@ss.hasPermi('system:info:list')")
@GetMapping("/list")
public TableDataInfo list(ConsultationInfo consultationInfo) {
public TableDataInfo list(ConsultationInfoDTO consultationInfoDTO) {
startPage();
List<ConsultationInfoVO> list = consultationInfoService.selectConsultationInfoList(consultationInfo);
List<ConsultationInfoVO> list = consultationInfoService.selectConsultationInfoList(consultationInfoDTO);
return getDataTable(list);
}
@ -60,8 +60,8 @@ public class ConsultationInfoController extends BaseController {
// @PreAuthorize("@ss.hasPermi('system:info:add')")
@Log(title = "在线问诊-问诊信息", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ConsultationInfo consultationInfo) {
return toAjax(consultationInfoService.insertConsultationInfo(consultationInfo));
public AjaxResult add(@Validated(Insert.class) @RequestBody ConsultationInfoDTO consultationInfoDTO) {
return toAjax(consultationInfoService.insertConsultationInfo(consultationInfoDTO));
}
/**
@ -74,37 +74,19 @@ public class ConsultationInfoController extends BaseController {
return toAjax(consultationInfoService.updateConsultationInfo(consultationInfo));
}
/**
* 查询聊天记录
*/
@GetMapping("/getChatRecord")
public AjaxResult getChatRecord(ChatRecord chatRecord) {
return AjaxResult.success(chatRecordService.selectChatRecordList(chatRecord));
}
/**
* 修改已读状态
* 问诊资料上传接口
*/
@Log(title = "图文咨询-聊天记录", businessType = BusinessType.UPDATE)
@PutMapping(value = "updateReadStatus")
public AjaxResult updateReadStatus(@RequestBody ChatRecord chatRecord) {
return toAjax(chatRecordService.updateChatRecord(chatRecord));
}
@ApiOperation(value = "发送即时消息", notes = "向接收方发送即时消息")
@PostMapping("/sendMessage")
@Transactional
public AjaxResult sendMessage(@RequestBody ChatRecord chatRecord) {
if (chatRecordService.insertChatRecord(chatRecord) > 0) {
// 判断接收人是否在线
if (WebSocketUtils.clients.get(chatRecord.getRecipientId().toString()) == null) {
return AjaxResult.success();
} else {
return chatRecordService.sendMessage(chatRecord) ? AjaxResult.success() : AjaxResult.error();
}
} else {
return AjaxResult.success();
@PostMapping("/uploadConsultationFile")
public AjaxResult uploadConsultationFile(@RequestParam("file") MultipartFile multipartFile) throws Exception {
if (Objects.isNull(multipartFile) || StringUtils.isBlank(multipartFile.getOriginalFilename())) {
return AjaxResult.error("当前文件不存在,无法上传!");
}
if (multipartFile.getOriginalFilename().contains(Constants.EMPTY)) {
return AjaxResult.error("当前文件名含有空格,请先去除空格在上传!");
}
return consultationInfoService.uploadConsultationFile(multipartFile);
}
}

View File

@ -0,0 +1,73 @@
package com.xinelu.applet.dto.chatrecord;
import com.xinelu.common.core.domain.BaseEntity;
import com.xinelu.common.custominterface.Insert;
import lombok.Data;
import net.sf.jsqlparser.statement.update.Update;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* 图文咨询-聊天记录对象 chat_record
*
* @author xinelu
* @date 2023-09-25
*/
@Data
public class ChatRecordDTO extends BaseEntity implements Serializable {
private static final long serialVersionUID = -3911806583514536587L;
/**
* 聊天记录业务主键(问诊表id)
*/
@NotNull(message = "聊天记录业务主键不能为空", groups = {Insert.class})
private Long consultationId;
/**
* 发送人
*/
@NotNull(message = "发送人信息不能为空", groups = {Insert.class})
private Long senderId;
/**
* 发送人姓名
*/
private String senderName;
/**
* 发送时间时间格式yyyy-MM-dd HH:mm:ss
*/
private Date sendTime;
/**
* 接收人
*/
@NotNull(message = "接收人信息不能为空", groups = {Insert.class})
private Long recipientId;
/**
* 接收人姓名
*/
private String recipientName;
/**
* 消息类型(0其他 1文字2图片 3表情 4视频 5文件 6链接)
*/
@NotNull(message = "消息类型不能为空", groups = {Insert.class})
private String messageType;
/**
* 消息内容图片内容时内容为图片路径
*/
@NotNull(message = "消息内容不能为空", groups = {Insert.class})
@Length(max = 400, message = "消息内容不能超过18位", groups = {Insert.class, Update.class})
private String content;
}

View File

@ -0,0 +1,136 @@
package com.xinelu.applet.dto.consultationInfo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.core.domain.BaseEntity;
import com.xinelu.common.custominterface.Insert;
import lombok.Data;
import net.sf.jsqlparser.statement.update.Update;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalTime;
import java.util.Date;
import java.util.List;
/**
* 在线问诊-问诊信息图文和视频问诊基本信息对象 consultation_info
*
* @author xinelu
* @date 2023-09-25
*/
@Data
public class ConsultationInfoDTO extends BaseEntity implements Serializable {
private static final long serialVersionUID = 84160236235012933L;
/**
* id
*/
private Long id;
/**
* 患者id
*/
@NotNull(message = "患者信息不能为空", groups = {Insert.class})
private Long patientId;
/**
* 患者名称
*/
private String patientName;
/**
* 患者身份证号
*/
@NotNull(message = "患者身份证号不能为空", groups = {Insert.class, Update.class})
@Length(max = 18, message = "身份证号不能超过18位", groups = {Insert.class, Update.class})
private String cardNo;
/**
* 患者联系方式
*/
@NotNull(message = "患者联系方式不能为空", groups = {Insert.class, Update.class})
@Length(max = 11, message = "联系方式不能超过11位", groups = {Insert.class, Update.class})
private String phone;
/**
* 现住址所在地区
*/
@NotNull(message = "患者信息不能为空", groups = {Insert.class, Update.class})
@Length(max = 100, message = "现住址所在地区不能超过100位", groups = {Insert.class, Update.class})
private String address;
/**
* 医生id(签约医生/专家)
*/
@NotNull(message = "医生信息不能为空", groups = {Insert.class, Update.class})
private String doctorId;
/**
* 医生名称
*/
private String doctorName;
/**
* 问诊类型图文问诊IMAGE_TEXT_CONSULTATION视频问诊VIDEO_CONSULTATION
*/
@NotNull(message = "问诊类型不能为空", groups = {Insert.class, Update.class})
private String consultationType;
/**
* 预约日期(视频问诊预约)时间格式yyyy-MM-dd
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date appointmentDate;
/**
* 预约开始时间点(视频问诊预约)时间格式HH:mm
*/
@JsonFormat(pattern = "HH:mm")
private LocalTime appointmentStartTime;
/**
* 预约结束时间点(视频问诊预约)时间格式HH:mm
*/
@JsonFormat(pattern = "HH:mm")
private LocalTime appointmentEndTime;
/**
* 视频问诊地址
*/
private String videoUrl;
/**
* 问题简述
*/
@NotNull(message = "问题简述不能为空", groups = {Insert.class, Update.class})
@Length(max = 5, message = "问题简述不能超过5位", groups = {Insert.class, Update.class})
private String problemDescription;
/**
* 患者个体情况说明
*/
@NotNull(message = "患者个体情况说明不能为空", groups = {Insert.class, Update.class})
@Length(max = 100, message = "患者个体情况说明不能超过100位", groups = {Insert.class, Update.class})
private String situationDescription;
/**
* 问题描述
*/
@NotNull(message = "问题描述不能为空", groups = {Insert.class, Update.class})
@Length(max = 500, message = "问题描述不能超过500位", groups = {Insert.class, Update.class})
private String problemStatement;
/**
* 病历
*/
@NotNull(message = "病历不能为空", groups = {Insert.class, Update.class})
@Length(max = 100, message = "病历不能超过100位", groups = {Insert.class, Update.class})
private String medicalRecord;
/**
* 问诊资料文件
*/
private List<String> fileUrls;
}

View File

@ -1,4 +1,4 @@
package com.xinelu.manage.mapper.chatRecord;
package com.xinelu.applet.mapper.chatrecord;
import com.xinelu.manage.domain.chatRecord.ChatRecord;

View File

@ -1,7 +1,9 @@
package com.xinelu.manage.mapper.consultationInfo;
package com.xinelu.applet.mapper.consultationInfo;
import com.xinelu.applet.dto.consultationInfo.ConsultationInfoDTO;
import com.xinelu.manage.domain.consultationInfo.ConsultationInfo;
import com.xinelu.manage.vo.consultationInfo.ConsultationInfoVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -19,15 +21,23 @@ public interface ConsultationInfoMapper {
* @param id 在线问诊-问诊信息图文和视频问诊基本信息主键
* @return 在线问诊-问诊信息图文和视频问诊基本信息
*/
public ConsultationInfo selectConsultationInfoById(Long id);
public ConsultationInfoDTO selectConsultationInfoById(Long id);
/**
* 获取问诊信息绑定文件路径
*
* @param id 在线问诊-问诊信息图文和视频问诊基本信息主键
* @return 文件路径
*/
public List<String> getConsultationFiles(Long id);
/**
* 查询在线问诊-问诊信息图文和视频问诊基本信息列表
*
* @param consultationInfo 在线问诊-问诊信息图文和视频问诊基本信息
* @param consultationInfoDTO 在线问诊-问诊信息图文和视频问诊基本信息
* @return 在线问诊-问诊信息图文和视频问诊基本信息集合
*/
public List<ConsultationInfoVO> selectConsultationInfoList(ConsultationInfo consultationInfo);
public List<ConsultationInfoVO> selectConsultationInfoList(ConsultationInfoDTO consultationInfoDTO);
/**
* 新增在线问诊-问诊信息图文和视频问诊基本信息
@ -37,6 +47,14 @@ public interface ConsultationInfoMapper {
*/
public int insertConsultationInfo(ConsultationInfo consultationInfo);
/**
* 新增问诊信息附件表
*
* @param consultationId ,fileUrls
* @return 结果
*/
public int insertConsultationFile(@Param("consultationId") Long consultationId, @Param("fileUrls") List<String> fileUrls);
/**
* 修改在线问诊-问诊信息图文和视频问诊基本信息
*

View File

@ -1,7 +1,12 @@
package com.xinelu.manage.service.chatRecord;
package com.xinelu.applet.service.chatRecord;
import com.xinelu.applet.dto.chatrecord.ChatRecordDTO;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.exception.file.InvalidExtensionException;
import com.xinelu.manage.domain.chatRecord.ChatRecord;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
@ -31,12 +36,12 @@ public interface IChatRecordService {
/**
* 新增图文咨询-聊天记录
*
* @param chatRecord 图文咨询-聊天记录
* @param chatRecordDTO 图文咨询-聊天记录
* @return 结果
*/
public int insertChatRecord(ChatRecord chatRecord);
public int insertChatRecord(ChatRecordDTO chatRecordDTO);
Boolean sendMessage(ChatRecord chatRecord);
Boolean sendMessage(ChatRecordDTO chatRecordDTO);
/**
* 修改图文咨询-聊天记录
@ -61,4 +66,13 @@ public interface IChatRecordService {
* @return 结果
*/
public int deleteChatRecordById(Long id);
/**
* 问诊聊天-文件上传
*
* @param multipartFile,consultationId 文件,问诊id
* @return 结果
*/
public AjaxResult uploadChatRecordFile(MultipartFile multipartFile, Long consultationId) throws IOException, InvalidExtensionException;
}

View File

@ -1,16 +1,26 @@
package com.xinelu.manage.service.chatRecord.impl;
package com.xinelu.applet.service.chatRecord.impl;
import com.xinelu.applet.dto.chatrecord.ChatRecordDTO;
import com.xinelu.applet.mapper.chatrecord.ChatRecordMapper;
import com.xinelu.applet.service.chatRecord.IChatRecordService;
import com.xinelu.common.config.XinELuConfig;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.core.dto.MessageTemplate;
import com.xinelu.common.enums.MessageContentType;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.exception.file.InvalidExtensionException;
import com.xinelu.common.socket.WebSocketUtils;
import com.xinelu.common.utils.DateUtils;
import com.xinelu.common.utils.bean.BeanUtils;
import com.xinelu.common.utils.file.FileUploadUtils;
import com.xinelu.common.utils.file.MimeTypeUtils;
import com.xinelu.manage.domain.chatRecord.ChatRecord;
import com.xinelu.manage.mapper.chatRecord.ChatRecordMapper;
import com.xinelu.manage.service.chatRecord.IChatRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
/**
@ -23,6 +33,8 @@ import java.util.List;
public class ChatRecordServiceImpl implements IChatRecordService {
@Resource
private ChatRecordMapper chatRecordMapper;
@Resource
private XinELuConfig xinYiLuConfig;
/**
* 查询图文咨询-聊天记录
@ -53,13 +65,15 @@ public class ChatRecordServiceImpl implements IChatRecordService {
* @return 结果
*/
@Override
public int insertChatRecord(ChatRecord chatRecord) {
public int insertChatRecord(ChatRecordDTO chatRecord) {
chatRecord.setCreateTime(DateUtils.getNowDate());
return chatRecordMapper.insertChatRecord(chatRecord);
ChatRecord record = new ChatRecord();
BeanUtils.copyBeanProp(record, chatRecord);
return chatRecordMapper.insertChatRecord(record);
}
@Override
public Boolean sendMessage(ChatRecord chatRecord) {
public Boolean sendMessage(ChatRecordDTO chatRecord) {
// 构建消息结构
MessageTemplate msg = new MessageTemplate();
msg.setMessage(chatRecord.getContent());
@ -105,4 +119,28 @@ public class ChatRecordServiceImpl implements IChatRecordService {
public int deleteChatRecordById(Long id) {
return chatRecordMapper.deleteChatRecordById(id);
}
/**
* 聊天记录-文件上传
*
* @param multipartFile 文件
* @return 结果
*/
@Override
public AjaxResult uploadChatRecordFile(MultipartFile multipartFile, Long consultationId) throws IOException, InvalidExtensionException {
//获取不同的文件路径
String uploadPathUrl = XinELuConfig.getProfile() + xinYiLuConfig.getChatRecordFileUrl() + "/" + consultationId;
if (StringUtils.isBlank(uploadPathUrl)) {
return AjaxResult.success();
}
//上传
String pictureName = FileUploadUtils.uploadNurseStationPath(uploadPathUrl, multipartFile, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
if (StringUtils.isBlank(pictureName)) {
throw new ServiceException("文件上传失败,请联系管理员!");
}
AjaxResult ajax = AjaxResult.success("上传成功!");
ajax.put("fileUrl", pictureName);
return ajax;
}
}

View File

@ -1,8 +1,13 @@
package com.xinelu.manage.service.consultationInfo;
package com.xinelu.applet.service.consultationInfo;
import com.xinelu.applet.dto.consultationInfo.ConsultationInfoDTO;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.exception.file.InvalidExtensionException;
import com.xinelu.manage.domain.consultationInfo.ConsultationInfo;
import com.xinelu.manage.vo.consultationInfo.ConsultationInfoVO;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
@ -19,23 +24,23 @@ public interface IConsultationInfoService {
* @param id 在线问诊-问诊信息图文和视频问诊基本信息主键
* @return 在线问诊-问诊信息图文和视频问诊基本信息
*/
public ConsultationInfo selectConsultationInfoById(Long id);
public ConsultationInfoDTO selectConsultationInfoById(Long id);
/**
* 查询在线问诊-问诊信息图文和视频问诊基本信息列表
*
* @param consultationInfo 在线问诊-问诊信息图文和视频问诊基本信息
* @param consultationInfoDTO 在线问诊-问诊信息图文和视频问诊基本信息
* @return 在线问诊-问诊信息图文和视频问诊基本信息集合
*/
public List<ConsultationInfoVO> selectConsultationInfoList(ConsultationInfo consultationInfo);
public List<ConsultationInfoVO> selectConsultationInfoList(ConsultationInfoDTO consultationInfoDTO);
/**
* 新增在线问诊-问诊信息图文和视频问诊基本信息
*
* @param consultationInfo 在线问诊-问诊信息图文和视频问诊基本信息
* @param consultationInfoDTO 在线问诊-问诊信息图文和视频问诊基本信息
* @return 结果
*/
public int insertConsultationInfo(ConsultationInfo consultationInfo);
public int insertConsultationInfo(ConsultationInfoDTO consultationInfoDTO);
/**
* 修改在线问诊-问诊信息图文和视频问诊基本信息
@ -60,4 +65,13 @@ public interface IConsultationInfoService {
* @return 结果
*/
public int deleteConsultationInfoById(Long id);
/**
* 图文和视频问诊基本信息-文件上传
*
* @param multipartFile 文件
* @return 结果
*/
public AjaxResult uploadConsultationFile(MultipartFile multipartFile) throws IOException, InvalidExtensionException;
}

View File

@ -0,0 +1,141 @@
package com.xinelu.applet.service.consultationInfo.impl;
import com.xinelu.applet.dto.consultationInfo.ConsultationInfoDTO;
import com.xinelu.applet.mapper.consultationInfo.ConsultationInfoMapper;
import com.xinelu.applet.service.consultationInfo.IConsultationInfoService;
import com.xinelu.common.config.XinELuConfig;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.exception.file.InvalidExtensionException;
import com.xinelu.common.utils.DateUtils;
import com.xinelu.common.utils.bean.BeanUtils;
import com.xinelu.common.utils.file.FileUploadUtils;
import com.xinelu.common.utils.file.MimeTypeUtils;
import com.xinelu.manage.domain.consultationInfo.ConsultationInfo;
import com.xinelu.manage.vo.consultationInfo.ConsultationInfoVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
/**
* 在线问诊-问诊信息图文和视频问诊基本信息Service业务层处理
*
* @author xinelu
* @date 2023-09-25
*/
@Service
public class ConsultationInfoServiceImpl implements IConsultationInfoService {
@Resource
private ConsultationInfoMapper consultationInfoMapper;
@Resource
private XinELuConfig xinYiLuConfig;
/**
* 查询在线问诊-问诊信息图文和视频问诊基本信息
*
* @param id 在线问诊-问诊信息图文和视频问诊基本信息主键
* @return 在线问诊-问诊信息图文和视频问诊基本信息
*/
@Override
public ConsultationInfoDTO selectConsultationInfoById(Long id) {
ConsultationInfoDTO consultationInfoDTO = consultationInfoMapper.selectConsultationInfoById(id);
consultationInfoDTO.setFileUrls(consultationInfoMapper.getConsultationFiles(id));
return consultationInfoDTO;
}
/**
* 查询在线问诊-问诊信息图文和视频问诊基本信息列表
*
* @param consultationInfoDTO 在线问诊-问诊信息图文和视频问诊基本信息
* @return 在线问诊-问诊信息图文和视频问诊基本信息
*/
@Override
public List<ConsultationInfoVO> selectConsultationInfoList(ConsultationInfoDTO consultationInfoDTO) {
return consultationInfoMapper.selectConsultationInfoList(consultationInfoDTO);
}
/**
* 新增在线问诊-问诊信息图文和视频问诊基本信息
*
* @param consultationInfoDTO 在线问诊-问诊信息图文和视频问诊基本信息
* @return 结果
*/
@Override
public int insertConsultationInfo(ConsultationInfoDTO consultationInfoDTO) {
consultationInfoDTO.setCreateTime(DateUtils.getNowDate());
ConsultationInfo consultationInfo = new ConsultationInfo();
BeanUtils.copyBeanProp(consultationInfo, consultationInfoDTO);
int count = consultationInfoMapper.insertConsultationInfo(consultationInfo);
if (count > 0) {
if (CollectionUtils.isNotEmpty(consultationInfoDTO.getFileUrls())) {
consultationInfoMapper.insertConsultationFile(consultationInfo.getId(), consultationInfoDTO.getFileUrls());
}
}
return count;
}
/**
* 修改在线问诊-问诊信息图文和视频问诊基本信息
*
* @param consultationInfo 在线问诊-问诊信息图文和视频问诊基本信息
* @return 结果
*/
@Override
public int updateConsultationInfo(ConsultationInfo consultationInfo) {
consultationInfo.setUpdateTime(DateUtils.getNowDate());
return consultationInfoMapper.updateConsultationInfo(consultationInfo);
}
/**
* 批量删除在线问诊-问诊信息图文和视频问诊基本信息
*
* @param ids 需要删除的在线问诊-问诊信息图文和视频问诊基本信息主键
* @return 结果
*/
@Override
public int deleteConsultationInfoByIds(Long[] ids) {
return consultationInfoMapper.deleteConsultationInfoByIds(ids);
}
/**
* 删除在线问诊-问诊信息图文和视频问诊基本信息信息
*
* @param id 在线问诊-问诊信息图文和视频问诊基本信息主键
* @return 结果
*/
@Override
public int deleteConsultationInfoById(Long id) {
return consultationInfoMapper.deleteConsultationInfoById(id);
}
/**
* 图文和视频问诊基本信息-文件上传
*
* @param multipartFile 文件
* @return 结果
*/
@Override
public AjaxResult uploadConsultationFile(MultipartFile multipartFile) throws IOException, InvalidExtensionException {
//获取不同的文件路径
String uploadPathUrl = XinELuConfig.getProfile() + xinYiLuConfig.getConsultationFileUrl();
if (StringUtils.isBlank(uploadPathUrl)) {
return AjaxResult.success();
}
//上传
String pictureName = FileUploadUtils.uploadNurseStationPath(uploadPathUrl, multipartFile, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
if (StringUtils.isBlank(pictureName)) {
throw new ServiceException("文件上传失败,请联系管理员!");
}
AjaxResult ajax = AjaxResult.success("上传成功!");
ajax.put("fileUrl", pictureName);
return ajax;
}
}

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xinelu.manage.mapper.chatRecord.ChatRecordMapper">
<mapper namespace="com.xinelu.applet.mapper.chatrecord.ChatRecordMapper">
<resultMap type="ChatRecord" id="ChatRecordResult">
<result property="id" column="id"/>

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xinelu.manage.mapper.consultationInfo.ConsultationInfoMapper">
<mapper namespace="com.xinelu.applet.mapper.consultationInfo.ConsultationInfoMapper">
<resultMap type="ConsultationInfo" id="ConsultationInfoResult">
<result property="id" column="id"/>
@ -57,7 +57,7 @@
from consultation_info
</sql>
<select id="selectConsultationInfoList" parameterType="ConsultationInfo" resultType="com.xinelu.manage.vo.consultationInfo.ConsultationInfoVO">
<select id="selectConsultationInfoList" parameterType="com.xinelu.applet.dto.consultationInfo.ConsultationInfoDTO" resultType="com.xinelu.manage.vo.consultationInfo.ConsultationInfoVO">
SELECT
ci.id,
ci.patient_id,
@ -71,7 +71,7 @@
COUNT(cr.id) as messageCount
FROM
consultation_info ci
LEFT JOIN chat_record cr ON cr.consultation_id=ci.id AND read_status='0'
LEFT JOIN chat_record cr ON cr.consultation_id=ci.id AND read_status='0'
<if test="patientId != null ">
and sender_id= ci.doctor_id
</if>
@ -111,12 +111,38 @@
ORDER BY ci.create_time DESC
</select>
<select id="selectConsultationInfoById" parameterType="Long"
resultMap="ConsultationInfoResult">
<include refid="selectConsultationInfoVo"/>
<select id="selectConsultationInfoById" parameterType="Long" resultType="com.xinelu.applet.dto.consultationInfo.ConsultationInfoDTO">
select id,
patient_id,
patient_name,
card_no,
phone,
address,
doctor_id,
doctor_name,
consultation_type,
status,
appointment_date,
appointment_start_time,
appointment_end_time,
video_url,
problem_description,
situation_description,
problem_statement,
medical_record,
del_flag,
create_by,
create_time,
update_by,
update_time
from consultation_info
where id = #{id}
</select>
<select id="getConsultationFiles" parameterType="Long" resultType="string">
SELECT file_url FROM consultation_file WHERE del_flag='0' AND consultation_id=#{id}
</select>
<insert id="insertConsultationInfo" parameterType="ConsultationInfo">
insert into consultation_info
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -217,6 +243,13 @@
</trim>
</insert>
<insert id="insertConsultationFile">
insert into consultation_file(consultation_id, file_url) values
<foreach item="item" index="index" collection="fileUrls" separator=",">
(#{consultationId},#{item.fileUrl})
</foreach>
</insert>
<update id="updateConsultationInfo" parameterType="ConsultationInfo">
update consultation_info
<trim prefix="SET" suffixOverrides=",">

View File

@ -11,7 +11,8 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.io.Serializable;
import java.time.LocalTime;
import java.util.Date;
/**
@ -25,9 +26,9 @@ import java.util.Date;
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "在线问诊-问诊信息(图文和视频问诊基本信息)对象", description = "consultation_info")
public class ConsultationInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
public class ConsultationInfo extends BaseEntity implements Serializable {
private static final long serialVersionUID = -8367271791868621123L;
/**
* id
*/
@ -108,17 +109,15 @@ public class ConsultationInfo extends BaseEntity {
* 预约开始时间点(视频问诊预约)时间格式HH:mm
*/
@ApiModelProperty(value = "预约开始时间点(视频问诊预约)时间格式HH:mm")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "预约开始时间点(视频问诊预约)时间格式HH:mm", width = 30, dateFormat = "yyyy-MM-dd")
private Date appointmentStartTime;
@JsonFormat(pattern = "HH:mm")
private LocalTime appointmentStartTime;
/**
* 预约结束时间点(视频问诊预约)时间格式HH:mm
*/
@ApiModelProperty(value = "预约结束时间点(视频问诊预约)时间格式HH:mm")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "预约结束时间点(视频问诊预约)时间格式HH:mm", width = 30, dateFormat = "yyyy-MM-dd")
private Date appointmentEndTime;
@JsonFormat(pattern = "HH:mm")
private LocalTime appointmentEndTime;
/**
* 视频问诊地址

View File

@ -1,92 +0,0 @@
package com.xinelu.manage.service.consultationInfo.impl;
import com.xinelu.common.utils.DateUtils;
import com.xinelu.manage.domain.consultationInfo.ConsultationInfo;
import com.xinelu.manage.mapper.consultationInfo.ConsultationInfoMapper;
import com.xinelu.manage.service.consultationInfo.IConsultationInfoService;
import com.xinelu.manage.vo.consultationInfo.ConsultationInfoVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* 在线问诊-问诊信息图文和视频问诊基本信息Service业务层处理
*
* @author xinelu
* @date 2023-09-25
*/
@Service
public class ConsultationInfoServiceImpl implements IConsultationInfoService {
@Resource
private ConsultationInfoMapper consultationInfoMapper;
/**
* 查询在线问诊-问诊信息图文和视频问诊基本信息
*
* @param id 在线问诊-问诊信息图文和视频问诊基本信息主键
* @return 在线问诊-问诊信息图文和视频问诊基本信息
*/
@Override
public ConsultationInfo selectConsultationInfoById(Long id) {
return consultationInfoMapper.selectConsultationInfoById(id);
}
/**
* 查询在线问诊-问诊信息图文和视频问诊基本信息列表
*
* @param consultationInfo 在线问诊-问诊信息图文和视频问诊基本信息
* @return 在线问诊-问诊信息图文和视频问诊基本信息
*/
@Override
public List<ConsultationInfoVO> selectConsultationInfoList(ConsultationInfo consultationInfo) {
return consultationInfoMapper.selectConsultationInfoList(consultationInfo);
}
/**
* 新增在线问诊-问诊信息图文和视频问诊基本信息
*
* @param consultationInfo 在线问诊-问诊信息图文和视频问诊基本信息
* @return 结果
*/
@Override
public int insertConsultationInfo(ConsultationInfo consultationInfo) {
consultationInfo.setCreateTime(DateUtils.getNowDate());
return consultationInfoMapper.insertConsultationInfo(consultationInfo);
}
/**
* 修改在线问诊-问诊信息图文和视频问诊基本信息
*
* @param consultationInfo 在线问诊-问诊信息图文和视频问诊基本信息
* @return 结果
*/
@Override
public int updateConsultationInfo(ConsultationInfo consultationInfo) {
consultationInfo.setUpdateTime(DateUtils.getNowDate());
return consultationInfoMapper.updateConsultationInfo(consultationInfo);
}
/**
* 批量删除在线问诊-问诊信息图文和视频问诊基本信息
*
* @param ids 需要删除的在线问诊-问诊信息图文和视频问诊基本信息主键
* @return 结果
*/
@Override
public int deleteConsultationInfoByIds(Long[] ids) {
return consultationInfoMapper.deleteConsultationInfoByIds(ids);
}
/**
* 删除在线问诊-问诊信息图文和视频问诊基本信息信息
*
* @param id 在线问诊-问诊信息图文和视频问诊基本信息主键
* @return 结果
*/
@Override
public int deleteConsultationInfoById(Long id) {
return consultationInfoMapper.deleteConsultationInfoById(id);
}
}