package service 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 获取健康包 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 } // 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 }