新增了健康包管理
This commit is contained in:
parent
58bf39a5e3
commit
89addf8e59
@ -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)
|
||||
}
|
||||
|
||||
@ -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"`
|
||||
}
|
||||
|
||||
14
api/requests/healthPackageProduct.go
Normal file
14
api/requests/healthPackageProduct.go
Normal file
@ -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:"折扣商品价格"`
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user