新增问诊记录详情

This commit is contained in:
wucongxing 2023-10-07 13:09:13 +08:00
parent f8fe37b353
commit f9d38649f1
7 changed files with 319 additions and 1 deletions

View File

@ -168,3 +168,29 @@ func (r *OrderInquiry) GetOrderInquiryRecordPage(c *gin.Context) {
result["data"] = GetOrderInquiryPageResponses
responses.OkWithData(result, c)
}
// GetOrderInquiryRecord 问诊订单详情
func (r *OrderInquiry) GetOrderInquiryRecord(c *gin.Context) {
id := c.Param("order_inquiry_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
orderInquiryId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
// 业务处理
orderInquiryService := service.OrderInquiryService{}
getUserDoctorResponses, err := orderInquiryService.GetOrderInquiryRecord(orderInquiryId)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.OkWithData(getUserDoctorResponses, c)
}

72
api/dao/messageIm.go Normal file
View File

@ -0,0 +1,72 @@
package dao
import (
"gorm.io/gorm"
"gorm.io/gorm/clause"
"hospital-admin-api/api/model"
"hospital-admin-api/global"
)
type MessageImDao struct {
}
// GetMessageImById 获取Im消息数据-Im消息id
func (r *MessageImDao) GetMessageImById(MessageId int64) (m *model.MessageIm, err error) {
err = global.Db.First(&m, MessageId).Error
if err != nil {
return nil, err
}
return m, nil
}
func (r *MessageImDao) GetMessageImByOrderInquiryId(orderInquiryId int64) (m []*model.MessageIm, err error) {
err = global.Db.Where("order_inquiry_id = ?", orderInquiryId).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetMessageImPreloadById 获取Im消息数据-加载全部关联-Im消息id
func (r *MessageImDao) GetMessageImPreloadById(MessageId int64) (m *model.MessageIm, err error) {
err = global.Db.Preload(clause.Associations).First(&m, MessageId).Error
if err != nil {
return nil, err
}
return m, nil
}
// DeleteMessageIm 删除Im消息
func (r *MessageImDao) DeleteMessageIm(tx *gorm.DB, maps interface{}) error {
err := tx.Where(maps).Delete(&model.MessageIm{}).Error
if err != nil {
return err
}
return nil
}
// EditMessageIm 修改Im消息
func (r *MessageImDao) EditMessageIm(tx *gorm.DB, maps interface{}, data interface{}) error {
err := tx.Model(&model.MessageIm{}).Where(maps).Updates(data).Error
if err != nil {
return err
}
return nil
}
// GetMessageImList 获取Im消息列表
func (r *MessageImDao) GetMessageImList(maps interface{}) (m []*model.MessageIm, err error) {
err = global.Db.Where(maps).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// AddMessageIm 新增Im消息
func (r *MessageImDao) AddMessageIm(tx *gorm.DB, model *model.MessageIm) (*model.MessageIm, error) {
if err := tx.Create(model).Error; err != nil {
return nil, err
}
return model, nil
}

76
api/dto/MessageIm.go Normal file
View File

@ -0,0 +1,76 @@
package dto
import (
"fmt"
"hospital-admin-api/api/model"
)
type MessageImDto struct {
MessageId string `json:"message_id"` // 主键id
FromUserId string `json:"from_user_id"` // 发送方user_id
ToUserId string `json:"to_user_id"` // 接收方user_id;NOT NULL
MessageKey string `json:"message_key"` // 消息唯一标识(系统返回,撤回消息使用)
MessageSendTime string `json:"message_send_time"` // 消息发送时间戳
MessageSeq int `json:"message_seq"` // 消息序列号(单聊消息优先使用 MsgTime 进行排序,同一秒发送的消息则按 MsgSeq 排序MsgSeq 值越大消息越靠后)
MessageSendResult int `json:"message_send_result"` // 消息下发结果0:失败 1:成功)
SendErrorInfo string `json:"send_error_info"` // 消息下发失败原因
MessageType string `json:"message_type"` // 消息类型具体查看https://cloud.tencent.com/document/product/269/2720
IsSystem int `json:"is_system"` // 是否系统操作发送0:否 1:是)
OrderInquiryId string `json:"order_inquiry_id"` // 问诊id自定义字段
MessageContent string `json:"message_content"` // 消息内容json形式
MessageCustomContent string `json:"message_custom_content"` // 自定义消息内容json形式
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间
}
func GetMessageImDto(m *model.MessageIm) *MessageImDto {
return &MessageImDto{
MessageId: fmt.Sprintf("%d", m.MessageId),
FromUserId: m.FromUserId,
ToUserId: fmt.Sprintf("%d", m.ToUserId),
MessageKey: m.MessageKey,
MessageSendTime: m.MessageSendTime,
MessageSeq: m.MessageSeq,
MessageSendResult: m.MessageSendResult,
SendErrorInfo: m.SendErrorInfo,
MessageType: m.MessageType,
IsSystem: m.IsSystem,
OrderInquiryId: fmt.Sprintf("%d", m.OrderInquiryId),
MessageContent: m.MessageContent,
MessageCustomContent: m.MessageCustomContent,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
func GetMessageImListDto(m []*model.MessageIm) []*MessageImDto {
// 处理返回值
responses := make([]*MessageImDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &MessageImDto{
MessageId: fmt.Sprintf("%d", v.MessageId),
FromUserId: v.FromUserId,
ToUserId: fmt.Sprintf("%d", v.ToUserId),
MessageKey: v.MessageKey,
MessageSendTime: v.MessageSendTime,
MessageSeq: v.MessageSeq,
MessageSendResult: v.MessageSendResult,
SendErrorInfo: v.SendErrorInfo,
MessageType: v.MessageType,
IsSystem: v.IsSystem,
OrderInquiryId: fmt.Sprintf("%d", v.OrderInquiryId),
MessageContent: v.MessageContent,
MessageCustomContent: v.MessageCustomContent,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}

View File

@ -47,8 +47,10 @@ type OrderInquiryDto struct {
OrderInquiryRefund *OrderInquiryRefundDto `json:"order_inquiry_refund"` // 退款数据
OrderEvaluation *OrderEvaluationDto `json:"order_evaluation"` // 订单评价
UserDoctor *UserDoctorDto `json:"user_doctor"` // 医生数据
MessageIm []*MessageImDto `json:"message_im"` // 聊天记录
}
// GetOrderInquiryDto 问诊订单详情
func GetOrderInquiryDto(m *model.OrderInquiry) *OrderInquiryDto {
var doctorId string
if m.DoctorId != 0 {
@ -93,6 +95,7 @@ func GetOrderInquiryDto(m *model.OrderInquiry) *OrderInquiryDto {
}
}
// GetOrderInquiryListDto 问诊订单列表
func GetOrderInquiryListDto(m []*model.OrderInquiry) []*OrderInquiryDto {
// 处理返回值
responses := make([]*OrderInquiryDto, len(m))
@ -150,6 +153,7 @@ func GetOrderInquiryListDto(m []*model.OrderInquiry) []*OrderInquiryDto {
return responses
}
// GetOrderInquiryRecordListDto 问诊记录列表
func GetOrderInquiryRecordListDto(m []*model.OrderInquiry) []*OrderInquiryDto {
// 处理返回值
responses := make([]*OrderInquiryDto, len(m))
@ -199,6 +203,51 @@ func GetOrderInquiryRecordListDto(m []*model.OrderInquiry) []*OrderInquiryDto {
return responses
}
// GetOrderInquiryRecordDto 问诊记录详情
func GetOrderInquiryRecordDto(m *model.OrderInquiry) *OrderInquiryDto {
var doctorId string
if m.DoctorId != 0 {
doctorId = fmt.Sprintf("%v", m.DoctorId)
}
return &OrderInquiryDto{
OrderInquiryId: fmt.Sprintf("%d", m.OrderInquiryId),
UserId: fmt.Sprintf("%d", m.UserId),
DoctorId: doctorId,
PatientId: fmt.Sprintf("%d", m.PatientId),
FamilyId: fmt.Sprintf("%d", m.FamilyId),
InquiryType: m.InquiryType,
InquiryMode: m.InquiryMode,
InquiryStatus: m.InquiryStatus,
IsDelete: m.IsDelete,
InquiryRefundStatus: m.InquiryRefundStatus,
InquiryPayChannel: m.InquiryPayChannel,
InquiryPayStatus: m.InquiryPayStatus,
InquiryNo: m.InquiryNo,
EscrowTradeNo: m.EscrowTradeNo,
AmountTotal: m.AmountTotal,
CouponAmountTotal: m.CouponAmountTotal,
PaymentAmountTotal: m.PaymentAmountTotal,
PayTime: m.PayTime,
ReceptionTime: m.ReceptionTime,
CompleteTime: m.CompleteTime,
FinishTime: m.FinishTime,
StatisticsStatus: m.StatisticsStatus,
StatisticsTime: m.StatisticsTime,
IsWithdrawal: m.IsWithdrawal,
WithdrawalTime: m.WithdrawalTime,
CancelTime: m.CancelTime,
CancelReason: m.CancelReason,
CancelRemarks: m.CancelRemarks,
PatientName: m.PatientName,
PatientNameMask: m.PatientNameMask,
PatientSex: m.PatientSex,
PatientAge: m.PatientAge,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
// LoadDoctorName 加载医生名称
func (r *OrderInquiryDto) LoadDoctorName(m *model.UserDoctor) *OrderInquiryDto {
if m != nil {
@ -246,3 +295,13 @@ func (r *OrderInquiryDto) LoadOrderEvaluation(m *model.OrderEvaluation) *OrderIn
}
return r
}
// LoadMessageIm 加载聊天记录
func (r *OrderInquiryDto) LoadMessageIm(m []*model.MessageIm) *OrderInquiryDto {
if len(m) > 0 {
d := GetMessageImListDto(m)
r.MessageIm = d
}
return r
}

43
api/model/messageIm.go Normal file
View File

@ -0,0 +1,43 @@
package model
import (
"gorm.io/gorm"
"hospital-admin-api/global"
"time"
)
// MessageIm IM消息表
type MessageIm struct {
MessageId int64 `gorm:"column:message_id;type:bigint(19);primary_key;comment:主键id" json:"message_id"`
FromUserId string `gorm:"column:from_user_id;type:varchar(30);comment:发送方user_id" json:"from_user_id"`
ToUserId int64 `gorm:"column:to_user_id;type:bigint(20);comment:接收方user_id;NOT NULL" json:"to_user_id"`
MessageKey string `gorm:"column:message_key;type:varchar(255);comment:消息唯一标识(系统返回,撤回消息使用)" json:"message_key"`
MessageSendTime string `gorm:"column:message_send_time;type:varchar(11);comment:消息发送时间戳" json:"message_send_time"`
MessageSeq int `gorm:"column:message_seq;type:int(11);comment:消息序列号(单聊消息优先使用 MsgTime 进行排序,同一秒发送的消息则按 MsgSeq 排序MsgSeq 值越大消息越靠后)" json:"message_seq"`
MessageSendResult int `gorm:"column:message_send_result;type:tinyint(4);default:0;comment:消息下发结果0:失败 1:成功)" json:"message_send_result"`
SendErrorInfo string `gorm:"column:send_error_info;type:varchar(255);comment:消息下发失败原因" json:"send_error_info"`
MessageType string `gorm:"column:message_type;type:varchar(50);comment:消息类型具体查看https://cloud.tencent.com/document/product/269/2720" json:"message_type"`
IsSystem int `gorm:"column:is_system;type:tinyint(4);default:0;comment:是否系统操作发送0:否 1:是)" json:"is_system"`
OrderInquiryId int64 `gorm:"column:order_inquiry_id;type:bigint(19);comment:问诊id自定义字段" json:"order_inquiry_id"`
MessageContent string `gorm:"column:message_content;type:text;comment:消息内容json形式" json:"message_content"`
MessageCustomContent string `gorm:"column:message_custom_content;type:text;comment:自定义消息内容json形式" json:"message_custom_content"`
Model
}
func (m *MessageIm) TableName() string {
return "gdxz_message_im"
}
func (m *MessageIm) BeforeCreate(tx *gorm.DB) error {
if m.MessageId == 0 {
m.MessageId = global.Snowflake.Generate().Int64()
}
m.CreatedAt = LocalTime(time.Now())
tx.Statement.SetColumn("CreatedAt", m.CreatedAt)
m.UpdatedAt = LocalTime(time.Now())
tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt)
return nil
}

View File

@ -406,7 +406,7 @@ func privateRouter(r *gin.Engine, api controller.Api) {
inquiryRecordGroup.GET("", api.OrderInquiry.GetOrderInquiryRecordPage)
// 问诊记录详情
inquiryRecordGroup.GET("/:order_inquiry_id", api.OrderInquiry.GetOrderInquiry)
inquiryRecordGroup.GET("/:order_inquiry_id", api.OrderInquiry.GetOrderInquiryRecord)
}
}

View File

@ -322,3 +322,45 @@ func (r *OrderInquiryService) GetOrderInquiry(orderInquiryId int64) (g *dto.Orde
g.LoadOrderEvaluation(orderEvaluation)
return g, nil
}
// GetOrderInquiryRecord 问诊记录详情
func (r *OrderInquiryService) GetOrderInquiryRecord(orderInquiryId int64) (g *dto.OrderInquiryDto, err error) {
// 获取问诊订单数据
orderInquiryDao := dao.OrderInquiryDao{}
orderInquiry, err := orderInquiryDao.GetOrderInquiryPreloadById(orderInquiryId)
if err != nil || orderInquiry == nil {
return nil, errors.New(err.Error())
}
// 获取问诊病例
orderInquiryCaseDao := dao.OrderInquiryCaseDao{}
orderInquiryCase, err := orderInquiryCaseDao.GetOrderInquiryCaseByOrderInquiryId(orderInquiryId)
if orderInquiryCase == nil {
return nil, errors.New("数据错误,无问诊病例")
}
// 获取医生数据
userDoctorService := UserDoctorService{}
userDoctor, err := userDoctorService.GetUserDoctorById(orderInquiry.DoctorId)
if err != nil {
return nil, errors.New(err.Error())
}
// 获取聊天记录
messageImDao := dao.MessageImDao{}
messageIms, err := messageImDao.GetMessageImByOrderInquiryId(orderInquiryId)
// 处理返回值
g = dto.GetOrderInquiryRecordDto(orderInquiry)
// 加载医生数据
g.UserDoctor = userDoctor
// 加载问诊病例
g.LoadMaskOrderInquiryCase(orderInquiryCase)
// 加载聊天记录
g.LoadMessageIm(messageIms)
return g, nil
}