234 lines
5.1 KiB
Go

package service
import (
"errors"
"fmt"
"hospital-admin-api/api/dao"
"hospital-admin-api/api/dto"
"hospital-admin-api/api/model"
"hospital-admin-api/api/requests"
"hospital-admin-api/global"
)
type HospitalService struct {
}
// AddHospital 新增医院
func (r *HospitalService) AddHospital(req requests.AddHospital) (bool, error) {
hospitalDao := dao.HospitalDao{}
// 检测医院是否重复
maps := make(map[string]interface{})
maps["hospital_name"] = req.HospitalName
maps["province_id"] = req.ProvinceId
maps["city_id"] = req.CityId
hospitals, err := hospitalDao.GetHospitalList(maps)
if err != nil {
return false, errors.New("医院重复添加")
}
if len(hospitals) != 0 {
return false, errors.New("医院重复添加")
}
var province string
var city string
var county string
areaDao := dao.AreaDao{}
if req.ProvinceId != 0 {
area, err := areaDao.GetAreaById(req.ProvinceId)
if err != nil || area == nil {
return false, errors.New("省份数据错误")
}
province = area.AreaName
}
if req.CityId != 0 {
area, err := areaDao.GetAreaById(req.CityId)
if err != nil || area == nil {
return false, errors.New("城市数据错误")
}
city = area.AreaName
}
if req.CountyId != 0 {
area, err := areaDao.GetAreaById(req.CountyId)
if err != nil || area == nil {
return false, errors.New("城市数据错误")
}
county = area.AreaName
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 新增商品表
hospital := &model.Hospital{
HospitalName: req.HospitalName,
HospitalStatus: *req.HospitalStatus,
HospitalLevelName: req.HospitalLevelName,
PostCode: req.PostCode,
TelePhone: req.TelePhone,
ProvinceId: req.ProvinceId,
Province: province,
CityId: req.CityId,
City: city,
CountyId: req.CountyId,
County: county,
Address: req.Address,
Lat: req.Lat,
Lng: req.Lng,
Desc: req.Desc,
}
hospital, err = hospitalDao.AddHospital(tx, hospital)
if err != nil || hospital == nil {
tx.Rollback()
return false, errors.New(err.Error())
}
tx.Commit()
return true, nil
}
// PutHospital 修改医院
func (r *HospitalService) PutHospital(hospitalId int64, req requests.PutHospital) (bool, error) {
hospitalDao := dao.HospitalDao{}
area, err := hospitalDao.GetHospitalById(hospitalId)
if err != nil || area == nil {
return false, errors.New("省份数据错误")
}
// 开始事务
tx := global.Db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
fmt.Println(r)
}
}()
hospitalData := make(map[string]interface{})
if req.HospitalName != area.HospitalName {
hospitalData["hospital_name"] = req.HospitalName
}
if *req.HospitalStatus != area.HospitalStatus {
hospitalData["hospital_status"] = req.HospitalStatus
}
if req.HospitalLevelName != area.HospitalLevelName {
hospitalData["hospital_level_name"] = req.HospitalLevelName
}
if req.PostCode != "" {
if req.PostCode != area.PostCode {
hospitalData["post_code"] = req.PostCode
}
}
if req.TelePhone != "" {
if req.TelePhone != area.TelePhone {
hospitalData["tele_phone"] = req.TelePhone
}
}
if req.ProvinceId != 0 {
if req.ProvinceId != area.ProvinceId {
areaDao := dao.AreaDao{}
area, err := areaDao.GetAreaById(req.ProvinceId)
if err != nil || area == nil {
return false, errors.New("省份数据错误")
}
hospitalData["province_id"] = req.ProvinceId
hospitalData["province"] = area.AreaName
}
}
if req.CityId != 0 {
if req.CityId != area.CityId {
areaDao := dao.AreaDao{}
area, err := areaDao.GetAreaById(req.CityId)
if err != nil || area == nil {
return false, errors.New("省份数据错误")
}
hospitalData["city_id"] = req.CityId
hospitalData["city"] = area.AreaName
}
}
if req.CountyId != 0 {
if req.CountyId != area.CountyId {
areaDao := dao.AreaDao{}
area, err := areaDao.GetAreaById(req.CountyId)
if err != nil || area == nil {
return false, errors.New("省份数据错误")
}
hospitalData["county_id"] = req.CountyId
hospitalData["county"] = area.AreaName
}
}
if req.Address != "" {
if req.Address != area.Address {
hospitalData["address"] = req.Address
}
}
if req.Lat != "" {
if req.Lat != area.Lat {
hospitalData["lat"] = req.Lat
}
}
if req.Lng != "" {
if req.Lng != area.Lng {
hospitalData["lng"] = req.Lng
}
}
if req.Desc != "" {
if req.Desc != area.Desc {
hospitalData["desc"] = req.Desc
}
}
if len(hospitalData) > 0 {
err = hospitalDao.EditHospitalById(tx, hospitalId, hospitalData)
if err != nil || area == nil {
tx.Rollback()
return false, errors.New(err.Error())
}
}
tx.Commit()
return true, nil
}
// GetHospital 系统优惠卷详情
func (r *HospitalService) GetHospital(hospitalId int64) (g *dto.HospitalDto, err error) {
hospitalDao := dao.HospitalDao{}
hospital, err := hospitalDao.GetHospitalById(hospitalId)
if err != nil || hospital == nil {
return nil, errors.New(err.Error())
}
// 处理返回值
g = dto.GetHospitalDto(hospital)
return g, nil
}