1
This commit is contained in:
parent
ad242af2c4
commit
58bf39a5e3
@ -71,6 +71,7 @@ type orderPrescriptionManage struct {
|
||||
// 问诊管理
|
||||
type inquiryManage struct {
|
||||
InquiryConfig // 问诊配置
|
||||
HealthPackage // 系统健康包配置
|
||||
}
|
||||
|
||||
// ca管理
|
||||
|
||||
83
api/controller/healthPackage.go
Normal file
83
api/controller/healthPackage.go
Normal file
@ -0,0 +1,83 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"hospital-admin-api/api/dao"
|
||||
"hospital-admin-api/api/dto"
|
||||
"hospital-admin-api/api/requests"
|
||||
"hospital-admin-api/api/responses"
|
||||
"hospital-admin-api/api/service"
|
||||
"hospital-admin-api/global"
|
||||
"hospital-admin-api/utils"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type HealthPackage struct{}
|
||||
|
||||
// GetHealthPackagePage 获取系统健康包配置列表-分页
|
||||
func (r *HealthPackage) GetHealthPackagePage(c *gin.Context) {
|
||||
healthPackageRequest := requests.HealthPackageRequest{}
|
||||
req := healthPackageRequest.GetHealthPackagePage
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 参数验证
|
||||
if err := global.Validate.Struct(req); err != nil {
|
||||
responses.FailWithMessage(utils.Translate(err), c)
|
||||
return
|
||||
}
|
||||
|
||||
if req.Page == 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
healthPackageDao := dao.HealthPackageDao{}
|
||||
healthPackage, total, err := healthPackageDao.GetHealthPackagePageSearch(req, req.Page, req.PageSize)
|
||||
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
res := dto.GetHealthPackageListDto(healthPackage)
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = res
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetHealthPackage 获取系统健康包配置详情
|
||||
func (r *HealthPackage) GetHealthPackage(c *gin.Context) {
|
||||
id := c.Param("package_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
packageId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 业务处理
|
||||
healthPackageService := service.HealthPackageService{}
|
||||
getResponses, err := healthPackageService.GetHealthPackage(packageId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
responses.OkWithData(getResponses, c)
|
||||
}
|
||||
90
api/dao/healthPackage.go
Normal file
90
api/dao/healthPackage.go
Normal file
@ -0,0 +1,90 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"hospital-admin-api/api/model"
|
||||
"hospital-admin-api/api/requests"
|
||||
"hospital-admin-api/global"
|
||||
)
|
||||
|
||||
type HealthPackageDao struct {
|
||||
}
|
||||
|
||||
// GetHealthPackageById 获取数据-id
|
||||
func (r *HealthPackageDao) GetHealthPackageById(packageId int64) (m *model.HealthPackage, err error) {
|
||||
err = global.Db.First(&m, packageId).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetHealthPackagePreloadById 获取数据-加载全部关联-id
|
||||
func (r *HealthPackageDao) GetHealthPackagePreloadById(packageId int64) (m *model.HealthPackage, err error) {
|
||||
err = global.Db.Preload(clause.Associations).First(&m, packageId).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// DeleteHealthPackage 删除
|
||||
func (r *HealthPackageDao) DeleteHealthPackage(tx *gorm.DB, maps interface{}) error {
|
||||
err := tx.Where(maps).Delete(&model.HealthPackage{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// EditHealthPackage 修改
|
||||
func (r *HealthPackageDao) EditHealthPackage(tx *gorm.DB, maps interface{}, data interface{}) error {
|
||||
err := tx.Model(&model.HealthPackage{}).Where(maps).Updates(data).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetHealthPackageList 获取列表
|
||||
func (r *HealthPackageDao) GetHealthPackageList(maps interface{}) (m []*model.HealthPackage, err error) {
|
||||
err = global.Db.Where(maps).Find(&m).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// AddHealthPackage 新增
|
||||
func (r *HealthPackageDao) AddHealthPackage(tx *gorm.DB, model *model.HealthPackage) (*model.HealthPackage, error) {
|
||||
if err := tx.Create(model).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return model, nil
|
||||
}
|
||||
|
||||
// GetHealthPackagePageSearch 获取列表-分页
|
||||
func (r *HealthPackageDao) GetHealthPackagePageSearch(req requests.GetHealthPackagePage, page, pageSize int) (m []*model.HealthPackage, total int64, err error) {
|
||||
var totalRecords int64
|
||||
|
||||
// 构建查询条件
|
||||
query := global.Db.Model(&model.HealthPackage{})
|
||||
|
||||
// 健康包-关联商品
|
||||
query = query.Preload("HealthPackageProduct")
|
||||
|
||||
// 排序
|
||||
query = query.Order("created_at desc")
|
||||
|
||||
// 查询总数量
|
||||
if err := query.Count(&totalRecords).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return m, totalRecords, nil
|
||||
}
|
||||
68
api/dto/HealthPackage.go
Normal file
68
api/dto/HealthPackage.go
Normal file
@ -0,0 +1,68 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hospital-admin-api/api/model"
|
||||
)
|
||||
|
||||
type HealthPackageDto struct {
|
||||
PackageId string `json:"package_id"` // 主键id
|
||||
ServiceCount int `json:"service_count"` // 总服务次数
|
||||
MonthlyFrequency int `json:"monthly_frequency"` // 每月次数
|
||||
EffectiveDays string `json:"effective_days"` // 服务有效天数
|
||||
ServiceRate string `json:"service_rate"` // 服务费率。100为满值,表示1,正常费率。
|
||||
DiscountProductTotalAmount float64 `json:"discount_product_total_amount"` // 折扣商品总价格
|
||||
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
|
||||
UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间
|
||||
HealthPackageProduct []*HealthPackageProductDto `json:"health_package_product"` // 健康包-关联商品
|
||||
}
|
||||
|
||||
func GetHealthPackageDto(m *model.HealthPackage) *HealthPackageDto {
|
||||
return &HealthPackageDto{
|
||||
PackageId: fmt.Sprintf("%d", m.PackageId),
|
||||
ServiceCount: m.ServiceCount,
|
||||
MonthlyFrequency: m.MonthlyFrequency,
|
||||
EffectiveDays: m.EffectiveDays,
|
||||
ServiceRate: m.ServiceRate,
|
||||
DiscountProductTotalAmount: m.DiscountProductTotalAmount,
|
||||
CreatedAt: m.CreatedAt,
|
||||
UpdatedAt: m.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func GetHealthPackageListDto(m []*model.HealthPackage) []*HealthPackageDto {
|
||||
// 处理返回值
|
||||
responses := make([]*HealthPackageDto, len(m))
|
||||
|
||||
if len(m) > 0 {
|
||||
for i, v := range m {
|
||||
response := &HealthPackageDto{
|
||||
PackageId: fmt.Sprintf("%d", v.PackageId),
|
||||
ServiceCount: v.ServiceCount,
|
||||
MonthlyFrequency: v.MonthlyFrequency,
|
||||
EffectiveDays: v.EffectiveDays,
|
||||
ServiceRate: v.ServiceRate,
|
||||
DiscountProductTotalAmount: v.DiscountProductTotalAmount,
|
||||
CreatedAt: v.CreatedAt,
|
||||
UpdatedAt: v.UpdatedAt,
|
||||
}
|
||||
|
||||
if len(v.HealthPackageProduct) > 0 {
|
||||
response.LoadHealthPackageProduct(v.HealthPackageProduct)
|
||||
}
|
||||
|
||||
// 将转换后的结构体添加到新切片中
|
||||
responses[i] = response
|
||||
}
|
||||
}
|
||||
|
||||
return responses
|
||||
}
|
||||
|
||||
// LoadHealthPackageProduct 加载健康包-关联商品
|
||||
func (r *HealthPackageDto) LoadHealthPackageProduct(m []*model.HealthPackageProduct) *HealthPackageDto {
|
||||
if len(m) > 0 {
|
||||
r.HealthPackageProduct = GetHealthPackageProductListDto(m)
|
||||
}
|
||||
return r
|
||||
}
|
||||
@ -15,6 +15,7 @@ type HealthPackage struct {
|
||||
ServiceRate string `gorm:"column:service_rate;type:varchar(20);comment:服务费率。100为满值,表示1,正常费率。" json:"service_rate"`
|
||||
DiscountProductTotalAmount float64 `gorm:"column:discount_product_total_amount;type:decimal(10,2) unsigned;default:0.00;comment:折扣商品总价格" json:"discount_product_total_amount"`
|
||||
Model
|
||||
HealthPackageProduct []*HealthPackageProduct `gorm:"foreignKey:PackageId;references:package_id" json:"health_package_product"` // 健康包-关联商品
|
||||
}
|
||||
|
||||
func (m *HealthPackage) TableName() string {
|
||||
|
||||
11
api/requests/healthPackage.go
Normal file
11
api/requests/healthPackage.go
Normal file
@ -0,0 +1,11 @@
|
||||
package requests
|
||||
|
||||
type HealthPackageRequest struct {
|
||||
GetHealthPackagePage // 健康包
|
||||
}
|
||||
|
||||
// GetHealthPackagePage 健康包
|
||||
type GetHealthPackagePage struct {
|
||||
Page int `json:"page" form:"page" label:"页码"`
|
||||
PageSize int `json:"page_size" form:"page_size" label:"每页个数"`
|
||||
}
|
||||
@ -459,7 +459,6 @@ func privateRouter(r *gin.Engine, api controller.Api) {
|
||||
// 取消服务包订单
|
||||
serviceGroup.PUT("/cancel/:order_service_id", api.OrderServicePackage.CancelOrderServicePackage)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 病例管理
|
||||
@ -548,6 +547,38 @@ func privateRouter(r *gin.Engine, api controller.Api) {
|
||||
systemGroup.GET("/detail", api.InquiryConfig.GetSystemInquiryConfigDetail)
|
||||
}
|
||||
}
|
||||
|
||||
// 健康包配置
|
||||
healthGroup := inquiryGroup.Group("/health")
|
||||
{
|
||||
// 系统健康包配置
|
||||
systemGroup := healthGroup.Group("/system")
|
||||
{
|
||||
// 获取系统健康包配置列表-分页
|
||||
systemGroup.POST("/page", api.HealthPackage.GetHealthPackagePage)
|
||||
|
||||
// 获取系统健康包配置详情
|
||||
systemGroup.GET("/:package_id", api.HealthPackage.GetHealthPackage)
|
||||
}
|
||||
|
||||
// 医生健康包配置
|
||||
doctorGroup := healthGroup.Group("/doctor")
|
||||
{
|
||||
// 获取开启问诊配置医生列表-分页
|
||||
doctorGroup.GET("", api.InquiryConfig.GetDoctorInquiryConfigPage)
|
||||
}
|
||||
}
|
||||
|
||||
// 随访包配置
|
||||
followGroup := configGroup.Group("/follow")
|
||||
{
|
||||
// 医生随访包配置
|
||||
doctorGroup := followGroup.Group("/doctor")
|
||||
{
|
||||
// 获取开启问诊配置医生列表-分页
|
||||
doctorGroup.GET("", api.InquiryConfig.GetDoctorInquiryConfigPage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 财务管理
|
||||
@ -690,6 +721,9 @@ func privateRouter(r *gin.Engine, api controller.Api) {
|
||||
// 获取系统商品列表-分页
|
||||
productGroup.POST("/page", api.Product.GetProductPage)
|
||||
|
||||
// 获取系统商品列表-限制条数
|
||||
productGroup.GET("/list", api.Product.GetProductPage)
|
||||
|
||||
// 系统商品详情
|
||||
productGroup.GET("/:product_id", api.Product.GetProduct)
|
||||
|
||||
|
||||
30
api/service/HealthPackage.go
Normal file
30
api/service/HealthPackage.go
Normal file
@ -0,0 +1,30 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"hospital-admin-api/api/dao"
|
||||
"hospital-admin-api/api/dto"
|
||||
)
|
||||
|
||||
type HealthPackageService struct {
|
||||
}
|
||||
|
||||
// GetHealthPackage 获取系统健康包配置详情
|
||||
func (r *HealthPackageService) GetHealthPackage(packageId int64) (g *dto.HealthPackageDto, err error) {
|
||||
healthPackageDao := dao.HealthPackageDao{}
|
||||
healthPackage, err := healthPackageDao.GetHealthPackagePreloadById(packageId)
|
||||
if err != nil || healthPackage == nil {
|
||||
return nil, errors.New(err.Error())
|
||||
}
|
||||
|
||||
// 获取健康包-关联商品
|
||||
healthPackageProductDao := dao.HealthPackageProductDao{}
|
||||
healthPackageProduct, err := healthPackageProductDao.GetHealthPackageProductByPackageId(packageId)
|
||||
|
||||
// 处理返回值
|
||||
g = dto.GetHealthPackageDto(healthPackage)
|
||||
|
||||
g.LoadHealthPackageProduct(healthPackageProduct)
|
||||
|
||||
return g, nil
|
||||
}
|
||||
@ -301,7 +301,7 @@ func (r *OrderServicePackageService) CancelOrderServicePackage(req requests.Canc
|
||||
orderServicePackageData["cancel_time"] = time.Now().Format("2006-01-02 15:04:05") // 订单取消时间
|
||||
orderServicePackageData["cancel_reason"] = 4 // 取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
|
||||
orderServicePackageData["cancel_remarks"] = req.CancelRemarks // 取消订单备注(自动添加)
|
||||
err = orderServicePackageDao.EditOrderServicePackageById(tx, orderServiceId, orderServicePackageData)
|
||||
err = orderServicePackageDao.EditOrderServicePackageById(tx, orderServicePackage.OrderId, orderServicePackageData)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, errors.New("取消订单失败")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user