This commit is contained in:
wucongxing8150 2024-06-04 14:52:44 +08:00
parent ad242af2c4
commit 58bf39a5e3
9 changed files with 320 additions and 2 deletions

View File

@ -71,6 +71,7 @@ type orderPrescriptionManage struct {
// 问诊管理
type inquiryManage struct {
InquiryConfig // 问诊配置
HealthPackage // 系统健康包配置
}
// ca管理

View 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
View 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
View 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
}

View File

@ -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 {

View 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:"每页个数"`
}

View File

@ -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)

View 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
}

View File

@ -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("取消订单失败")