hospital-admin-api/api/service/HealthPackage.go

208 lines
5.7 KiB
Go

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
}