新增了健康包管理

This commit is contained in:
wucongxing8150 2024-06-04 16:32:00 +08:00
parent 58bf39a5e3
commit 89addf8e59
5 changed files with 290 additions and 30 deletions

View File

@ -14,7 +14,7 @@ import (
type HealthPackage struct{} type HealthPackage struct{}
// GetHealthPackagePage 获取系统健康包配置列表-分页 // GetHealthPackagePage 获取健康包列表-分页
func (r *HealthPackage) GetHealthPackagePage(c *gin.Context) { func (r *HealthPackage) GetHealthPackagePage(c *gin.Context) {
healthPackageRequest := requests.HealthPackageRequest{} healthPackageRequest := requests.HealthPackageRequest{}
req := healthPackageRequest.GetHealthPackagePage req := healthPackageRequest.GetHealthPackagePage
@ -56,7 +56,7 @@ func (r *HealthPackage) GetHealthPackagePage(c *gin.Context) {
responses.OkWithData(result, c) responses.OkWithData(result, c)
} }
// GetHealthPackage 获取系统健康包配置详情 // GetHealthPackage 获取健康包详情
func (r *HealthPackage) GetHealthPackage(c *gin.Context) { func (r *HealthPackage) GetHealthPackage(c *gin.Context) {
id := c.Param("package_id") id := c.Param("package_id")
if id == "" { if id == "" {
@ -81,3 +81,68 @@ func (r *HealthPackage) GetHealthPackage(c *gin.Context) {
responses.OkWithData(getResponses, c) responses.OkWithData(getResponses, c)
} }
// PutHealthPackage 修改健康包
func (r *HealthPackage) PutHealthPackage(c *gin.Context) {
healthPackageRequest := requests.HealthPackageRequest{}
req := healthPackageRequest.PutHealthPackage
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
}
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{}
_, err = healthPackageService.PutHealthPackage(packageId, req)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}
// AddHealthPackage 新增健康包
func (r *HealthPackage) AddHealthPackage(c *gin.Context) {
healthPackageRequest := requests.HealthPackageRequest{}
req := healthPackageRequest.AddHealthPackage
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
}
// 业务处理
healthPackageService := service.HealthPackageService{}
_, err := healthPackageService.AddHealthPackage(req)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}

View File

@ -1,11 +1,31 @@
package requests package requests
type HealthPackageRequest struct { type HealthPackageRequest struct {
GetHealthPackagePage // 健康包 GetHealthPackagePage // 获取健康包列表-分页
PutHealthPackage // 修改健康包
AddHealthPackage // 新增健康包
} }
// GetHealthPackagePage 健康包 // GetHealthPackagePage 获取健康包列表-分页
type GetHealthPackagePage struct { type GetHealthPackagePage struct {
Page int `json:"page" form:"page" label:"页码"` Page int `json:"page" form:"page" label:"页码"`
PageSize int `json:"page_size" form:"page_size" label:"每页个数"` PageSize int `json:"page_size" form:"page_size" label:"每页个数"`
} }
// PutHealthPackage 修改健康包
type PutHealthPackage struct {
ServiceCount int `json:"service_count" form:"service_count" label:"总服务次数" validate:"required,min=1"`
MonthlyFrequency int `json:"monthly_frequency" form:"monthly_frequency" label:"每月次数" validate:"required,min=1"`
EffectiveDays string `json:"effective_days" form:"effective_days" label:"服务有效天数" validate:"required,min=1"`
ServiceRate string `json:"service_rate" form:"service_rate" label:"服务费率。100为满值表示1正常费率。" validate:"required,min=1"`
HealthPackageProduct []*HealthPackageProduct `json:"health_package_product" form:"health_package_product" label:"关联商品" validate:"required"`
}
// AddHealthPackage 新增健康包
type AddHealthPackage struct {
ServiceCount int `json:"service_count" form:"service_count" label:"总服务次数" validate:"required,min=1"`
MonthlyFrequency int `json:"monthly_frequency" form:"monthly_frequency" label:"每月次数" validate:"required,min=1"`
EffectiveDays string `json:"effective_days" form:"effective_days" label:"服务有效天数" validate:"required,min=1"`
ServiceRate string `json:"service_rate" form:"service_rate" label:"服务费率。100为满值表示1正常费率。" validate:"required,min=1"`
HealthPackageProduct []*HealthPackageProduct `json:"health_package_product" form:"health_package_product" label:"关联商品" validate:"required"`
}

View File

@ -0,0 +1,14 @@
package requests
type HealthPackageProductRequest struct {
HealthPackageProduct // 健康包-关联商品
}
// HealthPackageProduct 健康包-关联商品
type HealthPackageProduct struct {
PackageId string `json:"package_id" form:"package_id" label:"健康包id"`
ProductId string `gorm:"primaryKey" json:"product_id" form:"product_id" label:"商品id"`
ProductName string `json:"product_name" form:"product_name" label:"商品名称"`
Quantity int `json:"quantity" form:"quantity" label:"数量"`
DiscountProductPrice float64 `json:"discount_product_price" form:"discount_product_price" label:"折扣商品价格"`
}

View File

@ -548,36 +548,20 @@ func privateRouter(r *gin.Engine, api controller.Api) {
} }
} }
// 健康包配置 // 健康包管理
healthGroup := inquiryGroup.Group("/health") healthGroup := inquiryGroup.Group("/health")
{ {
// 系统健康包配置 // 获取健康包列表-分页
systemGroup := healthGroup.Group("/system") healthGroup.POST("/page", api.HealthPackage.GetHealthPackagePage)
{
// 获取系统健康包配置列表-分页
systemGroup.POST("/page", api.HealthPackage.GetHealthPackagePage)
// 获取系统健康包配置详情 // 获取健康包详情
systemGroup.GET("/:package_id", api.HealthPackage.GetHealthPackage) healthGroup.GET("/:package_id", api.HealthPackage.GetHealthPackage)
}
// 医生健康包配置 // 修改健康包
doctorGroup := healthGroup.Group("/doctor") healthGroup.PUT("/:package_id", api.HealthPackage.PutHealthPackage)
{
// 获取开启问诊配置医生列表-分页
doctorGroup.GET("", api.InquiryConfig.GetDoctorInquiryConfigPage)
}
}
// 随访包配置 // 新增健康包
followGroup := configGroup.Group("/follow") healthGroup.POST("", api.HealthPackage.AddHealthPackage)
{
// 医生随访包配置
doctorGroup := followGroup.Group("/doctor")
{
// 获取开启问诊配置医生列表-分页
doctorGroup.GET("", api.InquiryConfig.GetDoctorInquiryConfigPage)
}
} }
} }

View File

@ -4,12 +4,16 @@ import (
"errors" "errors"
"hospital-admin-api/api/dao" "hospital-admin-api/api/dao"
"hospital-admin-api/api/dto" "hospital-admin-api/api/dto"
"hospital-admin-api/api/model"
"hospital-admin-api/api/requests"
"hospital-admin-api/global"
"strconv"
) )
type HealthPackageService struct { type HealthPackageService struct {
} }
// GetHealthPackage 获取系统健康包配置详情 // GetHealthPackage 获取健康包
func (r *HealthPackageService) GetHealthPackage(packageId int64) (g *dto.HealthPackageDto, err error) { func (r *HealthPackageService) GetHealthPackage(packageId int64) (g *dto.HealthPackageDto, err error) {
healthPackageDao := dao.HealthPackageDao{} healthPackageDao := dao.HealthPackageDao{}
healthPackage, err := healthPackageDao.GetHealthPackagePreloadById(packageId) healthPackage, err := healthPackageDao.GetHealthPackagePreloadById(packageId)
@ -28,3 +32,176 @@ func (r *HealthPackageService) GetHealthPackage(packageId int64) (g *dto.HealthP
return g, nil return g, nil
} }
// PutHealthPackage 修改健康包
func (r *HealthPackageService) PutHealthPackage(packageId int64, req requests.PutHealthPackage) (bool, error) {
// 获取系统问诊配置
healthPackageDao := dao.HealthPackageDao{}
healthPackage, err := healthPackageDao.GetHealthPackageById(packageId)
if err != nil || healthPackage == nil {
return false, errors.New("数据错误")
}
var discountProductTotalAmount float64
// 验证商品
productDao := dao.ProductDao{}
for _, product := range req.HealthPackageProduct {
productId, err := strconv.ParseInt(product.ProductId, 10, 64)
if err != nil {
return false, err
}
// 获取商品数据
_, err = productDao.GetProductById(productId)
if err != nil {
return false, errors.New("商品数据错误")
}
discountProductTotalAmount = discountProductTotalAmount + product.DiscountProductPrice
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 修改系统问诊配置
healthPackageData := make(map[string]interface{})
if req.ServiceCount != healthPackage.ServiceCount {
healthPackageData["service_count"] = req.ServiceCount
}
if req.MonthlyFrequency != healthPackage.MonthlyFrequency {
healthPackageData["monthly_frequency"] = req.MonthlyFrequency
}
if req.EffectiveDays != healthPackage.EffectiveDays {
healthPackageData["effective_days"] = req.EffectiveDays
}
if req.ServiceRate != healthPackage.ServiceRate {
healthPackageData["service_rate"] = req.ServiceRate
}
if discountProductTotalAmount != healthPackage.DiscountProductTotalAmount {
healthPackageData["discount_product_total_amount"] = discountProductTotalAmount
}
if len(healthPackageData) > 0 {
err = healthPackageDao.EditHealthPackage(tx, packageId, healthPackageData)
if err != nil {
tx.Rollback()
return false, errors.New("修改失败")
}
}
// 删除关联商品
healthPackageProductDao := dao.HealthPackageProductDao{}
maps := make(map[string]interface{})
maps["package_id"] = healthPackage.PackageId
err = healthPackageProductDao.DeleteHealthPackageProduct(tx, maps)
if err != nil {
return false, err
}
// 增加关联商品
for _, product := range req.HealthPackageProduct {
productId, err := strconv.ParseInt(product.ProductId, 10, 64)
if err != nil {
return false, err
}
healthPackageProduct := &model.HealthPackageProduct{
PackageId: healthPackage.PackageId,
ProductId: productId,
ProductName: product.ProductName,
Quantity: product.Quantity,
DiscountProductPrice: product.DiscountProductPrice,
}
healthPackageProduct, err = healthPackageProductDao.AddHealthPackageProduct(tx, healthPackageProduct)
if err != nil || healthPackageProduct == nil {
tx.Rollback()
return false, errors.New(err.Error())
}
}
tx.Commit()
return true, nil
}
// AddHealthPackage 新增健康包
func (r *HealthPackageService) AddHealthPackage(req requests.AddHealthPackage) (bool, error) {
var discountProductTotalAmount float64
// 验证商品
productDao := dao.ProductDao{}
for _, product := range req.HealthPackageProduct {
productId, err := strconv.ParseInt(product.ProductId, 10, 64)
if err != nil {
return false, err
}
// 获取商品数据
_, err = productDao.GetProductById(productId)
if err != nil {
return false, errors.New("商品数据错误")
}
discountProductTotalAmount = discountProductTotalAmount + product.DiscountProductPrice
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 新增医生问诊配置
healthPackage := &model.HealthPackage{
ServiceCount: req.ServiceCount,
MonthlyFrequency: req.MonthlyFrequency,
EffectiveDays: req.EffectiveDays,
ServiceRate: req.ServiceRate,
DiscountProductTotalAmount: discountProductTotalAmount,
}
healthPackageDao := dao.HealthPackageDao{}
healthPackage, err := healthPackageDao.AddHealthPackage(tx, healthPackage)
if err != nil || healthPackage == nil {
tx.Rollback()
return false, errors.New(err.Error())
}
healthPackageProductDao := dao.HealthPackageProductDao{}
for _, product := range req.HealthPackageProduct {
productId, err := strconv.ParseInt(product.ProductId, 10, 64)
if err != nil {
return false, err
}
healthPackageProduct := &model.HealthPackageProduct{
PackageId: healthPackage.PackageId,
ProductId: productId,
ProductName: product.ProductName,
Quantity: product.Quantity,
DiscountProductPrice: product.DiscountProductPrice,
}
healthPackageProduct, err = healthPackageProductDao.AddHealthPackageProduct(tx, healthPackageProduct)
if err != nil || healthPackageProduct == nil {
tx.Rollback()
return false, errors.New(err.Error())
}
}
tx.Commit()
return true, nil
}