新增配置文件处理

This commit is contained in:
wucongxing 2023-07-14 14:52:50 +08:00
parent f1dcd147fc
commit 593ea49554
12 changed files with 321 additions and 48 deletions

3
.gitignore vendored
View File

@ -14,5 +14,4 @@
*.log
# Dependency directories (remove the comment below to include it)
# vendor/
# vendor/

View File

@ -65,11 +65,11 @@ func (r *BasicBankDao) AddBasicBank(tx *gorm.DB, model *model.BasicBank) (*model
// AddBasicBankByMap 新增专长-map
func (r *BasicBankDao) AddBasicBankByMap(tx *gorm.DB, data map[string]interface{}) (*model.BasicBank, error) {
userDoctorInfo := &model.BasicBank{}
basicBank := &model.BasicBank{}
if err := tx.Model(&model.BasicBank{}).Create(data).Error; err != nil {
return nil, err
}
return userDoctorInfo, nil
return basicBank, nil
}
// GetBasicBankListByStruct 获取专长列表

View File

@ -0,0 +1,72 @@
package dao
import (
"gorm.io/gorm"
"hospital-admin-api/api/model"
"hospital-admin-api/global"
)
type OrderPrescriptionDao struct {
}
// GetById 获取处方-处方id
func (r *OrderPrescriptionDao) GetById(orderPrescriptionId int64) (m *model.OrderPrescription, err error) {
err = global.Db.First(&m, orderPrescriptionId).Error
if err != nil {
return nil, err
}
return m, nil
}
// Delete 删除处方
func (r *OrderPrescriptionDao) Delete(tx *gorm.DB, maps interface{}) error {
err := tx.Where(maps).Delete(&model.BasicBank{}).Error
if err != nil {
return err
}
return nil
}
// Edit 修改处方
func (r *OrderPrescriptionDao) Edit(tx *gorm.DB, maps interface{}, data interface{}) error {
err := tx.Model(&model.BasicBank{}).Where(maps).Updates(data).Error
if err != nil {
return err
}
return nil
}
// EditById 修改处方-处方id
func (r *OrderPrescriptionDao) EditById(tx *gorm.DB, orderPrescriptionId int64, data interface{}) error {
err := tx.Model(&model.BasicBank{}).Where("order_prescription_id = ?", orderPrescriptionId).Updates(data).Error
if err != nil {
return err
}
return nil
}
// GetList 获取处方列表
func (r *OrderPrescriptionDao) GetList(maps interface{}) (m []*model.OrderPrescription, err error) {
err = global.Db.Where(maps).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// Add 新增处方
func (r *OrderPrescriptionDao) Add(tx *gorm.DB, model *model.OrderPrescription) (*model.OrderPrescription, error) {
if err := tx.Create(model).Error; err != nil {
return nil, err
}
return model, nil
}
// AddByMap 新增处方-map
func (r *OrderPrescriptionDao) AddByMap(tx *gorm.DB, data map[string]interface{}) (*model.OrderPrescription, error) {
orderPrescription := &model.OrderPrescription{}
if err := tx.Model(&model.OrderPrescription{}).Create(data).Error; err != nil {
return nil, err
}
return orderPrescription, nil
}

View File

@ -246,6 +246,8 @@ func (r *UserDoctorDao) GetUserDoctorPendingPageSearch(p requests.GetUserDoctorP
// 身份认证状态
if p.IdenAuthStatus != nil {
query = query.Where("iden_auth_status = ?", p.IdenAuthStatus)
} else {
query = query.Where("iden_auth_status IN ?", []string{"2", "3"})
}
// 医院名称

View File

@ -18,6 +18,14 @@ func Logrus() gin.HandlerFunc {
// 处理请求
c.Next()
// 获取 请求 参数
params, ok := c.Get("params")
if !ok {
params = ""
} else {
params = params.(map[string]interface{})
}
// 结束时间
endTime := time.Now()
@ -43,6 +51,7 @@ func Logrus() gin.HandlerFunc {
"ip": clientIP,
"method": reqMethod,
"uri": reqUri,
"params": params,
}).Info("access")
}
}

View File

@ -0,0 +1,85 @@
package middlewares
import (
"encoding/json"
"github.com/gin-gonic/gin"
"hospital-admin-api/consts"
"net/http"
)
// RequestParamsMiddleware 获取请求参数中间件
func RequestParamsMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
contentType := c.GetHeader("Content-Type")
// 判断请求参数类型
switch contentType {
case "application/json":
// 解析 JSON 参数
var params map[string]interface{}
// 读取请求体数据
data, err := c.GetRawData()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read request body"})
return
}
// 解析 JSON 数据到 map[string]interface{}
err = json.Unmarshal(data, &params)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"message": "Invalid JSON data",
"code": consts.HTTP_ERROR,
"data": "",
})
c.Abort()
return
}
// 存储参数到上下文
c.Set("params", params)
case "application/form-data", "application/x-www-form-urlencoded":
// 解析 Form 表单参数
err := c.Request.ParseForm()
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"message": "Invalid form data",
"code": consts.HTTP_ERROR,
"data": "",
})
c.Abort()
return
}
// 将参数转换为 map[string]interface{}
params := make(map[string]interface{})
for key, values := range c.Request.Form {
if len(values) > 0 {
params[key] = values[0]
}
}
// 存储参数到上下文
c.Set("params", params)
default:
// 解析 URL 参数
queryParams := c.Request.URL.Query()
// 将参数转换为 map[string]interface{}
params := make(map[string]interface{})
for key, values := range queryParams {
if len(values) > 0 {
params[key] = values[0]
}
}
// 存储参数到上下文
c.Set("params", params)
}
// 继续处理请求
c.Next()
}
}

View File

@ -0,0 +1,36 @@
package model
import "time"
// OrderPrescription 订单-处方表
type OrderPrescription struct {
OrderPrescriptionId int64 `gorm:"column:order_prescription_id;type:bigint(19);primary_key;comment:主键id" json:"order_prescription_id"`
OrderInquiryId int64 `gorm:"column:order_inquiry_id;type:bigint(19);comment:订单-问诊id;NOT NULL" json:"order_inquiry_id"`
DoctorId int64 `gorm:"column:doctor_id;type:bigint(19);comment:医生id;NOT NULL" json:"doctor_id"`
PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id" json:"patient_id"`
FamilyId int64 `gorm:"column:family_id;type:bigint(19);comment:家庭成员id就诊用户" json:"family_id"`
PharmacistId int64 `gorm:"column:pharmacist_id;type:bigint(19);comment:药师id" json:"pharmacist_id"`
PrescriptionStatus int `gorm:"column:prescription_status;type:tinyint(1);comment:处方状态1:待审核 2:待使用 3:已失效 4:已使用)" json:"prescription_status"`
PharmacistAuditStatus int `gorm:"column:pharmacist_audit_status;type:tinyint(1);default:0;comment:药师审核状态0:审核中 1:审核成功 2:审核驳回)" json:"pharmacist_audit_status"`
PharmacistVerifyTime time.Time `gorm:"column:pharmacist_verify_time;type:datetime;comment:药师审核时间" json:"pharmacist_verify_time"`
PharmacistFailReason string `gorm:"column:pharmacist_fail_reason;type:varchar(255);comment:药师审核驳回原因" json:"pharmacist_fail_reason"`
PlatformAuditStatus int `gorm:"column:platform_audit_status;type:tinyint(1);default:0;comment:处方平台审核状态0:审核中 1:审核成功 2:审核驳回)" json:"platform_audit_status"`
PlatformFailTime time.Time `gorm:"column:platform_fail_time;type:datetime;comment:平台审核失败时间" json:"platform_fail_time"`
PlatformFailReason string `gorm:"column:platform_fail_reason;type:varchar(255);comment:处方平台驳回原因" json:"platform_fail_reason"`
IsAutoPharVerify int `gorm:"column:is_auto_phar_verify;type:tinyint(1);default:0;comment:是否药师自动审核0:否 1:是)" json:"is_auto_phar_verify"`
DoctorCreatedTime time.Time `gorm:"column:doctor_created_time;type:datetime;comment:医生开具处方时间" json:"doctor_created_time"`
ExpiredTime time.Time `gorm:"column:expired_time;type:datetime;comment:处方过期时间" json:"expired_time"`
VoidTime time.Time `gorm:"column:void_time;type:datetime;comment:处方作废时间" json:"void_time"`
IsDelete int `gorm:"column:is_delete;type:tinyint(1);default:0;comment:是否删除0:否 1:是)" json:"is_delete"`
PrescriptionCode string `gorm:"column:prescription_code;type:varchar(255);comment:处方编号" json:"prescription_code"`
DoctorName string `gorm:"column:doctor_name;type:varchar(100);comment:医生名称" json:"doctor_name"`
PatientName string `gorm:"column:patient_name;type:varchar(100);comment:患者姓名-就诊人" json:"patient_name"`
PatientSex int `gorm:"column:patient_sex;type:tinyint(1);comment:患者性别-就诊人1:男 2:女)" json:"patient_sex"`
PatientAge int `gorm:"column:patient_age;type:int(11);comment:患者年龄-就诊人" json:"patient_age"`
DoctorAdvice string `gorm:"column:doctor_advice;type:varchar(255);comment:医嘱" json:"doctor_advice"`
Model
}
func (m *OrderPrescription) TableName() string {
return "gdxz_order_prescription"
}

View File

@ -29,7 +29,7 @@ type GetUserDoctorPage struct {
// PutUserDoctor 修改医生
type PutUserDoctor struct {
IsRecommend int `json:"is_recommend" form:"is_recommend" label:"是否首页推荐"` // 0:否 1:是)
IsRecommend int `json:"is_recommend" form:"is_recommend"` // 0:否 1:是)
Avatar string `json:"avatar" form:"avatar" validate:"required" label:"头像"`
DoctorTitle int `json:"doctor_title" form:"doctor_title" validate:"required,oneof=1 2 3 4 5 6" label:"医生职称"` // 1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师)
DepartmentCustomId string `json:"department_custom_id" form:"department_custom_id" validate:"required" label:"科室"`

View File

@ -20,7 +20,13 @@ func Init() *gin.Engine {
gin.SetMode(gin.ReleaseMode)
}
// 获取请求参数中间件-json格式下会导致接口获取不到请求数据
// r.Use(middlewares.RequestParamsMiddleware())
// 日志中间件
r.Use(middlewares.Logrus())
// 异常
r.Use(gin.Recovery())
// 404处理
@ -334,6 +340,7 @@ func privateRouter(r *gin.Engine, api controller.Api) {
// 审核-审核医生
doctorPendingGroup.PUT("/:doctor_id", api.UserDoctor.PutUserDoctorPending)
}
//
// // 医生详情
// doctorGroup.GET("/:post_id", api.Post.GetPost)

View File

@ -132,6 +132,10 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, putUserDoctorRequest r
return false, errors.New("医生数据错误")
}
if userDoctor.IdenAuthStatus == 2 {
return false, errors.New("医生身份审核中,不允许修改")
}
userDoctorData := make(map[string]interface{}) // 医生数据
userDoctorInfoData := make(map[string]interface{}) // 医生详情数据
userData := make(map[string]interface{}) // 用户数据
@ -279,6 +283,9 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, putUserDoctorRequest r
if putUserDoctorRequest.IdCardFront != "" {
idCardFront := strings.Replace(putUserDoctorRequest.IdCardFront, "https://img.applets.igandanyiyuan.com", "", 1)
if idCardFront != userDoctorInfo.IdCardFront {
if userDoctor.MultiPointStatus == 2 {
return false, errors.New("多点执业审核中,请操作后进行修改")
}
userDoctorInfoData["id_card_front"] = idCardFront
}
}
@ -290,6 +297,10 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, putUserDoctorRequest r
if putUserDoctorRequest.IdCardBack != "" {
idCardBack := strings.Replace(putUserDoctorRequest.IdCardBack, "https://img.applets.igandanyiyuan.com", "", 1)
if idCardBack != userDoctorInfo.IdCardBack {
if userDoctor.MultiPointStatus == 2 {
return false, errors.New("多点执业审核中,请操作后进行修改")
}
userDoctorInfoData["id_card_back"] = idCardBack
}
}
@ -301,6 +312,10 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, putUserDoctorRequest r
if putUserDoctorRequest.SignImage != "" {
signImage := strings.Replace(putUserDoctorRequest.SignImage, "https://img.applets.igandanyiyuan.com", "", 1)
if signImage != userDoctorInfo.SignImage {
if userDoctor.MultiPointStatus == 2 {
return false, errors.New("多点执业审核中,请操作后进行修改")
}
userDoctorInfoData["sign_image"] = signImage
}
}
@ -322,6 +337,56 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, putUserDoctorRequest r
}
}
// 处理多点问题
fieldsToCheck := []string{"id_card_front", "id_card_back", "sign_image"}
exists := false
for _, field := range fieldsToCheck {
if _, ok := userDoctorInfoData[field]; ok {
exists = true
break
}
}
if exists {
idCardFront := userDoctorInfo.IdCardFront
idCardBack := userDoctorInfo.IdCardBack
signImage := userDoctorInfo.SignImage
if _, ok := userDoctorInfoData["id_card_front"]; ok {
idCardFront = userDoctorInfoData["id_card_front"].(string)
}
if _, ok := userDoctorInfoData["id_card_back"]; ok {
idCardBack = userDoctorInfoData["id_card_back"].(string)
}
if _, ok := userDoctorInfoData["sign_image"]; ok {
signImage = userDoctorInfoData["sign_image"].(string)
}
if idCardFront != "" && idCardBack != "" && signImage != "" {
// 检测是否存在正在审核中的处方
orderPrescriptionDao := dao.OrderPrescriptionDao{}
maps := make(map[string]interface{})
maps["doctor_id"] = doctorId
maps["prescription_status"] = 1
orderPrescription, err := orderPrescriptionDao.GetList(maps)
if err != nil {
return false, errors.New("修改失败")
}
if len(orderPrescription) > 0 {
return false, errors.New("存在审核中的处方,请勿修改签名数据")
}
// 修改签名数据,重新认定为未审核
userDoctorData["multi_point_status"] = 2
userDoctorData["multi_point_fail_reason"] = ""
}
}
// 开始事务
tx := global.Db.Begin()
defer func() {
@ -478,46 +543,46 @@ func (r *UserDoctorService) PutUserDoctor(doctorId int64, putUserDoctorRequest r
// 判断签名图片是否修改同步修改ca平台
// 1、新用户未存在证书
if putUserDoctorRequest.SignImage != "" {
signImage := strings.Replace(putUserDoctorRequest.SignImage, "https://img.applets.igandanyiyuan.com", "", 1)
if signImage != userDoctorInfo.SignImage {
// 检测是否存在云证书
userCaCertDao := dao.UserCaCert{}
userCaCerts, err := userCaCertDao.GetUserCaCertListByUserId(userDoctor.UserId)
if err != nil {
tx.Rollback()
return false, errors.New("修改失败")
}
if userCaCerts != nil && len(userCaCerts) > 0 {
userCaCert := userCaCerts[0]
// 检测是否已经添加签章配置
if userCaCert.IsSignConfig == 1 {
// 修改签章配置为未添加
data := make(map[string]interface{})
data["is_sign_config"] = 0
err = userCaCertDao.EditUserCaCertById(tx, userCaCert.CertId, data)
if err != nil {
tx.Rollback()
return false, errors.New(err.Error())
}
// 删除签章配置
deleteUserSignConfigRequestData := &ca.DeleteUserSignConfigRequestData{
UserId: strconv.FormatInt(userDoctor.UserId, 10),
ConfigKey: strconv.FormatInt(userDoctor.UserId, 10),
}
_, err := ca.DeleteUserSignConfig(deleteUserSignConfigRequestData)
if err != nil {
tx.Rollback()
return false, errors.New(err.Error())
}
}
}
}
}
// if putUserDoctorRequest.SignImage != "" {
// signImage := strings.Replace(putUserDoctorRequest.SignImage, "https://img.applets.igandanyiyuan.com", "", 1)
// if signImage != userDoctorInfo.SignImage {
// // 检测是否存在云证书
// userCaCertDao := dao.UserCaCert{}
// userCaCerts, err := userCaCertDao.GetUserCaCertListByUserId(userDoctor.UserId)
// if err != nil {
// tx.Rollback()
// return false, errors.New("修改失败")
// }
//
// if userCaCerts != nil && len(userCaCerts) > 0 {
// userCaCert := userCaCerts[0]
// // 检测是否已经添加签章配置
// if userCaCert.IsSignConfig == 1 {
// // 修改签章配置为未添加
// data := make(map[string]interface{})
// data["is_sign_config"] = 0
// err = userCaCertDao.EditUserCaCertById(tx, userCaCert.CertId, data)
// if err != nil {
// tx.Rollback()
// return false, errors.New(err.Error())
// }
//
// // 删除签章配置
// deleteUserSignConfigRequestData := &ca.DeleteUserSignConfigRequestData{
// UserId: strconv.FormatInt(userDoctor.UserId, 10),
// ConfigKey: strconv.FormatInt(userDoctor.UserId, 10),
// }
//
// _, err := ca.DeleteUserSignConfig(deleteUserSignConfigRequestData)
// if err != nil {
// tx.Rollback()
// return false, errors.New(err.Error())
// }
// }
// }
//
// }
// }
tx.Commit()
return true, nil

View File

@ -18,7 +18,7 @@ mysql:
log:
file-path: "./log/"
# file-path: "/var/log/dev-hospital-admin-api/"
file-name: "hospital-admin-api.log"
file-name: "dev-hospital-admin-api.log"
# [redis]
redis:
@ -39,7 +39,6 @@ oss:
oss-bucket: gdxz-hospital
oss-endpoint: oss-cn-chengdu.aliyuncs.com
oss-custom-domain-name: https://img.applets.igandanyiyuan.com
oss-env: applet-dev
ca-online:
ca-online-app-id: SCCA1646691325903052802

View File

@ -6,5 +6,4 @@ type Oss struct {
OssBucket string `mapstructure:"oss-bucket" json:"oss-bucket" yaml:"oss-bucket"`
OssEndpoint string `mapstructure:"oss-endpoint" json:"oss-endpoint" yaml:"oss-endpoint"`
OssCustomDomainName string `mapstructure:"oss-custom-domain-name" json:"oss-custom-domain-name" yaml:"oss-custom-domain-name"`
OssEnv string `mapstructure:"oss-env" json:"oss-env" yaml:"oss-env"`
}