83 lines
2.4 KiB
Go
83 lines
2.4 KiB
Go
package cms
|
||
|
||
import (
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
"git.rosy.net.cn/jx-callback/business/model"
|
||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||
"git.rosy.net.cn/jx-callback/business/partner"
|
||
)
|
||
|
||
type StoreManager struct {
|
||
}
|
||
|
||
var (
|
||
FixedStoreManager *StoreManager
|
||
)
|
||
|
||
func init() {
|
||
FixedStoreManager = &StoreManager{}
|
||
partner.InitStoreManager(FixedStoreManager)
|
||
}
|
||
|
||
func (s *StoreManager) OnStoreStatusChanged(vendorStoreID string, vendorID int, storeStatus int) (err error) {
|
||
db := dao.GetDB()
|
||
storeDetail, err := dao.GetStoreDetailByVendorStoreID(db, vendorStoreID, vendorID)
|
||
if err == nil {
|
||
var storeKV, storeMapKV map[string]interface{}
|
||
if storeStatus == model.StoreStatusOpened {
|
||
if storeDetail.Status != model.StoreStatusOpened {
|
||
storeKV = map[string]interface{}{
|
||
"Status": model.StoreStatusOpened,
|
||
}
|
||
}
|
||
if storeDetail.VendorStatus != model.StoreStatusOpened {
|
||
storeMapKV = map[string]interface{}{
|
||
"Status": model.StoreStatusOpened,
|
||
}
|
||
}
|
||
} else {
|
||
if storeDetail.Status == model.StoreStatusOpened && storeDetail.VendorStatus == model.StoreStatusOpened {
|
||
storeMapKV = map[string]interface{}{
|
||
"Status": storeStatus,
|
||
}
|
||
} else if storeDetail.Status == model.StoreStatusClosed && storeStatus == model.StoreStatusClosed {
|
||
storeMapKV = map[string]interface{}{
|
||
"Status": model.StoreStatusOpened,
|
||
}
|
||
}
|
||
}
|
||
if err == nil && (storeKV != nil || storeMapKV != nil) {
|
||
dao.Begin(db)
|
||
defer func() {
|
||
if err != nil {
|
||
dao.Rollback(db)
|
||
}
|
||
}()
|
||
if storeKV != nil {
|
||
store := &model.Store{}
|
||
store.ID = storeDetail.Store.ID
|
||
if _, err = dao.UpdateEntityLogically(db, store, storeKV, model.AdminName, nil); err != nil {
|
||
return err
|
||
}
|
||
}
|
||
if storeMapKV != nil {
|
||
if _, err = dao.UpdateEntityLogically(db, &model.StoreMap{}, storeMapKV, model.AdminName, map[string]interface{}{
|
||
model.FieldStoreID: storeDetail.Store.ID,
|
||
model.FieldVendorID: vendorID,
|
||
model.FieldDeletedAt: utils.DefaultTimeValue,
|
||
}); err != nil {
|
||
return err
|
||
}
|
||
}
|
||
if storeStatus != model.StoreStatusOpened {
|
||
// 因为storeStatus != model.StoreStatusOpened不会修改京西门店的状态,所以直接用storeDetail.Status是合适的
|
||
if err = dao.FormalizeStoreStatus(db, storeDetail.Store.ID, storeDetail.Status); err != nil {
|
||
return err
|
||
}
|
||
}
|
||
dao.Commit(db)
|
||
}
|
||
}
|
||
return err
|
||
}
|