155 lines
3.1 KiB
Go
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
|
|
}
|