新增了健康包管理
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user