增加药房管理
This commit is contained in:
@@ -0,0 +1,261 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"gorm.io/gorm"
|
||||
"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 PharmacyService struct{}
|
||||
|
||||
// AddPharmacy 新增药房
|
||||
func (r *PharmacyService) AddPharmacy(req requests.AddPharmacy) (bool, error) {
|
||||
pharmacyDao := dao.PharmacyDao{}
|
||||
|
||||
// 检测药房代码是否已存在
|
||||
existPharmacy, err := pharmacyDao.GetPharmacyByCode(req.PharmacyCode)
|
||||
if err == nil && existPharmacy != nil {
|
||||
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
|
||||
}
|
||||
|
||||
status := 1
|
||||
if req.Status != nil {
|
||||
status = *req.Status
|
||||
}
|
||||
|
||||
// 开启事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if rec := recover(); rec != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
pharmacy := &model.Pharmacy{
|
||||
PharmacyName: req.PharmacyName,
|
||||
PharmacyCode: req.PharmacyCode,
|
||||
Postage: *req.Postage,
|
||||
FreeShippingThreshold: *req.FreeShippingThreshold,
|
||||
IsPickup: *req.IsPickup,
|
||||
Telephone: req.Telephone,
|
||||
ProvinceId: req.ProvinceId,
|
||||
Province: province,
|
||||
CityId: req.CityId,
|
||||
City: city,
|
||||
CountyId: req.CountyId,
|
||||
County: county,
|
||||
Address: req.Address,
|
||||
Status: status,
|
||||
}
|
||||
|
||||
pharmacy, err = pharmacyDao.AddPharmacy(tx, pharmacy)
|
||||
if err != nil || pharmacy == nil {
|
||||
tx.Rollback()
|
||||
return false, errors.New(err.Error())
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// PutPharmacy 修改药房
|
||||
func (r *PharmacyService) PutPharmacy(pharmacyId int64, req requests.PutPharmacy) (bool, error) {
|
||||
pharmacyDao := dao.PharmacyDao{}
|
||||
pharmacy, err := pharmacyDao.GetPharmacyById(pharmacyId)
|
||||
if err != nil || pharmacy == nil {
|
||||
return false, errors.New("药房不存在或已删除")
|
||||
}
|
||||
|
||||
// 如果修改了代码,需检查新代码是否被其他药房占用
|
||||
if req.PharmacyCode != pharmacy.PharmacyCode {
|
||||
exist, err := pharmacyDao.GetPharmacyByCode(req.PharmacyCode)
|
||||
if err == nil && exist != nil && exist.PharmacyId != pharmacyId {
|
||||
return false, errors.New("药房代码已被占用")
|
||||
}
|
||||
}
|
||||
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if rec := recover(); rec != nil {
|
||||
tx.Rollback()
|
||||
fmt.Println(rec)
|
||||
}
|
||||
}()
|
||||
|
||||
pharmacyData := make(map[string]interface{})
|
||||
|
||||
if req.PharmacyName != pharmacy.PharmacyName {
|
||||
pharmacyData["pharmacy_name"] = req.PharmacyName
|
||||
}
|
||||
|
||||
if req.PharmacyCode != pharmacy.PharmacyCode {
|
||||
pharmacyData["pharmacy_code"] = req.PharmacyCode
|
||||
}
|
||||
|
||||
if *req.Postage != pharmacy.Postage {
|
||||
pharmacyData["postage"] = *req.Postage
|
||||
}
|
||||
|
||||
if *req.FreeShippingThreshold != pharmacy.FreeShippingThreshold {
|
||||
pharmacyData["free_shipping_threshold"] = *req.FreeShippingThreshold
|
||||
}
|
||||
|
||||
if *req.IsPickup != pharmacy.IsPickup {
|
||||
pharmacyData["is_pickup"] = *req.IsPickup
|
||||
}
|
||||
|
||||
if req.Telephone != pharmacy.Telephone {
|
||||
pharmacyData["telephone"] = req.Telephone
|
||||
}
|
||||
|
||||
if req.ProvinceId != 0 && req.ProvinceId != pharmacy.ProvinceId {
|
||||
areaDao := dao.AreaDao{}
|
||||
area, err := areaDao.GetAreaById(req.ProvinceId)
|
||||
if err != nil || area == nil {
|
||||
return false, errors.New("省份数据错误")
|
||||
}
|
||||
pharmacyData["province_id"] = req.ProvinceId
|
||||
pharmacyData["province"] = area.AreaName
|
||||
}
|
||||
|
||||
if req.CityId != 0 && req.CityId != pharmacy.CityId {
|
||||
areaDao := dao.AreaDao{}
|
||||
area, err := areaDao.GetAreaById(req.CityId)
|
||||
if err != nil || area == nil {
|
||||
return false, errors.New("城市数据错误")
|
||||
}
|
||||
pharmacyData["city_id"] = req.CityId
|
||||
pharmacyData["city"] = area.AreaName
|
||||
}
|
||||
|
||||
if req.CountyId != 0 && req.CountyId != pharmacy.CountyId {
|
||||
areaDao := dao.AreaDao{}
|
||||
area, err := areaDao.GetAreaById(req.CountyId)
|
||||
if err != nil || area == nil {
|
||||
return false, errors.New("区县数据错误")
|
||||
}
|
||||
pharmacyData["county_id"] = req.CountyId
|
||||
pharmacyData["county"] = area.AreaName
|
||||
}
|
||||
|
||||
if req.Address != pharmacy.Address {
|
||||
pharmacyData["address"] = req.Address
|
||||
}
|
||||
|
||||
if req.Status != nil && *req.Status != pharmacy.Status {
|
||||
pharmacyData["status"] = *req.Status
|
||||
}
|
||||
|
||||
if len(pharmacyData) > 0 {
|
||||
err = pharmacyDao.EditPharmacyById(tx, pharmacyId, pharmacyData)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, errors.New(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// PutPharmacyStatus 修改药房状态
|
||||
func (r *PharmacyService) PutPharmacyStatus(pharmacyId int64, req requests.PutPharmacyStatus) (bool, error) {
|
||||
pharmacyDao := dao.PharmacyDao{}
|
||||
pharmacy, err := pharmacyDao.GetPharmacyById(pharmacyId)
|
||||
if err != nil || pharmacy == nil {
|
||||
return false, errors.New("药房不存在或已删除")
|
||||
}
|
||||
|
||||
data := map[string]interface{}{
|
||||
"status": *req.Status,
|
||||
}
|
||||
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if rec := recover(); rec != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
err = pharmacyDao.EditPharmacyById(tx, pharmacyId, data)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, errors.New(err.Error())
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// DeletePharmacy 软删除药房
|
||||
func (r *PharmacyService) DeletePharmacy(pharmacyId int64) (bool, error) {
|
||||
pharmacyDao := dao.PharmacyDao{}
|
||||
pharmacy, err := pharmacyDao.GetPharmacyById(pharmacyId)
|
||||
if err != nil || pharmacy == nil {
|
||||
return false, errors.New("药房不存在或已删除")
|
||||
}
|
||||
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if rec := recover(); rec != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
err = pharmacyDao.DeletePharmacyById(tx, pharmacyId)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return false, errors.New(err.Error())
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// GetPharmacy 药房详情
|
||||
func (r *PharmacyService) GetPharmacy(pharmacyId int64) (*dto.PharmacyDto, error) {
|
||||
pharmacyDao := dao.PharmacyDao{}
|
||||
pharmacy, err := pharmacyDao.GetPharmacyById(pharmacyId)
|
||||
if err != nil || pharmacy == nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) || pharmacy == nil {
|
||||
return nil, errors.New("未找到相关药房信息")
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return dto.GetPharmacyDto(pharmacy), nil
|
||||
}
|
||||
Reference in New Issue
Block a user