208 lines
5.7 KiB
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
|
|
}
|