2024-06-13 17:26:09 +08:00

155 lines
3.1 KiB
Go

package service
import (
"errors"
"fmt"
"hospital-admin-api/api/dao"
"hospital-admin-api/api/model"
"hospital-admin-api/api/requests"
"hospital-admin-api/global"
"strconv"
)
type AreaService struct{}
// AddArea 新增地区
func (r *AreaService) AddArea(req requests.AddArea) (bool, string, error) {
if *req.AreaType == 1 {
return false, "", errors.New("不可添加国家")
}
// 检测上级是否存在
maps := make(map[string]interface{})
maps["parent_id"] = req.ParentId
if *req.AreaType == 4 {
maps["area_type"] = 3
}
if *req.AreaType == 3 {
maps["area_type"] = 2
}
if *req.AreaType == 2 {
maps["area_type"] = 1
}
areaDao := dao.AreaDao{}
_, err := areaDao.GetAreaList(maps)
if err != nil {
return false, "", errors.New("上级地区错误")
}
if len(req.AreaId) > 6 {
return false, "", errors.New("请输入正确地区编码")
}
// 检测编码是否重复
maps = make(map[string]interface{})
maps["area_id"] = req.AreaId
areas, _ := areaDao.GetAreaList(maps)
if len(areas) >= 1 {
return false, "", errors.New("地区编码重复")
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
fmt.Println(r)
}
}()
parentId, err := strconv.ParseInt(req.ParentId, 10, 64)
if err != nil {
tx.Rollback()
return false, "", errors.New("新增失败")
}
areaId, err := strconv.ParseInt(req.AreaId, 10, 64)
if err != nil {
tx.Rollback()
return false, "", errors.New("新增失败")
}
// 新增优惠卷表
area := &model.Area{
AreaId: areaId,
AreaName: req.AreaName,
ParentId: parentId,
Zip: req.Zip,
AreaType: *req.AreaType,
}
area, err = areaDao.AddArea(tx, area)
if err != nil || area == nil {
tx.Rollback()
return false, "", errors.New(err.Error())
}
tx.Commit()
return true, fmt.Sprintf("%d", area.AreaId), nil
}
// PutArea 修改地区
func (r *AreaService) PutArea(areaId int, req requests.PutArea) (bool, error) {
areaDao := dao.AreaDao{}
area, err := areaDao.GetAreaById(areaId)
if err != nil {
return false, err
}
if len(req.AreaId) > 6 {
return false, errors.New("请输入正确地区编码")
}
// 检测编码是否重复
maps := make(map[string]interface{})
maps["area_id"] = req.AreaId
areas, err := areaDao.GetAreaList(maps)
if len(areas) > 1 {
return false, errors.New("地区编码重复")
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
fmt.Println(r)
}
}()
areaData := make(map[string]interface{})
if req.AreaName != area.AreaName {
areaData["area_name"] = req.AreaName
}
if req.Zip != "" {
if req.Zip != area.Zip {
areaData["zip"] = req.Zip
}
}
if req.AreaId != "" {
areaId, err := strconv.ParseInt(req.AreaId, 10, 64)
if err != nil {
tx.Rollback()
return false, errors.New("修改失败")
}
areaData["area_id"] = areaId
}
if len(areaData) > 0 {
err = areaDao.EditAreaById(tx, areaId, areaData)
if err != nil || area == nil {
tx.Rollback()
return false, errors.New(err.Error())
}
}
tx.Commit()
return true, nil
}