From 42cc40b5310db357cd37d5ee3ca4ba9f8e5d24f2 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 17 Mar 2025 09:59:49 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E9=95=BF?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=9C=AA=E6=93=8D=E4=BD=9C=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/public.go | 25 +++++------- api/dao/adminApiRequest.go | 62 +++++++++++++++++++++++++++++ api/middlewares/requestApi.go | 60 ++++++++++++++++++++++++++++ api/model/AdminApiRequest.go | 36 +++++++++++++++++ api/model/orderProductItem.go | 1 + api/router/router.go | 3 ++ api/service/order.go | 15 +++---- extend/prescription/prescription.go | 15 +++---- 8 files changed, 189 insertions(+), 28 deletions(-) create mode 100644 api/dao/adminApiRequest.go create mode 100644 api/middlewares/requestApi.go create mode 100644 api/model/AdminApiRequest.go diff --git a/api/controller/public.go b/api/controller/public.go index 0f7d660..b06c66e 100644 --- a/api/controller/public.go +++ b/api/controller/public.go @@ -8,6 +8,7 @@ import ( "hospital-admin-api/config" "hospital-admin-api/global" "hospital-admin-api/utils" + "time" ) type Public struct{} @@ -27,20 +28,6 @@ func (b *Public) GetCaptcha(c *gin.Context) { // Login 登陆 func (b *Public) Login(c *gin.Context) { - //orderService := service.OrderService{} - //res, err := orderService.PdfToImg() - //if err != nil { - // responses.FailWithMessage(err.Error(), c) - // return - //} - // - //if res != true { - // responses.FailWithMessage("错误", c) - // return - //} - //responses.Ok(c) - //return - var adminRequest requests.AdminRequest if err := c.ShouldBind(&adminRequest.Login); err != nil { @@ -72,5 +59,15 @@ func (b *Public) Login(c *gin.Context) { return } + // 开始记录api请求时间 + key := "request_" + token.UserId + + // 增加缓存 + _, err = global.Redis.Set(c, "request_api"+key, time.Now().Unix(), 30*60*time.Second).Result() + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + responses.OkWithData(token, c) } diff --git a/api/dao/adminApiRequest.go b/api/dao/adminApiRequest.go new file mode 100644 index 0000000..9dae2c5 --- /dev/null +++ b/api/dao/adminApiRequest.go @@ -0,0 +1,62 @@ +package dao + +import ( + "gorm.io/gorm" + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type AdminApiRequestDao struct { +} + +// GetAdminApiRequestById 获取接口数据-接口id +func (r *AdminApiRequestDao) GetAdminApiRequestById(RequestId int64) (m *model.AdminAPI, err error) { + err = global.Db.First(&m, RequestId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddAdminApiRequest 新增接口 +func (r *AdminApiRequestDao) AddAdminApiRequest(tx *gorm.DB, model *model.AdminAPI) (*model.AdminAPI, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetAdminApiRequestList 获取接口列表 +func (r *AdminApiRequestDao) GetAdminApiRequestList(maps interface{}) (m []*model.AdminAPI, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetAdminApiRequest 获取 +func (r *AdminApiRequestDao) GetAdminApiRequest(maps interface{}) (m *model.AdminAPI, err error) { + err = global.Db.Where(maps).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteAdminApiRequestById 删除接口-接口id +func (r *AdminApiRequestDao) DeleteAdminApiRequestById(tx *gorm.DB, RequestId int64) error { + if err := tx.Delete(&model.AdminAPI{}, RequestId).Error; err != nil { + return err + } + return nil +} + +// EditAdminApiRequestById 修改接口-接口id +func (r *AdminApiRequestDao) EditAdminApiRequestById(tx *gorm.DB, RequestId int64, data interface{}) error { + err := tx.Model(&model.AdminAPI{}).Where("request_id = ?", RequestId).Updates(data).Error + if err != nil { + return err + } + return nil +} diff --git a/api/middlewares/requestApi.go b/api/middlewares/requestApi.go new file mode 100644 index 0000000..eaed816 --- /dev/null +++ b/api/middlewares/requestApi.go @@ -0,0 +1,60 @@ +package middlewares + +import ( + "fmt" + "github.com/gin-gonic/gin" + "hospital-admin-api/api/responses" + "hospital-admin-api/consts" + "hospital-admin-api/global" + "net/http" + "strconv" + "time" +) + +// RequestApi 请求api处理 +func RequestApi() gin.HandlerFunc { + return func(c *gin.Context) { + // 获取用户id + userId := c.GetInt64("UserId") + if userId == 0 { + responses.Fail(c) + c.Abort() + return + } + + key := "request_" + fmt.Sprintf("%d", userId) + + res, _ := global.Redis.Get(c, "request_api"+key).Result() + if res == "" { + c.JSON(http.StatusOK, gin.H{ + "message": "长时间未操作,重新登录", + "code": consts.TokenExptired, + "data": "", + }) + + c.Abort() + return + } + + timestamp, err := strconv.ParseInt(res, 10, 64) + if err != nil { + fmt.Println("时间戳转换错误:", err) + return + } + + now := time.Now().Unix() // 当前时间戳 + diff := now - timestamp // 计算时间差(秒) + + // 20-30分钟时,重新缓存 + if diff >= 25*60 && diff <= 30*60 { + // 增加缓存 + _, err := global.Redis.Set(c, "request_api"+key, time.Now().Unix(), 30*60*time.Second).Result() + if err != nil { + responses.FailWithMessage("错误", c) + return + } + } + + c.Next() + } +} diff --git a/api/model/AdminApiRequest.go b/api/model/AdminApiRequest.go new file mode 100644 index 0000000..9da0025 --- /dev/null +++ b/api/model/AdminApiRequest.go @@ -0,0 +1,36 @@ +package model + +import ( + "gorm.io/gorm" + "hospital-admin-api/global" + "time" +) + +// AdminApiRequest 后台api请求记录 +type AdminApiRequest struct { + RequestId int64 `gorm:"column:request_id;type:bigint(19);primary_key;comment:主键id" json:"request_id"` + UserId int64 `gorm:"column:user_id;type:bigint(19);comment:后台用户id" json:"user_id"` + ApiName string `gorm:"column:api_name;type:varchar(100);comment:api名称" json:"api_name"` + ApiPath string `gorm:"column:api_path;type:varchar(255);comment: 接口路径(全路径 id为:id)" json:"api_path"` + ApiMethod string `gorm:"column:api_method;type:varchar(10);comment:请求类型(put:修改 post:新增 get:获取 )" json:"api_method"` + RequestTime LocalTime `gorm:"column:request_time;type:datetime;comment:请求时间" json:"request_time"` + Model +} + +func (m *AdminApiRequest) TableName() string { + return "gdxz_admin_api_request" +} + +func (m *AdminApiRequest) BeforeCreate(tx *gorm.DB) error { + if m.RequestId == 0 { + m.RequestId = 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 +} diff --git a/api/model/orderProductItem.go b/api/model/orderProductItem.go index 4cab3c0..b7c8b40 100644 --- a/api/model/orderProductItem.go +++ b/api/model/orderProductItem.go @@ -15,6 +15,7 @@ type OrderProductItem struct { ProductId int64 `gorm:"column:product_id;type:bigint(19);comment:商品id" json:"product_id"` ProductName string `gorm:"column:product_name;type:varchar(255);comment:商品名称" json:"product_name"` ProductPrice float64 `gorm:"column:product_price;type:decimal(10,2);comment:商品价格" json:"product_price"` + ActualProductPrice float64 `gorm:"column:actual_product_price;type:decimal(10,2);comment:实际商品价格" json:"actual_product_price"` ProductPlatformCode string `gorm:"column:product_platform_code;type:varchar(100);comment:商品处方平台编码" json:"product_platform_code"` Amount int `gorm:"column:amount;type:int(11);comment:数量" json:"amount"` Manufacturer string `gorm:"column:manufacturer;type:varchar(255);comment:生产厂家" json:"manufacturer"` diff --git a/api/router/router.go b/api/router/router.go index a8ed1f7..ff2aa68 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -58,6 +58,9 @@ func Init() *gin.Engine { // 验证权限 r.Use(middlewares.Auth()) + // 请求api处理 + r.Use(middlewares.RequestApi()) + // 私有路由-验证权限 privateRouter(r, api) diff --git a/api/service/order.go b/api/service/order.go index 81d39fc..c2b0a6f 100644 --- a/api/service/order.go +++ b/api/service/order.go @@ -200,13 +200,14 @@ func (r *OrderService) ReportPreProduct(orderProductId, adminUserId int64) (bool // 药品数据2 orderDrugRequest := prescription.OrderDrugListRequest{ - DrugCode: product.ProductPlatformCode, // 药品编码 - ApprovalNumber: product.LicenseNumber, // 批准文号 - DrugName: product.ProductName, // 药品名称 - Specifications: product.ProductSpec, // 药品规格 - Price: product.ProductPrice, // 药品单价 - DrugCount: o.Amount, // 药品数量 - PackingUnit: product.PackagingUnit, // 药品单位 + DrugCode: product.ProductPlatformCode, // 药品编码 + ApprovalNumber: product.LicenseNumber, // 批准文号 + DrugName: product.ProductName, // 药品名称 + Specifications: product.ProductSpec, // 药品规格 + Price: product.ProductPrice, // 药品单价 + DrugCount: o.Amount, // 药品数量 + PackingUnit: product.PackagingUnit, // 药品单位 + ActualSellingPrice: o.ActualProductPrice, // 实际商品价格 } orderDrugListRequests[i] = orderDrugRequest } diff --git a/extend/prescription/prescription.go b/extend/prescription/prescription.go index 34eb488..c1670f0 100644 --- a/extend/prescription/prescription.go +++ b/extend/prescription/prescription.go @@ -105,13 +105,14 @@ type DrugListRequest struct { // OrderDrugListRequest 上报处方请求值-药品数据2 type OrderDrugListRequest struct { - DrugCode string `json:"drugCode"` // 药品编码 - ApprovalNumber string `json:"approvalNumber"` // 批准文号 - DrugName string `json:"drugName"` // 药品名称 - Specifications string `json:"specifications"` // 药品规格 - Price float64 `json:"price"` // 药品单价 - DrugCount int `json:"drugCount"` // 药品数量 - PackingUnit string `json:"packingUnit"` // 药品单位 + DrugCode string `json:"drugCode"` // 药品编码 + ApprovalNumber string `json:"approvalNumber"` // 批准文号 + DrugName string `json:"drugName"` // 药品名称 + Specifications string `json:"specifications"` // 药品规格 + Price float64 `json:"price"` // 药品单价 + DrugCount int `json:"drugCount"` // 药品数量 + PackingUnit string `json:"packingUnit"` // 药品单位 + ActualSellingPrice float64 `json:"actual_product_price"` // 药品实际销售单价 } // GetProdStockRequest 获取商品库存请求值 From ab378ee21d889093a3bc838164eb17e0d26bdc59 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 17 Mar 2025 13:02:33 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E9=95=BF?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=9C=AA=E6=93=8D=E4=BD=9C=E5=A4=84=E7=90=86?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/dao/adminRole.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/dao/adminRole.go b/api/dao/adminRole.go index b176d04..41da6b0 100644 --- a/api/dao/adminRole.go +++ b/api/dao/adminRole.go @@ -46,6 +46,8 @@ func (r *AdminRoleDao) GetAdminRolePageSearch(roleName string, page, pageSize in query = query.Where("role_name = ?", roleName) } + query = query.Where("role_id != ?", 1) + // 查询总数量 if err := query.Count(&totalRecords).Error; err != nil { return nil, 0, err From 1a341fe77d284d962dff6c88696de005953bd6e5 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 15 Apr 2025 09:13:05 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=8C=BB=E7=94=9F=E6=9C=8D=E5=8A=A1=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/service/InquiryConfig.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/api/service/InquiryConfig.go b/api/service/InquiryConfig.go index 5319035..5b8519c 100644 --- a/api/service/InquiryConfig.go +++ b/api/service/InquiryConfig.go @@ -2,6 +2,7 @@ package service import ( "errors" + "fmt" "gorm.io/gorm" "hospital-admin-api/api/dao" "hospital-admin-api/api/dto" @@ -509,6 +510,7 @@ func (r *DoctorInquiryConfigService) AddDoctorInquiryConfig(req requests.AddDoct tx := global.Db.Begin() defer func() { if r := recover(); r != nil { + fmt.Println(r) tx.Rollback() } }() @@ -527,7 +529,7 @@ func (r *DoctorInquiryConfigService) AddDoctorInquiryConfig(req requests.AddDoct doctorInquiryConfig, err = doctorInquiryConfigDao.AddDoctorInquiryConfig(tx, doctorInquiryConfig) if err != nil || doctorInquiryConfig == nil { tx.Rollback() - return false, errors.New(err.Error()) + return false, errors.New("失败") } // 处理医生问诊时间 @@ -584,7 +586,7 @@ func (r *DoctorInquiryConfigService) AddDoctorInquiryConfig(req requests.AddDoct } // 新增医生服务设置-疑难会诊 - if req.InquiryType == 1 || req.InquiryMode == 6 { + if req.InquiryType == 1 && req.InquiryMode == 6 { doctorInquiryConfigServiceDao := dao.DoctorInquiryConfigServiceDao{} doctorInquiryConfigService := &model.DoctorInquiryConfigService{