|
@@ -7,36 +7,83 @@ import (
|
|
cDto "cold-logistics/common/dto"
|
|
cDto "cold-logistics/common/dto"
|
|
"cold-logistics/common/global"
|
|
"cold-logistics/common/global"
|
|
"errors"
|
|
"errors"
|
|
|
|
+ "fmt"
|
|
"gogs.baozhida.cn/zoie/OAuth-core/service"
|
|
"gogs.baozhida.cn/zoie/OAuth-core/service"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm"
|
|
|
|
+ "gorm.io/gorm/clause"
|
|
)
|
|
)
|
|
|
|
|
|
type Address struct {
|
|
type Address struct {
|
|
service.Service
|
|
service.Service
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func AddressNameScopes(name string) func(db *gorm.DB) *gorm.DB {
|
|
|
|
+ return func(db *gorm.DB) *gorm.DB {
|
|
|
|
+ if len(name) == 0 {
|
|
|
|
+ return db
|
|
|
|
+ }
|
|
|
|
+ name = "%" + name + "%"
|
|
|
|
+ return db.Where("phone like ? or address like ? or province_name like ? or city_name like ? or region_name like ?",
|
|
|
|
+ name, name, name, name, name)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func AddressDataScopes(dataType string, userId int) func(db *gorm.DB) *gorm.DB {
|
|
|
|
+ return func(db *gorm.DB) *gorm.DB {
|
|
|
|
+
|
|
|
|
+ if dataType == "all" {
|
|
|
|
+ return db
|
|
|
|
+ }
|
|
|
|
+ return db.Where("create_by = ?", userId)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
// GetPage 获取Address列表
|
|
// GetPage 获取Address列表
|
|
-func (e *Address) GetPage(c *dto.AddressGetPageReq, list *[]model.Address, count *int64) error {
|
|
|
|
|
|
+func (e *Address) GetPage(c *dto.AddressGetPageReq, list *[]model.Address, count *int64, p *actions.DataPermission) error {
|
|
var err error
|
|
var err error
|
|
var data model.Address
|
|
var data model.Address
|
|
|
|
|
|
|
|
+ var ad model.AddressDefault
|
|
|
|
+ err = e.Orm.Model(&ad).Where("user_id = ?", p.UserId).First(&ad).Error
|
|
|
|
+ if err != nil && !errors.Is(gorm.ErrRecordNotFound, err) {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return global.GetFailedErr
|
|
|
|
+ }
|
|
|
|
+
|
|
err = e.Orm.Model(&data).
|
|
err = e.Orm.Model(&data).
|
|
Scopes(
|
|
Scopes(
|
|
|
|
+ AddressNameScopes(c.Name),
|
|
|
|
+ AddressDataScopes(c.DataType, p.UserId),
|
|
cDto.MakeCondition(c.GetNeedSearch()),
|
|
cDto.MakeCondition(c.GetNeedSearch()),
|
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
|
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
|
).
|
|
).
|
|
|
|
+ Order(fmt.Sprintf("id = %d desc", ad.AddressId)).
|
|
Find(list).Limit(-1).Offset(-1).
|
|
Find(list).Limit(-1).Offset(-1).
|
|
Count(count).Error
|
|
Count(count).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
e.Log.Errorf("db error: %s", err)
|
|
e.Log.Errorf("db error: %s", err)
|
|
return global.GetFailedErr
|
|
return global.GetFailedErr
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if *count > 0 {
|
|
|
|
+ if (*list)[0].Id == ad.AddressId {
|
|
|
|
+ (*list)[0].IsDefault = true
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
// Get 获取Address对象
|
|
// Get 获取Address对象
|
|
func (e *Address) Get(d *dto.AddressGetReq, carInfoModel *model.Address, p *actions.DataPermission) error {
|
|
func (e *Address) Get(d *dto.AddressGetReq, carInfoModel *model.Address, p *actions.DataPermission) error {
|
|
- err := e.Orm.
|
|
|
|
|
|
+
|
|
|
|
+ var ad model.AddressDefault
|
|
|
|
+ err := e.Orm.Model(&ad).Where("user_id = ?", p.UserId).First(&ad).Error
|
|
|
|
+ if err != nil && !errors.Is(gorm.ErrRecordNotFound, err) {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return global.GetFailedErr
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ err = e.Orm.
|
|
Scopes(actions.Permission(carInfoModel.TableName(), p)).
|
|
Scopes(actions.Permission(carInfoModel.TableName(), p)).
|
|
First(carInfoModel, d.GetId()).Error
|
|
First(carInfoModel, d.GetId()).Error
|
|
|
|
|
|
@@ -48,6 +95,10 @@ func (e *Address) Get(d *dto.AddressGetReq, carInfoModel *model.Address, p *acti
|
|
return global.GetFailedErr
|
|
return global.GetFailedErr
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if ad.AddressId == carInfoModel.Id {
|
|
|
|
+ carInfoModel.IsDefault = true
|
|
|
|
+ }
|
|
|
|
+
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
@@ -65,33 +116,42 @@ func (e *Address) Insert(c *dto.AddressInsertReq) error {
|
|
}
|
|
}
|
|
}()
|
|
}()
|
|
|
|
|
|
- // 查询是否有其他默认地址
|
|
|
|
- var count int64
|
|
|
|
- err = tx.Model(&model.Address{}).Where("is_default = ? and customer_id = ?", 1, c.CustomerId).Count(&count).Error
|
|
|
|
|
|
+ // 添加地址
|
|
|
|
+ c.Generate(&data)
|
|
|
|
+ err = tx.Create(&data).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
e.Log.Errorf("db error: %s", err)
|
|
e.Log.Errorf("db error: %s", err)
|
|
return global.CreateFailedErr
|
|
return global.CreateFailedErr
|
|
}
|
|
}
|
|
|
|
+ c.Id = data.Id
|
|
|
|
|
|
- if count > 0 && c.IsDefault == true {
|
|
|
|
- err = tx.Model(&model.Address{}).Where("customer_id = ?", c.CustomerId).
|
|
|
|
- Updates(map[string]interface{}{
|
|
|
|
- "is_default": 0,
|
|
|
|
- }).Error
|
|
|
|
|
|
+ if c.AddressType == model.AddressTypeSender && c.IsDefault == true {
|
|
|
|
+ ad := &model.AddressDefault{UserId: c.CreateBy, AddressId: c.Id}
|
|
|
|
+ //err = tx.Model(&ad).
|
|
|
|
+ // Where("user_id = ?", c.CreateBy).Update("address_id", c.Id).Error
|
|
|
|
+ //if err != nil {
|
|
|
|
+ // if errors.Is(gorm.ErrRecordNotFound, err) {
|
|
|
|
+ // err = tx.Create(&ad).Error
|
|
|
|
+ // if err != nil {
|
|
|
|
+ // e.Log.Errorf("db error: %s", err)
|
|
|
|
+ // return global.CreateFailedErr
|
|
|
|
+ // }
|
|
|
|
+ // return nil
|
|
|
|
+ // }
|
|
|
|
+ // e.Log.Errorf("db error: %s", err)
|
|
|
|
+ // return global.CreateFailedErr
|
|
|
|
+ //}
|
|
|
|
+ err = tx.Debug().Clauses(clause.OnConflict{
|
|
|
|
+ Columns: []clause.Column{{Name: "user_id"}},
|
|
|
|
+ //DoUpdates: clause.AssignmentColumns([]string{"address_id"}),
|
|
|
|
+ UpdateAll: true,
|
|
|
|
+ }).Create(&ad).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
e.Log.Errorf("db error: %s", err)
|
|
e.Log.Errorf("db error: %s", err)
|
|
return global.CreateFailedErr
|
|
return global.CreateFailedErr
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- // 添加角色
|
|
|
|
- c.Generate(&data)
|
|
|
|
- err = tx.Create(&data).Error
|
|
|
|
- if err != nil {
|
|
|
|
- e.Log.Errorf("db error: %s", err)
|
|
|
|
- return global.CreateFailedErr
|
|
|
|
- }
|
|
|
|
- c.Id = data.Id
|
|
|
|
return nil
|
|
return nil
|
|
|
|
|
|
}
|
|
}
|
|
@@ -109,8 +169,15 @@ func (e *Address) Update(c *dto.AddressUpdateReq, p *actions.DataPermission) err
|
|
}
|
|
}
|
|
}()
|
|
}()
|
|
|
|
|
|
|
|
+ var ad model.AddressDefault
|
|
|
|
+ err = e.Orm.Model(&ad).Where("user_id = ?", p.UserId).First(&ad).Error
|
|
|
|
+ if err != nil && !errors.Is(gorm.ErrRecordNotFound, err) {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return global.GetFailedErr
|
|
|
|
+ }
|
|
|
|
+
|
|
var carInfoModel = model.Address{}
|
|
var carInfoModel = model.Address{}
|
|
- // 查询角色是否存在
|
|
|
|
|
|
+ // 查询地址是否存在
|
|
err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
|
|
err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
|
|
First(&carInfoModel, c.GetId()).Error
|
|
First(&carInfoModel, c.GetId()).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -121,14 +188,22 @@ func (e *Address) Update(c *dto.AddressUpdateReq, p *actions.DataPermission) err
|
|
return global.UpdateFailedErr
|
|
return global.UpdateFailedErr
|
|
}
|
|
}
|
|
|
|
|
|
- if c.IsDefault == true && c.IsDefault != carInfoModel.IsDefault {
|
|
|
|
- err = tx.Model(&model.Address{}).Where("create_by = ?", carInfoModel.UpdateBy).
|
|
|
|
- Updates(map[string]interface{}{
|
|
|
|
- "is_default": 0,
|
|
|
|
- }).Error
|
|
|
|
|
|
+ // 默认地址更换
|
|
|
|
+ if c.IsDefault == true && carInfoModel.Id != ad.AddressId && ad.AddressId > 0 {
|
|
|
|
+ err = tx.Model(&model.AddressDefault{}).Where("id = ?", ad.Id).
|
|
|
|
+ Update("address_id", carInfoModel.Id).Error
|
|
if err != nil {
|
|
if err != nil {
|
|
e.Log.Errorf("db error: %s", err)
|
|
e.Log.Errorf("db error: %s", err)
|
|
- return global.CreateFailedErr
|
|
|
|
|
|
+ return global.UpdateFailedErr
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 取消默认地址
|
|
|
|
+ if c.IsDefault == false && carInfoModel.Id == ad.AddressId {
|
|
|
|
+ err = tx.Unscoped().Where("id = ?", ad.Id).Delete(&model.AddressDefault{}).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ e.Log.Errorf("db error: %s", err)
|
|
|
|
+ return global.UpdateFailedErr
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -159,7 +234,7 @@ func (e *Address) Remove(c *dto.AddressDeleteReq, p *actions.DataPermission) err
|
|
|
|
|
|
var carInfoModel model.Address
|
|
var carInfoModel model.Address
|
|
|
|
|
|
- // 查询角色是否存在
|
|
|
|
|
|
+ // 查询地址是否存在
|
|
err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
|
|
err = e.Orm.Scopes(actions.Permission(carInfoModel.TableName(), p)).
|
|
First(&carInfoModel, c.GetId()).Error
|
|
First(&carInfoModel, c.GetId()).Error
|
|
if err != nil {
|
|
if err != nil {
|