From 89addf8e5903166ba384e79b2e8690dbe8e738dc Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 4 Jun 2024 16:32:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E5=81=A5=E5=BA=B7?= =?UTF-8?q?=E5=8C=85=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/healthPackage.go | 69 ++++++++++- api/requests/healthPackage.go | 24 +++- api/requests/healthPackageProduct.go | 14 +++ api/router/router.go | 34 ++--- api/service/HealthPackage.go | 179 ++++++++++++++++++++++++++- 5 files changed, 290 insertions(+), 30 deletions(-) create mode 100644 api/requests/healthPackageProduct.go diff --git a/api/controller/healthPackage.go b/api/controller/healthPackage.go index b2b1944..07cba00 100644 --- a/api/controller/healthPackage.go +++ b/api/controller/healthPackage.go @@ -14,7 +14,7 @@ import ( type HealthPackage struct{} -// GetHealthPackagePage 获取系统健康包配置列表-分页 +// GetHealthPackagePage 获取健康包列表-分页 func (r *HealthPackage) GetHealthPackagePage(c *gin.Context) { healthPackageRequest := requests.HealthPackageRequest{} req := healthPackageRequest.GetHealthPackagePage @@ -56,7 +56,7 @@ func (r *HealthPackage) GetHealthPackagePage(c *gin.Context) { responses.OkWithData(result, c) } -// GetHealthPackage 获取系统健康包配置详情 +// GetHealthPackage 获取健康包详情 func (r *HealthPackage) GetHealthPackage(c *gin.Context) { id := c.Param("package_id") if id == "" { @@ -81,3 +81,68 @@ func (r *HealthPackage) GetHealthPackage(c *gin.Context) { 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) +} diff --git a/api/requests/healthPackage.go b/api/requests/healthPackage.go index cffc603..0eff1fe 100644 --- a/api/requests/healthPackage.go +++ b/api/requests/healthPackage.go @@ -1,11 +1,31 @@ package requests type HealthPackageRequest struct { - GetHealthPackagePage // 健康包 + GetHealthPackagePage // 获取健康包列表-分页 + PutHealthPackage // 修改健康包 + AddHealthPackage // 新增健康包 } -// GetHealthPackagePage 健康包 +// GetHealthPackagePage 获取健康包列表-分页 type GetHealthPackagePage struct { Page int `json:"page" form:"page" 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"` +} diff --git a/api/requests/healthPackageProduct.go b/api/requests/healthPackageProduct.go new file mode 100644 index 0000000..6d9dece --- /dev/null +++ b/api/requests/healthPackageProduct.go @@ -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:"折扣商品价格"` +} diff --git a/api/router/router.go b/api/router/router.go index e2c4d02..f8fc5a1 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -548,36 +548,20 @@ func privateRouter(r *gin.Engine, api controller.Api) { } } - // 健康包配置 + // 健康包管理 healthGroup := inquiryGroup.Group("/health") { - // 系统健康包配置 - systemGroup := healthGroup.Group("/system") - { - // 获取系统健康包配置列表-分页 - systemGroup.POST("/page", api.HealthPackage.GetHealthPackagePage) + // 获取健康包列表-分页 + healthGroup.POST("/page", api.HealthPackage.GetHealthPackagePage) - // 获取系统健康包配置详情 - systemGroup.GET("/:package_id", api.HealthPackage.GetHealthPackage) - } + // 获取健康包详情 + healthGroup.GET("/:package_id", api.HealthPackage.GetHealthPackage) - // 医生健康包配置 - doctorGroup := healthGroup.Group("/doctor") - { - // 获取开启问诊配置医生列表-分页 - doctorGroup.GET("", api.InquiryConfig.GetDoctorInquiryConfigPage) - } - } + // 修改健康包 + healthGroup.PUT("/:package_id", api.HealthPackage.PutHealthPackage) - // 随访包配置 - followGroup := configGroup.Group("/follow") - { - // 医生随访包配置 - doctorGroup := followGroup.Group("/doctor") - { - // 获取开启问诊配置医生列表-分页 - doctorGroup.GET("", api.InquiryConfig.GetDoctorInquiryConfigPage) - } + // 新增健康包 + healthGroup.POST("", api.HealthPackage.AddHealthPackage) } } diff --git a/api/service/HealthPackage.go b/api/service/HealthPackage.go index 40be9bf..82c3276 100644 --- a/api/service/HealthPackage.go +++ b/api/service/HealthPackage.go @@ -4,12 +4,16 @@ import ( "errors" "hospital-admin-api/api/dao" "hospital-admin-api/api/dto" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" + "strconv" ) type HealthPackageService struct { } -// GetHealthPackage 获取系统健康包配置详情 +// GetHealthPackage 获取健康包 func (r *HealthPackageService) GetHealthPackage(packageId int64) (g *dto.HealthPackageDto, err error) { healthPackageDao := dao.HealthPackageDao{} healthPackage, err := healthPackageDao.GetHealthPackagePreloadById(packageId) @@ -28,3 +32,176 @@ func (r *HealthPackageService) GetHealthPackage(packageId int64) (g *dto.HealthP 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 +}